diff --git a/go/protocol/chat1/blocking.go b/go/protocol/chat1/blocking.go index a3089766af1e..aa9e8ef94e8b 100644 --- a/go/protocol/chat1/blocking.go +++ b/go/protocol/chat1/blocking.go @@ -5,9 +5,10 @@ package chat1 import ( "context" + "time" + gregor1 "github.com/keybase/client/go/protocol/gregor1" "github.com/keybase/go-framed-msgpack-rpc/rpc" - "time" ) type BlockConversationsArg struct { diff --git a/go/protocol/chat1/chat_ui.go b/go/protocol/chat1/chat_ui.go index c42d991ae124..c1931f2ec8ff 100644 --- a/go/protocol/chat1/chat_ui.go +++ b/go/protocol/chat1/chat_ui.go @@ -7,11 +7,12 @@ import ( "context" "errors" "fmt" + "time" + gregor1 "github.com/keybase/client/go/protocol/gregor1" keybase1 "github.com/keybase/client/go/protocol/keybase1" stellar1 "github.com/keybase/client/go/protocol/stellar1" "github.com/keybase/go-framed-msgpack-rpc/rpc" - "time" ) type UIPagination struct { diff --git a/go/protocol/chat1/commands.go b/go/protocol/chat1/commands.go index 191345d1238c..31f26b835ef7 100644 --- a/go/protocol/chat1/commands.go +++ b/go/protocol/chat1/commands.go @@ -6,6 +6,7 @@ package chat1 import ( "errors" "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/chat1/common.go b/go/protocol/chat1/common.go index 4165070d94bc..54a11c6a00c5 100644 --- a/go/protocol/chat1/common.go +++ b/go/protocol/chat1/common.go @@ -6,6 +6,7 @@ package chat1 import ( "errors" "fmt" + gregor1 "github.com/keybase/client/go/protocol/gregor1" keybase1 "github.com/keybase/client/go/protocol/keybase1" stellar1 "github.com/keybase/client/go/protocol/stellar1" diff --git a/go/protocol/chat1/emoji.go b/go/protocol/chat1/emoji.go index dd3bbea25b00..3119464a3f26 100644 --- a/go/protocol/chat1/emoji.go +++ b/go/protocol/chat1/emoji.go @@ -6,6 +6,7 @@ package chat1 import ( "errors" "fmt" + gregor1 "github.com/keybase/client/go/protocol/gregor1" "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/chat1/local.go b/go/protocol/chat1/local.go index 325b42fc04d1..81a70ac10faf 100644 --- a/go/protocol/chat1/local.go +++ b/go/protocol/chat1/local.go @@ -7,11 +7,12 @@ import ( "context" "errors" "fmt" + "time" + gregor1 "github.com/keybase/client/go/protocol/gregor1" keybase1 "github.com/keybase/client/go/protocol/keybase1" stellar1 "github.com/keybase/client/go/protocol/stellar1" "github.com/keybase/go-framed-msgpack-rpc/rpc" - "time" ) type VersionKind string diff --git a/go/protocol/chat1/notify.go b/go/protocol/chat1/notify.go index 8d5938203bbf..4d0beb306391 100644 --- a/go/protocol/chat1/notify.go +++ b/go/protocol/chat1/notify.go @@ -7,9 +7,10 @@ import ( "context" "errors" "fmt" + "time" + keybase1 "github.com/keybase/client/go/protocol/keybase1" "github.com/keybase/go-framed-msgpack-rpc/rpc" - "time" ) type ChatActivitySource int diff --git a/go/protocol/chat1/remote.go b/go/protocol/chat1/remote.go index 09fa48ad9da3..d4659e34c643 100644 --- a/go/protocol/chat1/remote.go +++ b/go/protocol/chat1/remote.go @@ -7,10 +7,11 @@ import ( "context" "errors" "fmt" + "time" + gregor1 "github.com/keybase/client/go/protocol/gregor1" keybase1 "github.com/keybase/client/go/protocol/keybase1" "github.com/keybase/go-framed-msgpack-rpc/rpc" - "time" ) type MessageBoxed struct { diff --git a/go/protocol/chat1/unfurl.go b/go/protocol/chat1/unfurl.go index 2b855c72ff67..dc6cbfc26045 100644 --- a/go/protocol/chat1/unfurl.go +++ b/go/protocol/chat1/unfurl.go @@ -6,6 +6,7 @@ package chat1 import ( "errors" "fmt" + gregor1 "github.com/keybase/client/go/protocol/gregor1" "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/gregor1/auth.go b/go/protocol/gregor1/auth.go index 11b651dff36f..276e3de05eba 100644 --- a/go/protocol/gregor1/auth.go +++ b/go/protocol/gregor1/auth.go @@ -5,8 +5,9 @@ package gregor1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type AuthResult struct { diff --git a/go/protocol/gregor1/auth_internal.go b/go/protocol/gregor1/auth_internal.go index 64f00b07707b..e540efaafdc9 100644 --- a/go/protocol/gregor1/auth_internal.go +++ b/go/protocol/gregor1/auth_internal.go @@ -5,8 +5,9 @@ package gregor1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type CreateGregorSuperUserSessionTokenArg struct { diff --git a/go/protocol/gregor1/auth_update.go b/go/protocol/gregor1/auth_update.go index 46f008d6655c..0b424f339da8 100644 --- a/go/protocol/gregor1/auth_update.go +++ b/go/protocol/gregor1/auth_update.go @@ -5,8 +5,9 @@ package gregor1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type RevokeSessionIDsArg struct { diff --git a/go/protocol/gregor1/incoming.go b/go/protocol/gregor1/incoming.go index eeb7e12d990c..1c3962b92630 100644 --- a/go/protocol/gregor1/incoming.go +++ b/go/protocol/gregor1/incoming.go @@ -5,8 +5,9 @@ package gregor1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type SyncResult struct { diff --git a/go/protocol/gregor1/outgoing.go b/go/protocol/gregor1/outgoing.go index fb9f0df681f3..0351291ac898 100644 --- a/go/protocol/gregor1/outgoing.go +++ b/go/protocol/gregor1/outgoing.go @@ -5,8 +5,9 @@ package gregor1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type BroadcastMessageArg struct { diff --git a/go/protocol/gregor1/remind.go b/go/protocol/gregor1/remind.go index 6d35e4d6032c..ce27da1c4d50 100644 --- a/go/protocol/gregor1/remind.go +++ b/go/protocol/gregor1/remind.go @@ -5,8 +5,9 @@ package gregor1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type GetRemindersArg struct { diff --git a/go/protocol/kbgitkbfs1/disk_block_cache.go b/go/protocol/kbgitkbfs1/disk_block_cache.go index 755e42deb95e..728d7d4875cb 100644 --- a/go/protocol/kbgitkbfs1/disk_block_cache.go +++ b/go/protocol/kbgitkbfs1/disk_block_cache.go @@ -6,8 +6,9 @@ package kbgitkbfs1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type PrefetchStatus int diff --git a/go/protocol/keybase1/account.go b/go/protocol/keybase1/account.go index d617da84a7ab..8ed636389762 100644 --- a/go/protocol/keybase1/account.go +++ b/go/protocol/keybase1/account.go @@ -5,9 +5,10 @@ package keybase1 import ( "context" + "time" + gregor1 "github.com/keybase/client/go/protocol/gregor1" "github.com/keybase/go-framed-msgpack-rpc/rpc" - "time" ) type HasServerKeysRes struct { diff --git a/go/protocol/keybase1/airdrop.go b/go/protocol/keybase1/airdrop.go index 79e35f738d38..8d8952d6fc7c 100644 --- a/go/protocol/keybase1/airdrop.go +++ b/go/protocol/keybase1/airdrop.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type AirdropDetails struct { diff --git a/go/protocol/keybase1/apiserver.go b/go/protocol/keybase1/apiserver.go index 9e3a3ed55ce4..2ad6a7680414 100644 --- a/go/protocol/keybase1/apiserver.go +++ b/go/protocol/keybase1/apiserver.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type APIRes struct { diff --git a/go/protocol/keybase1/appstate.go b/go/protocol/keybase1/appstate.go index d1e705035b5d..9850958b713e 100644 --- a/go/protocol/keybase1/appstate.go +++ b/go/protocol/keybase1/appstate.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type MobileAppState int diff --git a/go/protocol/keybase1/audit.go b/go/protocol/keybase1/audit.go index 3af82c5ed91e..95e39d81c738 100644 --- a/go/protocol/keybase1/audit.go +++ b/go/protocol/keybase1/audit.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type BoxAuditAttemptResult int diff --git a/go/protocol/keybase1/avatars.go b/go/protocol/keybase1/avatars.go index c4b07ab714cf..ebbb537dfc31 100644 --- a/go/protocol/keybase1/avatars.go +++ b/go/protocol/keybase1/avatars.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type AvatarUrl string diff --git a/go/protocol/keybase1/backend_common.go b/go/protocol/keybase1/backend_common.go index fe5bbe41f883..1d8eda7000ee 100644 --- a/go/protocol/keybase1/backend_common.go +++ b/go/protocol/keybase1/backend_common.go @@ -5,6 +5,7 @@ package keybase1 import ( "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/badger.go b/go/protocol/keybase1/badger.go index 7d199d5a0fdf..2e66791dd0d1 100644 --- a/go/protocol/keybase1/badger.go +++ b/go/protocol/keybase1/badger.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type GetBadgeStateArg struct { diff --git a/go/protocol/keybase1/block.go b/go/protocol/keybase1/block.go index 4e2084937460..73300513c973 100644 --- a/go/protocol/keybase1/block.go +++ b/go/protocol/keybase1/block.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type BlockStatus int diff --git a/go/protocol/keybase1/bot.go b/go/protocol/keybase1/bot.go index d910b1d18ecf..0603ec6bb239 100644 --- a/go/protocol/keybase1/bot.go +++ b/go/protocol/keybase1/bot.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type BotToken string diff --git a/go/protocol/keybase1/btc.go b/go/protocol/keybase1/btc.go index 2a89c066af10..f54ceba73d69 100644 --- a/go/protocol/keybase1/btc.go +++ b/go/protocol/keybase1/btc.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type RegisterBTCArg struct { diff --git a/go/protocol/keybase1/common.go b/go/protocol/keybase1/common.go index 66ff60d1a898..755c4030df44 100644 --- a/go/protocol/keybase1/common.go +++ b/go/protocol/keybase1/common.go @@ -6,6 +6,7 @@ package keybase1 import ( "errors" "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/config.go b/go/protocol/keybase1/config.go index 39aacdbed04c..093d5a2eaa99 100644 --- a/go/protocol/keybase1/config.go +++ b/go/protocol/keybase1/config.go @@ -7,8 +7,9 @@ import ( "context" "errors" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type CurrentStatus struct { diff --git a/go/protocol/keybase1/constants.go b/go/protocol/keybase1/constants.go index d98fbb9f22a0..d91be85ae977 100644 --- a/go/protocol/keybase1/constants.go +++ b/go/protocol/keybase1/constants.go @@ -5,6 +5,7 @@ package keybase1 import ( "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/contacts.go b/go/protocol/keybase1/contacts.go index 14d1078dc6c0..d88e674f04eb 100644 --- a/go/protocol/keybase1/contacts.go +++ b/go/protocol/keybase1/contacts.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ContactComponent struct { diff --git a/go/protocol/keybase1/crypto.go b/go/protocol/keybase1/crypto.go index b0d3df2b7fb6..17f722c7ec66 100644 --- a/go/protocol/keybase1/crypto.go +++ b/go/protocol/keybase1/crypto.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ED25519PublicKey [32]byte diff --git a/go/protocol/keybase1/cryptocurrency.go b/go/protocol/keybase1/cryptocurrency.go index 49b4a0ed56ae..bfc07f89174d 100644 --- a/go/protocol/keybase1/cryptocurrency.go +++ b/go/protocol/keybase1/cryptocurrency.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type RegisterAddressRes struct { diff --git a/go/protocol/keybase1/ctl.go b/go/protocol/keybase1/ctl.go index 24fd11a29dc0..f1a6c5314249 100644 --- a/go/protocol/keybase1/ctl.go +++ b/go/protocol/keybase1/ctl.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ExitCode int diff --git a/go/protocol/keybase1/debugging.go b/go/protocol/keybase1/debugging.go index da3a8fd3597e..67305efc48de 100644 --- a/go/protocol/keybase1/debugging.go +++ b/go/protocol/keybase1/debugging.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type FirstStepResult struct { diff --git a/go/protocol/keybase1/delegate_ui_ctl.go b/go/protocol/keybase1/delegate_ui_ctl.go index 30a43896d20f..8828bd019302 100644 --- a/go/protocol/keybase1/delegate_ui_ctl.go +++ b/go/protocol/keybase1/delegate_ui_ctl.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type RegisterIdentifyUIArg struct { diff --git a/go/protocol/keybase1/device.go b/go/protocol/keybase1/device.go index 81acc2f8d441..243af1ced599 100644 --- a/go/protocol/keybase1/device.go +++ b/go/protocol/keybase1/device.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type DeviceDetail struct { diff --git a/go/protocol/keybase1/emails.go b/go/protocol/keybase1/emails.go index 479450592436..90dac217fda5 100644 --- a/go/protocol/keybase1/emails.go +++ b/go/protocol/keybase1/emails.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type EmailLookupResult struct { diff --git a/go/protocol/keybase1/ephemeral.go b/go/protocol/keybase1/ephemeral.go index 1a0b7fd1a285..c2c191a761be 100644 --- a/go/protocol/keybase1/ephemeral.go +++ b/go/protocol/keybase1/ephemeral.go @@ -6,6 +6,7 @@ package keybase1 import ( "errors" "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/favorite.go b/go/protocol/keybase1/favorite.go index de2f27428870..de26b7c7f4bb 100644 --- a/go/protocol/keybase1/favorite.go +++ b/go/protocol/keybase1/favorite.go @@ -7,8 +7,9 @@ import ( "context" "errors" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type FolderType int diff --git a/go/protocol/keybase1/featured_bot.go b/go/protocol/keybase1/featured_bot.go index c02b8e0054f0..10567685ec32 100644 --- a/go/protocol/keybase1/featured_bot.go +++ b/go/protocol/keybase1/featured_bot.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type FeaturedBot struct { diff --git a/go/protocol/keybase1/fs.go b/go/protocol/keybase1/fs.go index 01950a3254e5..36124b49d0e9 100644 --- a/go/protocol/keybase1/fs.go +++ b/go/protocol/keybase1/fs.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type File struct { diff --git a/go/protocol/keybase1/git.go b/go/protocol/keybase1/git.go index 1107f78183d6..35bc58146296 100644 --- a/go/protocol/keybase1/git.go +++ b/go/protocol/keybase1/git.go @@ -7,8 +7,9 @@ import ( "context" "errors" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type EncryptedGitMetadata struct { diff --git a/go/protocol/keybase1/gpg_ui.go b/go/protocol/keybase1/gpg_ui.go index f811d26d977a..fae04cf48678 100644 --- a/go/protocol/keybase1/gpg_ui.go +++ b/go/protocol/keybase1/gpg_ui.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type SelectKeyRes struct { diff --git a/go/protocol/keybase1/gregor.go b/go/protocol/keybase1/gregor.go index e1145aa6ebb2..cdab70aacad0 100644 --- a/go/protocol/keybase1/gregor.go +++ b/go/protocol/keybase1/gregor.go @@ -5,9 +5,10 @@ package keybase1 import ( "context" + "time" + gregor1 "github.com/keybase/client/go/protocol/gregor1" "github.com/keybase/go-framed-msgpack-rpc/rpc" - "time" ) type GetStateArg struct { diff --git a/go/protocol/keybase1/gregor_ui.go b/go/protocol/keybase1/gregor_ui.go index 1b3cdb2185b7..a8fb91d5e675 100644 --- a/go/protocol/keybase1/gregor_ui.go +++ b/go/protocol/keybase1/gregor_ui.go @@ -6,9 +6,10 @@ package keybase1 import ( "context" "fmt" + "time" + gregor1 "github.com/keybase/client/go/protocol/gregor1" "github.com/keybase/go-framed-msgpack-rpc/rpc" - "time" ) type PushReason int diff --git a/go/protocol/keybase1/home.go b/go/protocol/keybase1/home.go index bec28f83d44a..6a2c8889e8da 100644 --- a/go/protocol/keybase1/home.go +++ b/go/protocol/keybase1/home.go @@ -7,8 +7,9 @@ import ( "context" "errors" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type HomeScreenItemID string diff --git a/go/protocol/keybase1/home_ui.go b/go/protocol/keybase1/home_ui.go index be01cc77defa..9bf41511b006 100644 --- a/go/protocol/keybase1/home_ui.go +++ b/go/protocol/keybase1/home_ui.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type HomeUIRefreshArg struct { diff --git a/go/protocol/keybase1/identify.go b/go/protocol/keybase1/identify.go index e55b67704c3f..a8acd1414a0f 100644 --- a/go/protocol/keybase1/identify.go +++ b/go/protocol/keybase1/identify.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type IdentifyProofBreak struct { diff --git a/go/protocol/keybase1/identify3.go b/go/protocol/keybase1/identify3.go index 052a60ff04a6..a0df690e5c39 100644 --- a/go/protocol/keybase1/identify3.go +++ b/go/protocol/keybase1/identify3.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type Identify3Arg struct { diff --git a/go/protocol/keybase1/identify3_ui.go b/go/protocol/keybase1/identify3_ui.go index fad28349afc6..16f91197f794 100644 --- a/go/protocol/keybase1/identify3_ui.go +++ b/go/protocol/keybase1/identify3_ui.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type Identify3RowState int diff --git a/go/protocol/keybase1/identify_common.go b/go/protocol/keybase1/identify_common.go index f98bdbdac823..e5a6e22da1b8 100644 --- a/go/protocol/keybase1/identify_common.go +++ b/go/protocol/keybase1/identify_common.go @@ -5,6 +5,7 @@ package keybase1 import ( "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/identify_ui.go b/go/protocol/keybase1/identify_ui.go index f99413b91780..4beecf994981 100644 --- a/go/protocol/keybase1/identify_ui.go +++ b/go/protocol/keybase1/identify_ui.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ProofResult struct { diff --git a/go/protocol/keybase1/implicit_team_migration.go b/go/protocol/keybase1/implicit_team_migration.go index 904fa6612079..ab1ad029c032 100644 --- a/go/protocol/keybase1/implicit_team_migration.go +++ b/go/protocol/keybase1/implicit_team_migration.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type StartMigrationArg struct { diff --git a/go/protocol/keybase1/incoming-share.go b/go/protocol/keybase1/incoming-share.go index 1ff93254dbe0..2b416c44a749 100644 --- a/go/protocol/keybase1/incoming-share.go +++ b/go/protocol/keybase1/incoming-share.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type IncomingShareType int diff --git a/go/protocol/keybase1/install.go b/go/protocol/keybase1/install.go index 3fb502393dfc..75d7682854f7 100644 --- a/go/protocol/keybase1/install.go +++ b/go/protocol/keybase1/install.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) // Install status describes state of install for a component or service. diff --git a/go/protocol/keybase1/invite_friends.go b/go/protocol/keybase1/invite_friends.go index 8522cf1b87c9..7aaa20f76971 100644 --- a/go/protocol/keybase1/invite_friends.go +++ b/go/protocol/keybase1/invite_friends.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type InviteCounts struct { diff --git a/go/protocol/keybase1/kbfs.go b/go/protocol/keybase1/kbfs.go index 85a8d6378e55..1196166a56e9 100644 --- a/go/protocol/keybase1/kbfs.go +++ b/go/protocol/keybase1/kbfs.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type KBFSTeamSettings struct { diff --git a/go/protocol/keybase1/kbfs_common.go b/go/protocol/keybase1/kbfs_common.go index 5c23180df469..a7be81ae669f 100644 --- a/go/protocol/keybase1/kbfs_common.go +++ b/go/protocol/keybase1/kbfs_common.go @@ -5,6 +5,7 @@ package keybase1 import ( "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/kbfs_git.go b/go/protocol/keybase1/kbfs_git.go index 47c1085caa3a..fa6a690cb2a3 100644 --- a/go/protocol/keybase1/kbfs_git.go +++ b/go/protocol/keybase1/kbfs_git.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type GcOptions struct { diff --git a/go/protocol/keybase1/kbfsmount.go b/go/protocol/keybase1/kbfsmount.go index b9043f47b82d..5c8f4eab314c 100644 --- a/go/protocol/keybase1/kbfsmount.go +++ b/go/protocol/keybase1/kbfsmount.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type GetCurrentMountDirArg struct { diff --git a/go/protocol/keybase1/kex2provisionee.go b/go/protocol/keybase1/kex2provisionee.go index 2c7a2dd63479..4f7f8f4c3499 100644 --- a/go/protocol/keybase1/kex2provisionee.go +++ b/go/protocol/keybase1/kex2provisionee.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type PassphraseStream struct { diff --git a/go/protocol/keybase1/kex2provisionee2.go b/go/protocol/keybase1/kex2provisionee2.go index 392ce4bebd8b..0a40c192f846 100644 --- a/go/protocol/keybase1/kex2provisionee2.go +++ b/go/protocol/keybase1/kex2provisionee2.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type Hello2Res struct { diff --git a/go/protocol/keybase1/kex2provisioner.go b/go/protocol/keybase1/kex2provisioner.go index f7a6f3b964db..5a21ea26f49a 100644 --- a/go/protocol/keybase1/kex2provisioner.go +++ b/go/protocol/keybase1/kex2provisioner.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type KexStartArg struct { diff --git a/go/protocol/keybase1/kvstore.go b/go/protocol/keybase1/kvstore.go index 023baab78be3..d42c2a5929a9 100644 --- a/go/protocol/keybase1/kvstore.go +++ b/go/protocol/keybase1/kvstore.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type KVGetResult struct { diff --git a/go/protocol/keybase1/log.go b/go/protocol/keybase1/log.go index 41489a41852d..20d867256259 100644 --- a/go/protocol/keybase1/log.go +++ b/go/protocol/keybase1/log.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type RegisterLoggerArg struct { diff --git a/go/protocol/keybase1/log_ui.go b/go/protocol/keybase1/log_ui.go index 2e1663872fbe..752e56caca7e 100644 --- a/go/protocol/keybase1/log_ui.go +++ b/go/protocol/keybase1/log_ui.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type LogArg struct { diff --git a/go/protocol/keybase1/login.go b/go/protocol/keybase1/login.go index b9e4470016d2..a73fca4efa2b 100644 --- a/go/protocol/keybase1/login.go +++ b/go/protocol/keybase1/login.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ConfiguredAccount struct { diff --git a/go/protocol/keybase1/login_ui.go b/go/protocol/keybase1/login_ui.go index b7131433a453..9a45baf93a9b 100644 --- a/go/protocol/keybase1/login_ui.go +++ b/go/protocol/keybase1/login_ui.go @@ -7,8 +7,9 @@ import ( "context" "errors" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ResetPromptType int diff --git a/go/protocol/keybase1/logsend.go b/go/protocol/keybase1/logsend.go index 4d2634269170..ceeb3363bb81 100644 --- a/go/protocol/keybase1/logsend.go +++ b/go/protocol/keybase1/logsend.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type PrepareLogsendArg struct { diff --git a/go/protocol/keybase1/merkle.go b/go/protocol/keybase1/merkle.go index 505ecfb2c6dd..6f39f5d586e2 100644 --- a/go/protocol/keybase1/merkle.go +++ b/go/protocol/keybase1/merkle.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type MerkleRootAndTime struct { diff --git a/go/protocol/keybase1/metadata.go b/go/protocol/keybase1/metadata.go index 22372f8bb9c2..aa4f9e8aa314 100644 --- a/go/protocol/keybase1/metadata.go +++ b/go/protocol/keybase1/metadata.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type KeyHalf struct { diff --git a/go/protocol/keybase1/metadata_update.go b/go/protocol/keybase1/metadata_update.go index 5e3128a499a0..ecb0a0860172 100644 --- a/go/protocol/keybase1/metadata_update.go +++ b/go/protocol/keybase1/metadata_update.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type RekeyRequest struct { diff --git a/go/protocol/keybase1/network_stats.go b/go/protocol/keybase1/network_stats.go index 708049e75b3a..671df9ee9cdc 100644 --- a/go/protocol/keybase1/network_stats.go +++ b/go/protocol/keybase1/network_stats.go @@ -5,6 +5,7 @@ package keybase1 import ( "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/notify_app.go b/go/protocol/keybase1/notify_app.go index c8b4149ad767..19120a54d2d3 100644 --- a/go/protocol/keybase1/notify_app.go +++ b/go/protocol/keybase1/notify_app.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ExitArg struct { diff --git a/go/protocol/keybase1/notify_audit.go b/go/protocol/keybase1/notify_audit.go index 0ed98370023d..a9b442158256 100644 --- a/go/protocol/keybase1/notify_audit.go +++ b/go/protocol/keybase1/notify_audit.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type RootAuditErrorArg struct { diff --git a/go/protocol/keybase1/notify_badges.go b/go/protocol/keybase1/notify_badges.go index 392919631232..9aa931d6cd66 100644 --- a/go/protocol/keybase1/notify_badges.go +++ b/go/protocol/keybase1/notify_badges.go @@ -5,9 +5,10 @@ package keybase1 import ( "context" + "time" + gregor1 "github.com/keybase/client/go/protocol/gregor1" "github.com/keybase/go-framed-msgpack-rpc/rpc" - "time" ) type ChatConversationID []byte diff --git a/go/protocol/keybase1/notify_can_user_perform.go b/go/protocol/keybase1/notify_can_user_perform.go index a804f908b5cd..c3bfd684e00c 100644 --- a/go/protocol/keybase1/notify_can_user_perform.go +++ b/go/protocol/keybase1/notify_can_user_perform.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type CanUserPerformChangedArg struct { diff --git a/go/protocol/keybase1/notify_ctl.go b/go/protocol/keybase1/notify_ctl.go index e0ca0ad30676..e451a7e4b8fa 100644 --- a/go/protocol/keybase1/notify_ctl.go +++ b/go/protocol/keybase1/notify_ctl.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type NotificationChannels struct { diff --git a/go/protocol/keybase1/notify_device_clone.go b/go/protocol/keybase1/notify_device_clone.go index e87f332033fb..08b1e245590e 100644 --- a/go/protocol/keybase1/notify_device_clone.go +++ b/go/protocol/keybase1/notify_device_clone.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type DeviceCloneCountChangedArg struct { diff --git a/go/protocol/keybase1/notify_email.go b/go/protocol/keybase1/notify_email.go index e191537b0db5..5103d1bc0782 100644 --- a/go/protocol/keybase1/notify_email.go +++ b/go/protocol/keybase1/notify_email.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type EmailAddressVerifiedArg struct { diff --git a/go/protocol/keybase1/notify_ephemeral.go b/go/protocol/keybase1/notify_ephemeral.go index 4c4d4956efa0..d6c5e7cb67f4 100644 --- a/go/protocol/keybase1/notify_ephemeral.go +++ b/go/protocol/keybase1/notify_ephemeral.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type NewTeamEkArg struct { diff --git a/go/protocol/keybase1/notify_favorites.go b/go/protocol/keybase1/notify_favorites.go index f51381630162..b9fe7b2de443 100644 --- a/go/protocol/keybase1/notify_favorites.go +++ b/go/protocol/keybase1/notify_favorites.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type FavoritesChangedArg struct { diff --git a/go/protocol/keybase1/notify_featuredbots.go b/go/protocol/keybase1/notify_featuredbots.go index 5ee58155deba..b21baad854aa 100644 --- a/go/protocol/keybase1/notify_featuredbots.go +++ b/go/protocol/keybase1/notify_featuredbots.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type FeaturedBotsUpdateArg struct { diff --git a/go/protocol/keybase1/notify_fs.go b/go/protocol/keybase1/notify_fs.go index f468353035dc..051d8ae1c122 100644 --- a/go/protocol/keybase1/notify_fs.go +++ b/go/protocol/keybase1/notify_fs.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type FSActivityArg struct { diff --git a/go/protocol/keybase1/notify_fs_request.go b/go/protocol/keybase1/notify_fs_request.go index 18929f599e0c..d7b2d67f924e 100644 --- a/go/protocol/keybase1/notify_fs_request.go +++ b/go/protocol/keybase1/notify_fs_request.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type FSEditListRequestArg struct { diff --git a/go/protocol/keybase1/notify_invite_friends.go b/go/protocol/keybase1/notify_invite_friends.go index 0f44240bba3a..d4c1ba01e50a 100644 --- a/go/protocol/keybase1/notify_invite_friends.go +++ b/go/protocol/keybase1/notify_invite_friends.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type UpdateInviteCountsArg struct { diff --git a/go/protocol/keybase1/notify_keyfamily.go b/go/protocol/keybase1/notify_keyfamily.go index dd11f3d46760..430c39faf882 100644 --- a/go/protocol/keybase1/notify_keyfamily.go +++ b/go/protocol/keybase1/notify_keyfamily.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type KeyfamilyChangedArg struct { diff --git a/go/protocol/keybase1/notify_paperkey.go b/go/protocol/keybase1/notify_paperkey.go index d0cd63cbd37a..95435da068fd 100644 --- a/go/protocol/keybase1/notify_paperkey.go +++ b/go/protocol/keybase1/notify_paperkey.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type PaperKeyCachedArg struct { diff --git a/go/protocol/keybase1/notify_pgp.go b/go/protocol/keybase1/notify_pgp.go index 57009e12522f..f6ab0b415a81 100644 --- a/go/protocol/keybase1/notify_pgp.go +++ b/go/protocol/keybase1/notify_pgp.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type PGPKeyInSecretStoreFileArg struct { diff --git a/go/protocol/keybase1/notify_phone.go b/go/protocol/keybase1/notify_phone.go index 8e7d877fed3a..286934902424 100644 --- a/go/protocol/keybase1/notify_phone.go +++ b/go/protocol/keybase1/notify_phone.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type PhoneNumbersChangedArg struct { diff --git a/go/protocol/keybase1/notify_runtimestats.go b/go/protocol/keybase1/notify_runtimestats.go index e60bb8944cc1..bb9202819c62 100644 --- a/go/protocol/keybase1/notify_runtimestats.go +++ b/go/protocol/keybase1/notify_runtimestats.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type StatsSeverityLevel int diff --git a/go/protocol/keybase1/notify_saltpack.go b/go/protocol/keybase1/notify_saltpack.go index d3c0ce65a41b..c500cbcf67bb 100644 --- a/go/protocol/keybase1/notify_saltpack.go +++ b/go/protocol/keybase1/notify_saltpack.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type SaltpackOperationType int diff --git a/go/protocol/keybase1/notify_service.go b/go/protocol/keybase1/notify_service.go index 30ac43bee1fa..c9eb27588491 100644 --- a/go/protocol/keybase1/notify_service.go +++ b/go/protocol/keybase1/notify_service.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type HttpSrvInfo struct { diff --git a/go/protocol/keybase1/notify_session.go b/go/protocol/keybase1/notify_session.go index e6baa4f9df0a..0aca0ca39fcc 100644 --- a/go/protocol/keybase1/notify_session.go +++ b/go/protocol/keybase1/notify_session.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type LoggedOutArg struct { diff --git a/go/protocol/keybase1/notify_simple_fs.go b/go/protocol/keybase1/notify_simple_fs.go index dee283c01245..19741d59bb30 100644 --- a/go/protocol/keybase1/notify_simple_fs.go +++ b/go/protocol/keybase1/notify_simple_fs.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type SimpleFSArchiveStatusChangedArg struct { diff --git a/go/protocol/keybase1/notify_team.go b/go/protocol/keybase1/notify_team.go index 3a5ab774a2be..5ef25aef0436 100644 --- a/go/protocol/keybase1/notify_team.go +++ b/go/protocol/keybase1/notify_team.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type TeamChangeSet struct { diff --git a/go/protocol/keybase1/notify_teambot.go b/go/protocol/keybase1/notify_teambot.go index dac1d92a3e91..4207fc8cc101 100644 --- a/go/protocol/keybase1/notify_teambot.go +++ b/go/protocol/keybase1/notify_teambot.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type NewTeambotKeyArg struct { diff --git a/go/protocol/keybase1/notify_tracking.go b/go/protocol/keybase1/notify_tracking.go index e27807739f8b..da95f0b506e8 100644 --- a/go/protocol/keybase1/notify_tracking.go +++ b/go/protocol/keybase1/notify_tracking.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type TrackingChangedArg struct { diff --git a/go/protocol/keybase1/notify_users.go b/go/protocol/keybase1/notify_users.go index 09931b9193d3..4bf5e2f6783a 100644 --- a/go/protocol/keybase1/notify_users.go +++ b/go/protocol/keybase1/notify_users.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type UserChangedArg struct { diff --git a/go/protocol/keybase1/os.go b/go/protocol/keybase1/os.go index 6dc431731926..614286b887a1 100644 --- a/go/protocol/keybase1/os.go +++ b/go/protocol/keybase1/os.go @@ -5,6 +5,7 @@ package keybase1 import ( "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/paperprovision.go b/go/protocol/keybase1/paperprovision.go index a4d1a73a63ec..9964a77018f0 100644 --- a/go/protocol/keybase1/paperprovision.go +++ b/go/protocol/keybase1/paperprovision.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type PaperProvisionArg struct { diff --git a/go/protocol/keybase1/passphrase_common.go b/go/protocol/keybase1/passphrase_common.go index 03a806727915..8edf32733e0b 100644 --- a/go/protocol/keybase1/passphrase_common.go +++ b/go/protocol/keybase1/passphrase_common.go @@ -5,6 +5,7 @@ package keybase1 import ( "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/pgp.go b/go/protocol/keybase1/pgp.go index ce9841c26522..b682093a41f1 100644 --- a/go/protocol/keybase1/pgp.go +++ b/go/protocol/keybase1/pgp.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type SignMode int diff --git a/go/protocol/keybase1/pgp_ui.go b/go/protocol/keybase1/pgp_ui.go index 9e8d6750ff42..0b6f0c13bf74 100644 --- a/go/protocol/keybase1/pgp_ui.go +++ b/go/protocol/keybase1/pgp_ui.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type OutputPGPWarningArg struct { diff --git a/go/protocol/keybase1/phone_numbers.go b/go/protocol/keybase1/phone_numbers.go index b3fc451a9f8e..9a4760dbaed2 100644 --- a/go/protocol/keybase1/phone_numbers.go +++ b/go/protocol/keybase1/phone_numbers.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) // Phone number support for TOFU chats. diff --git a/go/protocol/keybase1/pprof.go b/go/protocol/keybase1/pprof.go index 5fea4745cff2..bf3490e6d40a 100644 --- a/go/protocol/keybase1/pprof.go +++ b/go/protocol/keybase1/pprof.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ProcessorProfileArg struct { diff --git a/go/protocol/keybase1/process.go b/go/protocol/keybase1/process.go index fdd9ccf1fa7f..1b6b8a4a4a14 100644 --- a/go/protocol/keybase1/process.go +++ b/go/protocol/keybase1/process.go @@ -5,6 +5,7 @@ package keybase1 import ( "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/prove.go b/go/protocol/keybase1/prove.go index dd468736f53c..fc220b2644f5 100644 --- a/go/protocol/keybase1/prove.go +++ b/go/protocol/keybase1/prove.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type CheckProofStatus struct { diff --git a/go/protocol/keybase1/prove_common.go b/go/protocol/keybase1/prove_common.go index 9dbea68458bd..56ea542e584e 100644 --- a/go/protocol/keybase1/prove_common.go +++ b/go/protocol/keybase1/prove_common.go @@ -5,6 +5,7 @@ package keybase1 import ( "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/prove_ui.go b/go/protocol/keybase1/prove_ui.go index 6d93d9cdebaf..c4847d4571a5 100644 --- a/go/protocol/keybase1/prove_ui.go +++ b/go/protocol/keybase1/prove_ui.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type PromptOverwriteType int diff --git a/go/protocol/keybase1/provision_ui.go b/go/protocol/keybase1/provision_ui.go index f3b60534515e..2d225edb8817 100644 --- a/go/protocol/keybase1/provision_ui.go +++ b/go/protocol/keybase1/provision_ui.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ProvisionMethod int diff --git a/go/protocol/keybase1/quota.go b/go/protocol/keybase1/quota.go index 7f47014ce7ed..9b61f72a4c9d 100644 --- a/go/protocol/keybase1/quota.go +++ b/go/protocol/keybase1/quota.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type VerifySessionRes struct { diff --git a/go/protocol/keybase1/reachability.go b/go/protocol/keybase1/reachability.go index 024ff7a088a3..23383632d468 100644 --- a/go/protocol/keybase1/reachability.go +++ b/go/protocol/keybase1/reachability.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type Reachable int diff --git a/go/protocol/keybase1/rekey.go b/go/protocol/keybase1/rekey.go index ac94b772bf0a..c9bb01feacf3 100644 --- a/go/protocol/keybase1/rekey.go +++ b/go/protocol/keybase1/rekey.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type TLF struct { diff --git a/go/protocol/keybase1/rekey_ui.go b/go/protocol/keybase1/rekey_ui.go index 223d46e7af65..3650486b3a31 100644 --- a/go/protocol/keybase1/rekey_ui.go +++ b/go/protocol/keybase1/rekey_ui.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type RekeyEventType int diff --git a/go/protocol/keybase1/reset.go b/go/protocol/keybase1/reset.go index bc0b446cbe4b..ea3491332a4d 100644 --- a/go/protocol/keybase1/reset.go +++ b/go/protocol/keybase1/reset.go @@ -5,6 +5,7 @@ package keybase1 import ( "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/revoke.go b/go/protocol/keybase1/revoke.go index ce0af69118c1..01cd22bc8e72 100644 --- a/go/protocol/keybase1/revoke.go +++ b/go/protocol/keybase1/revoke.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type RevokeKeyArg struct { diff --git a/go/protocol/keybase1/saltpack.go b/go/protocol/keybase1/saltpack.go index 2e297164e79b..35e3cbedd216 100644 --- a/go/protocol/keybase1/saltpack.go +++ b/go/protocol/keybase1/saltpack.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type AuthenticityType int diff --git a/go/protocol/keybase1/saltpack_ui.go b/go/protocol/keybase1/saltpack_ui.go index 1f417f826fe5..2a7fb7375318 100644 --- a/go/protocol/keybase1/saltpack_ui.go +++ b/go/protocol/keybase1/saltpack_ui.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type SaltpackSenderType int diff --git a/go/protocol/keybase1/scanproofs.go b/go/protocol/keybase1/scanproofs.go index 0c77baca1251..8abf491fa341 100644 --- a/go/protocol/keybase1/scanproofs.go +++ b/go/protocol/keybase1/scanproofs.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ScanProofsArg struct { diff --git a/go/protocol/keybase1/secret_ui.go b/go/protocol/keybase1/secret_ui.go index ff4a9c064fbf..f329dbc3b115 100644 --- a/go/protocol/keybase1/secret_ui.go +++ b/go/protocol/keybase1/secret_ui.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type SecretEntryArg struct { diff --git a/go/protocol/keybase1/secretkeys.go b/go/protocol/keybase1/secretkeys.go index bfc40db61a71..55b1fdc80942 100644 --- a/go/protocol/keybase1/secretkeys.go +++ b/go/protocol/keybase1/secretkeys.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type NaclSigningKeyPublic [32]byte diff --git a/go/protocol/keybase1/selfprovision.go b/go/protocol/keybase1/selfprovision.go index 3fd22b9c93f6..5d59da7843a7 100644 --- a/go/protocol/keybase1/selfprovision.go +++ b/go/protocol/keybase1/selfprovision.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type SelfProvisionArg struct { diff --git a/go/protocol/keybase1/session.go b/go/protocol/keybase1/session.go index 2c3e4fbb5db8..0e98140d7c8a 100644 --- a/go/protocol/keybase1/session.go +++ b/go/protocol/keybase1/session.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type Session struct { diff --git a/go/protocol/keybase1/signup.go b/go/protocol/keybase1/signup.go index 65d3e0690cc7..b91aaf8ed4e5 100644 --- a/go/protocol/keybase1/signup.go +++ b/go/protocol/keybase1/signup.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type SignupRes struct { diff --git a/go/protocol/keybase1/sigs.go b/go/protocol/keybase1/sigs.go index ed71ebd9f7fd..2d25302cf707 100644 --- a/go/protocol/keybase1/sigs.go +++ b/go/protocol/keybase1/sigs.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type Sig struct { diff --git a/go/protocol/keybase1/simple_fs.go b/go/protocol/keybase1/simple_fs.go index 23006eeead5b..255eab3569d1 100644 --- a/go/protocol/keybase1/simple_fs.go +++ b/go/protocol/keybase1/simple_fs.go @@ -7,8 +7,9 @@ import ( "context" "errors" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type OpID [16]byte diff --git a/go/protocol/keybase1/stream_ui.go b/go/protocol/keybase1/stream_ui.go index 6f7e84641b4e..232be1c31114 100644 --- a/go/protocol/keybase1/stream_ui.go +++ b/go/protocol/keybase1/stream_ui.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type CloseArg struct { diff --git a/go/protocol/keybase1/teams.go b/go/protocol/keybase1/teams.go index 3cabda0c8c5e..e41a3e578bc1 100644 --- a/go/protocol/keybase1/teams.go +++ b/go/protocol/keybase1/teams.go @@ -7,8 +7,9 @@ import ( "context" "errors" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type TeamRole int diff --git a/go/protocol/keybase1/teams_ui.go b/go/protocol/keybase1/teams_ui.go index 8a29316aecc1..897d5a35e7b1 100644 --- a/go/protocol/keybase1/teams_ui.go +++ b/go/protocol/keybase1/teams_ui.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type ConfirmRootTeamDeleteArg struct { diff --git a/go/protocol/keybase1/teamsearch.go b/go/protocol/keybase1/teamsearch.go index 9393e42e94ad..0f61bc314883 100644 --- a/go/protocol/keybase1/teamsearch.go +++ b/go/protocol/keybase1/teamsearch.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type TeamSearchItem struct { diff --git a/go/protocol/keybase1/test.go b/go/protocol/keybase1/test.go index 9401f06c5bab..fdb6a4a54785 100644 --- a/go/protocol/keybase1/test.go +++ b/go/protocol/keybase1/test.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) // Result from calling test(..). diff --git a/go/protocol/keybase1/tlf.go b/go/protocol/keybase1/tlf.go index e13c6fd7b094..f974708e3273 100644 --- a/go/protocol/keybase1/tlf.go +++ b/go/protocol/keybase1/tlf.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type CryptKeysArg struct { diff --git a/go/protocol/keybase1/tlf_keys.go b/go/protocol/keybase1/tlf_keys.go index ee5b60f8110e..f3140b2c2428 100644 --- a/go/protocol/keybase1/tlf_keys.go +++ b/go/protocol/keybase1/tlf_keys.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type TLFIdentifyBehavior int diff --git a/go/protocol/keybase1/track.go b/go/protocol/keybase1/track.go index 918e89346389..2eae2812a3c0 100644 --- a/go/protocol/keybase1/track.go +++ b/go/protocol/keybase1/track.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type TrackArg struct { diff --git a/go/protocol/keybase1/ui.go b/go/protocol/keybase1/ui.go index 82fd8b359bd7..1ade9e30a73b 100644 --- a/go/protocol/keybase1/ui.go +++ b/go/protocol/keybase1/ui.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type PromptDefault int diff --git a/go/protocol/keybase1/upk.go b/go/protocol/keybase1/upk.go index a8d9f55d4095..45c85e9c1b85 100644 --- a/go/protocol/keybase1/upk.go +++ b/go/protocol/keybase1/upk.go @@ -6,6 +6,7 @@ package keybase1 import ( "errors" "fmt" + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/keybase1/user.go b/go/protocol/keybase1/user.go index fce11d86abcc..0866221f645f 100644 --- a/go/protocol/keybase1/user.go +++ b/go/protocol/keybase1/user.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type TrackProof struct { diff --git a/go/protocol/keybase1/usersearch.go b/go/protocol/keybase1/usersearch.go index d85b13fbdb88..88102f487a63 100644 --- a/go/protocol/keybase1/usersearch.go +++ b/go/protocol/keybase1/usersearch.go @@ -5,8 +5,9 @@ package keybase1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type APIUserServiceID string diff --git a/go/protocol/keybase1/wot.go b/go/protocol/keybase1/wot.go index 269fc9c4bf05..99cc76051158 100644 --- a/go/protocol/keybase1/wot.go +++ b/go/protocol/keybase1/wot.go @@ -6,8 +6,9 @@ package keybase1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type UsernameVerificationType string diff --git a/go/protocol/stellar1/bundle.go b/go/protocol/stellar1/bundle.go index c27c47d72767..1fe6bdea04f8 100644 --- a/go/protocol/stellar1/bundle.go +++ b/go/protocol/stellar1/bundle.go @@ -6,6 +6,7 @@ package stellar1 import ( "errors" "fmt" + keybase1 "github.com/keybase/client/go/protocol/keybase1" "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/stellar1/common.go b/go/protocol/stellar1/common.go index 981c210011d1..99ee1565d65b 100644 --- a/go/protocol/stellar1/common.go +++ b/go/protocol/stellar1/common.go @@ -5,6 +5,7 @@ package stellar1 import ( "fmt" + keybase1 "github.com/keybase/client/go/protocol/keybase1" "github.com/keybase/go-framed-msgpack-rpc/rpc" ) diff --git a/go/protocol/stellar1/local.go b/go/protocol/stellar1/local.go index 6a2b7eb97ef1..6fc9d8090ec0 100644 --- a/go/protocol/stellar1/local.go +++ b/go/protocol/stellar1/local.go @@ -6,8 +6,9 @@ package stellar1 import ( "context" "fmt" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type WalletAccountLocal struct { diff --git a/go/protocol/stellar1/notify.go b/go/protocol/stellar1/notify.go index 575540316f95..6ccb3db4d6d7 100644 --- a/go/protocol/stellar1/notify.go +++ b/go/protocol/stellar1/notify.go @@ -5,8 +5,9 @@ package stellar1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type PaymentNotificationArg struct { diff --git a/go/protocol/stellar1/remote.go b/go/protocol/stellar1/remote.go index 465118243950..184c3307419b 100644 --- a/go/protocol/stellar1/remote.go +++ b/go/protocol/stellar1/remote.go @@ -7,9 +7,10 @@ import ( "context" "errors" "fmt" + "time" + keybase1 "github.com/keybase/client/go/protocol/keybase1" "github.com/keybase/go-framed-msgpack-rpc/rpc" - "time" ) type ChatConversationID string diff --git a/go/protocol/stellar1/ui.go b/go/protocol/stellar1/ui.go index f8140f3b8842..798d4d15f70c 100644 --- a/go/protocol/stellar1/ui.go +++ b/go/protocol/stellar1/ui.go @@ -5,8 +5,9 @@ package stellar1 import ( "context" - "github.com/keybase/go-framed-msgpack-rpc/rpc" "time" + + "github.com/keybase/go-framed-msgpack-rpc/rpc" ) type UIPaymentReviewed struct { diff --git a/plans/jsi-perf.md b/plans/jsi-perf.md deleted file mode 100644 index ca8069a7152e..000000000000 --- a/plans/jsi-perf.md +++ /dev/null @@ -1,36 +0,0 @@ -# JSI Performance Evaluation Plan - -## Summary - -Keybase is on RN 0.83.4 with New Architecture and Hermes enabled. RN's public TurboModule Codegen surface still does not document ArrayBuffer or typed-array parameters, but RN's C++ JSI API exposes MutableBuffer, ArrayBuffer, direct buffer data access, NativeState, and runtime data. The evaluation should focus on our pure C++ JSI bridge in react-native-kb, not on moving the RPC pipe to normal TurboModule methods. - -## Evaluation Targets - -- Benchmark current bridge costs in react-native-kb: rpcOnGo, rpcOnJs, msgpack encode/decode, object/map walking, string conversion, binary payload handling, JNI/ObjC copies, and batching. -- Prototype, in benchmark-only code, creating inbound binary values via jsi::MutableBuffer + Runtime::createArrayBuffer instead of constructing Uint8Array(size) and copying into its buffer. -- Test whether JS can safely accept ArrayBuffer directly for msgpack binary fields; if not, measure new Uint8Array(arrayBuffer) wrapping versus the current constructor path. -- Evaluate typed-array detection in convertJSIToMP: avoid getPropertyNames() before checking ArrayBuffer/typed-array-like objects when payloads contain binary data. -- Evaluate NativeState only for JS-visible stateful native objects; current hot RPC function does not need it, and the existing teardown HostObject is not a hot path. -- Evaluate runtime/engine compatibility explicitly against Hermes current, Hermes V1, and JSC fallback assumptions before adopting any ArrayBuffer-backed fast path. - -## API Policy - -- Preserve the existing JS contract: global.rpcOnGo(message) and global.rpcOnJs(objs, count). -- Do not migrate this RPC pipe to normal TurboModule methods unless benchmarks show a clear win; Codegen's documented type surface is currently weaker for arbitrary msgpack/binary payloads. -- Any binary representation change must be behavior-compatible with existing RPC consumers, especially code expecting Uint8Array rather than ArrayBuffer. - -## Test Plan - -- Add native round-trip tests or a standalone benchmark harness for nulls, booleans, integers, floats, strings, maps, arrays, empty objects, ArrayBuffer, Uint8Array, and large binary blobs. -- Measure before/after on representative RPC shapes: small method calls, nested maps, chat/message payloads, and binary-heavy payloads. -- Use RN 0.83 Web Performance APIs / DevTools Performance panel for JS-side timing where useful. -- Do not run yarn, npm, yarn lint, or yarn tsc on this machine because node_modules is absent. - -## Sources - -- React Native New Architecture docs: https://reactnative.dev/architecture/landing-page -- RN 0.83 Native Modules docs: https://reactnative.dev/docs/0.83/turbo-native-modules-introduction -- RN Codegen typings appendix: https://reactnative.dev/docs/appendix -- RN 0.83.4 JSI header: https://raw.githubusercontent.com/facebook/react-native/v0.83.4/packages/react-native/ReactCommon/jsi/jsi/jsi.h -- RN 0.83 release notes: https://reactnative.dev/blog/2025/12/10/react-native-0.83 -- Margelo JSI performance post: https://blog.margelo.com/make-jsi-run-faster diff --git a/rnmodules/react-native-kb/android/CMakeLists.txt b/rnmodules/react-native-kb/android/CMakeLists.txt index 92cacd494863..30091fd94228 100644 --- a/rnmodules/react-native-kb/android/CMakeLists.txt +++ b/rnmodules/react-native-kb/android/CMakeLists.txt @@ -26,7 +26,11 @@ set_target_properties( POSITION_INDEPENDENT_CODE ON ) -add_definitions(-DMSGPACK_NO_BOOST) +target_compile_definitions( + cpp + PRIVATE + MSGPACK_NO_BOOST +) find_package(ReactAndroid REQUIRED CONFIG) find_package(fbjni REQUIRED CONFIG) diff --git a/rnmodules/react-native-kb/cpp/react-native-kb.cpp b/rnmodules/react-native-kb/cpp/react-native-kb.cpp index ef1be84eead8..7be06ad373ed 100644 --- a/rnmodules/react-native-kb/cpp/react-native-kb.cpp +++ b/rnmodules/react-native-kb/cpp/react-native-kb.cpp @@ -1,6 +1,7 @@ #include "react-native-kb.h" #include #include +#include #include "msgpack-safe.hpp" #include @@ -37,6 +38,29 @@ void KBBridge::resetCaches(Runtime &runtime) { } } +Function &KBBridge::uint8ArrayCtor(Runtime &runtime) { + resetCaches(runtime); + if (!cachedUint8ArrayCtor_) { + auto ctor = runtime.global().getPropertyAsFunction(runtime, "Uint8Array"); + cachedUint8ArrayCtor_ = std::make_unique(std::move(ctor)); + } + return *cachedUint8ArrayCtor_; +} + +Value KBBridge::binaryFromBytes(Runtime &runtime, const char *ptr, + size_t size) { + Value uint8Array = uint8ArrayCtor(runtime).callAsConstructor( + runtime, static_cast(size)); + Object uint8ArrayObj = uint8Array.asObject(runtime); + ArrayBuffer buffer = uint8ArrayObj.getProperty(runtime, "buffer") + .asObject(runtime) + .getArrayBuffer(runtime); + if (size > 0) { + std::memcpy(buffer.data(runtime), ptr, size); + } + return uint8Array; +} + static std::string mpToString(msgpack::object &o) { switch (o.type) { case msgpack::type::STR: @@ -96,23 +120,8 @@ Value KBBridge::convertMPToJSI(Runtime &runtime, void *mpObj) { } case msgpack::type::BIN: { auto ptr = o.via.bin.ptr; - int size = o.via.bin.size; - - resetCaches(runtime); - if (!cachedUint8ArrayCtor_) { - auto ctor = - runtime.global().getPropertyAsFunction(runtime, "Uint8Array"); - cachedUint8ArrayCtor_ = std::make_unique(std::move(ctor)); - } - - Value uint8Array = - cachedUint8ArrayCtor_->callAsConstructor(runtime, size); - Object uint8ArrayObj = uint8Array.asObject(runtime); - ArrayBuffer buffer = uint8ArrayObj.getProperty(runtime, "buffer") - .asObject(runtime) - .getArrayBuffer(runtime); - std::memcpy(buffer.data(runtime), ptr, size); - return uint8Array; + auto size = o.via.bin.size; + return binaryFromBytes(runtime, ptr, size); } case msgpack::type::ARRAY: { auto size = o.via.array.size; @@ -154,11 +163,28 @@ void KBBridge::convertJSIToMP(Runtime &runtime, const Value &value, pk.pack(str); } else if (value.isObject()) { auto obj = value.getObject(runtime); + auto packArrayBufferBytesUnchecked = [&](ArrayBuffer &arrayBuf, + size_t offset, size_t length) { + pk.pack_bin(static_cast(length)); + pk.pack_bin_body( + reinterpret_cast(arrayBuf.data(runtime)) + offset, + static_cast(length)); + }; + auto packArrayBufferBytes = [&](ArrayBuffer &arrayBuf, size_t offset, + size_t length) { + auto bufferSize = arrayBuf.size(runtime); + if (offset > bufferSize || length > bufferSize - offset || + length > std::numeric_limits::max()) { + throw std::runtime_error("ArrayBuffer view is out of range"); + } + pk.pack_bin(static_cast(length)); + pk.pack_bin_body( + reinterpret_cast(arrayBuf.data(runtime)) + offset, + static_cast(length)); + }; if (obj.isArrayBuffer(runtime)) { auto buf = obj.getArrayBuffer(runtime); - pk.pack_bin(static_cast(buf.size(runtime))); - pk.pack_bin_body(reinterpret_cast(buf.data(runtime)), - static_cast(buf.size(runtime))); + packArrayBufferBytes(buf, 0, buf.size(runtime)); } else if (obj.isArray(runtime)) { auto arr = obj.getArray(runtime); auto len = arr.size(runtime); @@ -167,12 +193,12 @@ void KBBridge::convertJSIToMP(Runtime &runtime, const Value &value, convertJSIToMP(runtime, arr.getValueAtIndex(runtime, i), &pk); } } else { - auto names = obj.getPropertyNames(runtime); - auto len = names.size(runtime); - - // Probe for TypedArray (Uint8Array). Extracted as a lambda so it - // can be called from two sites without duplicating the logic. - auto tryPackTypedArray = [&]() -> bool { + auto tryPackTypedArray = [&](bool requireUint8Array, + bool validateView) -> bool { + if (requireUint8Array && + !obj.instanceOf(runtime, uint8ArrayCtor(runtime))) { + return false; + } auto byteLengthProp = obj.getProperty(runtime, "byteLength"); if (!byteLengthProp.isNumber()) return false; auto bufferProp = obj.getProperty(runtime, "buffer"); @@ -181,20 +207,40 @@ void KBBridge::convertJSIToMP(Runtime &runtime, const Value &value, if (!bufferObj.isArrayBuffer(runtime)) return false; auto arrayBuf = bufferObj.getArrayBuffer(runtime); auto byteOffset = obj.getProperty(runtime, "byteOffset"); - size_t offset = byteOffset.isNumber() - ? static_cast(byteOffset.getNumber()) - : 0; - size_t length = static_cast(byteLengthProp.getNumber()); - pk.pack_bin(static_cast(length)); - pk.pack_bin_body( - reinterpret_cast(arrayBuf.data(runtime)) + offset, - static_cast(length)); + auto byteLengthNum = byteLengthProp.getNumber(); + auto byteOffsetNum = + byteOffset.isNumber() ? byteOffset.getNumber() : 0; + if (validateView) { + if (!std::isfinite(byteOffsetNum) || + !std::isfinite(byteLengthNum) || byteOffsetNum < 0 || + byteLengthNum < 0 || + byteOffsetNum != std::floor(byteOffsetNum) || + byteLengthNum != std::floor(byteLengthNum)) { + return false; + } + auto offset = static_cast(byteOffsetNum); + auto length = static_cast(byteLengthNum); + packArrayBufferBytes(arrayBuf, offset, length); + } else { + auto offset = static_cast(byteOffsetNum); + auto length = static_cast(byteLengthNum); + packArrayBufferBytesUnchecked(arrayBuf, offset, length); + } return true; }; + // Uint8Array is common for RPC binary payloads; check it before + // enumerating indexed properties. + if (tryPackTypedArray(true, true)) { + return; + } + + auto names = obj.getPropertyNames(runtime); + auto len = names.size(runtime); + // Empty object: could be {} or empty TypedArray — must probe if (len == 0) { - if (tryPackTypedArray()) return; + if (tryPackTypedArray(false, false)) return; pk.pack_map(0); return; } @@ -206,7 +252,7 @@ void KBBridge::convertJSIToMP(Runtime &runtime, const Value &value, auto firstName = names.getValueAtIndex(runtime, 0).getString(runtime); auto firstStr = firstName.utf8(runtime); if (!firstStr.empty() && firstStr[0] >= '0' && firstStr[0] <= '9') { - if (tryPackTypedArray()) return; + if (tryPackTypedArray(false, false)) return; } // Regular object — encode as MAP @@ -328,7 +374,6 @@ void KBBridge::onDataFromGo(uint8_t *data, int size) { break; } } - if (values->empty()) { return; } diff --git a/rnmodules/react-native-kb/cpp/react-native-kb.h b/rnmodules/react-native-kb/cpp/react-native-kb.h index 8fc5521fd93f..4ca49b66d639 100644 --- a/rnmodules/react-native-kb/cpp/react-native-kb.h +++ b/rnmodules/react-native-kb/cpp/react-native-kb.h @@ -51,6 +51,9 @@ class KBBridge : public std::enable_shared_from_this { std::vector combinedBuf_; void resetCaches(facebook::jsi::Runtime &runtime); + facebook::jsi::Function &uint8ArrayCtor(facebook::jsi::Runtime &runtime); + facebook::jsi::Value binaryFromBytes(facebook::jsi::Runtime &runtime, + const char *ptr, size_t size); facebook::jsi::Value convertMPToJSI(facebook::jsi::Runtime &runtime, void *mpObj); void convertJSIToMP(facebook::jsi::Runtime &runtime, diff --git a/rnmodules/react-native-kb/react-native-kb.podspec b/rnmodules/react-native-kb/react-native-kb.podspec index 5091221340d4..1ec4a7782d1e 100644 --- a/rnmodules/react-native-kb/react-native-kb.podspec +++ b/rnmodules/react-native-kb/react-native-kb.podspec @@ -2,6 +2,7 @@ require "json" package = JSON.parse(File.read(File.join(__dir__, "package.json"))) folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' +kb_cpp_flags = "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DMSGPACK_NO_BOOST=1" Pod::Spec.new do |s| s.name = "react-native-kb" @@ -27,7 +28,7 @@ Pod::Spec.new do |s| if respond_to?(:install_modules_dependencies, true) s.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\" $(PODS_ROOT)/../../node_modules/msgpack-cxx-7.0.0/include $(PODS_ROOT)/../keybasego.xcframework/ios-arm64/Keybasego.framework/Headers \"$(PODS_CONFIGURATION_BUILD_DIR)/KBCommon\"", - "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DMSGPACK_NO_BOOST=1", + "OTHER_CPLUSPLUSFLAGS" => kb_cpp_flags, "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" } install_modules_dependencies(s) @@ -39,7 +40,7 @@ Pod::Spec.new do |s| s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1" s.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\" $(PODS_ROOT)/../../node_modules/msgpack-cxx-7.0.0/include $(PODS_ROOT)/../keybasego.xcframework/ios-arm64/Keybasego.framework/Headers \"$(PODS_CONFIGURATION_BUILD_DIR)/KBCommon\"", - "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DMSGPACK_NO_BOOST=1", + "OTHER_CPLUSPLUSFLAGS" => kb_cpp_flags, "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" } s.dependency "React-Codegen" @@ -50,7 +51,7 @@ Pod::Spec.new do |s| else s.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\" $(PODS_ROOT)/../../node_modules/msgpack-cxx-7.0.0/include $(PODS_ROOT)/../keybasego.xcframework/ios-arm64/Keybasego.framework/Headers \"$(PODS_CONFIGURATION_BUILD_DIR)/KBCommon\"", - "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DMSGPACK_NO_BOOST=1", + "OTHER_CPLUSPLUSFLAGS" => kb_cpp_flags, "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" } end diff --git a/shared/chat/conversation/data-hooks.tsx b/shared/chat/conversation/data-hooks.tsx index 61a41f439ccf..1de090cc4848 100644 --- a/shared/chat/conversation/data-hooks.tsx +++ b/shared/chat/conversation/data-hooks.tsx @@ -24,7 +24,7 @@ const emptyMessages: ReadonlyArray = [] const reloadConversationMetadata = (conversationIDKey: T.Chat.ConversationIDKey) => { if (T.Chat.isValidConversationIDKey(conversationIDKey)) { - unboxRows([conversationIDKey], true) + unboxRows([conversationIDKey]) } } diff --git a/shared/chat/conversation/list-area/hooks.tsx b/shared/chat/conversation/list-area/hooks.tsx index c320b12e72d2..5b6f064cbf99 100644 --- a/shared/chat/conversation/list-area/hooks.tsx +++ b/shared/chat/conversation/list-area/hooks.tsx @@ -1,24 +1,15 @@ import * as C from '@/constants' -import * as Chat from '@/constants/chat' import JumpToRecent from './jump-to-recent' -import type * as T from '@/constants/types' import {useConversationCenter} from '../center-context' import { useConversationThreadMarkThreadAsRead, useConversationThreadSelector, useConversationThreadToggleSearch, } from '../thread-context' -import logger from '@/logger' -export const useActions = (p: {conversationIDKey: T.Chat.ConversationIDKey}) => { - const {conversationIDKey} = p +export const useActions = () => { const markThreadAsRead = useConversationThreadMarkThreadAsRead() const markInitiallyLoadedThreadAsRead = () => { - const selected = Chat.getSelectedConversation() - if (selected !== conversationIDKey) { - logger.info('mark intially as read bail on not looking at this thread anymore?') - return - } markThreadAsRead() } diff --git a/shared/chat/conversation/list-area/index.desktop.tsx b/shared/chat/conversation/list-area/index.desktop.tsx index 409698f74e4f..23fe3b263b3c 100644 --- a/shared/chat/conversation/list-area/index.desktop.tsx +++ b/shared/chat/conversation/list-area/index.desktop.tsx @@ -44,7 +44,6 @@ const useScrolling = (p: { setListRef: (r: HTMLDivElement | null) => void centeredOrdinal: T.Chat.Ordinal | undefined }) => { - const conversationIDKey = useConversationThreadID() const {listRef, setListRef: _setListRef, containsLatestMessage} = p const containsLatestMessageRef = React.useRef(containsLatestMessage) React.useEffect(() => { @@ -64,7 +63,7 @@ const useScrolling = (p: { const loadOlderMessages = React.useCallback((numOrdinals: number) => { loadOlderMessagesDueToScroll(numOrdinals, getThreadLoadStatusOptions()) }, [loadOlderMessagesDueToScroll, getThreadLoadStatusOptions]) - const {markInitiallyLoadedThreadAsRead} = Hooks.useActions({conversationIDKey}) + const {markInitiallyLoadedThreadAsRead} = Hooks.useActions() // pixels away from top/bottom to load/be locked const listEdgeSlopBottom = 10 const listEdgeSlopTop = 1000 diff --git a/shared/chat/conversation/list-area/index.native.tsx b/shared/chat/conversation/list-area/index.native.tsx index 70f81140a25c..e47df471047e 100644 --- a/shared/chat/conversation/list-area/index.native.tsx +++ b/shared/chat/conversation/list-area/index.native.tsx @@ -31,10 +31,6 @@ import {useThreadLoadStatusOptionsGetter} from '../thread-load-status-context' const List = /*usingFlashList ? FlashList :*/ FlatList const noOrdinals: ReadonlyArray = [] -// We load the first thread automatically so in order to mark it read -// we send an action on the first mount once -let markedInitiallyLoaded = false - export const DEBUGDump = () => {} const useInvertedMessageOrdinals = (messageOrdinals?: ReadonlyArray) => { @@ -127,7 +123,7 @@ const ConversationList = function ConversationList() { const messageOrdinals = useInvertedMessageOrdinals(listData.messageOrdinals) const listRef = React.useRef |*/ FlatList | null>(null) - const {markInitiallyLoadedThreadAsRead} = Hooks.useActions({conversationIDKey}) + const {markInitiallyLoadedThreadAsRead} = Hooks.useActions() const keyExtractor = (ordinal: ItemType) => { return String(ordinal) } @@ -183,20 +179,23 @@ const ConversationList = function ConversationList() { return undefined }, [centeredOrdinalOrNone, scrollToCentered]) - React.useEffect(() => { - if (!markedInitiallyLoaded) { - markedInitiallyLoaded = true - markInitiallyLoadedThreadAsRead() - } - }, [markInitiallyLoadedThreadAsRead]) - - const prevLoadedRef = React.useRef(loaded) + const prevLoadedRef = React.useRef(false) + const markedLoadedThreadRef = React.useRef(false) + React.useLayoutEffect(() => { + prevLoadedRef.current = false + markedLoadedThreadRef.current = false + }, [conversationIDKey]) React.useLayoutEffect(() => { const justLoaded = loaded && !prevLoadedRef.current prevLoadedRef.current = loaded if (!justLoaded) return + if (!markedLoadedThreadRef.current) { + markedLoadedThreadRef.current = true + markInitiallyLoadedThreadAsRead() + } + if (centeredOrdinalOrNone > 0) { scrollToCentered() setTimeout(() => { @@ -208,7 +207,14 @@ const ConversationList = function ConversationList() { scrollToBottom() }, 100) } - }, [loaded, centeredOrdinalOrNone, scrollToBottom, scrollToCentered, numOrdinals]) + }, [ + centeredOrdinalOrNone, + loaded, + markInitiallyLoadedThreadAsRead, + numOrdinals, + scrollToBottom, + scrollToCentered, + ]) // useChatDebugDump( // 'listArea', diff --git a/shared/chat/conversation/thread-context.tsx b/shared/chat/conversation/thread-context.tsx index 394f894c8d4e..5f446145c29c 100644 --- a/shared/chat/conversation/thread-context.tsx +++ b/shared/chat/conversation/thread-context.tsx @@ -30,6 +30,7 @@ import {useShellState} from '@/stores/shell' import {produce, type Draft} from 'immer' import {useStore} from 'zustand' import {createStore, type StoreApi} from 'zustand/vanilla' +import {useIsFocused} from '@react-navigation/core' import { addMessagesToThreadState, applyOptimisticReactionsToMessage, @@ -903,6 +904,8 @@ const ConversationThreadProviderInner = (p: ConversationThreadProviderProps) => const {children, id} = p const [threadStore] = React.useState(() => makeThreadStore(id)) const active = useShellState(s => s.active) + const appFocused = useShellState(s => s.appFocused) + const routeFocused = useIsFocused() const previousActiveRef = React.useRef(active) const activeMarkReadEnabledRef = React.useRef(false) const markReadBlockedRef = React.useRef(false) @@ -936,7 +939,7 @@ const ConversationThreadProviderInner = (p: ConversationThreadProviderProps) => logger.info('mark read bail on blocked thread load') return } - if (!Common.isUserActivelyLookingAtThisThread(id)) { + if (!appFocused || !active || !routeFocused) { logger.info('mark read bail on not looking at this thread') return } @@ -1973,7 +1976,6 @@ export const useConversationThreadMessageActions = () => { export const useConversationThreadSelectedConversation = () => { const conversationIDKey = useConversationThreadID() - const isMetaGood = useConversationThreadSelector(s => s.meta.conversationIDKey === conversationIDKey) const loadMoreMessages = useConversationThreadLoadMoreMessages() const participantInfo = useConversationThreadSelector(s => s.participants) @@ -1981,8 +1983,7 @@ export const useConversationThreadSelectedConversation = () => { const {skipThreadLoad, ...loadStatusOptions} = options ?? {} clearChatTimeCache() - const force = !isMetaGood || participantInfo.all.length === 0 - unboxRows([conversationIDKey], force) + unboxRows([conversationIDKey]) const username = useCurrentUserState.getState().username const otherParticipants = Meta.getRowParticipants(participantInfo, username || '') diff --git a/shared/chat/inbox/engine.test.tsx b/shared/chat/inbox/engine.test.tsx index 98a2e0e7e637..b78349808c77 100644 --- a/shared/chat/inbox/engine.test.tsx +++ b/shared/chat/inbox/engine.test.tsx @@ -3,6 +3,7 @@ import * as T from '@/constants/types' import {resetAllStores} from '@/util/zustand' import {handleConvoEngineIncoming} from './engine' import {getInboxConversationMeta, getInboxConversationParticipants, syncBadgeState} from './metadata' +import {useConfigState} from '@/stores/config' import { syncInboxRowBadgeState, syncInboxRowsFromParticipantMap, @@ -265,6 +266,33 @@ test('global message activity routing preserves returned global data', () => { expect(reactionResult.userReacjis).toEqual(userReacjis) }) +test('read message activity without attached inbox item refreshes service-owned metadata', () => { + useConfigState.setState({loggedIn: true}) + const unbox = jest.spyOn(T.RPCChat, 'localRequestInboxUnboxRpcPromise').mockResolvedValue(undefined) + + expect( + handleConvoEngineIncoming({ + payload: { + params: { + activity: { + activityType: T.RPCChat.ChatActivityType.readMessage, + readMessage: { + conv: null, + convID: T.Chat.keyToConversationID(convID), + msgID: T.Chat.messageIDToNumber(msgID), + }, + }, + }, + }, + type: 'chat.1.NotifyChat.NewChatActivity', + } as never).handled + ).toBe(true) + + expect(unbox).toHaveBeenCalledWith({ + convIDs: [T.Chat.keyToConversationID(convID)], + }) +}) + test('global failed message and transfer routing is handled without mounted thread state', () => { expect( handleConvoEngineIncoming({ diff --git a/shared/chat/inbox/engine.tsx b/shared/chat/inbox/engine.tsx index 1f2810d12a81..b8911f5a129e 100644 --- a/shared/chat/inbox/engine.tsx +++ b/shared/chat/inbox/engine.tsx @@ -12,6 +12,7 @@ import {useShellState} from '@/stores/shell' import {useUsersState} from '@/stores/users' import {updateInboxRowTyping} from '@/stores/inbox-rows' import { + forceUnboxRowsForService, getInboxConversationMeta, metaReceivedError, metasReceived, @@ -57,7 +58,7 @@ const onChatThreadsStale = (updates: ThreadStaleUpdates) => { logger.info( `onChatThreadsStale: dispatching thread reload actions for ${conversationIDKeys.length} convs of type ${key}` ) - unboxRows(conversationIDKeys, true) + forceUnboxRowsForService(conversationIDKeys) }) } @@ -115,8 +116,13 @@ const onNewChatActivity = (activity: NewChatActivity): ConvoEngineIncomingResult } case T.RPCChat.ChatActivityType.setStatus: return handledConvoEngineIncoming({inboxUIItem: activity.setStatus.conv ?? undefined}) - case T.RPCChat.ChatActivityType.readMessage: - return handledConvoEngineIncoming({inboxUIItem: activity.readMessage.conv ?? undefined}) + case T.RPCChat.ChatActivityType.readMessage: { + const {readMessage} = activity + if (!readMessage.conv) { + forceUnboxRowsForService([T.Chat.conversationIDToKey(readMessage.convID)]) + } + return handledConvoEngineIncoming({inboxUIItem: readMessage.conv ?? undefined}) + } case T.RPCChat.ChatActivityType.newConversation: return handledConvoEngineIncoming({inboxUIItem: activity.newConversation.conv ?? undefined}) case T.RPCChat.ChatActivityType.failedMessage: { @@ -144,7 +150,7 @@ const onNewChatActivity = (activity: NewChatActivity): ConvoEngineIncomingResult return handledConvoEngineIncoming({inboxUIItem}) } case T.RPCChat.ChatActivityType.membersUpdate: - unboxRows([T.Chat.conversationIDToKey(activity.membersUpdate.convID)], true) + forceUnboxRowsForService([T.Chat.conversationIDToKey(activity.membersUpdate.convID)]) return handledConvoEngineIncoming() case T.RPCChat.ChatActivityType.setAppNotificationSettings: { const {setAppNotificationSettings} = activity @@ -228,9 +234,8 @@ export const handleConvoEngineIncoming = (action: EngineGen.Actions): ConvoEngin onChatThreadsStale(action.payload.params.updates) return handledConvoEngineIncoming() case 'chat.1.NotifyChat.ChatSubteamRename': - unboxRows( - (action.payload.params.convs ?? []).map(c => T.Chat.stringToConversationIDKey(c.convID)), - true + forceUnboxRowsForService( + (action.payload.params.convs ?? []).map(c => T.Chat.stringToConversationIDKey(c.convID)) ) return handledConvoEngineIncoming() case 'chat.1.NotifyChat.ChatTLFFinalize': diff --git a/shared/chat/inbox/metadata.test.tsx b/shared/chat/inbox/metadata.test.tsx new file mode 100644 index 000000000000..cbde2fbfde72 --- /dev/null +++ b/shared/chat/inbox/metadata.test.tsx @@ -0,0 +1,48 @@ +/// +import * as T from '@/constants/types' +import {resetAllStores} from '@/util/zustand' +import {useConfigState} from '@/stores/config' +import {forceUnboxRowsForService} from './metadata' + +const convID = T.Chat.conversationIDToKey(new Uint8Array([1, 2, 3, 4])) + +const flushPromises = async () => { + for (let i = 0; i < 5; i++) { + await Promise.resolve() + } +} + +beforeEach(() => { + useConfigState.setState({loggedIn: true}) +}) + +afterEach(() => { + jest.restoreAllMocks() + resetAllStores() +}) + +test('forceUnboxRowsForService reruns once for requests made while an unbox is in flight', async () => { + const resolvers = new Array<() => void>() + jest.spyOn(T.RPCChat, 'localRequestInboxUnboxRpcPromise').mockImplementation( + async () => + new Promise(resolve => { + resolvers.push(() => { + resolve(undefined) + }) + }) + ) + + forceUnboxRowsForService([convID]) + forceUnboxRowsForService([convID]) + await flushPromises() + + expect(T.RPCChat.localRequestInboxUnboxRpcPromise).toHaveBeenCalledTimes(1) + + resolvers[0]?.() + await flushPromises() + + expect(T.RPCChat.localRequestInboxUnboxRpcPromise).toHaveBeenCalledTimes(2) + + resolvers[1]?.() + await flushPromises() +}) diff --git a/shared/chat/inbox/metadata.tsx b/shared/chat/inbox/metadata.tsx index 86988e60db27..feb73f05c957 100644 --- a/shared/chat/inbox/metadata.tsx +++ b/shared/chat/inbox/metadata.tsx @@ -260,7 +260,7 @@ export const onChatRouteChanged = ( return } if (wasChat && wasID && T.Chat.isValidConversationIDKey(wasID)) { - unboxRows([wasID], true) + unboxRows([wasID]) } } @@ -298,6 +298,9 @@ const untrustedConversationIDKeys = (ids: ReadonlyArray() +const pendingForcedUnboxRows = new Set() + type ConvoMetaQueueState = T.Immutable<{ generation: number inFlight: boolean @@ -340,6 +343,8 @@ const useConvoMetaQueueState = Z.createZustand('convo-meta- get().dispatch.queueMetaHandle() }, resetState: () => { + inFlightUnboxRows.clear() + pendingForcedUnboxRows.clear() set(s => { s.generation += 1 s.inFlight = false @@ -405,7 +410,7 @@ async function runMetaQueueWorker(generation: number) { } } -export const unboxRows = (ids: ReadonlyArray, force?: boolean) => { +const requestInboxUnboxRows = (ids: ReadonlyArray, force: boolean) => { const f = async () => { if (!useConfigState.getState().loggedIn) { return @@ -414,7 +419,11 @@ export const unboxRows = (ids: ReadonlyArray, force?: const conversationIDKeys = ids.reduce>((arr, id) => { if (id && T.Chat.isValidConversationIDKey(id)) { const trustedState = trustedStateForConversation(id) - if (force || (trustedState !== 'requesting' && trustedState !== 'trusted')) { + if (inFlightUnboxRows.has(id)) { + if (force) { + pendingForcedUnboxRows.add(id) + } + } else if (force || (trustedState !== 'requesting' && trustedState !== 'trusted')) { arr.push(id) } } @@ -424,6 +433,7 @@ export const unboxRows = (ids: ReadonlyArray, force?: if (!conversationIDKeys.length) { return } + conversationIDKeys.forEach(id => inFlightUnboxRows.add(id)) setInboxRowTrustedState(conversationIDKeys, 'requesting') logger.info( `unboxRows: unboxing len: ${conversationIDKeys.length} convs: ${conversationIDKeys.join(',')}` @@ -436,11 +446,31 @@ export const unboxRows = (ids: ReadonlyArray, force?: if (error instanceof RPCError) { logger.info(`unboxRows: failed ${error.desc}`) } + } finally { + conversationIDKeys.forEach(id => inFlightUnboxRows.delete(id)) + const rerunIDs = conversationIDKeys.filter(id => { + const shouldRerun = pendingForcedUnboxRows.has(id) + if (shouldRerun) { + pendingForcedUnboxRows.delete(id) + } + return shouldRerun + }) + if (rerunIDs.length > 0) { + requestInboxUnboxRows(rerunIDs, true) + } } } ignorePromise(f()) } +export const unboxRows = (ids: ReadonlyArray) => { + requestInboxUnboxRows(ids, false) +} + +export const forceUnboxRowsForService = (ids: ReadonlyArray) => { + requestInboxUnboxRows(ids, true) +} + export const queueMetaHandle = () => { useConvoMetaQueueState.getState().dispatch.queueMetaHandle() } @@ -471,7 +501,7 @@ export const ensureWidgetMetas = ( if (missing.length === 0) { return } - unboxRows(missing, true) + unboxRows(missing) } export const ensureInboxSearchMetas = (ids: ReadonlyArray) => { @@ -482,7 +512,7 @@ export const ensureInboxSearchMetas = (ids: ReadonlyArray 0) { - unboxRows(missing, true) + unboxRows(missing) } } @@ -554,11 +584,10 @@ export const onChatInboxSynced = async ( metasReceived(metas, removals) } - unboxRows( + forceUnboxRowsForService( items .filter(item => item.shouldUnbox) - .map(item => T.Chat.stringToConversationIDKey(item.conv.convID)), - true + .map(item => T.Chat.stringToConversationIDKey(item.conv.convID)) ) return } diff --git a/shared/desktop/yarn-helper/index.mts b/shared/desktop/yarn-helper/index.mts index ee64f95aae3a..5f82302428fc 100644 --- a/shared/desktop/yarn-helper/index.mts +++ b/shared/desktop/yarn-helper/index.mts @@ -42,6 +42,7 @@ const commands: {[key: string]: Command} = { postinstall: { code: () => { fixModules() + syncLocalRNModules() checkFSEvents() clearTSCache() clearAndroidBuild() @@ -51,6 +52,12 @@ const commands: {[key: string]: Command} = { }, help: '', }, + 'sync-local-rnmodules': { + code: () => { + syncLocalRNModules() + }, + help: 'Sync local file:../rnmodules dependencies into node_modules', + }, test: { code: () => { const update = process.argv[3] === '-u' @@ -95,6 +102,66 @@ function fixModules() { } catch {} } +const syncLocalRNModules = () => { + const sharedRoot = path.resolve(__dirname, '..', '..') + const repoRoot = path.resolve(sharedRoot, '..') + const rnmodulesRoot = path.join(repoRoot, 'rnmodules') + const nodeModulesRoot = path.join(sharedRoot, 'node_modules') + + if (!fs.existsSync(nodeModulesRoot)) { + return + } + + const packageJSONPath = path.join(sharedRoot, 'package.json') + const packageJSON = JSON.parse(fs.readFileSync(packageJSONPath, 'utf8')) as { + dependencies?: Record + devDependencies?: Record + optionalDependencies?: Record + } + const deps = { + ...packageJSON.dependencies, + ...packageJSON.devDependencies, + ...packageJSON.optionalDependencies, + } + + for (const [name, spec] of Object.entries(deps)) { + if (!spec.startsWith('file:../rnmodules/')) { + continue + } + + const source = path.resolve(sharedRoot, spec.slice('file:'.length)) + const relToRNModules = path.relative(rnmodulesRoot, source) + if (relToRNModules.startsWith('..') || path.isAbsolute(relToRNModules)) { + continue + } + + if (!fs.existsSync(source)) { + throw new Error(`Local RN module source is missing for ${name}: ${source}`) + } + + const dest = path.join(nodeModulesRoot, name) + console.log(`Syncing ${name} from ${path.relative(sharedRoot, source)} to node_modules`) + rimrafSync(dest) + fs.mkdirSync(path.dirname(dest), {recursive: true}) + fs.cpSync(source, dest, { + filter: src => { + const rel = path.relative(source, src) + return !( + rel === 'node_modules' || + rel.startsWith(`node_modules${path.sep}`) || + rel === '.git' || + rel.startsWith(`.git${path.sep}`) || + rel === 'android/build' || + rel.startsWith(`android${path.sep}build${path.sep}`) || + rel === 'ios/build' || + rel.startsWith(`ios${path.sep}build${path.sep}`) + ) + }, + recursive: true, + }) + } +} + function exec(command: string, env?: object, options?: object) { console.log( execSync(command, { diff --git a/shared/package.json b/shared/package.json index dab71df0d6b8..91bd160e6adc 100644 --- a/shared/package.json +++ b/shared/package.json @@ -63,7 +63,7 @@ "android-log-clear": "adb logcat -b all -c", "clean-and-install": "rm -rf node_modules ; yarn pod-clean ; yarn modules ; yarn pod-install", "coverage": "rm -rf coverage-ts; npx typescript-coverage-report", - "sync-kb-modules": "rm -rf node_modules/react-native-kb ; yarn --check-files", + "sync-kb-modules": "yarn run _helper sync-local-rnmodules", "maestro-test": "MAESTRO_CLI_NO_ANALYTICS=1 ./perf/run-maestro.sh", "maestro-test-perf-inbox": "MAESTRO_CLI_NO_ANALYTICS=1 ./perf/run-maestro.sh --flow performance/perf-inbox-scroll.yaml", "maestro-test-perf-teams": "MAESTRO_CLI_NO_ANALYTICS=1 ./perf/run-maestro.sh --flow performance/perf-teams-scroll.yaml", diff --git a/shared/stores/tests/config.test.ts b/shared/stores/tests/config.test.ts index 2bafad76faae..4130ba253f39 100644 --- a/shared/stores/tests/config.test.ts +++ b/shared/stores/tests/config.test.ts @@ -118,7 +118,7 @@ test('onEngineIncoming owns audit errors and badge state', () => { test('custom resetState preserves the fields config intentionally carries across resets', () => { const {dispatch} = useConfigState.getState() - dispatch.setAccounts([{hasStoredSecret: true, username: 'alice'}]) + dispatch.setAccounts([{hasStoredSecret: true, uid: 'alice-uid', username: 'alice'}]) dispatch.setDefaultUsername('alice') useConfigState.setState({ globalError: new Error('transient'), @@ -128,7 +128,7 @@ test('custom resetState preserves the fields config intentionally carries across dispatch.resetState() const state = useConfigState.getState() - expect(state.configuredAccounts).toEqual([{hasStoredSecret: true, username: 'alice'}]) + expect(state.configuredAccounts).toEqual([{hasStoredSecret: true, uid: 'alice-uid', username: 'alice'}]) expect(state.defaultUsername).toBe('alice') expect(state.userSwitching).toBe(true) expect(state.globalError).toBeUndefined()