status-go/protocol
Icaro Motta 6fa8c11382
URL unfurling (initial implementation) (#3471)
This is the initial implementation for the new URL unfurling requirements. The
most important one is that only the message sender will pay the privacy cost for
unfurling and extracting metadata from websites. Once the message is sent, the
unfurled data will be stored at the protocol level and receivers will just
profit and happily decode the metadata to render it.

Further development of this URL unfurling capability will be mostly guided by
issues created on clients. For the moment in status-mobile:
https://github.com/status-im/status-mobile/labels/url-preview

- https://github.com/status-im/status-mobile/issues/15918
- https://github.com/status-im/status-mobile/issues/15917
- https://github.com/status-im/status-mobile/issues/15910
- https://github.com/status-im/status-mobile/issues/15909
- https://github.com/status-im/status-mobile/issues/15908
- https://github.com/status-im/status-mobile/issues/15906
- https://github.com/status-im/status-mobile/issues/15905

### Terminology

In the code, I've tried to stick to the word "unfurl URL" to really mean the
process of extracting metadata from a website, sort of lower level. I use "link
preview" to mean a higher level structure which is enriched by unfurled data.
"link preview" is also how designers refer to it.

### User flows

1. Carol needs to see link previews while typing in the chat input field. Notice
   from the diagram nothing is persisted and that status-go endpoints are
   essentially stateless.

```
#+begin_src plantuml :results verbatim
  Client->>Server: Call wakuext_getTextURLs
  Server-->>Client: Normalized URLs
  Client->>Client: Render cached unfurled URLs
  Client->>Server: Unfurl non-cached URLs.\nCall wakuext_unfurlURLs
  Server->>Website: Fetch metadata
  Website-->>Server: Metadata (thumbnail URL, title, etc)
  Server->>Website: Fetch thumbnail
  Server->>Website: Fetch favicon
  Website-->>Server: Favicon bytes
  Website-->>Server: Thumbnail bytes
  Server->>Server: Decode & process images
  Server-->>Client: Unfurled data (thumbnail data URI, etc)
#+end_src
```

```
     ,------.                                 ,------.                             ,-------.
     |Client|                                 |Server|                             |Website|
     `--+---'                                 `--+---'                             `---+---'
        |        Call wakuext_getTextURLs        |                                     |
        | --------------------------------------->                                     |
        |                                        |                                     |
        |             Normalized URLs            |                                     |
        | <- - - - - - - - - - - - - - - - - - - -                                     |
        |                                        |                                     |
        |----.                                   |                                     |
        |    | Render cached unfurled URLs       |                                     |
        |<---'                                   |                                     |
        |                                        |                                     |
        |         Unfurl non-cached URLs.        |                                     |
        |         Call wakuext_unfurlURLs        |                                     |
        | --------------------------------------->                                     |
        |                                        |                                     |
        |                                        |            Fetch metadata           |
        |                                        | ------------------------------------>
        |                                        |                                     |
        |                                        | Metadata (thumbnail URL, title, etc)|
        |                                        | <- - - - - - - - - - - - - - - - - -
        |                                        |                                     |
        |                                        |           Fetch thumbnail           |
        |                                        | ------------------------------------>
        |                                        |                                     |
        |                                        |            Fetch favicon            |
        |                                        | ------------------------------------>
        |                                        |                                     |
        |                                        |            Favicon bytes            |
        |                                        | <- - - - - - - - - - - - - - - - - -
        |                                        |                                     |
        |                                        |           Thumbnail bytes           |
        |                                        | <- - - - - - - - - - - - - - - - - -
        |                                        |                                     |
        |                                        |----.                                |
        |                                        |    | Decode & process images        |
        |                                        |<---'                                |
        |                                        |                                     |
        | Unfurled data (thumbnail data URI, etc)|                                     |
        | <- - - - - - - - - - - - - - - - - - - -                                     |
     ,--+---.                                 ,--+---.                             ,---+---.
     |Client|                                 |Server|                             |Website|
     `------'                                 `------'                             `-------'
```

2. Carol sends the text message with link previews in the RPC request
   wakuext_sendChatMessages. status-go assumes the link previews are good
   because it can't and shouldn't attempt to re-unfurl them.

```
#+begin_src plantuml :results verbatim
  Client->>Server: Call wakuext_sendChatMessages
  Server->>Server: Transform link previews to\nbe proto-marshalled
  Server->DB: Write link previews serialized as JSON
  Server-->>Client: Updated message response
#+end_src
```

```
     ,------.                       ,------.                                  ,--.
     |Client|                       |Server|                                  |DB|
     `--+---'                       `--+---'                                  `+-'
        | Call wakuext_sendChatMessages|                                       |
        | ----------------------------->                                       |
        |                              |                                       |
        |                              |----.                                  |
        |                              |    | Transform link previews to       |
        |                              |<---' be proto-marshalled              |
        |                              |                                       |
        |                              |                                       |
        |                              | Write link previews serialized as JSON|
        |                              | -------------------------------------->
        |                              |                                       |
        |   Updated message response   |                                       |
        | <- - - - - - - - - - - - - - -                                       |
     ,--+---.                       ,--+---.                                  ,+-.
     |Client|                       |Server|                                  |DB|
     `------'                       `------'                                  `--'
```

3. The message was sent over waku and persisted locally in Carol's device. She
   should now see the link previews in the chat history. There can be many link
   previews shared by other chat members, therefore it is important to serve the
   assets via the media server to avoid overloading the ReactNative bridge with
   lots of big JSON payloads containing base64 encoded data URIs (maybe this
   concern is meaningless for desktop). When a client is rendering messages with
   link previews, they will have the field linkPreviews, and the thumbnail URL
   will point to the local media server.

```
 #+begin_src plantuml :results verbatim
   Client->>Server: GET /link-preview/thumbnail (media server)
   Server->>DB: Read from user_messages.unfurled_links
   Server->Server: Unmarshal JSON
   Server-->>Client: HTTP Content-Type: image/jpeg/etc
 #+end_src
```

```
     ,------.                                    ,------.                                  ,--.
     |Client|                                    |Server|                                  |DB|
     `--+---'                                    `--+---'                                  `+-'
        | GET /link-preview/thumbnail (media server)|                                       |
        | ------------------------------------------>                                       |
        |                                           |                                       |
        |                                           | Read from user_messages.unfurled_links|
        |                                           | -------------------------------------->
        |                                           |                                       |
        |                                           |----.                                  |
        |                                           |    | Unmarshal JSON                   |
        |                                           |<---'                                  |
        |                                           |                                       |
        |     HTTP Content-Type: image/jpeg/etc     |                                       |
        | <- - - - - - - - - - - - - - - - - - - - -                                        |
     ,--+---.                                    ,--+---.                                  ,+-.
     |Client|                                    |Server|                                  |DB|
     `------'                                    `------'                                  `--'
```

### Some limitations of the current implementation

The following points will become separate issues in status-go that I'll work on
over the next couple weeks. In no order of importance:

- Improve how multiple links are fetched; retries on failure and testing how
  unfurling behaves around the timeout limits (deterministically, not by making
  real HTTP calls as I did). https://github.com/status-im/status-go/issues/3498
- Unfurl favicons and store them in the protobuf too.
- For this PR, I added unfurling support only for websites with OpenGraph
  https://ogp.me/ meta tags. Other unfurlers will be implemented on demand. The
  next one will probably be for oEmbed https://oembed.com/, the protocol
  supported by YouTube, for example.
- Resize and/or compress thumbnails (and favicons). Often times, thumbnails are
  huge for the purposes of link previews. There is already support for
  compressing JPEGs in status-go, but I prefer to work with compression in a
  separate PR because I'd like to also solve the problem for PNGs (probably
  convert them to JPEGs, plus compress them). This would be a safe choice for
  thumbnails, favicons not so much because transparency is desirable.
