status-go/protocol
Andrea Maria Piana 4b576a70ad
feat(pairing)!: Add fallback flow to pairing
feat(pairing)!: add fallback flow to pairing

This commit includes the following changes:

*Breaking change in connection string*

The local pairing code that was parsing the connection string had a few non-upgradable features:
- It was strictly checking the number of parameters, throwing an error if the number was different. This made it impossible to add parameters to it without breaking.
- It was strictly checking the version number. This made increasing the version number impossible as older client would just refuse to connect.

The code has been changed so that:
- Version is not used. Better not to use something than to use it wrongly, rarely version is needed if the protocol is correctly upgraded.
- Two parameters have been added, `installation-id` and `key-uid`. Those are needed for the fallback flow.

I have also removed version from the payload, since it wasn't used.

This means that we don't support v1 anymore. V2 parsing should be supported (a new might be able to parse a v2 client, but not the other way around). It is to be considered a complete breaking change. 2.30 -> 2.30 syncing only is supported, but going forward there's a clear strategy on how to update the protocol (append parameters, don't change existing one).

*Changed `MessengerResponse` to use internally a map of `installations` rather than an array (minor)*

Just moving towards maps as arrays tend to lead to subtle bugs.

*Moved pairing methods to messenger_pairing.go*

Just moved some methods

*Added 2 new methods for the fallback flow*

`FinishPairingThroughSeedPhraseProcess`
https://github.com/status-im/status-go/pull/5567/files#diff-1ad620b07fa3bd5fbc96c9f459d88829938a162bf1aaf41c61dea6e38b488d54R29

`EnableAndSyncInstallation`

https://github.com/status-im/status-go/pull/5567/files#diff-1ad620b07fa3bd5fbc96c9f459d88829938a162bf1aaf41c61dea6e38b488d54R18

*Flow for clients*

Client A1 is logged in
Client A2 is logged out

1) Client A1 shows a QR code
2) Client A2 scans a QR code
3) If connection fails on A2, the user will be prompted to enter a seed phrase.
4) If the generated account matches the `key-uid` from the QR code, A2 should call `FinishPairingThroughSeedPhraseProcess` with the installation id passed in the QR code. This will send installation information over waku. The user should be shown its own installation id and prompted to check the other device.
5) Client A1 will receive new installation data through waku, if they are still on the qr code page, they should show a popup to the user showing the received installation id, and a way to `Enable and Sync`, which should call the `EnableAndSyncInstallation` endpoint. This should finish the fallback syncing flow.

*Current issues*

