diff --git a/protocol/identity/profile_showcase.go b/protocol/identity/profile_showcase.go index 8ee50a610..3321fe759 100644 --- a/protocol/identity/profile_showcase.go +++ b/protocol/identity/profile_showcase.go @@ -11,8 +11,8 @@ var ErrorExceedMaxProfileShowcaseVerifiedTokensLimit = errors.New("exeed maximum var ErrorExceedMaxProfileShowcaseUnverifiedTokensLimit = errors.New("exeed maximum profile showcase unverified tokens limit") var ErrorExceedMaxProfileShowcaseSocialLinksLimit = errors.New("exeed maximum profile showcase communities limit") -const maxProfileShowcaseSocialLinksLimit = 20 -const maxProfileShowcaseOtherEntriesLimit = 100 +const MaxProfileShowcaseSocialLinksLimit = 20 +const MaxProfileShowcaseEntriesLimit = 100 type ProfileShowcaseVisibility int @@ -41,9 +41,6 @@ type ProfileShowcaseCommunityPreference struct { type ProfileShowcaseAccountPreference struct { Address string `json:"address"` - Name string `json:"name"` - ColorID string `json:"colorId"` - Emoji string `json:"emoji"` ShowcaseVisibility ProfileShowcaseVisibility `json:"showcaseVisibility"` Order int `json:"order"` } @@ -52,8 +49,6 @@ type ProfileShowcaseCollectiblePreference struct { ContractAddress string `json:"contractAddress"` ChainID uint64 `json:"chainId"` TokenID string `json:"tokenId"` - CommunityID string `json:"communityId"` - AccountAddress string `json:"accountAddress"` ShowcaseVisibility ProfileShowcaseVisibility `json:"showcaseVisibility"` Order int `json:"order"` } @@ -67,7 +62,6 @@ type ProfileShowcaseVerifiedTokenPreference struct { type ProfileShowcaseUnverifiedTokenPreference struct { ContractAddress string `json:"contractAddress"` ChainID uint64 `json:"chainId"` - CommunityID string `json:"communityId"` ShowcaseVisibility ProfileShowcaseVisibility `json:"showcaseVisibility"` Order int `json:"order"` } @@ -110,8 +104,6 @@ type ProfileShowcaseCollectible struct { ContractAddress string `json:"contractAddress"` ChainID uint64 `json:"chainId"` TokenID string `json:"tokenId"` - CommunityID string `json:"communityId"` - AccountAddress string `json:"accountAddress"` Order int `json:"order"` } @@ -123,7 +115,6 @@ type ProfileShowcaseVerifiedToken struct { type ProfileShowcaseUnverifiedToken struct { ContractAddress string `json:"contractAddress"` ChainID uint64 `json:"chainId"` - CommunityID string `json:"communityId"` Order int `json:"order"` } @@ -144,22 +135,22 @@ type ProfileShowcase struct { } func Validate(preferences *ProfileShowcasePreferences) error { - if len(preferences.Communities) > maxProfileShowcaseOtherEntriesLimit { + if len(preferences.Communities) > MaxProfileShowcaseEntriesLimit { return ErrorExceedMaxProfileShowcaseCommunitiesLimit } - if len(preferences.Accounts) > maxProfileShowcaseOtherEntriesLimit { + if len(preferences.Accounts) > MaxProfileShowcaseEntriesLimit { return ErrorExceedMaxProfileShowcaseAccountsLimit } - if len(preferences.Collectibles) > maxProfileShowcaseOtherEntriesLimit { + if len(preferences.Collectibles) > MaxProfileShowcaseEntriesLimit { return ErrorExceedMaxProfileShowcaseCollectiblesLimit } - if len(preferences.VerifiedTokens) > maxProfileShowcaseOtherEntriesLimit { + if len(preferences.VerifiedTokens) > MaxProfileShowcaseEntriesLimit { return ErrorExceedMaxProfileShowcaseVerifiedTokensLimit } - if len(preferences.UnverifiedTokens) > maxProfileShowcaseOtherEntriesLimit { + if len(preferences.UnverifiedTokens) > MaxProfileShowcaseEntriesLimit { return ErrorExceedMaxProfileShowcaseUnverifiedTokensLimit } - if len(preferences.SocialLinks) > maxProfileShowcaseSocialLinksLimit { + if len(preferences.SocialLinks) > MaxProfileShowcaseSocialLinksLimit { return ErrorExceedMaxProfileShowcaseSocialLinksLimit } diff --git a/protocol/messenger_profile_showcase.go b/protocol/messenger_profile_showcase.go index 8a1d369c8..78569975a 100644 --- a/protocol/messenger_profile_showcase.go +++ b/protocol/messenger_profile_showcase.go @@ -16,6 +16,7 @@ import ( eth_common "github.com/ethereum/go-ethereum/common" "github.com/status-im/status-go/eth-node/crypto" + "github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/multiaccounts/accounts" "github.com/status-im/status-go/protocol/common" "github.com/status-im/status-go/protocol/communities" @@ -143,11 +144,20 @@ func (m *Messenger) toProfileShowcaseAccountProto(preferences []*identity.Profil continue } + account, err := m.settings.GetAccountByAddress(types.HexToAddress(preference.Address)) + if err != nil { + m.logger.Warn("failed to get account for profile entry ", zap.Error(err)) + } + if account == nil { + m.logger.Warn("can not find wallet account for profile entry ") + continue + } + entries = append(entries, &protobuf.ProfileShowcaseAccount{ Address: preference.Address, - Name: preference.Name, - ColorId: preference.ColorID, - Emoji: preference.Emoji, + Name: account.Name, + ColorId: string(account.ColorID), + Emoji: account.Emoji, Order: uint32(preference.Order), }) } @@ -165,8 +175,6 @@ func (m *Messenger) toProfileShowcaseCollectibleProto(preferences []*identity.Pr ContractAddress: preference.ContractAddress, ChainId: preference.ChainID, TokenId: preference.TokenID, - CommunityId: preference.CommunityID, - AccountAddress: preference.AccountAddress, Order: uint32(preference.Order), }) } @@ -286,8 +294,6 @@ func (m *Messenger) fromProfileShowcaseCollectibleProto(messages []*protobuf.Pro ContractAddress: message.ContractAddress, ChainID: message.ChainId, TokenID: message.TokenId, - CommunityID: message.CommunityId, - AccountAddress: message.AccountAddress, Order: int(message.Order), } entries = append(entries, entry) @@ -382,6 +388,14 @@ func (m *Messenger) GetProfileShowcaseAccountsByAddress(address string) ([]*iden return m.persistence.GetProfileShowcaseAccountsByAddress(address) } +func (m *Messenger) GetProfileShowcaseSocialLinksLimit() (int, error) { + return identity.MaxProfileShowcaseSocialLinksLimit, nil +} + +func (m *Messenger) GetProfileShowcaseEntriesLimit() (int, error) { + return identity.MaxProfileShowcaseEntriesLimit, nil +} + func (m *Messenger) EncryptProfileShowcaseEntriesWithContactPubKeys(entries *protobuf.ProfileShowcaseEntries, contacts []*Contact) (*protobuf.ProfileShowcaseEntriesEncrypted, error) { // Make AES key AESKey := make([]byte, 32) @@ -632,15 +646,6 @@ func (m *Messenger) UpdateProfileShowcaseWalletAccount(account *accounts.Account return nil } - profileAccount.Name = account.Name - profileAccount.ColorID = string(account.ColorID) - profileAccount.Emoji = account.Emoji - - err = m.persistence.SaveProfileShowcaseAccountPreference(profileAccount) - if err != nil { - return err - } - return m.DispatchProfileShowcase() } diff --git a/protocol/messenger_profile_showcase_proto_conversions.go b/protocol/messenger_profile_showcase_proto_conversions.go index 3b3bd65fe..b0357dfb1 100644 --- a/protocol/messenger_profile_showcase_proto_conversions.go +++ b/protocol/messenger_profile_showcase_proto_conversions.go @@ -40,9 +40,6 @@ func ToProfileShowcaseCommunitiesPreferencesProto(preferences []*identity.Profil func FromProfileShowcaseAccountPreferenceProto(p *protobuf.ProfileShowcaseAccountPreference) *identity.ProfileShowcaseAccountPreference { return &identity.ProfileShowcaseAccountPreference{ Address: p.GetAddress(), - Name: p.GetName(), - ColorID: p.GetColorId(), - Emoji: p.GetEmoji(), ShowcaseVisibility: identity.ProfileShowcaseVisibility(p.ShowcaseVisibility), Order: int(p.Order), } @@ -59,9 +56,6 @@ func FromProfileShowcaseAccountsPreferencesProto(preferences []*protobuf.Profile func ToProfileShowcaseAccountPreferenceProto(p *identity.ProfileShowcaseAccountPreference) *protobuf.ProfileShowcaseAccountPreference { return &protobuf.ProfileShowcaseAccountPreference{ Address: p.Address, - Name: p.Name, - ColorId: p.ColorID, - Emoji: p.Emoji, ShowcaseVisibility: protobuf.ProfileShowcaseVisibility(p.ShowcaseVisibility), Order: uint32(p.Order), } @@ -80,8 +74,6 @@ func FromProfileShowcaseCollectiblePreferenceProto(p *protobuf.ProfileShowcaseCo ContractAddress: p.GetContractAddress(), ChainID: p.GetChainId(), TokenID: p.GetTokenId(), - CommunityID: p.GetCommunityId(), - AccountAddress: p.GetAccountAddress(), ShowcaseVisibility: identity.ProfileShowcaseVisibility(p.ShowcaseVisibility), Order: int(p.Order), } @@ -100,8 +92,6 @@ func ToProfileShowcaseCollectiblePreferenceProto(p *identity.ProfileShowcaseColl ContractAddress: p.ContractAddress, ChainId: p.ChainID, TokenId: p.TokenID, - CommunityId: p.CommunityID, - AccountAddress: p.AccountAddress, ShowcaseVisibility: protobuf.ProfileShowcaseVisibility(p.ShowcaseVisibility), Order: uint32(p.Order), } @@ -152,7 +142,6 @@ func FromProfileShowcaseUnverifiedTokenPreferenceProto(p *protobuf.ProfileShowca return &identity.ProfileShowcaseUnverifiedTokenPreference{ ContractAddress: p.GetContractAddress(), ChainID: p.GetChainId(), - CommunityID: p.GetCommunityId(), ShowcaseVisibility: identity.ProfileShowcaseVisibility(p.ShowcaseVisibility), Order: int(p.Order), } @@ -170,7 +159,6 @@ func ToProfileShowcaseUnverifiedTokenPreferenceProto(p *identity.ProfileShowcase return &protobuf.ProfileShowcaseUnverifiedTokenPreference{ ContractAddress: p.ContractAddress, ChainId: p.ChainID, - CommunityId: p.CommunityID, ShowcaseVisibility: protobuf.ProfileShowcaseVisibility(p.ShowcaseVisibility), Order: uint32(p.Order), } diff --git a/protocol/messenger_profile_showcase_test.go b/protocol/messenger_profile_showcase_test.go index 91a3eb7ee..68c273410 100644 --- a/protocol/messenger_profile_showcase_test.go +++ b/protocol/messenger_profile_showcase_test.go @@ -256,9 +256,6 @@ func (s *TestMessengerProfileShowcase) TestSaveAndGetProfileShowcasePreferences( func (s *TestMessengerProfileShowcase) TestFailToSaveProfileShowcasePreferencesWithWrongVisibility() { accountEntry := &identity.ProfileShowcaseAccountPreference{ Address: "0x0000000000000000000000000032433445133424", - Name: "Status Account", - ColorID: "blue", - Emoji: ">:-]", ShowcaseVisibility: identity.ProfileShowcaseVisibilityIDVerifiedContacts, Order: 17, } @@ -267,7 +264,6 @@ func (s *TestMessengerProfileShowcase) TestFailToSaveProfileShowcasePreferencesW ContractAddress: "0x12378534257568678487683576", ChainID: 11155111, TokenID: "12321389592999903", - CommunityID: "0x01312357798976535", ShowcaseVisibility: identity.ProfileShowcaseVisibilityContacts, Order: 17, } @@ -489,22 +485,14 @@ func (s *TestMessengerProfileShowcase) TestShareShowcasePreferences() { s.Require().Len(profileShowcase.Accounts, 2) s.Require().Equal(profileShowcase.Accounts[0].Address, request.Accounts[0].Address) - s.Require().Equal(profileShowcase.Accounts[0].Name, request.Accounts[0].Name) - s.Require().Equal(profileShowcase.Accounts[0].ColorID, request.Accounts[0].ColorID) - s.Require().Equal(profileShowcase.Accounts[0].Emoji, request.Accounts[0].Emoji) s.Require().Equal(profileShowcase.Accounts[0].Order, request.Accounts[0].Order) s.Require().Equal(profileShowcase.Accounts[1].Address, request.Accounts[1].Address) - s.Require().Equal(profileShowcase.Accounts[1].Name, request.Accounts[1].Name) - s.Require().Equal(profileShowcase.Accounts[1].ColorID, request.Accounts[1].ColorID) - s.Require().Equal(profileShowcase.Accounts[1].Emoji, request.Accounts[1].Emoji) s.Require().Equal(profileShowcase.Accounts[1].Order, request.Accounts[1].Order) s.Require().Len(profileShowcase.Collectibles, 1) s.Require().Equal(profileShowcase.Collectibles[0].TokenID, request.Collectibles[0].TokenID) s.Require().Equal(profileShowcase.Collectibles[0].ChainID, request.Collectibles[0].ChainID) s.Require().Equal(profileShowcase.Collectibles[0].ContractAddress, request.Collectibles[0].ContractAddress) - s.Require().Equal(profileShowcase.Collectibles[0].AccountAddress, request.Collectibles[0].AccountAddress) - s.Require().Equal(profileShowcase.Collectibles[0].CommunityID, request.Collectibles[0].CommunityID) s.Require().Equal(profileShowcase.Collectibles[0].Order, request.Collectibles[0].Order) s.Require().Len(profileShowcase.VerifiedTokens, 1) @@ -544,21 +532,14 @@ func (s *TestMessengerProfileShowcase) TestShareShowcasePreferences() { s.Require().Len(profileShowcase.Accounts, 2) s.Require().Equal(profileShowcase.Accounts[0].Address, request.Accounts[0].Address) - s.Require().Equal(profileShowcase.Accounts[0].Name, request.Accounts[0].Name) - s.Require().Equal(profileShowcase.Accounts[0].ColorID, request.Accounts[0].ColorID) - s.Require().Equal(profileShowcase.Accounts[0].Emoji, request.Accounts[0].Emoji) s.Require().Equal(profileShowcase.Accounts[0].Order, request.Accounts[0].Order) s.Require().Equal(profileShowcase.Accounts[1].Address, request.Accounts[1].Address) - s.Require().Equal(profileShowcase.Accounts[1].Name, request.Accounts[1].Name) - s.Require().Equal(profileShowcase.Accounts[1].ColorID, request.Accounts[1].ColorID) - s.Require().Equal(profileShowcase.Accounts[1].Emoji, request.Accounts[1].Emoji) s.Require().Equal(profileShowcase.Accounts[1].Order, request.Accounts[1].Order) s.Require().Len(profileShowcase.Collectibles, 1) s.Require().Equal(profileShowcase.Collectibles[0].ContractAddress, request.Collectibles[0].ContractAddress) s.Require().Equal(profileShowcase.Collectibles[0].ChainID, request.Collectibles[0].ChainID) s.Require().Equal(profileShowcase.Collectibles[0].TokenID, request.Collectibles[0].TokenID) - s.Require().Equal(profileShowcase.Collectibles[0].CommunityID, request.Collectibles[0].CommunityID) s.Require().Equal(profileShowcase.Collectibles[0].Order, request.Collectibles[0].Order) s.Require().Len(profileShowcase.VerifiedTokens, 2) diff --git a/protocol/messenger_testing_utils.go b/protocol/messenger_testing_utils.go index cd505e6a8..63f016950 100644 --- a/protocol/messenger_testing_utils.go +++ b/protocol/messenger_testing_utils.go @@ -422,17 +422,11 @@ func DummyProfileShowcasePreferences(withCollectibles bool) *identity.ProfileSho Accounts: []*identity.ProfileShowcaseAccountPreference{ { Address: "0x0000000000000000000000000033433445133423", - Name: "Status Account", - ColorID: "blue", - Emoji: "-_-", ShowcaseVisibility: identity.ProfileShowcaseVisibilityEveryone, Order: 0, }, { Address: "0x0000000000000000000000000032433445133424", - Name: "Money Box", - ColorID: "red", - Emoji: ":o)", ShowcaseVisibility: identity.ProfileShowcaseVisibilityContacts, Order: 1, }, @@ -496,8 +490,6 @@ func DummyProfileShowcasePreferences(withCollectibles bool) *identity.ProfileSho ContractAddress: "0x12378534257568678487683576", ChainID: 1, TokenID: "12321389592999903", - CommunityID: "0x01312357798976535", - AccountAddress: "0x32433445133424", ShowcaseVisibility: identity.ProfileShowcaseVisibilityEveryone, Order: 0, }, diff --git a/protocol/migrations/migrations.go b/protocol/migrations/migrations.go index fe45b3d6c..2fdb878e4 100644 --- a/protocol/migrations/migrations.go +++ b/protocol/migrations/migrations.go @@ -126,6 +126,7 @@ // 1708062699_activity_data.up.sql (82B) // 1708423707_applied_community_events.up.sql (201B) // 1708440786_profile_showcase_social_links.up.sql (906B) +// 1709805967_simplify_profile_showcase_preferences.up.sql (701B) // README.md (554B) // doc.go (870B) @@ -2715,6 +2716,26 @@ func _1708440786_profile_showcase_social_linksUpSql() (*asset, error) { return a, nil } +var __1709805967_simplify_profile_showcase_preferencesUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\xcf\x41\xae\x82\x30\x14\x46\xe1\x39\xab\xe8\x3e\x18\xf1\x9e\xcc\x50\x0c\xc1\x71\x53\x6f\x7f\x62\xb5\xbd\x97\xb4\x45\xe3\xee\x9d\x38\x34\x80\xc1\x0d\x9c\x7c\xa7\xa8\x9a\xbe\xee\x54\x5f\xfd\x35\xb5\x1a\xa3\x0c\xce\x43\xa7\x8b\x3c\xc8\x24\x68\x43\x24\x13\xe7\xa4\xc7\x88\x01\x11\x4c\x48\x6a\xd7\xb5\x47\xf5\xdf\x36\xa7\xfd\x41\xb1\x09\x28\x37\x36\x48\xbc\x44\xed\xec\xd6\x0e\x82\x5c\x5d\x59\xcc\x57\x48\xbc\x07\x65\x77\xf6\x98\x13\x85\x30\xb1\xcb\xcf\x65\xd5\xaa\xde\x9b\xae\x8d\xb5\x11\x29\x2d\x19\x27\xbe\x23\xba\xc1\xc1\xea\x2c\x37\xf0\x5a\xe8\x17\x52\x12\xce\x86\xf2\x6f\xb6\x3f\xc6\x36\x3f\xaf\x20\xbe\x02\x00\x00\xff\xff\xf4\xeb\xf5\x93\xbd\x02\x00\x00") + +func _1709805967_simplify_profile_showcase_preferencesUpSqlBytes() ([]byte, error) { + return bindataRead( + __1709805967_simplify_profile_showcase_preferencesUpSql, + "1709805967_simplify_profile_showcase_preferences.up.sql", + ) +} + +func _1709805967_simplify_profile_showcase_preferencesUpSql() (*asset, error) { + bytes, err := _1709805967_simplify_profile_showcase_preferencesUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1709805967_simplify_profile_showcase_preferences.up.sql", size: 701, mode: os.FileMode(0644), modTime: time.Unix(1700000000, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8, 0xdc, 0xce, 0x1d, 0x56, 0x57, 0xf4, 0xa5, 0xc8, 0x15, 0x89, 0x92, 0xbf, 0x57, 0x5a, 0xbc, 0x37, 0x9e, 0xf0, 0xe4, 0x7a, 0x2c, 0x19, 0xd0, 0x3e, 0xca, 0xd0, 0xab, 0x2d, 0x8f, 0xe3, 0x16}} + return a, nil +} + var _readmeMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\xc1\xce\xd3\x30\x10\x84\xef\x7e\x8a\x91\x7a\x01\xa9\x2a\x8f\xc0\x0d\x71\x82\x03\x48\x1c\xc9\x36\x9e\x36\x96\x1c\x6f\xf0\xae\x93\xe6\xed\x91\xa3\xc2\xdf\xff\x66\xed\xd8\x33\xdf\x78\x4f\xa7\x13\xbe\xea\x06\x57\x6c\x35\x39\x31\xa7\x7b\x15\x4f\x5a\xec\x73\x08\xbf\x08\x2d\x79\x7f\x4a\x43\x5b\x86\x17\xfd\x8c\x21\xea\x56\x5e\x47\x90\x4a\x14\x75\x48\xde\x64\x37\x2c\x6a\x96\xae\x99\x48\x05\xf6\x27\x77\x13\xad\x08\xae\x8a\x51\xe7\x25\xf3\xf1\xa9\x9f\xf9\x58\x58\x2c\xad\xbc\xe0\x8b\x56\xf0\x21\x5d\xeb\x4c\x95\xb3\xae\x84\x60\xd4\xdc\xe6\x82\x5d\x1b\x36\x6d\x39\x62\x92\xf5\xb8\x11\xdb\x92\xd3\x28\xce\xe0\x13\xe1\x72\xcd\x3c\x63\xd4\x65\x87\xae\xac\xe8\xc3\x28\x2e\x67\x44\x66\x3a\x21\x25\xa2\x72\xac\x14\x67\xbc\x84\x9f\x53\x32\x8c\x52\x70\x25\x56\xd6\xfd\x8d\x05\x37\xad\x30\x9d\x9f\xa6\x86\x0f\xcd\x58\x7f\xcf\x34\x93\x3b\xed\x90\x9f\xa4\x1f\xcf\x30\x85\x4d\x07\x58\xaf\x7f\x25\xc4\x9d\xf3\x72\x64\x84\xd0\x7f\xf9\x9b\x3a\x2d\x84\xef\x85\x48\x66\x8d\xd8\x88\x9b\x8c\x8c\x98\x5b\xf6\x74\x14\x4e\x33\x0d\xc9\xe0\x93\x38\xda\x12\xc5\x69\xbd\xe4\xf0\x2e\x7a\x78\x07\x1c\xfe\x13\x9f\x91\x29\x31\x95\x7b\x7f\x62\x59\x37\xb4\xe5\x5e\x25\xfe\x33\xee\xd5\x53\x71\xd6\xda\x3a\xd8\xcb\xde\x2e\xf8\xa1\x90\x55\x53\x0c\xc7\xaa\x0d\xe9\x76\x14\x29\x1c\x7b\x68\xdd\x2f\xe1\x6f\x00\x00\x00\xff\xff\x3c\x0a\xc2\xfe\x2a\x02\x00\x00") func readmeMdBytes() ([]byte, error) { @@ -2972,6 +2993,7 @@ var _bindata = map[string]func() (*asset, error){ "1708062699_activity_data.up.sql": _1708062699_activity_dataUpSql, "1708423707_applied_community_events.up.sql": _1708423707_applied_community_eventsUpSql, "1708440786_profile_showcase_social_links.up.sql": _1708440786_profile_showcase_social_linksUpSql, + "1709805967_simplify_profile_showcase_preferences.up.sql": _1709805967_simplify_profile_showcase_preferencesUpSql, "README.md": readmeMd, "doc.go": docGo, } @@ -3148,6 +3170,7 @@ var _bintree = &bintree{nil, map[string]*bintree{ "1708062699_activity_data.up.sql": {_1708062699_activity_dataUpSql, map[string]*bintree{}}, "1708423707_applied_community_events.up.sql": {_1708423707_applied_community_eventsUpSql, map[string]*bintree{}}, "1708440786_profile_showcase_social_links.up.sql": {_1708440786_profile_showcase_social_linksUpSql, map[string]*bintree{}}, + "1709805967_simplify_profile_showcase_preferences.up.sql": {_1709805967_simplify_profile_showcase_preferencesUpSql, map[string]*bintree{}}, "README.md": {readmeMd, map[string]*bintree{}}, "doc.go": {docGo, map[string]*bintree{}}, }} diff --git a/protocol/migrations/sqlite/1709805967_simplify_profile_showcase_preferences.up.sql b/protocol/migrations/sqlite/1709805967_simplify_profile_showcase_preferences.up.sql new file mode 100644 index 000000000..0ba281557 --- /dev/null +++ b/protocol/migrations/sqlite/1709805967_simplify_profile_showcase_preferences.up.sql @@ -0,0 +1,14 @@ + +ALTER TABLE profile_showcase_accounts_preferences DROP COLUMN name; +ALTER TABLE profile_showcase_accounts_preferences DROP COLUMN color_id; +ALTER TABLE profile_showcase_accounts_preferences DROP COLUMN emoji; + +ALTER TABLE profile_showcase_collectibles_preferences DROP COLUMN community_id; +ALTER TABLE profile_showcase_collectibles_preferences DROP COLUMN account_address; + +ALTER TABLE profile_showcase_unverified_tokens_preferences DROP COLUMN community_id; + +ALTER TABLE profile_showcase_collectibles_contacts DROP COLUMN community_id; +ALTER TABLE profile_showcase_collectibles_contacts DROP COLUMN account_address; + +ALTER TABLE profile_showcase_unverified_tokens_contacts DROP COLUMN community_id; diff --git a/protocol/persistence_profile_showcase.go b/protocol/persistence_profile_showcase.go index 99892306c..ba372af7d 100644 --- a/protocol/persistence_profile_showcase.go +++ b/protocol/persistence_profile_showcase.go @@ -15,23 +15,29 @@ const selectProfileShowcasePreferencesQuery = "SELECT clock FROM profile_showcas const upsertProfileShowcaseCommunityPreferenceQuery = "INSERT OR REPLACE INTO profile_showcase_communities_preferences(community_id, visibility, sort_order) VALUES (?, ?, ?)" // #nosec G101 const selectProfileShowcaseCommunityPreferenceQuery = "SELECT community_id, visibility, sort_order FROM profile_showcase_communities_preferences" // #nosec G101 const deleteProfileShowcaseCommunityPreferenceQuery = "DELETE FROM profile_showcase_communities_preferences WHERE community_id = ?" // #nosec G101 +const clearProfileShowcaseCommunitiyPreferencesQuery = "DELETE FROM profile_showcase_communities_preferences" // #nosec G101 -const upsertProfileShowcaseAccountPreferenceQuery = "INSERT OR REPLACE INTO profile_showcase_accounts_preferences(address, name, color_id, emoji, visibility, sort_order) VALUES (?, ?, ?, ?, ?, ?)" // #nosec G101 -const selectProfileShowcaseAccountPreferenceQuery = "SELECT address, name, color_id, emoji, visibility, sort_order FROM profile_showcase_accounts_preferences" // #nosec G101 -const selectSpecifiedShowcaseAccountPreferenceQuery = "SELECT address, name, color_id, emoji, visibility, sort_order FROM profile_showcase_accounts_preferences WHERE address = ?" // #nosec G101 -const deleteProfileShowcaseAccountPreferenceQuery = "DELETE FROM profile_showcase_accounts_preferences WHERE address = ?" // #nosec G101 +const upsertProfileShowcaseAccountPreferenceQuery = "INSERT OR REPLACE INTO profile_showcase_accounts_preferences(address, visibility, sort_order) VALUES (?, ?, ?)" // #nosec G101 +const selectProfileShowcaseAccountPreferenceQuery = "SELECT address, visibility, sort_order FROM profile_showcase_accounts_preferences" // #nosec G101 +const selectSpecifiedShowcaseAccountPreferenceQuery = "SELECT address, visibility, sort_order FROM profile_showcase_accounts_preferences WHERE address = ?" // #nosec G101 +const deleteProfileShowcaseAccountPreferenceQuery = "DELETE FROM profile_showcase_accounts_preferences WHERE address = ?" // #nosec G101 +const clearProfileShowcaseAccountPreferencesQuery = "DELETE FROM profile_showcase_accounts_preferences" // #nosec G101 -const upsertProfileShowcaseCollectiblePreferenceQuery = "INSERT OR REPLACE INTO profile_showcase_collectibles_preferences(contract_address, chain_id, token_id, community_id, account_address, visibility, sort_order) VALUES (?, ?, ?, ?, ?, ?, ?)" // #nosec G101 -const selectProfileShowcaseCollectiblePreferenceQuery = "SELECT contract_address, chain_id, token_id, community_id, account_address, visibility, sort_order FROM profile_showcase_collectibles_preferences" // #nosec G101 +const upsertProfileShowcaseCollectiblePreferenceQuery = "INSERT OR REPLACE INTO profile_showcase_collectibles_preferences(contract_address, chain_id, token_id, visibility, sort_order) VALUES (?, ?, ?, ?, ?)" // #nosec G101 +const selectProfileShowcaseCollectiblePreferenceQuery = "SELECT contract_address, chain_id, token_id, visibility, sort_order FROM profile_showcase_collectibles_preferences" // #nosec G101 +const clearProfileShowcaseCollectiblePreferencesQuery = "DELETE FROM profile_showcase_collectibles_preferences" // #nosec G101 const upsertProfileShowcaseVerifiedTokenPreferenceQuery = "INSERT OR REPLACE INTO profile_showcase_verified_tokens_preferences(symbol, visibility, sort_order) VALUES (?, ?, ?)" // #nosec G101 const selectProfileShowcaseVerifiedTokenPreferenceQuery = "SELECT symbol, visibility, sort_order FROM profile_showcase_verified_tokens_preferences" // #nosec G101 +const clearProfileShowcaseVerifiedTokenPreferencesQuery = "DELETE FROM profile_showcase_verified_tokens_preferences" // #nosec G101 -const upsertProfileShowcaseUnverifiedTokenPreferenceQuery = "INSERT OR REPLACE INTO profile_showcase_unverified_tokens_preferences(contract_address, chain_id, community_id, visibility, sort_order) VALUES (?, ?, ?, ?, ?)" // #nosec G101 -const selectProfileShowcaseUnverifiedTokenPreferenceQuery = "SELECT contract_address, chain_id, community_id, visibility, sort_order FROM profile_showcase_unverified_tokens_preferences" // #nosec G101 +const upsertProfileShowcaseUnverifiedTokenPreferenceQuery = "INSERT OR REPLACE INTO profile_showcase_unverified_tokens_preferences(contract_address, chain_id, visibility, sort_order) VALUES (?, ?, ?, ?)" // #nosec G101 +const selectProfileShowcaseUnverifiedTokenPreferenceQuery = "SELECT contract_address, chain_id, visibility, sort_order FROM profile_showcase_unverified_tokens_preferences" // #nosec G101 +const clearProfileShowcaseUnverifiedTokenPreferencesQuery = "DELETE FROM profile_showcase_unverified_tokens_preferences" // #nosec G101 const upsertProfileShowcaseSocialLinkPreferenceQuery = "INSERT OR REPLACE INTO profile_showcase_social_links_preferences(url, text, visibility, sort_order) VALUES (?, ?, ?, ?)" // #nosec G101 const selectProfileShowcaseSocialLinkPreferenceQuery = "SELECT url, text, visibility, sort_order FROM profile_showcase_social_links_preferences" // #nosec G101 +const clearProfileShowcaseSocialLinkPreferencesQuery = "DELETE FROM profile_showcase_social_links_preferences" // #nosec G101 // Profile showcase for a contact @@ -43,17 +49,17 @@ const upsertContactProfileShowcaseAccountQuery = "INSERT OR REPLACE INTO profile const selectContactProfileShowcaseAccountQuery = "SELECT * FROM profile_showcase_accounts_contacts WHERE contact_id = ?" // #nosec G101 const removeContactProfileShowcaseAccountQuery = "DELETE FROM profile_showcase_accounts_contacts WHERE contact_id = ?" // #nosec G101 -const upsertContactProfileShowcaseCollectibleQuery = "INSERT OR REPLACE INTO profile_showcase_collectibles_contacts(contact_id, contract_address, chain_id, token_id, community_id, account_address, sort_order) VALUES (?, ?, ?, ?, ?, ?, ?)" // #nosec G101 -const selectContactProfileShowcaseCollectibleQuery = "SELECT contract_address, chain_id, token_id, community_id, account_address, sort_order FROM profile_showcase_collectibles_contacts WHERE contact_id = ?" // #nosec G101 -const removeContactProfileShowcaseCollectibleQuery = "DELETE FROM profile_showcase_collectibles_contacts WHERE contact_id = ?" // #nosec G101 +const upsertContactProfileShowcaseCollectibleQuery = "INSERT OR REPLACE INTO profile_showcase_collectibles_contacts(contact_id, contract_address, chain_id, token_id, sort_order) VALUES (?, ?, ?, ?, ?)" // #nosec G101 +const selectContactProfileShowcaseCollectibleQuery = "SELECT contract_address, chain_id, token_id, sort_order FROM profile_showcase_collectibles_contacts WHERE contact_id = ?" // #nosec G101 +const removeContactProfileShowcaseCollectibleQuery = "DELETE FROM profile_showcase_collectibles_contacts WHERE contact_id = ?" // #nosec G101 const upsertContactProfileShowcaseVerifiedTokenQuery = "INSERT OR REPLACE INTO profile_showcase_verified_tokens_contacts(contact_id, symbol, sort_order) VALUES (?, ?, ?)" // #nosec G101 const selectContactProfileShowcaseVerifiedTokenQuery = "SELECT symbol, sort_order FROM profile_showcase_verified_tokens_contacts WHERE contact_id = ?" // #nosec G101 const removeContactProfileShowcaseVerifiedTokenQuery = "DELETE FROM profile_showcase_verified_tokens_contacts WHERE contact_id = ?" // #nosec G101 -const upsertContactProfileShowcaseUnverifiedTokenQuery = "INSERT OR REPLACE INTO profile_showcase_unverified_tokens_contacts(contact_id, contract_address, chain_id, community_id, sort_order) VALUES (?, ?, ?, ?, ?)" // #nosec G101 -const selectContactProfileShowcaseUnverifiedTokenQuery = "SELECT contract_address, chain_id, community_id, sort_order FROM profile_showcase_unverified_tokens_contacts WHERE contact_id = ?" // #nosec G101 -const removeContactProfileShowcaseUnverifiedTokenQuery = "DELETE FROM profile_showcase_unverified_tokens_contacts WHERE contact_id = ?" // #nosec G101 +const upsertContactProfileShowcaseUnverifiedTokenQuery = "INSERT OR REPLACE INTO profile_showcase_unverified_tokens_contacts(contact_id, contract_address, chain_id, sort_order) VALUES (?, ?, ?, ?)" // #nosec G101 +const selectContactProfileShowcaseUnverifiedTokenQuery = "SELECT contract_address, chain_id, sort_order FROM profile_showcase_unverified_tokens_contacts WHERE contact_id = ?" // #nosec G101 +const removeContactProfileShowcaseUnverifiedTokenQuery = "DELETE FROM profile_showcase_unverified_tokens_contacts WHERE contact_id = ?" // #nosec G101 const upsertContactProfileShowcaseSocialLinkQuery = "INSERT OR REPLACE INTO profile_showcase_social_links_contacts(contact_id, url, text, sort_order) VALUES (?, ?, ?, ?)" // #nosec G101 const selectContactProfileShowcaseSocialLinkQuery = "SELECT url, text, sort_order FROM profile_showcase_social_links_contacts WHERE contact_id = ?" // #nosec G101 @@ -120,12 +126,24 @@ func (db sqlitePersistence) getProfileShowcaseCommunitiesPreferences(tx *sql.Tx) return communities, nil } +func (db sqlitePersistence) DeleteProfileShowcaseCommunityPreference(communityID string) (bool, error) { + result, err := db.db.Exec(deleteProfileShowcaseCommunityPreferenceQuery, communityID) + if err != nil { + return false, err + } + + rows, err := result.RowsAffected() + return rows > 0, err +} + +func (db sqlitePersistence) clearProfileShowcaseCommunityPreferences(tx *sql.Tx) error { + _, err := tx.Exec(clearProfileShowcaseCommunitiyPreferencesQuery) + return err +} + func (db sqlitePersistence) saveProfileShowcaseAccountPreference(tx *sql.Tx, account *identity.ProfileShowcaseAccountPreference) error { _, err := tx.Exec(upsertProfileShowcaseAccountPreferenceQuery, account.Address, - account.Name, - account.ColorID, - account.Emoji, account.ShowcaseVisibility, account.Order, ) @@ -143,9 +161,6 @@ func (db sqlitePersistence) processProfileShowcaseAccountPreferences(rows *sql.R err := rows.Scan( &account.Address, - &account.Name, - &account.ColorID, - &account.Emoji, &account.ShowcaseVisibility, &account.Order, ) @@ -193,14 +208,9 @@ func (db sqlitePersistence) DeleteProfileShowcaseAccountPreference(accountAddres return rows > 0, err } -func (db sqlitePersistence) DeleteProfileShowcaseCommunityPreference(communityID string) (bool, error) { - result, err := db.db.Exec(deleteProfileShowcaseCommunityPreferenceQuery, communityID) - if err != nil { - return false, err - } - - rows, err := result.RowsAffected() - return rows > 0, err +func (db sqlitePersistence) clearProfileShowcaseAccountPreferences(tx *sql.Tx) error { + _, err := tx.Exec(clearProfileShowcaseAccountPreferencesQuery) + return err } func (db sqlitePersistence) saveProfileShowcaseCollectiblePreference(tx *sql.Tx, collectible *identity.ProfileShowcaseCollectiblePreference) error { @@ -208,8 +218,6 @@ func (db sqlitePersistence) saveProfileShowcaseCollectiblePreference(tx *sql.Tx, collectible.ContractAddress, collectible.ChainID, collectible.TokenID, - collectible.CommunityID, - collectible.AccountAddress, collectible.ShowcaseVisibility, collectible.Order, ) @@ -232,8 +240,6 @@ func (db sqlitePersistence) getProfileShowcaseCollectiblesPreferences(tx *sql.Tx &collectible.ContractAddress, &collectible.ChainID, &collectible.TokenID, - &collectible.CommunityID, - &collectible.AccountAddress, &collectible.ShowcaseVisibility, &collectible.Order, ) @@ -247,6 +253,11 @@ func (db sqlitePersistence) getProfileShowcaseCollectiblesPreferences(tx *sql.Tx return collectibles, nil } +func (db sqlitePersistence) clearProfileShowcaseCollectiblePreferences(tx *sql.Tx) error { + _, err := tx.Exec(clearProfileShowcaseCollectiblePreferencesQuery) + return err +} + func (db sqlitePersistence) saveProfileShowcaseVerifiedTokenPreference(tx *sql.Tx, token *identity.ProfileShowcaseVerifiedTokenPreference) error { _, err := tx.Exec(upsertProfileShowcaseVerifiedTokenPreferenceQuery, token.Symbol, @@ -283,11 +294,15 @@ func (db sqlitePersistence) getProfileShowcaseVerifiedTokensPreferences(tx *sql. return tokens, nil } +func (db sqlitePersistence) clearProfileShowcaseVerifiedTokenPreferences(tx *sql.Tx) error { + _, err := tx.Exec(clearProfileShowcaseVerifiedTokenPreferencesQuery) + return err +} + func (db sqlitePersistence) saveProfileShowcaseUnverifiedTokenPreference(tx *sql.Tx, token *identity.ProfileShowcaseUnverifiedTokenPreference) error { _, err := tx.Exec(upsertProfileShowcaseUnverifiedTokenPreferenceQuery, token.ContractAddress, token.ChainID, - token.CommunityID, token.ShowcaseVisibility, token.Order, ) @@ -309,7 +324,6 @@ func (db sqlitePersistence) getProfileShowcaseUnverifiedTokensPreferences(tx *sq err := rows.Scan( &token.ContractAddress, &token.ChainID, - &token.CommunityID, &token.ShowcaseVisibility, &token.Order, ) @@ -323,6 +337,11 @@ func (db sqlitePersistence) getProfileShowcaseUnverifiedTokensPreferences(tx *sq return tokens, nil } +func (db sqlitePersistence) clearProfileShowcaseUnverifiedTokenPreferences(tx *sql.Tx) error { + _, err := tx.Exec(clearProfileShowcaseUnverifiedTokenPreferencesQuery) + return err +} + func (db sqlitePersistence) saveProfileShowcaseSocialLinkPreference(tx *sql.Tx, link *identity.ProfileShowcaseSocialLinkPreference) error { _, err := tx.Exec(upsertProfileShowcaseSocialLinkPreferenceQuery, link.URL, @@ -361,6 +380,11 @@ func (db sqlitePersistence) getProfileShowcaseSocialLinkPreferences(tx *sql.Tx) return links, nil } +func (db sqlitePersistence) clearProfileShowcaseSocialLinkPreferences(tx *sql.Tx) error { + _, err := tx.Exec(clearProfileShowcaseSocialLinkPreferencesQuery) + return err +} + // Queries for the profile showcase for a contact func (db sqlitePersistence) saveProfileShowcaseCommunityContact(tx *sql.Tx, contactID string, community *identity.ProfileShowcaseCommunity) error { _, err := tx.Exec(upsertContactProfileShowcaseCommunityQuery, @@ -424,7 +448,6 @@ func (db sqlitePersistence) processProfileShowcaseAccounts(rows *sql.Rows) (resu for rows.Next() { account := &identity.ProfileShowcaseAccount{} - err = rows.Scan(&account.Address, &account.Name, &account.ColorID, &account.Emoji, &account.Order, &account.ContactID) if err != nil { return @@ -466,8 +489,6 @@ func (db sqlitePersistence) saveProfileShowcaseCollectibleContact(tx *sql.Tx, co collectible.ContractAddress, collectible.ChainID, collectible.TokenID, - collectible.CommunityID, - collectible.AccountAddress, collectible.Order, ) @@ -489,8 +510,6 @@ func (db sqlitePersistence) getProfileShowcaseCollectiblesContact(tx *sql.Tx, co &collectible.ContractAddress, &collectible.ChainID, &collectible.TokenID, - &collectible.CommunityID, - &collectible.AccountAddress, &collectible.Order) if err != nil { return nil, err @@ -549,7 +568,6 @@ func (db sqlitePersistence) saveProfileShowcaseUnverifiedTokenContact(tx *sql.Tx contactID, token.ContractAddress, token.ChainID, - token.CommunityID, token.Order, ) @@ -570,7 +588,6 @@ func (db sqlitePersistence) getProfileShowcaseUnverifiedTokensContact(tx *sql.Tx err := rows.Scan( &token.ContractAddress, &token.ChainID, - &token.CommunityID, &token.Order) if err != nil { return nil, err @@ -645,7 +662,7 @@ func (db sqlitePersistence) SaveProfileShowcasePreferences(preferences *identity _ = tx.Rollback() }() - err = db.saveProfileShowcasePreferencesClock(tx, preferences.Clock) + err = db.clearProfileShowcaseCommunityPreferences(tx) if err != nil { return err } @@ -657,6 +674,11 @@ func (db sqlitePersistence) SaveProfileShowcasePreferences(preferences *identity } } + err = db.clearProfileShowcaseAccountPreferences(tx) + if err != nil { + return err + } + for _, account := range preferences.Accounts { err = db.saveProfileShowcaseAccountPreference(tx, account) if err != nil { @@ -664,6 +686,11 @@ func (db sqlitePersistence) SaveProfileShowcasePreferences(preferences *identity } } + err = db.clearProfileShowcaseCollectiblePreferences(tx) + if err != nil { + return err + } + for _, collectible := range preferences.Collectibles { err = db.saveProfileShowcaseCollectiblePreference(tx, collectible) if err != nil { @@ -671,6 +698,11 @@ func (db sqlitePersistence) SaveProfileShowcasePreferences(preferences *identity } } + err = db.clearProfileShowcaseVerifiedTokenPreferences(tx) + if err != nil { + return err + } + for _, token := range preferences.VerifiedTokens { err = db.saveProfileShowcaseVerifiedTokenPreference(tx, token) if err != nil { @@ -678,6 +710,11 @@ func (db sqlitePersistence) SaveProfileShowcasePreferences(preferences *identity } } + err = db.clearProfileShowcaseUnverifiedTokenPreferences(tx) + if err != nil { + return err + } + for _, token := range preferences.UnverifiedTokens { err = db.saveProfileShowcaseUnverifiedTokenPreference(tx, token) if err != nil { @@ -685,6 +722,11 @@ func (db sqlitePersistence) SaveProfileShowcasePreferences(preferences *identity } } + err = db.clearProfileShowcaseSocialLinkPreferences(tx) + if err != nil { + return err + } + for _, link := range preferences.SocialLinks { err = db.saveProfileShowcaseSocialLinkPreference(tx, link) if err != nil { @@ -692,6 +734,11 @@ func (db sqlitePersistence) SaveProfileShowcasePreferences(preferences *identity } } + err = db.saveProfileShowcasePreferencesClock(tx, preferences.Clock) + if err != nil { + return err + } + return nil } diff --git a/protocol/persistence_profile_showcase_test.go b/protocol/persistence_profile_showcase_test.go index 271daacd7..6f6ce7983 100644 --- a/protocol/persistence_profile_showcase_test.go +++ b/protocol/persistence_profile_showcase_test.go @@ -1,6 +1,7 @@ package protocol import ( + "reflect" "testing" "github.com/stretchr/testify/suite" @@ -32,17 +33,11 @@ func (s *TestProfileShowcasePersistence) TestProfileShowcasePreferences() { Accounts: []*identity.ProfileShowcaseAccountPreference{ &identity.ProfileShowcaseAccountPreference{ Address: "0x0000000000000000000000000032433445133422", - Name: "Status Account", - ColorID: "blue", - Emoji: "-_-", ShowcaseVisibility: identity.ProfileShowcaseVisibilityEveryone, Order: 0, }, &identity.ProfileShowcaseAccountPreference{ Address: "0x0000000000000000000000000032433445133424", - Name: "Money Box", - ColorID: "red", - Emoji: ":o)", ShowcaseVisibility: identity.ProfileShowcaseVisibilityContacts, Order: 1, }, @@ -52,8 +47,6 @@ func (s *TestProfileShowcasePersistence) TestProfileShowcasePreferences() { ContractAddress: "0x12378534257568678487683576", ChainID: 11155111, TokenID: "123213895929994903", - CommunityID: "0x01312357798976535", - AccountAddress: "0x32433445133424", ShowcaseVisibility: identity.ProfileShowcaseVisibilityEveryone, Order: 0, }, @@ -79,14 +72,12 @@ func (s *TestProfileShowcasePersistence) TestProfileShowcasePreferences() { &identity.ProfileShowcaseUnverifiedTokenPreference{ ContractAddress: "0x454525452023452", ChainID: 1, - CommunityID: "0x32433445133424", ShowcaseVisibility: identity.ProfileShowcaseVisibilityEveryone, Order: 0, }, &identity.ProfileShowcaseUnverifiedTokenPreference{ ContractAddress: "0x12312323323233", ChainID: 11155111, - CommunityID: "", ShowcaseVisibility: identity.ProfileShowcaseVisibilityContacts, Order: 1, }, @@ -118,36 +109,55 @@ func (s *TestProfileShowcasePersistence) TestProfileShowcasePreferences() { preferencesBack, err := persistence.GetProfileShowcasePreferences() s.Require().NoError(err) + s.Require().True(reflect.DeepEqual(preferences, preferencesBack)) - s.Require().Equal(len(preferencesBack.Communities), len(preferences.Communities)) - for i := 0; i < len(preferences.Communities); i++ { - s.Require().Equal(*preferences.Communities[i], *preferencesBack.Communities[i]) + newPreferences := &identity.ProfileShowcasePreferences{ + Communities: []*identity.ProfileShowcaseCommunityPreference{ + &identity.ProfileShowcaseCommunityPreference{ + CommunityID: "0x32433445133424", + ShowcaseVisibility: identity.ProfileShowcaseVisibilityContacts, + Order: 0, + }, + }, + Accounts: []*identity.ProfileShowcaseAccountPreference{ + &identity.ProfileShowcaseAccountPreference{ + Address: "0x0000000000000000000000000032433445133422", + ShowcaseVisibility: identity.ProfileShowcaseVisibilityContacts, + Order: 0, + }, + }, + Collectibles: []*identity.ProfileShowcaseCollectiblePreference{}, + VerifiedTokens: []*identity.ProfileShowcaseVerifiedTokenPreference{ + &identity.ProfileShowcaseVerifiedTokenPreference{ + Symbol: "ETH", + ShowcaseVisibility: identity.ProfileShowcaseVisibilityContacts, + Order: 1, + }, + }, + UnverifiedTokens: []*identity.ProfileShowcaseUnverifiedTokenPreference{ + &identity.ProfileShowcaseUnverifiedTokenPreference{ + ContractAddress: "0x12312323323233", + ChainID: 11155111, + ShowcaseVisibility: identity.ProfileShowcaseVisibilityEveryone, + Order: 0, + }, + }, + SocialLinks: []*identity.ProfileShowcaseSocialLinkPreference{ + &identity.ProfileShowcaseSocialLinkPreference{ + Text: identity.TwitterID, + URL: "https://twitter.com/ethstatus", + ShowcaseVisibility: identity.ProfileShowcaseVisibilityEveryone, + Order: 1, + }, + }, } - s.Require().Equal(len(preferencesBack.Accounts), len(preferences.Accounts)) - for i := 0; i < len(preferences.Accounts); i++ { - s.Require().Equal(*preferences.Accounts[i], *preferencesBack.Accounts[i]) - } + err = persistence.SaveProfileShowcasePreferences(newPreferences) + s.Require().NoError(err) - s.Require().Equal(len(preferencesBack.Collectibles), len(preferences.Collectibles)) - for i := 0; i < len(preferences.Collectibles); i++ { - s.Require().Equal(*preferences.Collectibles[i], *preferencesBack.Collectibles[i]) - } - - s.Require().Equal(len(preferencesBack.VerifiedTokens), len(preferences.VerifiedTokens)) - for i := 0; i < len(preferences.VerifiedTokens); i++ { - s.Require().Equal(*preferences.VerifiedTokens[i], *preferencesBack.VerifiedTokens[i]) - } - - s.Require().Equal(len(preferencesBack.UnverifiedTokens), len(preferences.UnverifiedTokens)) - for i := 0; i < len(preferences.UnverifiedTokens); i++ { - s.Require().Equal(*preferences.UnverifiedTokens[i], *preferencesBack.UnverifiedTokens[i]) - } - - s.Require().Equal(len(preferencesBack.SocialLinks), len(preferences.SocialLinks)) - for i := 0; i < len(preferences.SocialLinks); i++ { - s.Require().Equal(*preferences.SocialLinks[i], *preferencesBack.SocialLinks[i]) - } + preferencesBack, err = persistence.GetProfileShowcasePreferences() + s.Require().NoError(err) + s.Require().True(reflect.DeepEqual(newPreferences, preferencesBack)) } func (s *TestProfileShowcasePersistence) TestProfileShowcaseContacts() { @@ -190,7 +200,6 @@ func (s *TestProfileShowcasePersistence) TestProfileShowcaseContacts() { ContractAddress: "0x12378534257568678487683576", ChainID: 1, TokenID: "123213895929994903", - CommunityID: "0x01312357798976535", Order: 0, }, }, @@ -212,13 +221,11 @@ func (s *TestProfileShowcasePersistence) TestProfileShowcaseContacts() { &identity.ProfileShowcaseUnverifiedToken{ ContractAddress: "0x454525452023452", ChainID: 1, - CommunityID: "", Order: 0, }, &identity.ProfileShowcaseUnverifiedToken{ ContractAddress: "0x12312323323233", ChainID: 11155111, - CommunityID: "0x32433445133424", Order: 1, }, }, @@ -255,7 +262,6 @@ func (s *TestProfileShowcasePersistence) TestProfileShowcaseContacts() { ContractAddress: "0x12378534257568678487683576", ChainID: 1, TokenID: "123213895929994903", - CommunityID: "0x01312357798976535", Order: 1, }, }, @@ -431,17 +437,11 @@ func (s *TestProfileShowcasePersistence) TestUpdateProfileShowcaseAccountOnWalle Accounts: []*identity.ProfileShowcaseAccountPreference{ &identity.ProfileShowcaseAccountPreference{ Address: deleteAccountAddress, - Name: "Status Account", - ColorID: "blue", - Emoji: "-_-", ShowcaseVisibility: identity.ProfileShowcaseVisibilityEveryone, Order: 0, }, &identity.ProfileShowcaseAccountPreference{ Address: updateAccountAddress, - Name: "Money Box", - ColorID: "red", - Emoji: ":o)", ShowcaseVisibility: identity.ProfileShowcaseVisibilityContacts, Order: 1, }, @@ -456,9 +456,6 @@ func (s *TestProfileShowcasePersistence) TestUpdateProfileShowcaseAccountOnWalle s.Require().NotNil(account) s.Require().Equal(*account, *preferences.Accounts[1]) - account.Name = "Music Box" - account.ColorID = "green" - account.Emoji = ">:-]" account.ShowcaseVisibility = identity.ProfileShowcaseVisibilityIDVerifiedContacts account.Order = 7 diff --git a/protocol/protobuf/profile_showcase.pb.go b/protocol/protobuf/profile_showcase.pb.go index 57a521eaa..24e2958ca 100644 --- a/protocol/protobuf/profile_showcase.pb.go +++ b/protocol/protobuf/profile_showcase.pb.go @@ -223,10 +223,12 @@ type ProfileShowcaseCollectible struct { Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"` Order uint32 `protobuf:"varint,2,opt,name=order,proto3" json:"order,omitempty"` ContractAddress string `protobuf:"bytes,3,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty"` - CommunityId string `protobuf:"bytes,4,opt,name=community_id,json=communityId,proto3" json:"community_id,omitempty"` - ChainId uint64 `protobuf:"varint,5,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - TokenId string `protobuf:"bytes,6,opt,name=token_id,json=tokenId,proto3" json:"token_id,omitempty"` - AccountAddress string `protobuf:"bytes,7,opt,name=account_address,json=accountAddress,proto3" json:"account_address,omitempty"` + // Deprecated: Marked as deprecated in profile_showcase.proto. + CommunityId string `protobuf:"bytes,4,opt,name=community_id,json=communityId,proto3" json:"community_id,omitempty"` + ChainId uint64 `protobuf:"varint,5,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + TokenId string `protobuf:"bytes,6,opt,name=token_id,json=tokenId,proto3" json:"token_id,omitempty"` + // Deprecated: Marked as deprecated in profile_showcase.proto. + AccountAddress string `protobuf:"bytes,7,opt,name=account_address,json=accountAddress,proto3" json:"account_address,omitempty"` } func (x *ProfileShowcaseCollectible) Reset() { @@ -283,6 +285,7 @@ func (x *ProfileShowcaseCollectible) GetContractAddress() string { return "" } +// Deprecated: Marked as deprecated in profile_showcase.proto. func (x *ProfileShowcaseCollectible) GetCommunityId() string { if x != nil { return x.CommunityId @@ -304,6 +307,7 @@ func (x *ProfileShowcaseCollectible) GetTokenId() string { return "" } +// Deprecated: Marked as deprecated in profile_showcase.proto. func (x *ProfileShowcaseCollectible) GetAccountAddress() string { if x != nil { return x.AccountAddress @@ -374,7 +378,8 @@ type ProfileShowcaseUnverifiedToken struct { ContractAddress string `protobuf:"bytes,1,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty"` Order uint32 `protobuf:"varint,2,opt,name=order,proto3" json:"order,omitempty"` ChainId uint64 `protobuf:"varint,3,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - CommunityId string `protobuf:"bytes,4,opt,name=community_id,json=communityId,proto3" json:"community_id,omitempty"` + // Deprecated: Marked as deprecated in profile_showcase.proto. + CommunityId string `protobuf:"bytes,4,opt,name=community_id,json=communityId,proto3" json:"community_id,omitempty"` } func (x *ProfileShowcaseUnverifiedToken) Reset() { @@ -430,6 +435,7 @@ func (x *ProfileShowcaseUnverifiedToken) GetChainId() uint64 { return 0 } +// Deprecated: Marked as deprecated in profile_showcase.proto. func (x *ProfileShowcaseUnverifiedToken) GetCommunityId() string { if x != nil { return x.CommunityId @@ -773,9 +779,12 @@ type ProfileShowcaseAccountPreference struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - ColorId string `protobuf:"bytes,3,opt,name=color_id,json=colorId,proto3" json:"color_id,omitempty"` + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + // Deprecated: Marked as deprecated in profile_showcase.proto. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Deprecated: Marked as deprecated in profile_showcase.proto. + ColorId string `protobuf:"bytes,3,opt,name=color_id,json=colorId,proto3" json:"color_id,omitempty"` + // Deprecated: Marked as deprecated in profile_showcase.proto. Emoji string `protobuf:"bytes,4,opt,name=emoji,proto3" json:"emoji,omitempty"` ShowcaseVisibility ProfileShowcaseVisibility `protobuf:"varint,5,opt,name=showcase_visibility,json=showcaseVisibility,proto3,enum=protobuf.ProfileShowcaseVisibility" json:"showcase_visibility,omitempty"` Order uint32 `protobuf:"varint,6,opt,name=order,proto3" json:"order,omitempty"` @@ -820,6 +829,7 @@ func (x *ProfileShowcaseAccountPreference) GetAddress() string { return "" } +// Deprecated: Marked as deprecated in profile_showcase.proto. func (x *ProfileShowcaseAccountPreference) GetName() string { if x != nil { return x.Name @@ -827,6 +837,7 @@ func (x *ProfileShowcaseAccountPreference) GetName() string { return "" } +// Deprecated: Marked as deprecated in profile_showcase.proto. func (x *ProfileShowcaseAccountPreference) GetColorId() string { if x != nil { return x.ColorId @@ -834,6 +845,7 @@ func (x *ProfileShowcaseAccountPreference) GetColorId() string { return "" } +// Deprecated: Marked as deprecated in profile_showcase.proto. func (x *ProfileShowcaseAccountPreference) GetEmoji() string { if x != nil { return x.Emoji @@ -860,10 +872,12 @@ type ProfileShowcaseCollectiblePreference struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ContractAddress string `protobuf:"bytes,1,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty"` - ChainId uint64 `protobuf:"varint,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - TokenId string `protobuf:"bytes,3,opt,name=token_id,json=tokenId,proto3" json:"token_id,omitempty"` - CommunityId string `protobuf:"bytes,4,opt,name=community_id,json=communityId,proto3" json:"community_id,omitempty"` + ContractAddress string `protobuf:"bytes,1,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty"` + ChainId uint64 `protobuf:"varint,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + TokenId string `protobuf:"bytes,3,opt,name=token_id,json=tokenId,proto3" json:"token_id,omitempty"` + // Deprecated: Marked as deprecated in profile_showcase.proto. + CommunityId string `protobuf:"bytes,4,opt,name=community_id,json=communityId,proto3" json:"community_id,omitempty"` + // Deprecated: Marked as deprecated in profile_showcase.proto. AccountAddress string `protobuf:"bytes,5,opt,name=account_address,json=accountAddress,proto3" json:"account_address,omitempty"` ShowcaseVisibility ProfileShowcaseVisibility `protobuf:"varint,6,opt,name=showcase_visibility,json=showcaseVisibility,proto3,enum=protobuf.ProfileShowcaseVisibility" json:"showcase_visibility,omitempty"` Order uint32 `protobuf:"varint,7,opt,name=order,proto3" json:"order,omitempty"` @@ -922,6 +936,7 @@ func (x *ProfileShowcaseCollectiblePreference) GetTokenId() string { return "" } +// Deprecated: Marked as deprecated in profile_showcase.proto. func (x *ProfileShowcaseCollectiblePreference) GetCommunityId() string { if x != nil { return x.CommunityId @@ -929,6 +944,7 @@ func (x *ProfileShowcaseCollectiblePreference) GetCommunityId() string { return "" } +// Deprecated: Marked as deprecated in profile_showcase.proto. func (x *ProfileShowcaseCollectiblePreference) GetAccountAddress() string { if x != nil { return x.AccountAddress @@ -1018,8 +1034,9 @@ type ProfileShowcaseUnverifiedTokenPreference struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ContractAddress string `protobuf:"bytes,1,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty"` - ChainId uint64 `protobuf:"varint,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + ContractAddress string `protobuf:"bytes,1,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty"` + ChainId uint64 `protobuf:"varint,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // Deprecated: Marked as deprecated in profile_showcase.proto. CommunityId string `protobuf:"bytes,3,opt,name=community_id,json=communityId,proto3" json:"community_id,omitempty"` ShowcaseVisibility ProfileShowcaseVisibility `protobuf:"varint,4,opt,name=showcase_visibility,json=showcaseVisibility,proto3,enum=protobuf.ProfileShowcaseVisibility" json:"showcase_visibility,omitempty"` Order uint32 `protobuf:"varint,5,opt,name=order,proto3" json:"order,omitempty"` @@ -1071,6 +1088,7 @@ func (x *ProfileShowcaseUnverifiedTokenPreference) GetChainId() uint64 { return 0 } +// Deprecated: Marked as deprecated in profile_showcase.proto. func (x *ProfileShowcaseUnverifiedTokenPreference) GetCommunityId() string { if x != nil { return x.CommunityId @@ -1278,7 +1296,7 @@ var file_profile_showcase_proto_rawDesc = []byte{ 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x6f, 0x6a, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x6f, 0x6a, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0xf5, 0x01, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0xfd, 0x01, 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x03, 0x75, @@ -1286,128 +1304,130 @@ var file_profile_showcase_proto_rawDesc = []byte{ 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x4c, 0x0a, 0x1c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x14, 0x0a, - 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x22, 0x9f, 0x01, 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, - 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x55, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x49, 0x64, 0x22, 0x57, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x4c, 0x69, - 0x6e, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x75, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xd6, - 0x03, 0x0a, 0x16, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, - 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, - 0x74, 0x79, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, - 0x3c, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x48, 0x0a, - 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x0f, 0x76, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x11, 0x75, 0x6e, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x55, 0x6e, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x10, 0x75, - 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, - 0x46, 0x0a, 0x0c, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, - 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x0b, 0x73, 0x6f, 0x63, 0x69, - 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x77, 0x0a, 0x1f, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, - 0x52, 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, - 0x22, 0x88, 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, - 0x63, 0x61, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0c, 0x66, 0x6f, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, + 0x65, 0x73, 0x73, 0x12, 0x25, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x63, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x64, + 0x12, 0x2b, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x4c, 0x0a, + 0x1c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0xa3, 0x01, 0x0a, 0x1e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x55, + 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, + 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, + 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, + 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0c, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x49, + 0x64, 0x22, 0x57, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, + 0x63, 0x61, 0x73, 0x65, 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, + 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xd6, 0x03, 0x0a, 0x16, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, - 0x77, 0x63, 0x61, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x0b, 0x66, 0x6f, - 0x72, 0x45, 0x76, 0x65, 0x72, 0x79, 0x6f, 0x6e, 0x65, 0x12, 0x4c, 0x0a, 0x0c, 0x66, 0x6f, 0x72, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x52, 0x0b, 0x66, 0x6f, 0x72, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x12, 0x62, 0x0a, 0x18, 0x66, 0x6f, 0x72, 0x5f, 0x69, - 0x64, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x63, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, - 0x63, 0x61, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x65, 0x64, 0x52, 0x15, 0x66, 0x6f, 0x72, 0x49, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x22, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x54, 0x0a, 0x13, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, - 0x65, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, - 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, - 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x22, 0xed, 0x01, 0x0a, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, - 0x77, 0x63, 0x61, 0x73, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x6f, 0x6a, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x6d, 0x6f, 0x6a, 0x69, 0x12, 0x54, 0x0a, 0x13, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, - 0x65, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, - 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, - 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x22, 0xbf, 0x02, 0x0a, 0x24, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, - 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, - 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x27, - 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x52, 0x0b, + 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x08, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, + 0x6c, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x0f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, + 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x11, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x55, 0x6e, 0x76, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x10, 0x75, 0x6e, 0x76, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x0c, 0x73, + 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x53, 0x6f, 0x63, 0x69, + 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x0b, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x4c, 0x69, + 0x6e, 0x6b, 0x73, 0x22, 0x77, 0x0a, 0x1f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, + 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0e, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x88, 0x02, 0x0a, + 0x0f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, + 0x12, 0x43, 0x0a, 0x0c, 0x66, 0x6f, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x6f, 0x6e, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, + 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x0b, 0x66, 0x6f, 0x72, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x6f, 0x6e, 0x65, 0x12, 0x4c, 0x0a, 0x0c, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, + 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x52, 0x0b, 0x66, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x63, 0x74, 0x73, 0x12, 0x62, 0x0a, 0x18, 0x66, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x52, 0x15, 0x66, 0x6f, 0x72, 0x49, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x22, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x49, + 0x64, 0x12, 0x54, 0x0a, 0x13, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x69, + 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, + 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0xf9, 0x01, + 0x0a, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x08, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x05, 0x65, 0x6d, 0x6f, 0x6a, 0x69, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x65, 0x6d, 0x6f, 0x6a, 0x69, 0x12, 0x54, 0x0a, + 0x13, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, + 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, + 0x12, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0xc7, 0x02, 0x0a, 0x24, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, + 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x63, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x0f, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x54, 0x0a, 0x13, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, @@ -1426,84 +1446,84 @@ var file_profile_showcase_proto_rawDesc = []byte{ 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x22, 0xff, 0x01, 0x0a, 0x28, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, + 0x65, 0x72, 0x22, 0x83, 0x02, 0x0a, 0x28, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x55, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, - 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x54, 0x0a, 0x13, 0x73, 0x68, 0x6f, 0x77, - 0x63, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, - 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x77, - 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x22, 0xb7, 0x01, 0x0a, 0x23, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x4c, 0x69, - 0x6e, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x13, 0x73, 0x68, 0x6f, 0x77, - 0x63, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, - 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x77, - 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0xb0, - 0x04, 0x0a, 0x1e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, - 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x4e, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, - 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, - 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, - 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, + 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x54, 0x0a, 0x13, + 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, - 0x63, 0x61, 0x73, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, - 0x52, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, - 0x6c, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x0f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, - 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0e, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x5f, - 0x0a, 0x11, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x12, + 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0xb7, 0x01, 0x0a, 0x23, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x53, 0x6f, 0x63, 0x69, + 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x13, + 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, - 0x63, 0x61, 0x73, 0x65, 0x55, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x10, 0x75, - 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, - 0x50, 0x0a, 0x0c, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, - 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, - 0x73, 0x2a, 0xcc, 0x01, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, - 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, - 0x26, 0x0a, 0x22, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x43, - 0x41, 0x53, 0x45, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4e, - 0x4f, 0x5f, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x33, 0x0a, 0x2f, 0x50, 0x52, 0x4f, 0x46, 0x49, - 0x4c, 0x45, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x43, 0x41, 0x53, 0x45, 0x5f, 0x56, 0x49, 0x53, 0x49, - 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x49, 0x44, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, - 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x43, 0x41, 0x53, 0x45, - 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x54, - 0x41, 0x43, 0x54, 0x53, 0x10, 0x02, 0x12, 0x28, 0x0a, 0x24, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, - 0x45, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x43, 0x41, 0x53, 0x45, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x03, - 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x12, + 0x73, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x22, 0xb0, 0x04, 0x0a, 0x1e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x4e, 0x0a, 0x0b, 0x63, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0b, + 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x08, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, + 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, + 0x63, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x50, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x0f, 0x76, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x12, 0x5f, 0x0a, 0x11, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x55, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x10, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x12, 0x50, 0x0a, 0x0c, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x6c, 0x69, + 0x6e, 0x6b, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x6f, 0x77, + 0x63, 0x61, 0x73, 0x65, 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, + 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x2a, 0xcc, 0x01, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x53, 0x68, 0x6f, 0x77, 0x63, 0x61, 0x73, 0x65, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x22, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, + 0x48, 0x4f, 0x57, 0x43, 0x41, 0x53, 0x45, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, + 0x54, 0x59, 0x5f, 0x4e, 0x4f, 0x5f, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x33, 0x0a, 0x2f, 0x50, + 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x43, 0x41, 0x53, 0x45, 0x5f, + 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x49, 0x44, 0x56, 0x45, 0x52, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x10, 0x01, + 0x12, 0x28, 0x0a, 0x24, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x48, 0x4f, 0x57, + 0x43, 0x41, 0x53, 0x45, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, + 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x10, 0x02, 0x12, 0x28, 0x0a, 0x24, 0x50, 0x52, + 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x43, 0x41, 0x53, 0x45, 0x5f, 0x56, + 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, + 0x4e, 0x45, 0x10, 0x03, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/protobuf/profile_showcase.proto b/protocol/protobuf/profile_showcase.proto index 41de720b9..e1d67daf1 100644 --- a/protocol/protobuf/profile_showcase.proto +++ b/protocol/protobuf/profile_showcase.proto @@ -23,10 +23,10 @@ message ProfileShowcaseCollectible { string uid = 1 [deprecated = true]; uint32 order = 2; string contract_address = 3; - string community_id = 4; + string community_id = 4 [deprecated = true]; uint64 chain_id = 5; string token_id = 6; - string account_address = 7; + string account_address = 7 [deprecated = true]; } message ProfileShowcaseVerifiedToken { @@ -38,7 +38,7 @@ message ProfileShowcaseUnverifiedToken { string contract_address = 1; uint32 order = 2; uint64 chain_id = 3; - string community_id = 4; + string community_id = 4 [deprecated = true]; } message ProfileShowcaseSocialLink { @@ -84,9 +84,9 @@ message ProfileShowcaseCommunityPreference { message ProfileShowcaseAccountPreference { string address = 1; - string name = 2; - string color_id = 3; - string emoji = 4; + string name = 2 [deprecated = true]; + string color_id = 3 [deprecated = true]; + string emoji = 4 [deprecated = true]; ProfileShowcaseVisibility showcase_visibility = 5; uint32 order = 6; } @@ -95,8 +95,8 @@ message ProfileShowcaseCollectiblePreference { string contract_address = 1; uint64 chain_id = 2; string token_id = 3; - string community_id = 4; - string account_address = 5; + string community_id = 4 [deprecated = true]; + string account_address = 5 [deprecated = true]; ProfileShowcaseVisibility showcase_visibility = 6; uint32 order = 7; } @@ -110,7 +110,7 @@ message ProfileShowcaseVerifiedTokenPreference { message ProfileShowcaseUnverifiedTokenPreference { string contract_address = 1; uint64 chain_id = 2; - string community_id = 3; + string community_id = 3 [deprecated = true]; ProfileShowcaseVisibility showcase_visibility = 4; uint32 order = 5; } diff --git a/services/ext/api.go b/services/ext/api.go index 8dc788f6b..13fa5f854 100644 --- a/services/ext/api.go +++ b/services/ext/api.go @@ -1706,6 +1706,16 @@ func (api *PublicAPI) GetProfileShowcaseAccountsByAddress(address string) ([]*id return api.service.messenger.GetProfileShowcaseAccountsByAddress(address) } +// Get profile showcase max social link entries count +func (api *PublicAPI) GetProfileShowcaseSocialLinksLimit() (int, error) { + return api.service.messenger.GetProfileShowcaseSocialLinksLimit() +} + +// Get profile showcase max entries count (excluding social links) +func (api *PublicAPI) GetProfileShowcaseEntriesLimit() (int, error) { + return api.service.messenger.GetProfileShowcaseEntriesLimit() +} + // Returns response with AC notification when owner token is received func (api *PublicAPI) RegisterOwnerTokenReceivedNotification(communityID string) (*protocol.MessengerResponse, error) { return api.service.messenger.CreateResponseWithACNotification(communityID, protocol.ActivityCenterNotificationTypeOwnerTokenReceived, false, "")