- Editing messages is not yet supported.
- I haven't coded any artificial limit on the number of previews or on the size
  of the thumbnail payload. This will be done in a separate issue. I have heard
  the ideal solution may be to split messages into smaller chunks of ~125 KiB
  because of libp2p, but that might be too complicated at this stage of the
  product (?).
- Link preview deletion.
- For the moment, OpenGraph metadata is extracted by requesting data for the
  English language (and fallback to whatever is available). In the future, we'll
  want to unfurl by respecting the user's local device language. Some websites,
  like GoDaddy, are already localized based on the device's IP, but many aren't.
- The website's description text should be limited by a certain number of
  characters, especially because it's outside our control. Exactly how much has
  not been decided yet, so it'll be done separately.
- URL normalization can be tricky, so I implemented only the basics to help with
  caching. For example, the url https://status.im and HTTPS://status.im are
  considered identical. Also, a URL is considered valid for unfurling if its TLD
  exists according to publicsuffix.EffectiveTLDPlusOne. This was essential,
  otherwise the default Go url.Parse approach would consider many invalid URLs
  valid, and thus the server would waste resources trying to unfurl the
  unfurleable.

### Other requirements

- If the message is edited, the link previews should reflect the edited text,
  not the original one. This has been aligned with the design team as well.
- If the website's thumbnail or the favicon can't be fetched, just ignore them.
  The only mandatory piece of metadata is the website's title and URL.