Currently I haven't tested that all the data is synced after finishing the flow. I see that the two devices are paired correctly, but for example the `DisplayName` is not changed on the receiving device. I haven't had time to look into it further.
2024-07-25 19:31:03 +08:00
..
anonmetrics feat(metrics)_: add centralized metrics 2024-07-11 10:05:31 +01:00
audio
common fix(communities)_: validate if RawMessage from DB is valid before sending it 2024-07-23 19:54:39 +02:00
communities fix(logs)_: remove community private key logging in publishCommunityPrivilegedMemberSyncMessage 2024-07-19 16:50:40 +02:00
datasync Add basic peersyncing 2024-01-23 12:46:17 +00:00
discord feat(discord): Import single channel from discord (#4160) 2023-10-25 12:32:21 -04:00
encryption feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
ens fix: use proper migrations for protocol's test database 2023-10-03 15:11:58 +02:00
identity chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
internal/sqlite
migrations fix_: share all future addresses storage 2024-07-18 12:08:40 +03:00
peersyncing Extend peersyncing to sync 1-to-1 messages (#4962) 2024-05-14 12:20:13 +02:00
protobuf fix_: share all future addresses storage 2024-07-18 12:08:40 +03:00
pushnotificationclient feat(metrics)_: add centralized metrics 2024-07-11 10:05:31 +01:00
pushnotificationserver feat(metrics)_: add centralized metrics 2024-07-11 10:05:31 +01:00
requests feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
sqlite Add basic peersyncing 2024-01-23 12:46:17 +00:00
storenodes enable custom community storenodes (#4532) 2024-02-20 17:49:39 +02:00
subscription
transport refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
tt chore: introduce silent test logger config 2024-02-27 11:00:29 +01:00
urls feat: add parsing for new links format (#3665) 2023-07-04 17:48:52 +04:00
v1 Always set PubsubTopic in filters 2023-11-18 02:26:34 +02:00
verification fix: use proper migrations for protocol's test database 2023-10-03 15:11:58 +02:00
wakusync chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
zaputil
LICENSE
README.md
activity_center.go chore: fix ban/unban flow and delete all messages feature (#4743) 2024-02-22 11:25:13 +01:00
activity_center_persistence.go chore_: bump go to 1.20 (#5027) 2024-04-18 18:48:02 +02:00
activity_center_persistence_test.go only sync decisions/state of AC notifications (#3979) 2023-10-22 17:41:20 +08:00
chat.go bug_: fix resend type for private group messages (#5258) 2024-05-30 14:18:54 +02:00
chat_group_proxy.go
chat_test.go bug_: fix resend type for private group messages (#5258) 2024-05-30 14:18:54 +02:00
communities_events_eventual_consistency_test.go chore(communities)_: cover ERC721 based permissions reevaluation with tests 2024-06-07 23:46:20 +02:00
communities_events_owner_without_community_key_test.go chore(communities)_: cover ERC721 based permissions reevaluation with tests 2024-06-07 23:46:20 +02:00
communities_events_token_master_test.go chore(communities)_: cover ERC721 based permissions reevaluation with tests 2024-06-07 23:46:20 +02:00
communities_events_utils_test.go fix(communities)_: ensure community sync doesn't override joined state 2024-06-20 15:37:20 +02:00
communities_key_distributor.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
communities_messenger_admin_test.go chore(communities)_: cover ERC721 based permissions reevaluation with tests 2024-06-07 23:46:20 +02:00
communities_messenger_helpers_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
communities_messenger_shared_member_address_test.go test(communities)_: skip flaky communities test 2024-07-17 19:17:35 +02:00
communities_messenger_signers_test.go fix(communities)_: kick AC notification after control node device change (#5472) 2024-07-05 10:38:12 +02:00
communities_messenger_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
communities_messenger_token_permissions_test.go fix(community)_: fix pure readonly channels not respecting the right roles (#5513) 2024-07-15 13:53:20 -04:00
contact.go chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
contact_test.go
delete_message.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
edit_message.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
emoji_reaction.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
errors.go fix(archives): Skip importing the archives for community when user not a member (#4006) 2023-09-15 10:42:28 +03:00
group_chat_invitation.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
group_chat_system_messages.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
identity_images.go feat: Profile showcase data sharing (#4209) 2023-11-09 22:59:01 +04:00
linkpreview_unfurler.go feature: Unfurl status links (#4033) 2023-10-13 13:25:34 +01:00
linkpreview_unfurler_image.go fix(ImageUnfurler): set title for image links (#4215) 2023-10-26 17:52:52 +01:00
linkpreview_unfurler_oembed.go feature: Unfurl status links (#4033) 2023-10-13 13:25:34 +01:00
linkpreview_unfurler_opengraph.go Add favicons to external link previews (#4788) 2024-03-12 22:47:51 +02:00
linkpreview_unfurler_status.go fix(unfurl)_: The application crashes when generating status user profile link preview 2024-07-01 21:57:18 +07:00
local_notifications.go feat: new deeplink status-im->status-app (#4198) 2023-11-02 13:56:06 +08:00
message_builder.go
message_persistence.go fix(search)_: search now works with Discord import and bridged messages (#5489) 2024-07-05 13:33:14 -04:00
message_validator.go fix: validate display name on account creation (#4994) 2024-03-28 16:57:59 +01:00
message_validator_test.go feat(BridgeMessage): Add new type of chat message content: BridgeMessage 2024-01-30 12:14:54 +01:00
messages_iterator.go feat: introduce `MessagesIterator` 2024-02-09 16:02:17 +01:00
messenger.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_activity_center.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_activity_center_test.go chore(community)_: serialise community jsons with image URLs 2024-07-11 18:55:24 +07:00
messenger_auto_message.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
messenger_backup.go fix_: fix deleted communities query (#5232) 2024-05-27 10:09:15 -07:00
messenger_backup_handler.go chore(communities)_: request missing channels' encryption keys in a loop 2024-07-16 16:44:50 +02:00
messenger_backup_test.go fix(messenger)_: make sure display name is legit before sending (#5496) 2024-07-09 15:22:59 -04:00
messenger_base_test.go fix: clear waku envelopes cache when deleting a chat (#4621) 2024-01-30 13:43:34 +00:00
messenger_bookmarks.go
messenger_bridge_message_test.go fix(search)_: search now works with Discord import and bridged messages (#5489) 2024-07-05 13:33:14 -04:00
messenger_browsers.go
messenger_browsers_test.go fix: close messenger's databases in tests 2023-11-28 20:59:25 +01:00
messenger_builder_test.go feat_: batch all telemetry data and send request every 10 seconds (#5251) 2024-06-13 15:31:09 -07:00
messenger_chat_context_test.go Fix contact details large image is always empty (#4864) 2024-03-06 09:25:19 -08:00
messenger_chats.go add image to chat preview (#4888) 2024-04-09 17:39:14 +02:00
messenger_collapsed_community_categories.go
messenger_collapsed_community_categories_test.go
messenger_communities.go fix(communities)_: validate if RawMessage from DB is valid before sending it 2024-07-23 19:54:39 +02:00
messenger_communities_import_discord.go chore(no-torrent)_: Renamed Torrent to Archive 2024-06-07 13:44:12 +01:00
messenger_communities_sharding_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
messenger_community_for_mobile_testing.go feat: New field in TokenCriteria proto 2024-02-27 16:25:26 +01:00
messenger_community_for_mobile_testing_test.go fix: sometimes channels do not randomly appear in test community after its creation (#4669) 2024-02-23 10:16:51 +08:00
messenger_community_metrics.go chore: remove boilerplate check of `communities.GetByID` clients 2024-01-10 18:58:17 +01:00
messenger_community_metrics_test.go refactor: update community access enum naming 2023-10-25 17:34:37 +02:00
messenger_community_shard.go fix: archive decryption fail (#5076) 2024-05-27 13:49:09 +01:00
messenger_community_storenodes.go enable custom community storenodes (#4532) 2024-02-20 17:49:39 +02:00
messenger_config.go feat_: call telemetry upon error pushing envelope (#5430) 2024-06-28 13:24:04 +03:00
messenger_config_test.go feat_: force members reevaluation (#5139) 2024-05-09 22:59:51 +03:00
messenger_contact_requests_test.go feat: add contact customization color (#4869) 2024-04-03 22:49:57 +08:00
messenger_contact_update_test.go feat: add contact customization color (#4869) 2024-04-03 22:49:57 +08:00
messenger_contact_verification.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_contact_verification_test.go fix_: Add contact to removeTrustStatus response (#5058) 2024-04-18 19:28:44 +04:00
messenger_contacts.go fix_:sync contact request decision (#5130) 2024-05-15 08:01:47 +08:00
messenger_contacts_test.go chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
messenger_curated_communities.go chore: disable curated communities loop in tests (#4894) 2024-03-09 09:42:06 +00:00
messenger_delete_message_for_everyone_test.go feat(messages)_: enable deleting bridge messages as admin (#5330) 2024-06-14 10:51:56 -04:00
messenger_delete_message_for_me_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_delete_messages_test.go feat: get and delete community member messages API (#4932) 2024-03-19 20:44:49 +01:00
messenger_discv5.go
messenger_edit_message_test.go fix: handle bridge message edits 2024-04-07 23:24:46 +02:00
messenger_emoji_reactions.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_emoji_test.go fix: prevent messenger being started twice 2024-02-27 11:00:29 +01:00
messenger_ens.go
messenger_group_chat.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_group_chat_test.go feat: add contact customization color (#4869) 2024-04-03 22:49:57 +08:00
messenger_handler.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
messenger_handler_test.go fix: close messenger's databases in tests 2023-11-28 20:59:25 +01:00
messenger_handlers.go feat_: implement connector service (#5375) (#5403) 2024-06-24 07:29:40 -07:00
messenger_identity.go perf(login)!: Set-up messenger filters outside login flow (#5229) 2024-06-10 12:02:42 -03:00
messenger_identity_display_name_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_identity_image_test.go Fix contact details large image is always empty (#4864) 2024-03-06 09:25:19 -08:00
messenger_installations_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_keycard.go chore: synchronization improvements applied to keycards 2023-07-11 15:14:49 +02:00
messenger_linkpreview.go feat: new `GetTextURLsToUnfurl` endpoint which extends GetURLs (#4294) 2023-11-17 13:32:37 +00:00
messenger_linkpreview_test.go Add favicons to external link previews (#4788) 2024-03-12 22:47:51 +02:00
messenger_mailserver.go Reset MVDS epoch after peer is online (#5349) 2024-06-27 09:54:31 +08:00
messenger_mailserver_cycle.go chore_: small mailserver async fetching refactor 2024-07-16 10:53:42 +03:00
messenger_mailserver_processMailserverBatch_test.go chore: store node requests manager (#4446) 2023-12-15 19:50:12 +00:00
messenger_maps.go fix: don't store ourselves as a contact (#3627) 2023-07-12 12:46:56 +03:00
messenger_mention.go [mention] fix relate issues to input segments (#3766) 2023-07-25 16:47:24 +08:00
messenger_mention_test.go [mention] fix relate issues to input segments (#3766) 2023-07-25 16:47:24 +08:00
messenger_messages.go feat(messages)_: enable deleting bridge messages as admin (#5330) 2024-06-14 10:51:56 -04:00
messenger_messages_order_controller_test.go feat: introduce `MessagesOrderController` 2024-02-09 16:02:17 +01:00
messenger_messages_tracking_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
messenger_mute_test.go fx: deprecate profile and timeline chats (#3809) 2023-08-03 17:16:11 +03:00
messenger_offline_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
messenger_pairing.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_pairing_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_peers.go feat_: `wakuext_relayPeersByTopic` 2024-07-11 12:32:31 +01:00
messenger_peersyncing.go feat_: hash based query for outgoing messages. (#5217) 2024-06-11 15:45:01 +08:00
messenger_peersyncing_test.go Extend peersyncing to sync 1-to-1 messages (#4962) 2024-05-14 12:20:13 +02:00
messenger_pin_message_test.go fix: prevent messenger being started twice 2024-02-27 11:00:29 +01:00
messenger_pin_messages.go bug_: fix resend type for private group messages (#5258) 2024-05-30 14:18:54 +02:00
messenger_profile_showcase.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_profile_showcase_proto_conversions.go Feat: Simplify profile showcase preferences (#4854) 2024-03-08 17:20:23 +01:00
messenger_profile_showcase_test.go chore(communities)_: cover ERC721 based permissions reevaluation with tests 2024-06-07 23:46:20 +02:00
messenger_raw_message_resend.go fix(communities)_: validate if RawMessage from DB is valid before sending it 2024-07-23 19:54:39 +02:00
messenger_remove_message_test.go chore(community)_: serialise community jsons with image URLs 2024-07-11 18:55:24 +07:00
messenger_reply_test.go Use base test messenger suite 2023-07-13 14:01:55 +01:00
messenger_response.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_response_test.go
messenger_saved_address.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_send_images_album_test.go fix: prevent messenger being started twice 2024-02-27 11:00:29 +01:00
messenger_settings.go feat(waku)_: allow client to set store confirmations 2024-07-15 09:37:57 +01:00
messenger_settings_test.go feat: add contact customization color (#4869) 2024-04-03 22:49:57 +08:00
messenger_share_image_test.go fix: prevent messenger being started twice 2024-02-27 11:00:29 +01:00
messenger_share_urls.go chore: remove boilerplate check of `communities.GetByID` clients 2024-01-10 18:58:17 +01:00
messenger_share_urls_test.go Fix/community tags indices (#4992) 2024-03-26 20:02:12 +00:00
messenger_status_updates.go Reset MVDS epoch after peer is online (#5349) 2024-06-27 09:54:31 +08:00
messenger_status_updates_test.go fix: close messenger's databases in tests 2023-11-28 20:59:25 +01:00
messenger_store_node_request_manager.go fix(unfurl)_: The application crashes when generating status user profile link preview 2024-07-01 21:57:18 +07:00
messenger_store_node_request_manager_config.go fix: remove store node envelopes ordering hotfix (#4622) 2024-01-27 13:02:12 +00:00
messenger_storenode_comunity_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
messenger_storenode_request_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
messenger_switcher_cards.go
messenger_sync_activity_center_test.go New way of sharing communities (#4341) 2023-12-15 13:55:32 +02:00
messenger_sync_bookmark_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_sync_chat_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_sync_clear_history_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_sync_contact_request_decision_test.go Fix/duplicate accept cr messages (#4367) 2023-12-05 12:22:20 +08:00
messenger_sync_customization_color_test.go fix: close messenger's databases in tests 2023-11-28 20:59:25 +01:00
messenger_sync_keycard_change_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_sync_keycards_state_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_sync_profile_picture_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_sync_raw_messages.go fix(communities)_: ensure community sync doesn't override joined state 2024-06-20 15:37:20 +02:00
messenger_sync_saved_addresses_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_sync_settings.go fix (@status-go/stickers) Stickers still show in the recent list after being uninstalled (#4474) 2023-12-21 10:05:30 -08:00
messenger_sync_settings_test.go fix: clear waku envelopes cache when deleting a chat (#4621) 2024-01-30 13:43:34 +00:00
messenger_sync_verification_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_sync_wallets_test.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_test.go chore_: small mailserver async fetching refactor 2024-07-16 10:53:42 +03:00
messenger_testing_utils.go feat(pairing)!: Add fallback flow to pairing 2024-07-25 19:31:03 +08:00
messenger_unread_test.go fix(CommunityMember)_: update LastUpdateClock 2024-07-09 18:19:40 +02:00
messenger_validate_requests_test.go fix(config)_: add API calls to set new waku node and max backups 2024-06-04 22:52:18 +07:00
messenger_waku_wrapper_test.go feat: introduce `testWakuWrapper` and `testPublicWakuAPIWrapper` 2024-02-09 16:02:17 +01:00
messenger_wallet.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_walletconnect.go
messenger_walletconnect_test.go Use base test messenger suite 2023-07-13 14:01:55 +01:00
node_config_persistence_test.go fix(config)_: add API calls to set new waku node and max backups 2024-06-04 22:52:18 +07:00
persistence.go chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
persistence_collapsed_community_categories.go Feat/sync activity center notification (#3535) 2023-06-10 10:00:17 +08:00
persistence_metrics.go feat: Collecting community messages count metrics (#3802) 2023-08-01 17:08:57 +04:00
persistence_profile_showcase.go feat: Add an expiration and periodical publishing for community grants (#5024) 2024-04-17 16:53:51 +02:00
persistence_profile_showcase_test.go Feat: Simplify profile showcase preferences (#4854) 2024-03-08 17:20:23 +01:00
persistence_quoted_message_test.go chore(community)_: serialise community jsons with image URLs 2024-07-11 18:55:24 +07:00
persistence_test.go chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
push_notification_test.go fix: prevent messenger being started twice 2024-02-27 11:00:29 +01:00
status_update.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
switcher_card.go
transaction_validator.go
transaction_validator_test.go
waku_builder_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30

README.md

status-go/protocol

This is an implementation of the secure transport and payloads which are a part of the Status Client specification.

This implementation uses SQLite and SQLCipher for persistent storage.

The payloads are encoded using protocol-buffers.

Content

  • messenger.go is the main file which exports Messenger struct. This is a public API to interact with this implementation of the Status Chat Protocol.
  • protobuf/ contains protobuf files implementing payloads described in the Payloads spec.
  • encryption/ implements the Secure Transport spec.
  • transport/ connects the Status Chat Protocol with a wire-protocol which in our case is either Whisper or Waku.
  • datasync/ is an adapter for MVDS.
  • applicationmetadata/ is an outer layer wrapping a payload with an app-specific metadata like a signature.
  • identity/ implements details related to creating a three-word name and identicon.
  • migrations/ contains implementation specific migrations for the sqlite database which is used by Messenger as a persistent data store.

History

Originally this package was a dedicated repo called status-protocol-go and was migrated into status-go. The new status-go/protocol package maintained its own dependencies until sub modules were removed and the root go.mod file managed all dependencies for the entire status-go repo.