* core: wallet key for name ownership (CLI only) A name has to be owned by an address the client can still derive after a restart or on a new device. This adds that key and nothing else. /wallet create makes one BIP-39 key per device and one BIP-44 account per chat profile under it, /wallet shows the address that would own the next name that profile buys, /wallet import and /wallet export move the key with its recovery phrase. A name key sits at m/44'/60'/<profile>'/0/<name>, which is ordinary BIP-44, so the phrase reaches the same addresses in other wallets. No signing, so nothing can be bought or edited yet. Split out of #7390 / #7425. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: pin simplexmq with eth crypto merged into master ab/eth-crypto forked before Crypto.Entitlement, which Chat.Badges imports, so the branch had to be merged with simplexmq master before it could be pinned here. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: wallet review fixes, and show the derived addresses Concurrency: the account index is incremented in SQL and read back in the same transaction, so two profiles cannot be handed the same key. Importing a phrase is one transaction and single_seed is UNIQUE, so a phrase cannot be discarded in favour of a key created meanwhile, and a device cannot end up with two keys. Wallet commands are no longer forwarded to a remote host: the recovery phrase must not leave the device, and the raw command is logged there. /wallet delete removes the key, confirmed by the last word of the phrase, so creating a key before importing your own is no longer a dead end. /wallet now shows every profile on the key with the first two name addresses each, to check derivation against other wallets. Hidden profiles are left out, as they are by /users. A bad phrase no longer says which word was wrong. /wallet export uses the profile's own key. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: make the wallet an API, not a user-facing feature Names commands will use the wallet; users do not. The commands move to /_wallet, and the help section, its topic and the changelog entry are removed. The tests drive the API end to end. Comments cut to what the code does not say, dead exports removed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: wallet export and delete act on the device key The key is one per device, so both commands read it directly instead of going through the active profile's account. A profile without an account of its own can now export, and the delete error says that the key goes for every profile on the device. The confirmation word is lowercased, as the phrase is when imported. Two known limitations are written down: account indexes restart at 0 after an import, so profiles are bound in the order they ask for a key, and the gap left by a hidden profile in the printed indexes shows that it exists. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: /_wallet delete takes no confirmation word The wallet is an API, and no other API command takes a typed confirmation: /_delete user takes the profile password. The word was also no barrier to a caller, which can read it from /_wallet export. Confirming belongs in the command that will wrap this one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: name the unique index on wallet_seeds The one key per device rule is meant to be lifted later. SQLite cannot drop a column with an inline UNIQUE, or its automatic index, so lifting it would have meant rebuilding the table. As a named index it is a DROP INDEX and a DROP COLUMN. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: export the secret of a single name key /_wallet export gives the seed mnemonic, /_wallet export <account> <name> gives the secret of one derived key, so a single name can be handed over without the seed. Both are what a wallet takes on import: the mnemonic as a recovery phrase, the secret as hex. The commands are named for what they return, APIWalletExportSeedMnemonic and APIWalletExportDerivedSecret, as the difference is which secret leaves the device. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: reject a key index BIP-32 cannot harden A.decimal wraps into Word32 and hardened leaves anything at or above 2^31 alone, so /_wallet export 4294967296 0 returned account 0's secret under the path m/44'/60'/0'/0/0. Handing out a different account's key for a mistyped index is the wrong failure for this command. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: /_wallet bind, and name the other profiles instead of numbering them Restoring a chat database older than the key loses which account each profile had, and the keys are still there, so /_wallet bind <account> sets it by hand. The counter moves past an account bound this way, and an account another profile holds is refused. /_wallet now shows the paths of the active profile only, and names the other profiles on the key. Their account indexes were the gap that showed a hidden profile exists. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: say same seed, not same key, for the other profiles Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: create makes the seed, bind claims a path The two were one command: on a device that already had a seed, /_wallet create only bound a profile. Now create makes the seed and refuses when one exists, and binds every profile that exists, as a new seed has no account that already owns a name. /_wallet import binds nothing. Which account a profile had is what an import is recovering, and the seed does not say, so the profile says it with /_wallet bind <account>. /_wallet bind with no account takes the next free one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: the known issue is now about bind, not import Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: create binds no profile either Create and import differed only in whether they bound a profile, which made the convenient one inconsistent. Neither binds now, so the store keeps one function for both, and a profile reaches an account only through bind. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: test the restore cases the key has to survive A database backed up after the key carries the key and the binding, so the restore is all of it and an import is refused. A database backed up before the key comes back with the profiles and no binding, so the phrase is imported and each profile says which account was its. A key imported before the database is restored is replaced by what the backup held. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: drop the types nothing reads, and say account where it means account AccountRef and WalletAccount were built and never read: deriveNameKey now returns the key, and the address comes from addressFromPrivateKey, which already exists. SeedId is a plain Int64 like every other row id here. The master key is derived once per command rather than once per name key, which is where PBKDF2 runs. A device has a key and a profile has an account, so /_wallet says "no account for this profile" rather than repeating "no wallet key", which is what it says when the device has none. Also: no "wallet: " in front of "bad chat command: ", strEncode for the address, the repeated seed lookup in one place, comments cut to what the code does not say, and the export test pins its addresses and secrets, including one whose first byte is zero. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: store the seed as bytes, and bind one account per profile On Postgres a bare ByteString binds as a text literal, so entropy with a backslash or a high bit was rejected and entropy with a zero byte was truncated: the BIP-39 test vector stored as an empty seed. Blob columns go through DB.Binary here, as every other one does. /_wallet bind with no account moved a profile that already had one to a fresh account, abandoning the old one without saying so. It refuses now; moving is asked for by number. The counter could walk past 2^31, where BIP-32 hardening folds every index back onto a low one, so a profile handed 2147483648 derived account 0's keys and printed account 0's path. Binding refuses once the counter is there, and a very long index is now rejected on its digit count rather than after reading it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * docs: rfc for the keys that own names Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: pin simplexmq for the BIP-44 path, and use it ethereumPath now takes the address index, so the path a name key sits at is built once in the library rather than again here. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: refuse an account index BIP-32 cannot harden, whichever way it arrives The counter path checked it, the explicit one did not, and the parser is not the only caller: processChatCommand takes APIWalletBind from library callers too. hardened leaves an index at or above 2^31 alone, so account i and i + 2^31 are the same key while the duplicate check compares the stored integers, and two profiles could hold one account's names. The rfc now says what hiding a profile from /_wallet does and does not protect: the seed is one per device, so whoever unlocks any profile can derive every account. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: pin simplexmq with the wordlist embedded from the upstream file Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * docs: cut the rfc to what stands on its own Drops the references to other documents and to what is or is not in a pull request, so the design reads without them, and the list of tests, which restated their names and would drift. 164 lines to 134, against a median of 117 for the rfcs here that define schema. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * docs: what the stealth meta address is for Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * docs: the wallet is not only for names The seed, the accounts and the derivation are a wallet. Owning a name is the first thing it is used for, not what it is, and the title and the problem it solves now say so. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * docs: the reason for a key per name is that owners are public One address owning several names links them: whoever knows one name can read its owner and find the others. That is the reason, not the narrower export. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * docs: give the reason for the counter before what it costs Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: names are the device's, so drop the per-profile account A name's profile is the record it resolves to, not the key that owns it, so the account level was carrying a mapping nothing needs. It was also the only source of the profile to account ambiguity after a restore, of /_wallet bind, and of the index gap and the refusal that told a visible profile an account was held by one it cannot see. All of it goes. Names sit in account 0 from index 1. Index 0 is left unused so neither the names nor the profile accounts, which start at 1, claim the origin of both dimensions. users gains no columns at all now, so the migration is one CREATE TABLE. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * docs: rfc for names counted per device Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: one command for the seed, whichever way it arrives create and import differed only in where the entropy came from and already shared one store function, so they are one command with the source named: /_wallet create new, or /_wallet create seed=<phrase>. Naming it means no seed is generated by typing a prefix. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: the argument is a mnemonic, so name it one Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: the column holds entropy, so name it entropy The mnemonic comes back from the entropy exactly, which is what export returns, and the seed PBKDF2 derives from the mnemonic is computed when a key is needed and never stored. The column was the one thing called seed that is not the seed, which is why it needed a comment saying so. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * docs: 24 words is a choice, not a default Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: deleting the seed reports ok, not the empty wallet Delete re-ran /_wallet, so a successful delete printed "no wallet key", which is the same words the error uses and reads as a failure. There is nothing to show after a delete. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * docs: the export argument is an index, not a name Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * core: export says which kind of secret, so other kinds can follow /_wallet export name <k> rather than an index straight after export. The bare form stays the seed mnemonic, and a profile's key can be added beside the name one without the argument having to be guessed from its shape. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvc3HbiWBTqbAvRT45G5oX * disencourage hidden profiles using names * let remote use wallet, but filter logs to avoid leaking secrets * change RFC wallet architecture to BIP-85 per profile and hardened paths for names * introduce keyring as the thing a profile binds to * restructure RFC * shorten * drop BIP85 and flattenhierarche. no keyrings * /goal iteration 4 - unconfirmed * /goal iteration 5 - unconfirmed * repin * rename to adapt * cut comments * next review round * minimize diff and align style even more * missing type mappings * fix review comments * self-review iteration 2 * self-review iteration 3 * self-review iteration 5 * iteration 6 * self-review iteration 9 * self-review iteration 10 * repin * rng preserve * refactor WalletSeed type, see mq wip * repin * infallibel wallet and account derivation * review iterations * repin to mq, derivation fallible again * repin * use deriveAddress, update simplexmq * simplexmq * add down migration for db and drop redundant masterkey field in db * repin to simplexmq PR * fable review fixes * iterations on /goal * treat hidden profiles same as normal ones. they can hold accounts now * reduce explicit types * repin mq * doc cosmetics * simplify * query plans * query plan * simplify * query plans * simplify more * fixes for comment ^^ --------- Co-authored-by: Alain Brenzikofer <alain@encointer.org> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
74 KiB
API Types
This file is generated automatically.
- ACIReaction
- AChat
- AChatItem
- AddRelayResult
- AddressSettings
- AgentCryptoError
- AgentErrorType
- AgentServiceError
- AppVersionRange
- AutoAccept
- BadgeInfo
- BadgeProof
- BadgeRedeemError
- BadgeServiceErrorCode
- BadgeStatus
- BadgeType
- BlockingInfo
- BlockingReason
- BrokerErrorType
- BusinessChatInfo
- BusinessChatType
- CICallStatus
- CIContent
- CIDeleteMode
- CIDeleted
- CIDirection
- CIFile
- CIFileStatus
- CIForwardedFrom
- CIGroupInvitation
- CIGroupInvitationStatus
- CIMention
- CIMentionMember
- CIMeta
- CIQuote
- CIReaction
- CIReactionCount
- CIStatus
- CITimed
- ChatBotCommand
- ChatDeleteMode
- ChatError
- ChatErrorType
- ChatFeature
- ChatInfo
- ChatItem
- ChatItemDeletion
- ChatListQuery
- ChatPeerType
- ChatRef
- ChatSettings
- ChatStats
- ChatType
- ChatWallpaper
- ChatWallpaperScale
- ClientNotice
- Color
- CommandError
- CommandErrorType
- CommentsGroupPreference
- ComposedMessage
- ConnStatus
- ConnType
- Connection
- ConnectionEntity
- ConnectionErrorType
- ConnectionMode
- ConnectionPlan
- Contact
- ContactAddressPlan
- ContactShortLinkData
- ContactStatus
- ContactUserPref
- ContactUserPreference
- ContactUserPreferences
- CreatedConnLink
- CryptoFile
- CryptoFileArgs
- CtrlAppInfo
- DomainVerification
- DroppedMsg
- E2EInfo
- ErrorType
- FeatureAllowed
- FileDescr
- FileError
- FileErrorType
- FileInvitation
- FileProhibited
- FileProtocol
- FileStatus
- FileTransferMeta
- FileType
- Format
- FormattedText
- FullGroupPreferences
- FullPreferences
- Group
- GroupChatScope
- GroupChatScopeInfo
- GroupDirectInvitation
- GroupFeature
- GroupFeatureEnabled
- GroupInfo
- GroupLink
- GroupLinkOwner
- GroupLinkPlan
- GroupMember
- GroupMemberAdmission
- GroupMemberCategory
- GroupMemberRef
- GroupMemberRole
- GroupMemberSettings
- GroupMemberStatus
- GroupPreference
- GroupPreferences
- GroupProfile
- GroupRelay
- GroupShortLinkData
- GroupShortLinkInfo
- GroupSummary
- GroupSupportChat
- GroupType
- HandshakeError
- InlineFileMode
- InvitationLinkPlan
- InvitedBy
- LinkContent
- LinkOwnerSig
- LinkPreview
- LocalBadge
- LocalProfile
- MemberCriteria
- MsgChatLink
- MsgContent
- MsgDecryptError
- MsgDirection
- MsgErrorType
- MsgFilter
- MsgReaction
- MsgReceiptStatus
- MsgSigStatus
- MsgVerified
- NameChange
- NameErrorType
- NamePrice
- NameWarning
- NetworkError
- NewUser
- NoteFolder
- OwnerVerification
- PaginationByTime
- PendingContactConnection
- PlanResolveMode
- PrefEnabled
- Preferences
- PreparedContact
- PreparedGroup
- Profile
- ProxyClientError
- ProxyError
- PublicGroupAccess
- PublicGroupData
- PublicGroupProfile
- RCErrorType
- RatchetSyncState
- RcvConnEvent
- RcvDirectEvent
- RcvFileDescr
- RcvFileStatus
- RcvFileTransfer
- RcvGroupEvent
- RcvMsgError
- RelayCapabilities
- RelayConnectionResult
- RelayProfile
- RelayStatus
- RemoteCtrlInfo
- RemoteCtrlSessionState
- RemoteCtrlStopReason
- ReportReason
- RoleGroupPreference
- SMPAgentError
- SecurityCode
- SimplePreference
- SimplexDomain
- SimplexDomainClaim
- SimplexDomainError
- SimplexDomainProof
- SimplexLinkType
- SimplexNameInfo
- SimplexNameType
- SimplexTLD
- SndCIStatusProgress
- SndConnEvent
- SndError
- SndFileTransfer
- SndGroupEvent
- SrvError
- StoreError
- SubscriptionStatus
- SupportGroupPreference
- SwitchPhase
- TimedMessagesGroupPreference
- TimedMessagesPreference
- TransportError
- UIColorMode
- UIColors
- UIThemeEntityOverride
- UIThemeEntityOverrides
- UpdatedMessage
- User
- UserChatRelay
- UserContact
- UserContactLink
- UserContactRequest
- UserContactRequestRef
- UserInfo
- UserProfileUpdateSummary
- UserPwdHash
- VersionRange
- XFTPErrorType
- XFTPRcvFile
- XFTPSndFile
ACIReaction
Record type:
- chatInfo: ChatInfo
- chatReaction: CIReaction
AChat
Record type:
AChatItem
Record type:
AddRelayResult
Record type:
- relay: UserChatRelay
- relayError: ChatError?
AddressSettings
Record type:
- businessAddress: bool
- autoAccept: AutoAccept?
- autoReply: MsgContent?
AgentCryptoError
Discriminated union type:
DECRYPT_AES:
- type: "DECRYPT_AES"
DECRYPT_CB:
- type: "DECRYPT_CB"
RATCHET_HEADER:
- type: "RATCHET_HEADER"
RATCHET_SYNC:
- type: "RATCHET_SYNC"
AgentErrorType
Discriminated union type:
CMD:
- type: "CMD"
- cmdErr: CommandErrorType
- errContext: string
CONN:
- type: "CONN"
- connErr: ConnectionErrorType
- errContext: string
NO_USER:
- type: "NO_USER"
SMP:
- type: "SMP"
- serverAddress: string
- smpErr: ErrorType
NTF:
- type: "NTF"
- serverAddress: string
- ntfErr: ErrorType
XFTP:
- type: "XFTP"
- serverAddress: string
- xftpErr: XFTPErrorType
FILE:
- type: "FILE"
- fileErr: FileErrorType
NO_NAME_SERVERS:
- type: "NO_NAME_SERVERS"
PROXY:
- type: "PROXY"
- proxyServer: string
- relayServer: string
- proxyErr: ProxyClientError
RCP:
- type: "RCP"
- rcpErr: RCErrorType
BROKER:
- type: "BROKER"
- brokerAddress: string
- brokerErr: BrokerErrorType
AGENT:
- type: "AGENT"
- agentErr: SMPAgentError
NOTICE:
- type: "NOTICE"
- server: string
- preset: bool
- expiresAt: UTCTime?
INTERNAL:
- type: "INTERNAL"
- internalErr: string
CRITICAL:
- type: "CRITICAL"
- offerRestart: bool
- criticalErr: string
INACTIVE:
- type: "INACTIVE"
AgentServiceError
Discriminated union type:
Rejected:
- type: "rejected"
- rejectReason: string
Timeout:
- type: "timeout"
NoPendingRequest:
- type: "noPendingRequest"
NotDRAddress:
- type: "notDRAddress"
BadSignature:
- type: "badSignature"
AppVersionRange
Remote controller app version range (min and max as version strings).
Record type:
- minVersion: string
- maxVersion: string
AutoAccept
Record type:
- acceptIncognito: bool
BadgeInfo
Record type:
- badgeType: BadgeType
- badgeExpiry: UTCTime
- badgeExtra: string
BadgeProof
Record type:
- badgeKeyIdx: int
- presHeader: string
- proof: string
- badgeInfo: BadgeInfo
BadgeRedeemError
Discriminated union type:
InvalidCode:
- type: "invalidCode"
ServiceNotConfigured:
- type: "serviceNotConfigured"
BadgeActive:
- type: "badgeActive"
ServiceError:
- type: "serviceError"
- serviceError: BadgeServiceErrorCode
InvalidResponse:
- type: "invalidResponse"
- message: string
UnknownKeyIndex:
- type: "unknownKeyIndex"
CredentialNotVerified:
- type: "credentialNotVerified"
BadgeServiceErrorCode
Enum type:
- "bad_request"
- "unsupported_version"
- "unknown_purchase_key"
- "unknown_offer_id"
- "offer_disabled"
- "offer_mismatch"
- "product_unavailable"
- "payment_not_entitled"
- "payment_pending"
- "provider_unavailable"
- "rate_limited"
- "code_invalid"
- "code_used"
- "code_expired"
- "receipt_invalid"
- "receipt_used"
- "internal"
BadgeStatus
Enum type:
- "active"
- "expired"
- "expiredOld"
- "failed"
- "unknownKey"
BadgeType
Enum type:
- "supporter"
- "legend"
- "investor"
BlockingInfo
Record type:
- reason: BlockingReason
- notice: ClientNotice?
BlockingReason
Enum type:
- "spam"
- "content"
BrokerErrorType
Discriminated union type:
RESPONSE:
- type: "RESPONSE"
- respErr: string
UNEXPECTED:
- type: "UNEXPECTED"
- respErr: string
NETWORK:
- type: "NETWORK"
- networkError: NetworkError
HOST:
- type: "HOST"
NO_SERVICE:
- type: "NO_SERVICE"
TRANSPORT:
- type: "TRANSPORT"
- transportErr: TransportError
TIMEOUT:
- type: "TIMEOUT"
BusinessChatInfo
Record type:
- chatType: BusinessChatType
- businessId: string
- customerId: string
- businessDomain: SimplexDomainClaim?
BusinessChatType
Enum type:
- "business"
- "customer"
CICallStatus
Enum type:
- "pending"
- "missed"
- "rejected"
- "accepted"
- "negotiated"
- "progress"
- "ended"
- "error"
CIContent
Discriminated union type:
SndMsgContent:
- type: "sndMsgContent"
- msgContent: MsgContent
RcvMsgContent:
- type: "rcvMsgContent"
- msgContent: MsgContent
SndDeleted:
- type: "sndDeleted"
- deleteMode: CIDeleteMode
RcvDeleted:
- type: "rcvDeleted"
- deleteMode: CIDeleteMode
SndCall:
- type: "sndCall"
- status: CICallStatus
- duration: int
RcvCall:
- type: "rcvCall"
- status: CICallStatus
- duration: int
RcvIntegrityError:
- type: "rcvIntegrityError"
- msgError: MsgErrorType
RcvDecryptionError:
- type: "rcvDecryptionError"
- msgDecryptError: MsgDecryptError
- msgCount: word32
RcvMsgError:
- type: "rcvMsgError"
- rcvMsgError: RcvMsgError
RcvGroupInvitation:
- type: "rcvGroupInvitation"
- groupInvitation: CIGroupInvitation
- memberRole: GroupMemberRole
SndGroupInvitation:
- type: "sndGroupInvitation"
- groupInvitation: CIGroupInvitation
- memberRole: GroupMemberRole
RcvDirectEvent:
- type: "rcvDirectEvent"
- rcvDirectEvent: RcvDirectEvent
RcvGroupEvent:
- type: "rcvGroupEvent"
- rcvGroupEvent: RcvGroupEvent
SndGroupEvent:
- type: "sndGroupEvent"
- sndGroupEvent: SndGroupEvent
RcvConnEvent:
- type: "rcvConnEvent"
- rcvConnEvent: RcvConnEvent
SndConnEvent:
- type: "sndConnEvent"
- sndConnEvent: SndConnEvent
RcvChatFeature:
- type: "rcvChatFeature"
- feature: ChatFeature
- enabled: PrefEnabled
- param: int?
SndChatFeature:
- type: "sndChatFeature"
- feature: ChatFeature
- enabled: PrefEnabled
- param: int?
RcvChatPreference:
- type: "rcvChatPreference"
- feature: ChatFeature
- allowed: FeatureAllowed
- param: int?
SndChatPreference:
- type: "sndChatPreference"
- feature: ChatFeature
- allowed: FeatureAllowed
- param: int?
RcvGroupFeature:
- type: "rcvGroupFeature"
- groupFeature: GroupFeature
- preference: GroupPreference
- param: int?
- memberRole_: GroupMemberRole?
SndGroupFeature:
- type: "sndGroupFeature"
- groupFeature: GroupFeature
- preference: GroupPreference
- param: int?
- memberRole_: GroupMemberRole?
RcvChatFeatureRejected:
- type: "rcvChatFeatureRejected"
- feature: ChatFeature
RcvGroupFeatureRejected:
- type: "rcvGroupFeatureRejected"
- groupFeature: GroupFeature
SndModerated:
- type: "sndModerated"
RcvModerated:
- type: "rcvModerated"
RcvBlocked:
- type: "rcvBlocked"
SndDirectE2EEInfo:
- type: "sndDirectE2EEInfo"
- e2eeInfo: E2EInfo
RcvDirectE2EEInfo:
- type: "rcvDirectE2EEInfo"
- e2eeInfo: E2EInfo
SndGroupE2EEInfo:
- type: "sndGroupE2EEInfo"
- e2eeInfo: E2EInfo
RcvGroupE2EEInfo:
- type: "rcvGroupE2EEInfo"
- e2eeInfo: E2EInfo
ChatBanner:
- type: "chatBanner"
CIDeleteMode
Enum type:
- "broadcast"
- "internal"
- "internalMark"
- "history"
CIDeleted
Discriminated union type:
Deleted:
- type: "deleted"
- deletedTs: UTCTime?
- chatType: ChatType
Blocked:
- type: "blocked"
- deletedTs: UTCTime?
BlockedByAdmin:
- type: "blockedByAdmin"
- deletedTs: UTCTime?
Moderated:
- type: "moderated"
- deletedTs: UTCTime?
- byGroupMember: GroupMember
CIDirection
Discriminated union type:
DirectSnd:
- type: "directSnd"
DirectRcv:
- type: "directRcv"
GroupSnd:
- type: "groupSnd"
GroupRcv:
- type: "groupRcv"
- groupMember: GroupMember
ChannelRcv:
- type: "channelRcv"
LocalSnd:
- type: "localSnd"
LocalRcv:
- type: "localRcv"
CIFile
Record type:
- fileId: int64
- fileName: string
- fileSize: int64
- fileSource: CryptoFile?
- fileStatus: CIFileStatus
- fileProtocol: FileProtocol
- fileExpires: UTCTime?
- fileProhibited: FileProhibited?
CIFileStatus
Discriminated union type:
SndStored:
- type: "sndStored"
SndTransfer:
- type: "sndTransfer"
- sndProgress: int64
- sndTotal: int64
SndCancelled:
- type: "sndCancelled"
SndComplete:
- type: "sndComplete"
SndError:
- type: "sndError"
- sndFileError: FileError
SndWarning:
- type: "sndWarning"
- sndFileError: FileError
RcvInvitation:
- type: "rcvInvitation"
RcvAccepted:
- type: "rcvAccepted"
RcvTransfer:
- type: "rcvTransfer"
- rcvProgress: int64
- rcvTotal: int64
RcvAborted:
- type: "rcvAborted"
RcvComplete:
- type: "rcvComplete"
RcvCancelled:
- type: "rcvCancelled"
RcvError:
- type: "rcvError"
- rcvFileError: FileError
RcvWarning:
- type: "rcvWarning"
- rcvFileError: FileError
Invalid:
- type: "invalid"
- text: string
CIForwardedFrom
Discriminated union type:
Unknown:
- type: "unknown"
Contact:
- type: "contact"
- chatName: string
- msgDir: MsgDirection
- contactId: int64?
- chatItemId: int64?
Group:
- type: "group"
- chatName: string
- msgDir: MsgDirection
- groupId: int64?
- chatItemId: int64?
- memberId: string?
- sharedMsgId_: string?
- groupType: GroupType?
GroupLink:
- type: "groupLink"
- chatName: string
- msgDir: MsgDirection
- groupLink: string
- publicGroupId: string
- memberId: string?
- sharedMsgId: string
- groupType: GroupType?
CIGroupInvitation
Record type:
- groupId: int64
- groupMemberId: int64
- localDisplayName: string
- groupProfile: GroupProfile
- status: CIGroupInvitationStatus
CIGroupInvitationStatus
Enum type:
- "pending"
- "accepted"
- "rejected"
- "expired"
CIMention
Record type:
- memberId: string
- memberRef: CIMentionMember?
CIMentionMember
Record type:
- groupMemberId: int64
- displayName: string
- localAlias: string?
- memberRole: GroupMemberRole
CIMeta
Record type:
- itemId: int64
- itemTs: UTCTime
- itemText: string
- itemStatus: CIStatus
- sentViaProxy: bool?
- itemSharedMsgId: string?
- itemForwarded: CIForwardedFrom?
- itemDeleted: CIDeleted?
- itemEdited: bool
- itemTimed: CITimed?
- itemLive: bool?
- userMention: bool
- hasLink: bool
- deletable: bool
- editable: bool
- forwardedByMember: int64?
- showGroupAsSender: bool
- msgVerified: MsgVerified?
- createdAt: UTCTime
- updatedAt: UTCTime
CIQuote
Record type:
- chatDir: CIDirection?
- itemId: int64?
- sharedMsgId: string?
- sentAt: UTCTime
- content: MsgContent
- formattedText: [FormattedText]?
CIReaction
Record type:
- chatDir: CIDirection
- chatItem: ChatItem
- sentAt: UTCTime
- reaction: MsgReaction
CIReactionCount
Record type:
- reaction: MsgReaction
- userReacted: bool
- totalReacted: int
CIStatus
Discriminated union type:
SndNew:
- type: "sndNew"
SndSent:
- type: "sndSent"
- sndProgress: SndCIStatusProgress
SndRcvd:
- type: "sndRcvd"
- msgRcptStatus: MsgReceiptStatus
- sndProgress: SndCIStatusProgress
SndErrorAuth:
- type: "sndErrorAuth"
SndError:
- type: "sndError"
- agentError: SndError
SndWarning:
- type: "sndWarning"
- agentError: SndError
RcvNew:
- type: "rcvNew"
RcvRead:
- type: "rcvRead"
Invalid:
- type: "invalid"
- text: string
CITimed
Record type:
- ttl: int
- deleteAt: UTCTime?
ChatBotCommand
Discriminated union type:
Command:
- type: "command"
- keyword: string
- label: string
- params: string?
Menu:
- type: "menu"
- label: string
- commands: [ChatBotCommand]
ChatDeleteMode
Discriminated union type:
Full:
- type: "full"
- notify: bool
Entity:
- type: "entity"
- notify: bool
Messages:
- type: "messages"
Syntax:
full|entity|messages[ notify=off]
type + (type == 'messages' ? '' : (!notify ? ' notify=off' : '')) // JavaScript
str(type) + ('' if str(type) == 'messages' else (' notify=off' if not notify else '')) # Python
ChatError
Discriminated union type:
Error:
- type: "error"
- errorType: ChatErrorType
ErrorAgent:
- type: "errorAgent"
- agentError: AgentErrorType
- agentConnId: string
- connectionEntity_: ConnectionEntity?
ErrorStore:
- type: "errorStore"
- storeError: StoreError
ChatErrorType
Discriminated union type:
NoActiveUser:
- type: "noActiveUser"
NoConnectionUser:
- type: "noConnectionUser"
- agentConnId: string
NoSndFileUser:
- type: "noSndFileUser"
- agentSndFileId: string
NoRcvFileUser:
- type: "noRcvFileUser"
- agentRcvFileId: string
UserUnknown:
- type: "userUnknown"
UserExists:
- type: "userExists"
- contactName: string
ChatRelayExists:
- type: "chatRelayExists"
DifferentActiveUser:
- type: "differentActiveUser"
- commandUserId: int64
- activeUserId: int64
CantDeleteActiveUser:
- type: "cantDeleteActiveUser"
- userId: int64
CantDeleteLastUser:
- type: "cantDeleteLastUser"
- userId: int64
CantHideLastUser:
- type: "cantHideLastUser"
- userId: int64
HiddenUserAlwaysMuted:
- type: "hiddenUserAlwaysMuted"
- userId: int64
EmptyUserPassword:
- type: "emptyUserPassword"
- userId: int64
UserAlreadyHidden:
- type: "userAlreadyHidden"
- userId: int64
UserNotHidden:
- type: "userNotHidden"
- userId: int64
InvalidDisplayName:
- type: "invalidDisplayName"
- displayName: string
- validName: string
ChatNotStarted:
- type: "chatNotStarted"
ChatNotStopped:
- type: "chatNotStopped"
ChatStoreChanged:
- type: "chatStoreChanged"
InvalidConnReq:
- type: "invalidConnReq"
SimplexDomainNotReady:
- type: "simplexDomainNotReady"
- simplexDomain: SimplexDomain
- simplexDomainError: SimplexDomainError
NotResolvedLocally:
- type: "notResolvedLocally"
UnsupportedConnReq:
- type: "unsupportedConnReq"
ConnReqMessageProhibited:
- type: "connReqMessageProhibited"
ContactNotReady:
- type: "contactNotReady"
- contact: Contact
ContactNotActive:
- type: "contactNotActive"
- contact: Contact
ContactDisabled:
- type: "contactDisabled"
- contact: Contact
ConnectionDisabled:
- type: "connectionDisabled"
- connection: Connection
GroupUserRole:
- type: "groupUserRole"
- groupInfo: GroupInfo
- requiredRole: GroupMemberRole
GroupMemberInitialRole:
- type: "groupMemberInitialRole"
- groupInfo: GroupInfo
- initialRole: GroupMemberRole
ContactIncognitoCantInvite:
- type: "contactIncognitoCantInvite"
GroupIncognitoCantInvite:
- type: "groupIncognitoCantInvite"
GroupContactRole:
- type: "groupContactRole"
- contactName: string
GroupDuplicateMember:
- type: "groupDuplicateMember"
- contactName: string
GroupDuplicateMemberId:
- type: "groupDuplicateMemberId"
GroupNotJoined:
- type: "groupNotJoined"
- groupInfo: GroupInfo
GroupMemberNotActive:
- type: "groupMemberNotActive"
CantBlockMemberForSelf:
- type: "cantBlockMemberForSelf"
- groupInfo: GroupInfo
- member: GroupMember
- setShowMessages: bool
GroupMemberUserRemoved:
- type: "groupMemberUserRemoved"
GroupMemberNotFound:
- type: "groupMemberNotFound"
GroupCantResendInvitation:
- type: "groupCantResendInvitation"
- groupInfo: GroupInfo
- contactName: string
GroupInternal:
- type: "groupInternal"
- message: string
FileNotFound:
- type: "fileNotFound"
- message: string
FileSize:
- type: "fileSize"
- filePath: string
FileAlreadyReceiving:
- type: "fileAlreadyReceiving"
- message: string
FileCancelled:
- type: "fileCancelled"
- message: string
FileCancel:
- type: "fileCancel"
- fileId: int64
- message: string
FileAlreadyExists:
- type: "fileAlreadyExists"
- filePath: string
FileWrite:
- type: "fileWrite"
- filePath: string
- message: string
FileSend:
- type: "fileSend"
- fileId: int64
- agentError: AgentErrorType
FileRcvChunk:
- type: "fileRcvChunk"
- message: string
FileInternal:
- type: "fileInternal"
- message: string
FileImageType:
- type: "fileImageType"
- filePath: string
FileImageSize:
- type: "fileImageSize"
- filePath: string
FileNotReceived:
- type: "fileNotReceived"
- fileId: int64
FileNotApproved:
- type: "fileNotApproved"
- fileId: int64
- unknownServers: [string]
FallbackToSMPProhibited:
- type: "fallbackToSMPProhibited"
- fileId: int64
InlineFileProhibited:
- type: "inlineFileProhibited"
- fileId: int64
InvalidForward:
- type: "invalidForward"
InvalidChatItemUpdate:
- type: "invalidChatItemUpdate"
InvalidChatItemDelete:
- type: "invalidChatItemDelete"
HasCurrentCall:
- type: "hasCurrentCall"
NoCurrentCall:
- type: "noCurrentCall"
CallContact:
- type: "callContact"
- contactId: int64
DirectMessagesProhibited:
- type: "directMessagesProhibited"
- direction: MsgDirection
- contact: Contact
AgentVersion:
- type: "agentVersion"
AgentNoSubResult:
- type: "agentNoSubResult"
- agentConnId: string
CommandError:
- type: "commandError"
- message: string
BadgeRedeemError:
- type: "badgeRedeemError"
- badgeRedeemError: BadgeRedeemError
AgentCommandError:
- type: "agentCommandError"
- message: string
InvalidFileDescription:
- type: "invalidFileDescription"
- message: string
ConnectionIncognitoChangeProhibited:
- type: "connectionIncognitoChangeProhibited"
ConnectionUserChangeProhibited:
- type: "connectionUserChangeProhibited"
PeerChatVRangeIncompatible:
- type: "peerChatVRangeIncompatible"
RelayTestError:
- type: "relayTestError"
- message: string
InternalError:
- type: "internalError"
- message: string
Exception:
- type: "exception"
- message: string
ChatFeature
Enum type:
- "timedMessages"
- "fullDelete"
- "reactions"
- "voice"
- "files"
- "calls"
- "sessions"
ChatInfo
Discriminated union type:
Direct:
- type: "direct"
- contact: Contact
Group:
- type: "group"
- groupInfo: GroupInfo
- groupChatScope: GroupChatScopeInfo?
Local:
- type: "local"
- noteFolder: NoteFolder
ContactRequest:
- type: "contactRequest"
- contactRequest: UserContactRequest
ContactConnection:
- type: "contactConnection"
- contactConnection: PendingContactConnection
ChatItem
Record type:
- chatDir: CIDirection
- meta: CIMeta
- content: CIContent
- mentions: {string : CIMention}
- formattedText: [FormattedText]?
- quotedItem: CIQuote?
- reactions: [CIReactionCount]
- file: CIFile?
ChatItemDeletion
Message deletion result.
Record type:
ChatListQuery
Discriminated union type:
Filters:
- type: "filters"
- favorite: bool
- unread: bool
Search:
- type: "search"
- search: string
ChatPeerType
Enum type:
- "human"
- "bot"
- "business"
ChatRef
Used in API commands. Chat scope can only be passed with groups.
Record type:
- chatType: ChatType
- chatId: int64
- chatScope: GroupChatScope?
Syntax:
<str(chatType)><chatId>[<str(chatScope)>]
ChatType.cmdString(chatType) + chatId + (chatScope ? GroupChatScope.cmdString(chatScope) : '') // JavaScript
ChatType_cmd_string(chatType) + str(chatId) + ((GroupChatScope_cmd_string(chatScope)) if chatScope is not None else '') # Python
ChatSettings
Record type:
- enableNtfs: MsgFilter
- sendRcpts: bool?
- favorite: bool
ChatStats
Record type:
- unreadCount: int
- unreadMentions: int
- reportsCount: int
- minUnreadItemId: int64
- unreadChat: bool
ChatType
Enum type:
- "direct"
- "group"
- "local"
Syntax:
@|#|*|
self == 'direct' ? '@' : self == 'group' ? '#' : self == 'local' ? '*' : '' // JavaScript
'@' if str(self) == 'direct' else '#' if str(self) == 'group' else '*' if str(self) == 'local' else '' # Python
ChatWallpaper
Record type:
- preset: string?
- imageFile: string?
- background: string?
- tint: string?
- scaleType: ChatWallpaperScale?
- scale: double?
ChatWallpaperScale
Enum type:
- "fill"
- "fit"
- "repeat"
ClientNotice
Record type:
- ttl: int64?
Color
Enum type:
- "black"
- "red"
- "green"
- "yellow"
- "blue"
- "magenta"
- "cyan"
- "white"
CommandError
Discriminated union type:
UNKNOWN:
- type: "UNKNOWN"
SYNTAX:
- type: "SYNTAX"
PROHIBITED:
- type: "PROHIBITED"
NO_AUTH:
- type: "NO_AUTH"
HAS_AUTH:
- type: "HAS_AUTH"
NO_ENTITY:
- type: "NO_ENTITY"
CommandErrorType
Discriminated union type:
PROHIBITED:
- type: "PROHIBITED"
SYNTAX:
- type: "SYNTAX"
NO_CONN:
- type: "NO_CONN"
SIZE:
- type: "SIZE"
LARGE:
- type: "LARGE"
CommentsGroupPreference
Record type:
- enable: GroupFeatureEnabled
- duration: int?
ComposedMessage
Record type:
- fileSource: CryptoFile?
- quotedItemId: int64?
- msgContent: MsgContent
- mentions: {string : int64}
ConnStatus
Discriminated union type:
New:
- type: "new"
Prepared:
- type: "prepared"
Joined:
- type: "joined"
Requested:
- type: "requested"
Accepted:
- type: "accepted"
SndReady:
- type: "sndReady"
Ready:
- type: "ready"
Deleted:
- type: "deleted"
Failed:
- type: "failed"
- connError: string
ConnType
Enum type:
- "contact"
- "member"
- "user_contact"
Connection
Record type:
- connId: int64
- agentConnId: string
- connChatVersion: int
- peerChatVRange: VersionRange
- connLevel: int
- viaContact: int64?
- viaUserContactLink: int64?
- viaGroupLink: bool
- groupLinkId: string?
- xContactId: string?
- customUserProfileId: int64?
- connType: ConnType
- connStatus: ConnStatus
- contactConnInitiated: bool
- localAlias: string
- entityId: int64?
- connectionCode: SecurityCode?
- pqSupport: bool
- pqEncryption: bool
- pqSndEnabled: bool?
- pqRcvEnabled: bool?
- authErrCounter: int
- quotaErrCounter: int
- createdAt: UTCTime
ConnectionEntity
Discriminated union type:
RcvDirectMsgConnection:
- type: "rcvDirectMsgConnection"
- entityConnection: Connection
- contact: Contact?
RcvGroupMsgConnection:
- type: "rcvGroupMsgConnection"
- entityConnection: Connection
- groupInfo: GroupInfo
- groupMember: GroupMember
UserContactConnection:
- type: "userContactConnection"
- entityConnection: Connection
- userContact: UserContact
ConnectionErrorType
Discriminated union type:
NOT_FOUND:
- type: "NOT_FOUND"
DUPLICATE:
- type: "DUPLICATE"
SIMPLEX:
- type: "SIMPLEX"
NOT_ACCEPTED:
- type: "NOT_ACCEPTED"
NOT_AVAILABLE:
- type: "NOT_AVAILABLE"
ConnectionMode
Enum type:
- "inv"
- "con"
ConnectionPlan
Discriminated union type:
InvitationLink:
- type: "invitationLink"
- invitationLinkPlan: InvitationLinkPlan
ContactAddress:
- type: "contactAddress"
- contactAddressPlan: ContactAddressPlan
- nameChange: NameChange?
GroupLink:
- type: "groupLink"
- groupLinkPlan: GroupLinkPlan
- nameChange: NameChange?
Error:
- type: "error"
- chatError: ChatError
Contact
Record type:
- contactId: int64
- localDisplayName: string
- profile: LocalProfile
- activeConn: Connection?
- contactUsed: bool
- contactStatus: ContactStatus
- chatSettings: ChatSettings
- userPreferences: Preferences
- mergedPreferences: ContactUserPreferences
- createdAt: UTCTime
- updatedAt: UTCTime
- chatTs: UTCTime?
- preparedContact: PreparedContact?
- contactRequestId: int64?
- contactRequest: UserContactRequestRef?
- contactGroupMemberId: int64?
- contactGrpInvSent: bool
- groupDirectInv: GroupDirectInvitation?
- chatTags: [int64]
- chatItemTTL: int64?
- uiThemes: UIThemeEntityOverrides?
- chatDeleted: bool
- customData: JSONObject?
ContactAddressPlan
Discriminated union type:
Ok:
- type: "ok"
- contactSLinkData_: ContactShortLinkData?
- ownerVerification: OwnerVerification?
OwnLink:
- type: "ownLink"
ConnectingConfirmReconnect:
- type: "connectingConfirmReconnect"
ConnectingProhibit:
- type: "connectingProhibit"
- contact: Contact
Known:
- type: "known"
- contact: Contact
ContactViaAddress:
- type: "contactViaAddress"
- contact: Contact
ContactShortLinkData
Record type:
- profile: Profile
- message: MsgContent?
- business: bool
- localBadge: LocalBadge?
ContactStatus
Enum type:
- "active"
- "deleted"
- "deletedByUser"
- "rejected"
ContactUserPref
Discriminated union type:
Contact:
- type: "contact"
- preference: SimplePreference
User:
- type: "user"
- preference: SimplePreference
ContactUserPreference
Record type:
- enabled: PrefEnabled
- userPreference: ContactUserPref
- contactPreference: SimplePreference
ContactUserPreferences
Record type:
- timedMessages: ContactUserPreference
- fullDelete: ContactUserPreference
- reactions: ContactUserPreference
- voice: ContactUserPreference
- files: ContactUserPreference
- calls: ContactUserPreference
- sessions: ContactUserPreference
- commands: [ChatBotCommand]?
CreatedConnLink
Record type:
- connFullLink: string
- connShortLink: string?
Syntax:
<connFullLink>[ <connShortLink>]
connFullLink + (connShortLink ? ' ' + connShortLink : '') // JavaScript
connFullLink + ((' ' + connShortLink) if connShortLink is not None else '') # Python
CryptoFile
Record type:
- filePath: string
- cryptoArgs: CryptoFileArgs?
CryptoFileArgs
Record type:
- fileKey: string
- fileNonce: string
CtrlAppInfo
Remote controller application info.
Record type:
- appVersionRange: AppVersionRange
- deviceName: string
- compression: bool
DomainVerification
Enum type:
- "failed"
- "verified"
- "moved"
DroppedMsg
Record type:
- brokerTs: UTCTime
- attempts: int
E2EInfo
Record type:
- public: bool?
- pqEnabled: bool?
ErrorType
Discriminated union type:
BLOCK:
- type: "BLOCK"
SESSION:
- type: "SESSION"
CMD:
- type: "CMD"
- cmdErr: CommandError
PROXY:
- type: "PROXY"
- proxyErr: ProxyError
AUTH:
- type: "AUTH"
BLOCKED:
- type: "BLOCKED"
- blockInfo: BlockingInfo
SERVICE:
- type: "SERVICE"
CRYPTO:
- type: "CRYPTO"
QUOTA:
- type: "QUOTA"
STORE:
- type: "STORE"
- storeErr: string
NO_MSG:
- type: "NO_MSG"
LARGE_MSG:
- type: "LARGE_MSG"
EXPIRED:
- type: "EXPIRED"
INTERNAL:
- type: "INTERNAL"
NAME:
- type: "NAME"
- nameErr: NameErrorType
DUPLICATE_:
- type: "DUPLICATE_"
FeatureAllowed
Enum type:
- "always"
- "yes"
- "no"
FileDescr
Record type:
- fileDescrText: string
- fileDescrPartNo: int
- fileDescrComplete: bool
FileError
Discriminated union type:
Auth:
- type: "auth"
Blocked:
- type: "blocked"
- server: string
- blockInfo: BlockingInfo
NoFile:
- type: "noFile"
Relay:
- type: "relay"
- srvError: SrvError
Other:
- type: "other"
- fileError: string
FileErrorType
Discriminated union type:
NOT_APPROVED:
- type: "NOT_APPROVED"
SIZE:
- type: "SIZE"
REDIRECT:
- type: "REDIRECT"
- redirectError: string
FILE_IO:
- type: "FILE_IO"
- fileIOError: string
NO_FILE:
- type: "NO_FILE"
FileInvitation
Record type:
- fileName: string
- fileSize: int64
- fileDigest: string?
- fileConnReq: string?
- fileInline: InlineFileMode?
- fileDescr: FileDescr?
- fileBadge: BadgeProof?
FileProhibited
Record type:
- maxSize: int64
- badgeStatus: BadgeStatus?
FileProtocol
Enum type:
- "smp"
- "xftp"
- "local"
FileStatus
Enum type:
- "new"
- "accepted"
- "connected"
- "complete"
- "cancelled"
FileTransferMeta
Record type:
- fileId: int64
- xftpSndFile: XFTPSndFile?
- xftpRedirectFor: int64?
- fileName: string
- filePath: string
- fileSize: int64
- fileInline: InlineFileMode?
- chunkSize: int64
- cancelled: bool
FileType
Enum type:
- "normal"
- "roster"
Format
Discriminated union type:
Bold:
- type: "bold"
Italic:
- type: "italic"
StrikeThrough:
- type: "strikeThrough"
Snippet:
- type: "snippet"
Secret:
- type: "secret"
Small:
- type: "small"
Colored:
- type: "colored"
- color: Color
Uri:
- type: "uri"
HyperLink:
- type: "hyperLink"
- showText: string?
- linkUri: string
SimplexLink:
- type: "simplexLink"
- showText: string?
- linkType: SimplexLinkType
- simplexUri: string
- smpHosts: [string]
SimplexName:
- type: "simplexName"
- nameInfo: SimplexNameInfo
Command:
- type: "command"
- commandStr: string
Mention:
- type: "mention"
- memberName: string
Email:
- type: "email"
Phone:
- type: "phone"
FormattedText
Record type:
- format: Format?
- text: string
FullGroupPreferences
Record type:
- timedMessages: TimedMessagesGroupPreference
- directMessages: RoleGroupPreference
- fullDelete: GroupPreference
- reactions: GroupPreference
- voice: RoleGroupPreference
- files: RoleGroupPreference
- simplexLinks: RoleGroupPreference
- reports: GroupPreference
- history: GroupPreference
- support: SupportGroupPreference
- sessions: RoleGroupPreference
- comments: CommentsGroupPreference
- signMessages: GroupPreference
- commands: [ChatBotCommand]
FullPreferences
Record type:
- timedMessages: TimedMessagesPreference
- fullDelete: SimplePreference
- reactions: SimplePreference
- voice: SimplePreference
- files: SimplePreference
- calls: SimplePreference
- sessions: SimplePreference
- commands: [ChatBotCommand]
Group
Record type:
- groupInfo: GroupInfo
- members: [GroupMember]
GroupChatScope
Discriminated union type:
MemberSupport:
- type: "memberSupport"
- groupMemberId_: int64?
Syntax:
(_support[:<groupMemberId_>])
'(_support' + (groupMemberId_ ? ':' + groupMemberId_ : '') + ')' // JavaScript
'(_support' + ((':' + str(groupMemberId_)) if groupMemberId_ is not None else '') + ')' # Python
GroupChatScopeInfo
Discriminated union type:
MemberSupport:
- type: "memberSupport"
- groupMember_: GroupMember?
GroupDirectInvitation
Record type:
- groupDirectInvLink: string
- fromGroupId_: int64?
- fromGroupMemberId_: int64?
- fromGroupMemberConnId_: int64?
- groupDirectInvStartedConnection: bool
GroupFeature
Enum type:
- "timedMessages"
- "directMessages"
- "fullDelete"
- "reactions"
- "voice"
- "files"
- "simplexLinks"
- "reports"
- "history"
- "support"
- "sessions"
- "comments"
- "signMessages"
GroupFeatureEnabled
Enum type:
- "on"
- "off"
GroupInfo
Record type:
- groupId: int64
- useRelays: bool
- relayOwnStatus: RelayStatus?
- localDisplayName: string
- groupProfile: GroupProfile
- localAlias: string
- businessChat: BusinessChatInfo?
- fullGroupPreferences: FullGroupPreferences
- membership: GroupMember
- chatSettings: ChatSettings
- createdAt: UTCTime
- updatedAt: UTCTime
- chatTs: UTCTime?
- userMemberProfileSentAt: UTCTime?
- preparedGroup: PreparedGroup?
- chatTags: [int64]
- chatItemTTL: int64?
- uiThemes: UIThemeEntityOverrides?
- customData: JSONObject?
- groupSummary: GroupSummary
- rosterVersion: int64?
- membersRequireAttention: int
- viaGroupLinkUri: string?
- groupDomainVerified: DomainVerification?
GroupLink
Record type:
- userContactLinkId: int64
- connLinkContact: CreatedConnLink
- shortLinkDataSet: bool
- shortLinkLargeDataSet: bool
- groupLinkId: string
- acceptMemberRole: GroupMemberRole
GroupLinkOwner
Record type:
- memberId: string
- memberKey: string
GroupLinkPlan
Discriminated union type:
Ok:
- type: "ok"
- groupSLinkInfo_: GroupShortLinkInfo?
- groupSLinkData_: GroupShortLinkData?
- ownerVerification: OwnerVerification?
OwnLink:
- type: "ownLink"
- groupInfo: GroupInfo
ConnectingConfirmReconnect:
- type: "connectingConfirmReconnect"
ConnectingProhibit:
- type: "connectingProhibit"
- groupInfo_: GroupInfo?
Known:
- type: "known"
- groupInfo: GroupInfo
- groupUpdated: bool
- ownerVerification: OwnerVerification?
- linkOwners: [GroupLinkOwner]
NoRelays:
- type: "noRelays"
- groupSLinkData_: GroupShortLinkData?
UpdateRequired:
- type: "updateRequired"
- groupSLinkData_: GroupShortLinkData?
GroupMember
Record type:
- groupMemberId: int64
- groupId: int64
- indexInGroup: int64
- memberId: string
- memberRole: GroupMemberRole
- memberCategory: GroupMemberCategory
- memberStatus: GroupMemberStatus
- memberSettings: GroupMemberSettings
- blockedByAdmin: bool
- invitedBy: InvitedBy
- invitedByGroupMemberId: int64?
- localDisplayName: string
- memberProfile: LocalProfile
- memberContactId: int64?
- memberContactProfileId: int64
- activeConn: Connection?
- memberChatVRange: VersionRange
- createdAt: UTCTime
- updatedAt: UTCTime
- supportChat: GroupSupportChat?
- memberPubKey: string?
- relayLink: string?
- memberVerifiedCode: SecurityCode?
GroupMemberAdmission
Record type:
- review: MemberCriteria?
GroupMemberCategory
Enum type:
- "user"
- "invitee"
- "host"
- "pre"
- "post"
GroupMemberRef
Record type:
- groupMemberId: int64
- profile: Profile
GroupMemberRole
Enum type:
- "relay"
- "observer"
- "author"
- "member"
- "moderator"
- "admin"
- "owner"
GroupMemberSettings
Record type:
- showMessages: bool
GroupMemberStatus
Enum type:
- "rejected"
- "removed"
- "left"
- "deleted"
- "unknown"
- "invited"
- "pending_approval"
- "pending_review"
- "introduced"
- "intro-inv"
- "accepted"
- "announced"
- "connected"
- "complete"
- "creator"
GroupPreference
Record type:
- enable: GroupFeatureEnabled
GroupPreferences
Record type:
- timedMessages: TimedMessagesGroupPreference?
- directMessages: RoleGroupPreference?
- fullDelete: GroupPreference?
- reactions: GroupPreference?
- voice: RoleGroupPreference?
- files: RoleGroupPreference?
- simplexLinks: RoleGroupPreference?
- reports: GroupPreference?
- history: GroupPreference?
- support: SupportGroupPreference?
- sessions: RoleGroupPreference?
- comments: CommentsGroupPreference?
- signMessages: GroupPreference?
- commands: [ChatBotCommand]?
GroupProfile
Record type:
- displayName: string
- fullName: string
- shortDescr: string?
- description: string?
- image: string?
- publicGroup: PublicGroupProfile?
- groupPreferences: GroupPreferences?
- memberAdmission: GroupMemberAdmission?
GroupRelay
Record type:
- groupRelayId: int64
- groupMemberId: int64
- userChatRelay: UserChatRelay
- relayStatus: RelayStatus
- relayLink: string?
- relayCap: RelayCapabilities
GroupShortLinkData
Record type:
- groupProfile: GroupProfile
- publicGroupData: PublicGroupData?
GroupShortLinkInfo
Record type:
- direct: bool
- groupRelays: [string]
- publicGroupId: string?
GroupSummary
Record type:
- currentMembers: int64
- publicMemberCount: int64?
GroupSupportChat
Record type:
- chatTs: UTCTime
- unread: int64
- memberAttention: int64
- mentions: int64
- lastMsgFromMemberTs: UTCTime?
GroupType
Enum type:
- "channel"
- "group"
HandshakeError
Enum type:
- "PARSE"
- "IDENTITY"
- "BAD_AUTH"
- "BAD_SERVICE"
InlineFileMode
Enum type:
- "offer"
- "sent"
InvitationLinkPlan
Discriminated union type:
Ok:
- type: "ok"
- contactSLinkData_: ContactShortLinkData?
- ownerVerification: OwnerVerification?
OwnLink:
- type: "ownLink"
Connecting:
- type: "connecting"
- contact_: Contact?
Known:
- type: "known"
- contact: Contact
InvitedBy
Discriminated union type:
Contact:
- type: "contact"
- byContactId: int64
User:
- type: "user"
Unknown:
- type: "unknown"
LinkContent
Discriminated union type:
Page:
- type: "page"
Image:
- type: "image"
Video:
- type: "video"
- duration: int?
Unknown:
- type: "unknown"
- tag: string
- json: JSONObject
LinkOwnerSig
Record type:
- ownerId: string?
- chatBinding: string
- ownerSig: string
LinkPreview
Record type:
- uri: string
- title: string
- description: string
- image: string
- content: LinkContent?
LocalBadge
Record type:
- badge: BadgeInfo
- status: BadgeStatus
LocalProfile
Record type:
- profileId: int64
- displayName: string
- fullName: string
- shortDescr: string?
- description: string?
- image: string?
- contactLink: string?
- preferences: Preferences?
- peerType: ChatPeerType?
- localBadge: LocalBadge?
- localAlias: string
- contactDomain: SimplexDomainClaim?
- contactDomainVerified: DomainVerification?
MemberCriteria
Enum type:
- "all"
MsgChatLink
Connection link sent in a message - only short links are allowed.
Discriminated union type:
Contact:
- type: "contact"
- connLink: string
- profile: Profile
- business: bool
Invitation:
- type: "invitation"
- invLink: string
- profile: Profile
Group:
- type: "group"
- connLink: string
- groupProfile: GroupProfile
MsgContent
Discriminated union type:
Text:
- type: "text"
- text: string
Link:
- type: "link"
- text: string
- preview: LinkPreview
Image:
- type: "image"
- text: string
- image: string
Video:
- type: "video"
- text: string
- image: string
- duration: int
Voice:
- type: "voice"
- text: string
- duration: int
File:
- type: "file"
- text: string
Report:
- type: "report"
- text: string
- reason: ReportReason
Chat:
- type: "chat"
- text: string
- chatLink: MsgChatLink
- ownerSig: LinkOwnerSig?
Unknown:
- type: "unknown"
- tag: string
- text: string
- json: JSONObject
MsgDecryptError
Enum type:
- "ratchetHeader"
- "tooManySkipped"
- "ratchetEarlier"
- "other"
- "ratchetSync"
MsgDirection
Enum type:
- "rcv"
- "snd"
MsgErrorType
Discriminated union type:
MsgSkipped:
- type: "msgSkipped"
- fromMsgId: int64
- toMsgId: int64
MsgBadId:
- type: "msgBadId"
- msgId: int64
MsgBadHash:
- type: "msgBadHash"
MsgDuplicate:
- type: "msgDuplicate"
MsgFilter
Enum type:
- "none"
- "all"
- "mentions"
MsgReaction
Discriminated union type:
Emoji:
- type: "emoji"
- emoji: string
Unknown:
- type: "unknown"
- tag: string
- json: JSONObject
MsgReceiptStatus
Enum type:
- "ok"
- "badMsgHash"
MsgSigStatus
Enum type:
- "verified"
- "signedNoKey"
MsgVerified
Discriminated union type:
Signed:
- type: "signed"
- sigStatus: MsgSigStatus
SigMissing:
- type: "sigMissing"
NameChange
Discriminated union type:
Lapsed:
- type: "lapsed"
- nameWarning: NameWarning
Moved:
- type: "moved"
- knownChat: ChatInfo
NameErrorType
Discriminated union type:
NO_RESOLVER:
- type: "NO_RESOLVER"
NOT_FOUND:
- type: "NOT_FOUND"
RESOLVER:
- type: "RESOLVER"
- resolverErr: string
NamePrice
Record type:
- amount: int64
- years: int
NameWarning
Discriminated union type:
Expired:
- type: "expired"
- expiredAt: UTCTime
- graceUntil: UTCTime?
Available:
- type: "available"
- price: NamePrice
ReservedForCommunity:
- type: "reservedForCommunity"
NotRegistered:
- type: "notRegistered"
NetworkError
Discriminated union type:
ConnectError:
- type: "connectError"
- connectError: string
TLSError:
- type: "tLSError"
- tlsError: string
UnknownCAError:
- type: "unknownCAError"
FailedError:
- type: "failedError"
TimeoutError:
- type: "timeoutError"
SubscribeError:
- type: "subscribeError"
- subscribeError: string
NewUser
Record type:
- profile: Profile?
- pastTimestamp: bool
- userChatRelay: bool
- clientService: bool
NoteFolder
Record type:
- noteFolderId: int64
- userId: int64
- createdAt: UTCTime
- updatedAt: UTCTime
- chatTs: UTCTime
- favorite: bool
- unread: bool
OwnerVerification
Discriminated union type:
Verified:
- type: "verified"
Failed:
- type: "failed"
- reason: string
PaginationByTime
Discriminated union type:
Last:
- type: "last"
- count: int
Syntax:
count=<count>
'count=' + count // JavaScript
'count=' + str(count) # Python
PendingContactConnection
Record type:
- pccConnId: int64
- pccAgentConnId: string
- pccConnStatus: ConnStatus
- viaContactUri: bool
- viaUserContactLink: int64?
- groupLinkId: string?
- customUserProfileId: int64?
- connLinkInv: CreatedConnLink?
- localAlias: string
- createdAt: UTCTime
- updatedAt: UTCTime
PlanResolveMode
Enum type:
- "allGroups"
- "unknown"
- "never"
PrefEnabled
Record type:
- forUser: bool
- forContact: bool
Preferences
Record type:
- timedMessages: TimedMessagesPreference?
- fullDelete: SimplePreference?
- reactions: SimplePreference?
- voice: SimplePreference?
- files: SimplePreference?
- calls: SimplePreference?
- sessions: SimplePreference?
- commands: [ChatBotCommand]?
PreparedContact
Record type:
- connLinkToConnect: CreatedConnLink
- uiConnLinkType: ConnectionMode
- welcomeSharedMsgId: string?
- requestSharedMsgId: string?
PreparedGroup
Record type:
- connLinkToConnect: CreatedConnLink
- connLinkPreparedConnection: bool
- connLinkStartedConnection: bool
- welcomeSharedMsgId: string?
- requestSharedMsgId: string?
Profile
Record type:
- displayName: string
- fullName: string
- shortDescr: string?
- description: string?
- image: string?
- contactLink: string?
- preferences: Preferences?
- peerType: ChatPeerType?
- badge: BadgeProof?
- contactDomain: SimplexDomainClaim?
ProxyClientError
Discriminated union type:
ProtocolError:
- type: "protocolError"
- protocolErr: ErrorType
UnexpectedResponse:
- type: "unexpectedResponse"
- responseStr: string
ResponseError:
- type: "responseError"
- responseErr: ErrorType
ProxyError
Discriminated union type:
PROTOCOL:
- type: "PROTOCOL"
- protocolErr: ErrorType
BROKER:
- type: "BROKER"
- brokerErr: BrokerErrorType
BASIC_AUTH:
- type: "BASIC_AUTH"
NO_SESSION:
- type: "NO_SESSION"
PublicGroupAccess
Record type:
- groupWebPage: string?
- groupDomainClaim: SimplexDomainClaim?
- domainWebPage: bool
- allowEmbedding: bool
PublicGroupData
Record type:
- publicMemberCount: int64
PublicGroupProfile
Record type:
- groupType: GroupType
- groupLink: string
- publicGroupId: string
- publicGroupAccess: PublicGroupAccess?
RCErrorType
Discriminated union type:
Internal:
- type: "internal"
- internalErr: string
Identity:
- type: "identity"
NoLocalAddress:
- type: "noLocalAddress"
NewController:
- type: "newController"
NotDiscovered:
- type: "notDiscovered"
TLSStartFailed:
- type: "tLSStartFailed"
Exception:
- type: "exception"
- exception: string
CtrlAuth:
- type: "ctrlAuth"
CtrlNotFound:
- type: "ctrlNotFound"
CtrlError:
- type: "ctrlError"
- ctrlErr: string
Invitation:
- type: "invitation"
Version:
- type: "version"
Encrypt:
- type: "encrypt"
Decrypt:
- type: "decrypt"
BlockSize:
- type: "blockSize"
Syntax:
- type: "syntax"
- syntaxErr: string
RatchetSyncState
Enum type:
- "ok"
- "allowed"
- "required"
- "started"
- "agreed"
RcvConnEvent
Discriminated union type:
SwitchQueue:
- type: "switchQueue"
- phase: SwitchPhase
RatchetSync:
- type: "ratchetSync"
- syncStatus: RatchetSyncState
VerificationCodeReset:
- type: "verificationCodeReset"
PqEnabled:
- type: "pqEnabled"
- enabled: bool
RcvDirectEvent
Discriminated union type:
ContactDeleted:
- type: "contactDeleted"
ProfileUpdated:
GroupInvLinkReceived:
- type: "groupInvLinkReceived"
- groupProfile: GroupProfile
RcvFileDescr
Record type:
- fileDescrId: int64
- fileDescrText: string
- fileDescrPartNo: int
- fileDescrComplete: bool
RcvFileStatus
Discriminated union type:
New:
- type: "new"
Accepted:
- type: "accepted"
- filePath: string
Connected:
- type: "connected"
- filePath: string
Complete:
- type: "complete"
- filePath: string
Cancelled:
- type: "cancelled"
- filePath_: string?
RcvFileTransfer
Record type:
- fileId: int64
- xftpRcvFile: XFTPRcvFile?
- fileInvitation: FileInvitation
- fileProhibited: FileProhibited?
- fileStatus: RcvFileStatus
- fileType: FileType
- rcvFileInline: InlineFileMode?
- senderDisplayName: string
- chunkSize: int64
- cancelled: bool
- grpMemberId: int64?
- cryptoArgs: CryptoFileArgs?
RcvGroupEvent
Discriminated union type:
MemberAdded:
- type: "memberAdded"
- groupMemberId: int64
- profile: Profile
MemberConnected:
- type: "memberConnected"
MemberAccepted:
- type: "memberAccepted"
- groupMemberId: int64
- profile: Profile
UserAccepted:
- type: "userAccepted"
MemberLeft:
- type: "memberLeft"
MemberRole:
- type: "memberRole"
- groupMemberId: int64
- profile: Profile
- role: GroupMemberRole
MemberBlocked:
- type: "memberBlocked"
- groupMemberId: int64
- profile: Profile
- blocked: bool
UserRole:
- type: "userRole"
- role: GroupMemberRole
MemberDeleted:
- type: "memberDeleted"
- groupMemberId: int64
- profile: Profile
UserDeleted:
- type: "userDeleted"
GroupDeleted:
- type: "groupDeleted"
GroupUpdated:
- type: "groupUpdated"
- groupProfile: GroupProfile
InvitedViaGroupLink:
- type: "invitedViaGroupLink"
MemberCreatedContact:
- type: "memberCreatedContact"
MemberProfileUpdated:
NewMemberPendingReview:
- type: "newMemberPendingReview"
MsgBadSignature:
- type: "msgBadSignature"
RcvMsgError
Discriminated union type:
Dropped:
- type: "dropped"
- attempts: int
ParseError:
- type: "parseError"
- parseError: string
RelayCapabilities
Record type:
- webDomain: string?
RelayConnectionResult
Record type:
- relayMember: GroupMember
- relayError: ChatError?
RelayProfile
Record type:
- displayName: string
- fullName: string
- shortDescr: string?
- image: string?
RelayStatus
Enum type:
- "new"
- "invited"
- "accepted"
- "acknowledgedRoster"
- "active"
- "inactive"
- "rejected"
RemoteCtrlInfo
Record type:
- remoteCtrlId: int64
- ctrlDeviceName: string
- sessionState: RemoteCtrlSessionState?
RemoteCtrlSessionState
Discriminated union type:
Starting:
- type: "starting"
Searching:
- type: "searching"
Connecting:
- type: "connecting"
PendingConfirmation:
- type: "pendingConfirmation"
- sessionCode: string
Connected:
- type: "connected"
- sessionCode: string
RemoteCtrlStopReason
Discriminated union type:
DiscoveryFailed:
- type: "discoveryFailed"
- chatError: ChatError
ConnectionFailed:
- type: "connectionFailed"
- chatError: ChatError
SetupFailed:
- type: "setupFailed"
- chatError: ChatError
Disconnected:
- type: "disconnected"
ReportReason
Enum type:
- "spam"
- "content"
- "community"
- "profile"
- "other"
RoleGroupPreference
Record type:
- enable: GroupFeatureEnabled
- role: GroupMemberRole?
SMPAgentError
Discriminated union type:
A_MESSAGE:
- type: "A_MESSAGE"
- messageErr: string
A_PROHIBITED:
- type: "A_PROHIBITED"
- prohibitedErr: string
A_VERSION:
- type: "A_VERSION"
A_LINK:
- type: "A_LINK"
- linkErr: string
A_CRYPTO:
- type: "A_CRYPTO"
- cryptoErr: AgentCryptoError
A_DUPLICATE:
- type: "A_DUPLICATE"
- droppedMsg_: DroppedMsg?
A_QUEUE:
- type: "A_QUEUE"
- queueErr: string
A_SERVICE:
- type: "A_SERVICE"
- serviceError: AgentServiceError
SecurityCode
Record type:
- securityCode: string
- verifiedAt: UTCTime
SimplePreference
Record type:
- allow: FeatureAllowed
SimplexDomain
Record type:
- nameTLD: SimplexTLD
- domain: string
- subDomain: [string]
SimplexDomainClaim
Record type:
- domain: string
- proof: SimplexDomainProof?
SimplexDomainError
Discriminated union type:
NoValidLink:
- type: "noValidLink"
UnknownDomain:
- type: "unknownDomain"
NameWarning:
- type: "nameWarning"
- nameWarning: NameWarning
SimplexDomainProof
Record type:
- linkOwnerId: string?
- presHeader: string
- signature: string
SimplexLinkType
Enum type:
- "contact"
- "invitation"
- "group"
- "channel"
- "relay"
SimplexNameInfo
Record type:
- nameType: SimplexNameType
- nameDomain: SimplexDomain
SimplexNameType
Enum type:
- "publicGroup"
- "contact"
SimplexTLD
Enum type:
- "simplex"
- "testing"
- "web"
SndCIStatusProgress
Enum type:
- "partial"
- "complete"
SndConnEvent
Discriminated union type:
SwitchQueue:
- type: "switchQueue"
- phase: SwitchPhase
- member: GroupMemberRef?
RatchetSync:
- type: "ratchetSync"
- syncStatus: RatchetSyncState
- member: GroupMemberRef?
PqEnabled:
- type: "pqEnabled"
- enabled: bool
SndError
Discriminated union type:
Auth:
- type: "auth"
Quota:
- type: "quota"
Expired:
- type: "expired"
Relay:
- type: "relay"
- srvError: SrvError
Proxy:
- type: "proxy"
- proxyServer: string
- srvError: SrvError
ProxyRelay:
- type: "proxyRelay"
- proxyServer: string
- srvError: SrvError
Other:
- type: "other"
- sndError: string
SndFileTransfer
Record type:
- fileId: int64
- fileName: string
- filePath: string
- fileSize: int64
- chunkSize: int64
- recipientDisplayName: string
- connId: int64
- agentConnId: string
- groupMemberId: int64?
- fileStatus: FileStatus
- fileDescrId: int64?
- fileInline: InlineFileMode?
SndGroupEvent
Discriminated union type:
MemberRole:
- type: "memberRole"
- groupMemberId: int64
- profile: Profile
- role: GroupMemberRole
MemberBlocked:
- type: "memberBlocked"
- groupMemberId: int64
- profile: Profile
- blocked: bool
UserRole:
- type: "userRole"
- role: GroupMemberRole
MemberDeleted:
- type: "memberDeleted"
- groupMemberId: int64
- profile: Profile
UserLeft:
- type: "userLeft"
GroupUpdated:
- type: "groupUpdated"
- groupProfile: GroupProfile
MemberAccepted:
- type: "memberAccepted"
- groupMemberId: int64
- profile: Profile
UserPendingReview:
- type: "userPendingReview"
SrvError
Discriminated union type:
Host:
- type: "host"
Version:
- type: "version"
Other:
- type: "other"
- srvError: string
StoreError
Discriminated union type:
DuplicateName:
- type: "duplicateName"
UserNotFound:
- type: "userNotFound"
- userId: int64
RelayUserNotFound:
- type: "relayUserNotFound"
UserNotFoundByName:
- type: "userNotFoundByName"
- contactName: string
UserNotFoundByContactId:
- type: "userNotFoundByContactId"
- contactId: int64
UserNotFoundByGroupId:
- type: "userNotFoundByGroupId"
- groupId: int64
UserNotFoundByFileId:
- type: "userNotFoundByFileId"
- fileId: int64
UserNotFoundByContactRequestId:
- type: "userNotFoundByContactRequestId"
- contactRequestId: int64
ContactNotFound:
- type: "contactNotFound"
- contactId: int64
ContactNotFoundByName:
- type: "contactNotFoundByName"
- contactName: string
ContactNotFoundByMemberId:
- type: "contactNotFoundByMemberId"
- groupMemberId: int64
ContactNotReady:
- type: "contactNotReady"
- contactName: string
DuplicateContactLink:
- type: "duplicateContactLink"
UserContactLinkNotFound:
- type: "userContactLinkNotFound"
ContactRequestNotFound:
- type: "contactRequestNotFound"
- contactRequestId: int64
ContactRequestNotFoundByName:
- type: "contactRequestNotFoundByName"
- contactName: string
InvalidContactRequestEntity:
- type: "invalidContactRequestEntity"
- contactRequestId: int64
InvalidBusinessChatContactRequest:
- type: "invalidBusinessChatContactRequest"
GroupNotFound:
- type: "groupNotFound"
- groupId: int64
GroupNotFoundByName:
- type: "groupNotFoundByName"
- groupName: string
GroupMemberNameNotFound:
- type: "groupMemberNameNotFound"
- groupId: int64
- groupMemberName: string
GroupMemberNotFound:
- type: "groupMemberNotFound"
- groupMemberId: int64
GroupMemberNotFoundByIndex:
- type: "groupMemberNotFoundByIndex"
- groupMemberIndex: int64
MemberRelationsVectorNotFound:
- type: "memberRelationsVectorNotFound"
- groupMemberId: int64
GroupHostMemberNotFound:
- type: "groupHostMemberNotFound"
- groupId: int64
GroupMemberNotFoundByMemberId:
- type: "groupMemberNotFoundByMemberId"
- memberId: string
MemberContactGroupMemberNotFound:
- type: "memberContactGroupMemberNotFound"
- contactId: int64
InvalidMemberRelationUpdate:
- type: "invalidMemberRelationUpdate"
GroupWithoutUser:
- type: "groupWithoutUser"
DuplicateGroupMember:
- type: "duplicateGroupMember"
DuplicateMemberId:
- type: "duplicateMemberId"
GroupAlreadyJoined:
- type: "groupAlreadyJoined"
GroupInvitationNotFound:
- type: "groupInvitationNotFound"
NoteFolderAlreadyExists:
- type: "noteFolderAlreadyExists"
- noteFolderId: int64
NoteFolderNotFound:
- type: "noteFolderNotFound"
- noteFolderId: int64
UserNoteFolderNotFound:
- type: "userNoteFolderNotFound"
SndFileNotFound:
- type: "sndFileNotFound"
- fileId: int64
SndFileInvalid:
- type: "sndFileInvalid"
- fileId: int64
RcvFileNotFound:
- type: "rcvFileNotFound"
- fileId: int64
RcvFileDescrNotFound:
- type: "rcvFileDescrNotFound"
- fileId: int64
FileNotFound:
- type: "fileNotFound"
- fileId: int64
RcvFileInvalid:
- type: "rcvFileInvalid"
- fileId: int64
RcvFileInvalidDescrPart:
- type: "rcvFileInvalidDescrPart"
LocalFileNoTransfer:
- type: "localFileNoTransfer"
- fileId: int64
SharedMsgIdNotFoundByFileId:
- type: "sharedMsgIdNotFoundByFileId"
- fileId: int64
FileIdNotFoundBySharedMsgId:
- type: "fileIdNotFoundBySharedMsgId"
- sharedMsgId: string
SndFileNotFoundXFTP:
- type: "sndFileNotFoundXFTP"
- agentSndFileId: string
RcvFileNotFoundXFTP:
- type: "rcvFileNotFoundXFTP"
- agentRcvFileId: string
ConnectionNotFound:
- type: "connectionNotFound"
- agentConnId: string
ConnectionNotFoundById:
- type: "connectionNotFoundById"
- connId: int64
ConnectionNotFoundByMemberId:
- type: "connectionNotFoundByMemberId"
- groupMemberId: int64
PendingConnectionNotFound:
- type: "pendingConnectionNotFound"
- connId: int64
UniqueID:
- type: "uniqueID"
LargeMsg:
- type: "largeMsg"
InternalError:
- type: "internalError"
- message: string
DBException:
- type: "dBException"
- message: string
DBBusyError:
- type: "dBBusyError"
- message: string
BadChatItem:
- type: "badChatItem"
- itemId: int64
- itemTs: UTCTime?
ChatItemNotFound:
- type: "chatItemNotFound"
- itemId: int64
ChatItemNotFoundByText:
- type: "chatItemNotFoundByText"
- text: string
ChatItemSharedMsgIdNotFound:
- type: "chatItemSharedMsgIdNotFound"
- sharedMsgId: string
ChatItemNotFoundByFileId:
- type: "chatItemNotFoundByFileId"
- fileId: int64
ChatItemNotFoundByContactId:
- type: "chatItemNotFoundByContactId"
- contactId: int64
ChatItemNotFoundByGroupId:
- type: "chatItemNotFoundByGroupId"
- groupId: int64
ProfileNotFound:
- type: "profileNotFound"
- profileId: int64
DuplicateGroupLink:
- type: "duplicateGroupLink"
- groupInfo: GroupInfo
GroupLinkNotFound:
- type: "groupLinkNotFound"
- groupInfo: GroupInfo
HostMemberIdNotFound:
- type: "hostMemberIdNotFound"
- groupId: int64
ContactNotFoundByFileId:
- type: "contactNotFoundByFileId"
- fileId: int64
NoGroupSndStatus:
- type: "noGroupSndStatus"
- itemId: int64
- groupMemberId: int64
DuplicateGroupMessage:
- type: "duplicateGroupMessage"
- groupId: int64
- sharedMsgId: string
- authorGroupMemberId: int64?
- forwardedByGroupMemberId: int64?
RemoteHostNotFound:
- type: "remoteHostNotFound"
- remoteHostId: int64
RemoteHostUnknown:
- type: "remoteHostUnknown"
RemoteHostDuplicateCA:
- type: "remoteHostDuplicateCA"
RemoteCtrlNotFound:
- type: "remoteCtrlNotFound"
- remoteCtrlId: int64
RemoteCtrlDuplicateCA:
- type: "remoteCtrlDuplicateCA"
ProhibitedDeleteUser:
- type: "prohibitedDeleteUser"
- userId: int64
- contactId: int64
OperatorNotFound:
- type: "operatorNotFound"
- serverOperatorId: int64
UsageConditionsNotFound:
- type: "usageConditionsNotFound"
UserChatRelayNotFound:
- type: "userChatRelayNotFound"
- chatRelayId: int64
GroupRelayNotFound:
- type: "groupRelayNotFound"
- groupRelayId: int64
GroupRelayNotFoundByMemberId:
- type: "groupRelayNotFoundByMemberId"
- groupMemberId: int64
InvalidQuote:
- type: "invalidQuote"
InvalidMention:
- type: "invalidMention"
InvalidDeliveryTask:
- type: "invalidDeliveryTask"
- taskId: int64
DeliveryTaskNotFound:
- type: "deliveryTaskNotFound"
- taskId: int64
InvalidDeliveryJob:
- type: "invalidDeliveryJob"
- jobId: int64
DeliveryJobNotFound:
- type: "deliveryJobNotFound"
- jobId: int64
WalletNotFound:
- type: "walletNotFound"
DuplicateWallet:
- type: "duplicateWallet"
WorkItemError:
- type: "workItemError"
- errContext: string
SubscriptionStatus
Discriminated union type:
Active:
- type: "active"
Pending:
- type: "pending"
Removed:
- type: "removed"
- subError: string
NoSub:
- type: "noSub"
SupportGroupPreference
Record type:
- enable: GroupFeatureEnabled
SwitchPhase
Enum type:
- "started"
- "confirmed"
- "secured"
- "completed"
TimedMessagesGroupPreference
Record type:
- enable: GroupFeatureEnabled
- ttl: int?
TimedMessagesPreference
Record type:
- allow: FeatureAllowed
- ttl: int?
TransportError
Discriminated union type:
BadBlock:
- type: "badBlock"
Version:
- type: "version"
LargeMsg:
- type: "largeMsg"
BadSession:
- type: "badSession"
NoServerAuth:
- type: "noServerAuth"
Handshake:
- type: "handshake"
- handshakeErr: HandshakeError
UIColorMode
Enum type:
- "light"
- "dark"
UIColors
Record type:
- accent: string?
- accentVariant: string?
- secondary: string?
- secondaryVariant: string?
- background: string?
- menus: string?
- title: string?
- accentVariant2: string?
- sentMessage: string?
- sentReply: string?
- receivedMessage: string?
- receivedReply: string?
UIThemeEntityOverride
Record type:
- mode: UIColorMode
- wallpaper: ChatWallpaper?
- colors: UIColors
UIThemeEntityOverrides
Record type:
- light: UIThemeEntityOverride?
- dark: UIThemeEntityOverride?
UpdatedMessage
Record type:
- msgContent: MsgContent
- mentions: {string : int64}
User
Record type:
- userId: int64
- agentUserId: int64
- userContactId: int64
- localDisplayName: string
- profile: LocalProfile
- fullPreferences: FullPreferences
- activeUser: bool
- activeOrder: int64
- viewPwdHash: UserPwdHash?
- showNtfs: bool
- sendRcptsContacts: bool
- sendRcptsSmallGroups: bool
- autoAcceptMemberContacts: bool
- autoAcceptGroupInvitations: bool
- userMemberProfileUpdatedAt: UTCTime?
- userChatRelay: bool
- clientService: bool
- uiThemes: UIThemeEntityOverrides?
UserChatRelay
Record type:
- chatRelayId: int64
- address: string
- relayProfile: RelayProfile
- domains: [string]
- preset: bool
- tested: bool?
- enabled: bool
- deleted: bool
UserContact
Record type:
- userContactLinkId: int64
- connReqContact: string
- groupId: int64?
UserContactLink
Record type:
- userContactLinkId: int64
- connLinkContact: CreatedConnLink
- shortLinkDataSet: bool
- shortLinkLargeDataSet: bool
- addressSettings: AddressSettings
UserContactRequest
Record type:
- contactRequestId: int64
- agentInvitationId: string
- contactId_: int64?
- businessGroupId_: int64?
- userContactLinkId_: int64?
- cReqChatVRange: VersionRange
- localDisplayName: string
- profileId: int64
- profile: LocalProfile
- createdAt: UTCTime
- updatedAt: UTCTime
- xContactId: string?
- pqSupport: bool
- welcomeSharedMsgId: string?
- requestSharedMsgId: string?
- rejectionSupported: bool
UserContactRequestRef
Record type:
- contactRequestId: int64
- rejectionSupported: bool
UserInfo
Record type:
- user: User
- unreadCount: int
UserProfileUpdateSummary
Record type:
- updateSuccesses: int
- updateFailures: int
- changedContacts: [Contact]
UserPwdHash
Record type:
- hash: string
- salt: string
VersionRange
Record type:
- minVersion: int
- maxVersion: int
XFTPErrorType
Discriminated union type:
BLOCK:
- type: "BLOCK"
SESSION:
- type: "SESSION"
HANDSHAKE:
- type: "HANDSHAKE"
CMD:
- type: "CMD"
- cmdErr: CommandError
AUTH:
- type: "AUTH"
BLOCKED:
- type: "BLOCKED"
- blockInfo: BlockingInfo
SIZE:
- type: "SIZE"
QUOTA:
- type: "QUOTA"
DIGEST:
- type: "DIGEST"
CRYPTO:
- type: "CRYPTO"
NO_FILE:
- type: "NO_FILE"
HAS_FILE:
- type: "HAS_FILE"
FILE_IO:
- type: "FILE_IO"
TIMEOUT:
- type: "TIMEOUT"
INTERNAL:
- type: "INTERNAL"
DUPLICATE_:
- type: "DUPLICATE_"
XFTPRcvFile
Record type:
- rcvFileDescription: RcvFileDescr
- agentRcvFileId: string?
- agentRcvFileDeleted: bool
- userApprovedRelays: bool
XFTPSndFile
Record type:
- agentSndFileId: string
- privateSndFileDescr: string?
- agentSndFileDeleted: bool
- cryptoArgs: CryptoFileArgs?