- Link previews in clients should be generated in near real-time, that is, as
  the user types, previews are updated. In mobile this performs very well, and
  it's what other clients like WhatsApp, Telegram, and Facebook do.

### Decisions

- While the user typing in the input field, the client is constantly (debounced)
  asking status-go to parse the text and extract normalized URLs and then the
  client checks if they're already in its in-memory cache. If they are, no RPC
  call is made. I chose this approach to achieve the best possible performance
  in mobile and avoid the whole RPC overhead, since the chat experience is
  already not smooth enough. The mobile client uses URLs as cache keys in a
  hashmap, i.e. if the key is present, it means the preview is readily available
  (naive, but good enough for now). This decision also gave me more flexibility
  to find the best UX at this stage of the feature.
- Due to the requirement that users should be able to see independent loading
  indicators for each link preview, when status-go can't unfurl a URL, it
  doesn't return it in the response.
- As an initial implementation, I added the BLOB column unfurled_links to the
  user_messages table. The preview data is then serialized as JSON before being
  stored in this column. I felt that creating a separate table and the related
  code for this initial PR would be inconvenient. Is that reasonable to you?
  Once things stabilize I can create a proper table if we want to avoid this
  kind of solution with serialized columns.
2023-05-18 15:43:06 -03:00
..
anonmetrics URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
audio Add audio messages 2020-07-27 17:14:50 +02:00
common URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
communities fix(communities/manager): use sync.map to fix concurrent map writes err (#3445) 2023-05-05 14:13:55 -04:00
datasync Rename MessageProcessor to MessageSender (#2264) 2021-06-23 17:13:48 +03:00
discord refactor(import-tool): process import data in chunks 2023-01-30 12:23:56 +01:00
encryption URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
ens feat: make kdf iterations configurable when creating a multiaccount (#2796) 2022-09-27 16:27:20 -04:00
identity feat:support backup/sync social settings (#3407) 2023-04-20 06:59:09 +08:00
internal/sqlite Sync Settings (#2478) 2022-03-23 18:47:00 +00:00
linkpreview URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
migrations URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
protobuf URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
pushnotificationclient URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
pushnotificationserver URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
requests Fix/mobile issue 15899 : error when trying login under updated password (#3493) 2023-05-18 22:00:55 +08:00
sqlite test: use `T.TempDir` to create temporary test directory (#2746) 2023-04-26 21:39:51 +01:00
subscription Move to monorepo structure (#1684) 2019-11-21 17:19:22 +01:00
transport URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
tt Tests and linting 2021-09-30 13:02:41 +01:00
urls Allow/Add YouTube and Twitter mobile link previews (#3314) 2023-03-30 15:27:12 +02:00
v1 feat:support backup/sync ens name (#3415) 2023-04-26 23:37:18 +08:00
verification feat(ActivityCenter): Add message for canceling contact requests (#2992) 2022-12-14 12:27:02 +04:00
wakusync chore: `keypairs` package which actually refers to keycards is renamed to `keycards` package 2023-05-10 09:27:51 +02:00
zaputil Move to monorepo structure (#1684) 2019-11-21 17:19:22 +01:00
LICENSE Move to monorepo structure (#1684) 2019-11-21 17:19:22 +01:00
README.md Added basic history of the protocol package (#1984) 2020-06-04 11:23:09 +01:00
activity_center.go Add muted_till param for chats (#3258) 2023-04-16 17:06:00 +02:00
activity_center_persistence.go feat: refactor activity center endpoints (#3237) 2023-03-03 18:31:48 +04:00
activity_center_persistence_test.go feat: refactor activity center endpoints (#3237) 2023-03-03 18:31:48 +04:00
chat.go More fields added to ChatPreview. LastMessage now can be a deleted message (#3397) 2023-05-08 18:02:54 +01:00
chat_group_proxy.go Clean up protocol package (#1890) 2020-03-09 07:19:23 +01:00
chat_test.go URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
communities_messenger_test.go Community encryption should automatically be enabled/disabled depending on community permissions (closed/open) 2023-05-05 17:32:39 +02:00
contact.go fix: marshal dismissed contact request state properly (#3482) 2023-05-15 11:29:33 +04:00
contact_test.go Compute emojiHash on-the-fly 2023-03-06 13:22:40 +02:00
delete_message.go sync message for `delete for me` should not be sent to someone else (#3462) 2023-05-09 20:54:56 +08:00
edit_message.go address feedback 2021-06-29 13:15:15 +02:00
emoji_reaction.go Return compressed key with emojis (#3410) 2023-05-10 13:45:42 +03:00
errors.go Add ClearHistory & DeactivateChat methods 2021-01-11 13:36:05 +01:00
group_chat_invitation.go group chat invitation 2020-09-07 12:15:58 +02:00
group_chat_system_messages.go feat: Handle image in group chat 2022-09-01 12:19:01 +02:00
identity_images.go Split clock values for contacts 2023-01-31 15:43:00 +00:00
local_notifications.go Add primary & secondary names 2023-02-27 15:13:43 +00:00
message_builder.go add PinMessage and PinnedMessage (#2180) 2021-05-14 23:22:50 +02:00
message_persistence.go URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
message_validator.go Fix some issues with pinned messages 2023-04-25 16:02:48 +01:00
message_validator_test.go Fix protobuf ImageType change 2020-12-17 14:10:00 +01:00
messenger.go URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
messenger_activity_center.go feat: refactor activity center endpoints (#3237) 2023-03-03 18:31:48 +04:00
messenger_activity_center_test.go Add spiff workflow cmd 2023-03-16 14:31:34 +00:00
messenger_auto_message.go Add read/unread messenger functions for activity center 2022-10-26 17:19:44 +01:00
messenger_backup.go feat:support backup/sync ens name (#3415) 2023-04-26 23:37:18 +08:00
messenger_backup_handler.go feat:support backup/sync ens name (#3415) 2023-04-26 23:37:18 +08:00
messenger_backup_test.go chore: `keypairs` package which actually refers to keycards is renamed to `keycards` package 2023-05-10 09:27:51 +02:00
messenger_base_test.go Add methods to sign and recover messages/signatures to AccountManager 2023-03-16 12:25:06 +01:00
messenger_bookmarks.go Sync all devices after initial pairing (#3047) 2023-01-06 20:21:14 +08:00
messenger_browsers.go Issue 13813 -- Use messenger ns for browser CRUD (#2801) 2022-08-24 16:05:35 +02:00
messenger_browsers_test.go Issue 13813 -- Use messenger ns for browser CRUD (#2801) 2022-08-24 16:05:35 +02:00
messenger_chats.go fix(unviewed): fix edge case where unviewed count would be -1 (#3491) (#3496) 2023-05-16 12:11:52 -04:00
messenger_collapsed_community_categories.go Add collapsed community categories 2023-03-14 17:13:21 +00:00
messenger_collapsed_community_categories_test.go Fix collapsed tests 2023-03-16 13:40:20 +00:00
messenger_communities.go fix: covert curated communities pubkeys properly 2023-05-08 10:58:36 +02:00
messenger_config.go feat: sync and backup wallet accounts 2023-04-21 16:35:24 +02:00
messenger_contact_requests_test.go Test: add TestBobSendsContactRequestAfterDecliningOneFromAlice test case (#3468) 2023-05-10 12:01:26 +04:00
messenger_contact_update_test.go Add spiff workflow cmd 2023-03-16 14:31:34 +00:00
messenger_contact_verification.go Add primary & secondary names 2023-02-27 15:13:43 +00:00
messenger_contact_verification_test.go Unifying the endpoints for contact flows (#3379) 2023-04-25 15:27:15 +04:00
messenger_contacts.go Unifying the endpoints for contact flows (#3379) 2023-04-25 15:27:15 +04:00
messenger_delete_message_for_everyone_test.go fix(activity_center): Add remove activity center notifications array to message response (#3277) 2023-03-16 21:41:53 +03:00
messenger_delete_message_for_me_test.go sync message for `delete for me` should not be sent to someone else (#3462) 2023-05-09 20:54:56 +08:00
messenger_delete_message_test.go fix(unviewed): fix edge case where unviewed count would be -1 (#3491) (#3496) 2023-05-16 12:11:52 -04:00
messenger_discv5.go feat: Add DiscV5 to Waku2 (#2434) 2021-11-22 09:40:14 -04:00
messenger_edit_message_test.go fix(mentions): deleting or editing a mention should remove the mention (#3421) 2023-04-27 10:22:26 -04:00
messenger_emoji_test.go Return compressed key with emojis (#3410) 2023-05-10 13:45:42 +03:00
messenger_ens.go Request/Decline access to communities 2021-02-26 15:35:43 +01:00
messenger_group_chat.go Add spiff workflow cmd 2023-03-16 14:31:34 +00:00
messenger_group_chat_test.go feat: allow group admin to delete others message (#3259) 2023-03-07 22:38:09 +08:00
messenger_handler.go fix(unviewed): fix edge case where unviewed count would be -1 (#3491) (#3496) 2023-05-16 12:11:52 -04:00
messenger_handler_test.go Split clock values for contacts 2023-01-31 15:43:00 +00:00
messenger_identity.go feat:support backup/sync social settings (#3407) 2023-04-20 06:59:09 +08:00
messenger_identity_image_test.go Add spiff workflow cmd 2023-03-16 14:31:34 +00:00
messenger_installations_test.go Fix installation test 2023-05-05 12:41:28 +01:00
messenger_keycard.go chore: `keypairs` package which actually refers to keycards is renamed to `keycards` package 2023-05-10 09:27:51 +02:00
messenger_mailserver.go refactor: improve mailserver batch handling 2023-05-02 07:27:57 -04:00
messenger_mailserver_cycle.go Query only once mailservers per cycle 2023-05-05 16:49:06 +01:00
messenger_mailserver_processMailserverBatch_test.go test: processMailserverBatch 2023-04-30 10:04:04 -04:00
messenger_maps.go Tests and linting 2021-09-30 13:02:41 +01:00
messenger_mention.go fix: Suggested list of mentions does not appear initially when '@' is typed in the editing message composer (#3484) 2023-05-15 20:15:10 +08:00
messenger_mention_test.go fix: Suggested list of mentions does not appear initially when '@' is typed in the editing message composer (#3484) 2023-05-15 20:15:10 +08:00
messenger_messages.go Feat/sync local deleted message (#3476) 2023-05-12 16:31:34 +08:00
messenger_mute_test.go Add muted_till param for chats (#3258) 2023-04-16 17:06:00 +02:00
messenger_peers.go chore: upgrade go-waku to v0.5 (#3213) 2023-02-22 17:58:17 -04:00
messenger_pin_message_test.go fix(Messenger): Count SystemMessagePinnedMessage as unviewed (#3449) 2023-05-05 18:26:19 +03:00
messenger_pin_messages.go Fix some issues with pinned messages 2023-04-25 16:02:48 +01:00
messenger_reply_test.go fix(reply-test): fix reply test because msgs could come out of order 2023-01-11 16:24:42 -05:00
messenger_response.go chore: `keypairs` package which actually refers to keycards is renamed to `keycards` package 2023-05-10 09:27:51 +02:00
messenger_response_test.go Fix duplicated notifications on receiving contact update 2023-02-14 09:22:37 +00:00
messenger_saved_address.go feat: Update saved addresses DB to store ENS, isTest flag and chains (#3183) 2023-03-06 16:26:46 +03:00
messenger_send_images_album_test.go feat(edit-message): Edit image messages (#3393) 2023-04-26 14:10:17 +03:00
messenger_share_image_test.go Fix image fields (#3121) 2023-02-02 12:00:49 +04:00
messenger_status_updates.go Upgrade linter to 1.50.0 2023-01-13 17:52:03 +00:00
messenger_status_updates_test.go Timeout automatic status updates (#2757) 2022-08-03 04:38:01 +05:30
messenger_switcher_cards.go Persist switcher cards (#3049) 2023-01-05 21:41:57 +05:30
messenger_sync_bookmark_test.go support local pairing after logged in as receiver; pair installation;(#3202) 2023-02-28 20:32:45 +08:00
messenger_sync_chat_test.go support local pairing after logged in as receiver; pair installation;(#3202) 2023-02-28 20:32:45 +08:00
messenger_sync_clear_history_test.go support local pairing after logged in as receiver; pair installation;(#3202) 2023-02-28 20:32:45 +08:00
messenger_sync_keycard_change_test.go chore: `keypairs` package which actually refers to keycards is renamed to `keycards` package 2023-05-10 09:27:51 +02:00
messenger_sync_keycards_state_test.go chore: `keypairs` package which actually refers to keycards is renamed to `keycards` package 2023-05-10 09:27:51 +02:00
messenger_sync_profile_picture_test.go support local pairing after logged in as receiver; pair installation;(#3202) 2023-02-28 20:32:45 +08:00
messenger_sync_raw_messages.go Feat/sync local deleted message (#3476) 2023-05-12 16:31:34 +08:00
messenger_sync_saved_addresses_test.go feat: Update saved addresses DB to store ENS, isTest flag and chains (#3183) 2023-03-06 16:26:46 +03:00
messenger_sync_settings.go feat: backup display name improvements 2023-03-31 16:20:50 +02:00
messenger_sync_settings_test.go chore: unused `latest_derived_path` removed from `settings` table 2023-04-21 16:35:24 +02:00
messenger_sync_verification_test.go support local pairing after logged in as receiver; pair installation;(#3202) 2023-02-28 20:32:45 +08:00
messenger_sync_wallets_test.go fix: `SaveAccounts` endpoint changed to `SaveAccount` which requires a single account to be provided instead of array of accounts 2023-04-21 16:35:24 +02:00
messenger_test.go URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
messenger_walletconnect.go Implement wallet connect session CRUD API 2022-08-19 12:32:00 +01:00
messenger_walletconnect_test.go Implement wallet connect session CRUD API 2022-08-19 12:32:00 +01:00
persistence.go fix(unviewed): fix edge case where unviewed count would be -1 (#3491) (#3496) 2023-05-16 12:11:52 -04:00
persistence_collapsed_community_categories.go Fix collapsed tests 2023-03-16 13:40:20 +00:00
persistence_test.go URL unfurling (initial implementation) (#3471) 2023-05-18 15:43:06 -03:00
push_notification_test.go Add spiff workflow cmd 2023-03-16 14:31:34 +00:00
status_update.go feat: user status (#2276) 2021-07-22 13:41:49 -04:00
switcher_card.go Persist switcher cards (#3049) 2023-01-05 21:41:57 +05:30
transaction_validator.go Move message to common namespace 2020-09-09 21:22:12 +02:00
transaction_validator_test.go Move message to common namespace 2020-09-09 21:22:12 +02:00

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.