bot

package module
v3.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 12, 2024 License: Apache-2.0 Imports: 37 Imported by: 13

README

Installation

go get github.com/MixinNetwork/bot-api-go-client

Quick Start

package main

import (
	"context"
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/base64"
	"encoding/pem"
	"fmt"
	"time"

	"github.com/MixinNetwork/bot-api-go-client"
)

const (
	appId         = ""
	appSessionId  = ""
	appPrivateKey = ``
)

func main() {
	ctx := context.Background()
	// Generate Ed25519 key pair.
	pub, privateKey, err := ed25519.GenerateKey(rand.Reader)
	if err != nil {
		return nil, "", err
	}
	sessionSecret := base64.RawURLEncoding.EncodeToString(pub[:])
	// Rigster the user on the Mixin network
	user, err := bot.CreateUser(ctx, sessionSecret, "fullname", appId, appSessionId, appPrivateKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	userSessionKey := base64.RawURLEncoding.EncodeToString(privateKey)
	// encrypt PIN
	encryptedPIN, err := bot.EncryptEd25519PIN(pin, user.PINTokenBase64, userSessionKey, uint64(time.Now().UnixNano()))
	if err != nil {
		return err
	}
	fmt.Println(encryptedPIN)
	// Set initial code.
	err = bot.UpdatePin(ctx, "", encryptedPIN, user.UserId, user.SessionId, userSessionKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	//Sign authentication token.
	authenticationToken, err := bot.SignAuthenticationToken(user.UserId, user.SessionId, userSessionKey, "GET", "/assets", "")
	if err != nil {
		fmt.Println(err)
		return
	}
	// Read asset list
	assets, err := bot.AssetList(ctx, authenticationToken)
	if err != nil {
		fmt.Println(err)
		return
	}
	for _, a := range assets {
		fmt.Println(a.AssetId)
	}
}

Fo more examples, see examples

Documentation

Index

Constants

View Source
const (
	BTC        = "c6d0c728-2624-429b-8e0d-d9d19b6592fa"
	ETH        = "43d61dcd-e413-450d-80b8-101d5e903357"
	USDT_ERC20 = "4d8c508b-91c5-375b-92b0-ee702ed2dac5"
	USDC_ERC20 = "9b180ab6-6abe-3dc0-a13f-04169eb34bfa"
	USDT_TRC20 = "b91e18ff-a9ae-3dc7-8679-e935d9a4b34b"
)
View Source
const (
	MessageCategoryPlainText             = "PLAIN_TEXT"
	MessageCategoryPlainImage            = "PLAIN_IMAGE"
	MessageCategoryPlainData             = "PLAIN_DATA"
	MessageCategoryPlainSticker          = "PLAIN_STICKER"
	MessageCategoryPlainLive             = "PLAIN_LIVE"
	MessageCategoryPlainContact          = "PLAIN_CONTACT"
	MessageCategoryPlainPost             = "PLAIN_POST"
	MessageCategoryPlainLocation         = "PLAIN_LOCATION"
	MessageCategoryPlainTranscript       = "PLAIN_TRANSCRIPT"
	MessageCategorySystemConversation    = "SYSTEM_CONVERSATION"
	MessageCategorySystemAccountSnapshot = "SYSTEM_ACCOUNT_SNAPSHOT"
	MessageCategoryMessageRecall         = "MESSAGE_RECALL"
	MessageCategoryMessagePin            = "MESSAGE_PIN"
	MessageCategoryAppButtonGroup        = "APP_BUTTON_GROUP"
	MessageCategoryAppCard               = "APP_CARD"

	MessageCategorySystemSafeSnapshot = "SYSTEM_SAFE_SNAPSHOT"
)
View Source
const (
	BitcoinChainId         = "c6d0c728-2624-429b-8e0d-d9d19b6592fa"
	BitcoinCashChainId     = "fd11b6e3-0b87-41f1-a41f-f0e9b49e5bf0"
	BitcoinSVChainId       = "574388fd-b93f-4034-a682-01c2bc095d17"
	LitecoinChainId        = "76c802a2-7c88-447f-a93e-c29c9e5dd9c8"
	EthereumChainId        = "43d61dcd-e413-450d-80b8-101d5e903357"
	EthereumClassicChainId = "2204c1ee-0ea2-4add-bb9a-b3719cfff93a"
	BSCChainId             = "1949e683-6a08-49e2-b087-d6b72398588f"
	PolygonChainId         = "b7938396-3f94-4e0a-9179-d3440718156f"
	MVMChainId             = "a0ffd769-5850-4b48-9651-d2ae44a3e64d"
	DecredChainId          = "8f5caf2a-283d-4c85-832a-91e83bbf290b"
	RippleChainId          = "23dfb5a5-5d7b-48b6-905f-3970e3176e27"
	SiacoinChainId         = "990c4c29-57e9-48f6-9819-7d986ea44985"
	EOSChainId             = "6cfe566e-4aad-470b-8c9a-2fd35b49c68d"
	DogecoinChainId        = "6770a1e5-6086-44d5-b60f-545f9d9e8ffd"
	DashChainId            = "6472e7e3-75fd-48b6-b1dc-28d294ee1476"
	ZcashChainId           = "c996abc9-d94e-4494-b1cf-2a3fd3ac5714"
	NEMChainId             = "27921032-f73e-434e-955f-43d55672ee31"
	ArweaveChainId         = "882eb041-64ea-465f-a4da-817bd3020f52"
	HorizenChainId         = "a2c5d22b-62a2-4c13-b3f0-013290dbac60"
	TRONChainId            = "25dabac5-056a-48ff-b9f9-f67395dc407c"
	StellarChainId         = "56e63c06-b506-4ec5-885a-4a5ac17b83c1"
	MassGridChainId        = "b207bce9-c248-4b8e-b6e3-e357146f3f4c"
	BytomChainId           = "443e1ef5-bc9b-47d3-be77-07f328876c50"
	BytomPoSChainId        = "71a0e8b5-a289-4845-b661-2b70ff9968aa"
	CosmosChainId          = "7397e9f1-4e42-4dc8-8a3b-171daaadd436"
	AkashChainId           = "9c612618-ca59-4583-af34-be9482f5002d"
	BinanceChainId         = "17f78d7c-ed96-40ff-980c-5dc62fecbc85"
	MoneroChainId          = "05c5ac01-31f9-4a69-aa8a-ab796de1d041"
	StarcoinChainId        = "c99a3779-93df-404d-945d-eddc440aa0b2"
	BitSharesChainId       = "05891083-63d2-4f3d-bfbe-d14d7fb9b25a"
	RavencoinChainId       = "6877d485-6b64-4225-8d7e-7333393cb243"
	GrinChainId            = "1351e6bd-66cf-40c1-8105-8a8fe518a222"
	VCashChainId           = "c3b9153a-7fab-4138-a3a4-99849cadc073"
	HandshakeChainId       = "13036886-6b83-4ced-8d44-9f69151587bf"
	NervosChainId          = "d243386e-6d84-42e6-be03-175be17bf275"
	TezosChainId           = "5649ca42-eb5f-4c0e-ae28-d9a4e77eded3"
	NamecoinChainId        = "f8b77dc0-46fd-4ea1-9821-587342475869"
	SolanaChainId          = "64692c23-8971-4cf4-84a7-4dd1271dd887"
	NearChainId            = "d6ac94f7-c932-4e11-97dd-617867f0669e"
	FilecoinChainId        = "08285081-e1d8-4be6-9edc-e203afa932da"
	MobileCoinChainId      = "eea900a8-b327-488c-8d8d-1428702fe240"
	PolkadotChainId        = "54c61a72-b982-4034-a556-0d99e3c21e39"
	KusamaChainId          = "9d29e4f6-d67c-4c4b-9525-604b04afbe9f"
	AlgorandChainId        = "706b6f84-3333-4e55-8e89-275e71ce9803"
	AvalancheChainId       = "cbc77539-0a20-4666-8c8a-4ded62b36f0a"
	XDCChainId             = "b12bb04a-1cea-401c-a086-0be61f544889"
	AptosChainId           = "d2c1c7e1-a1a9-4f88-b282-d93b0a08b42b"
	TONChainId             = "ef660437-d915-4e27-ad3f-632bfb6ba0ee"
)
View Source
const (
	MixAddressPrefix  = "MIX"
	MixAddressVersion = byte(2)
)
View Source
const (
	TIPVerify                   = "TIP:VERIFY:"
	TIPAddressAdd               = "TIP:ADDRESS:ADD:"
	TIPAddressRemove            = "TIP:ADDRESS:REMOVE:"
	TIPUserDeactivate           = "TIP:USER:DEACTIVATE:"
	TIPEmergencyContactCreate   = "TIP:EMERGENCY:CONTACT:CREATE:"
	TIPEmergencyContactRead     = "TIP:EMERGENCY:CONTACT:READ:"
	TIPEmergencyContactRemove   = "TIP:EMERGENCY:CONTACT:REMOVE:"
	TIPPhoneNumberUpdate        = "TIP:PHONE:NUMBER:UPDATE:"
	TIPMultisigRequestSign      = "TIP:MULTISIG:REQUEST:SIGN:"
	TIPMultisigRequestUnlock    = "TIP:MULTISIG:REQUEST:UNLOCK:"
	TIPCollectibleRequestSign   = "TIP:COLLECTIBLE:REQUEST:SIGN:"
	TIPCollectibleRequestUnlock = "TIP:COLLECTIBLE:REQUEST:UNLOCK:"
	TIPTransferCreate           = "TIP:TRANSFER:CREATE:"
	TIPWithdrawalCreate         = "TIP:WITHDRAWAL:CREATE:"
	TIPRawTransactionCreate     = "TIP:TRANSACTION:CREATE:"
	TIPOAuthApprove             = "TIP:OAUTH:APPROVE:"
	TIPProvisioningUpdate       = "TIP:PROVISIONING:UPDATE:"
	TIPOwnershipTransfer        = "TIP:APP:OWNERSHIP:TRANSFER:"
	TIPSequencerRegister        = "SEQUENCER:REGISTER:"
)
View Source
const (
	RelationshipActionAdd     = "ADD"
	RelationshipActionUpdate  = "UPDATE"
	RelationshipActionRemove  = "REMOVE"
	RelationshipActionBlock   = "BLOCK"
	RelationshipActionUnblock = "UNBLOCK"

	PreferenceSourceAll      = "EVERYBODY"
	PreferenceSourceContacts = "CONTACTS"
	PreferenceSourceNobody   = "NOBODY"
)

Variables

View Source
var (
	DefaultApiHost   = "https://api.mixin.one"
	DefaultBlazeHost = "blaze.mixin.one"

	ZeromeshApiHost   = "https://mixin-api.zeromesh.net"
	ZeromeshBlazeHost = "mixin-blaze.zeromesh.net"
)
View Source
var Nil = uuid.Nil

Functions

func AesDecrypt

func AesDecrypt(secret, b []byte) ([]byte, error)

func AesEncrypt

func AesEncrypt(secret, b []byte) ([]byte, error)

func AssetBalance

func AssetBalance(ctx context.Context, assetId, uid, sid, sessionKey string) (common.Integer, error)

func AssetBalanceWithSafeUser

func AssetBalanceWithSafeUser(ctx context.Context, kernelAssetId string, su *SafeUser) (common.Integer, error)

func CallKernelRPC

func CallKernelRPC(ctx context.Context, user *SafeUser, method string, params ...interface{}) ([]byte, error)

func CancelMultisig

func CancelMultisig(ctx context.Context, id string, su *SafeUser) error

func Chunked

func Chunked(source []interface{}, size int) [][]interface{}

func DecryptMessageData

func DecryptMessageData(data string, sessionId, private string) (string, error)

func DeleteAddress

func DeleteAddress(ctx context.Context, addressId string, user *SafeUser) error

func EncryptEd25519PIN

func EncryptEd25519PIN(pin string, iterator uint64, current *SafeUser) (string, error)

func EncryptMessageData

func EncryptMessageData(data string, sessions []*Session, privateKey string) (string, error)

func GenerateUserChecksum

func GenerateUserChecksum(sessions []*Session) string

func GetChainName

func GetChainName(chainId string) string

func GetFullChains

func GetFullChains() map[string]bool

func HashMembers

func HashMembers(ids []string) string

func IsChainId

func IsChainId(id string) bool

func MakeUniqueStringSlice

func MakeUniqueStringSlice(ss []string) []string

func NewTransport

func NewTransport(
	roundTripper http.RoundTripper,
	uid,
	sid,
	privateKey string) (*transport, error)

NewTransport returns a new transport based on the given inputs.

func OAuthGetAccessToken

func OAuthGetAccessToken(ctx context.Context, clientID, clientSecret string, authorizationCode string, codeVerifier string, ed25519 string) (string, string, string, error)

OAuthGetAccessToken get the access token of a user ed25519 is optional, only use it when you want to sign OAuth access token locally

func PayWithdrawalFee

func PayWithdrawalFee(ctx context.Context, traceId, feeId, amount string, u *SafeUser) (*common.VersionedTransaction, error)

func PostAcknowledgements

func PostAcknowledgements(ctx context.Context, requests []*ReceiptAcknowledgementRequest, user *SafeUser) error

func PostMessage

func PostMessage(ctx context.Context, conversationId, recipientId, messageId, category, data string, user *SafeUser) error

func PostMessages

func PostMessages(ctx context.Context, messages []*MessageRequest, user *SafeUser) error

func PrivateKeyToCurve25519

func PrivateKeyToCurve25519(curve25519Private *[32]byte, privateKey ed25519.PrivateKey)

func PublicKeyToCurve25519

func PublicKeyToCurve25519(publicKey ed25519.PublicKey) ([]byte, error)

func ReadCode

func ReadCode[C Code](ctx context.Context, codeId string) (C, error)

func Request

func Request(ctx context.Context, method, path string, body []byte, accessToken string) ([]byte, error)

func RequestWithId

func RequestWithId(ctx context.Context, method, path string, body []byte, accessToken, requestID string) ([]byte, error)

func SchemeApps

func SchemeApps(appID, action string, params map[string]string) string

SchemeApps scheme of an app

appID required, userID of an app
action optional, action about this scheme, default is "open"
params optional, parameters of any name or type can be passed when opening the bot homepage to facilitate the development of features like invitation codes, visitor tracking, etc

https://developers.mixin.one/docs/schema#popups-bot-profile

func SchemeCodes

func SchemeCodes(codeId string) string

SchemeCodes scheme of a code

code required

https://developers.mixin.one/docs/schema#popus-code-info

func SchemeConversations

func SchemeConversations(conversationID, userID string) string

SchemeConversations scheme of a conversation

userID optional, for user conversation only, if there's not conversation with the user, messenger will create the conversation first

https://developers.mixin.one/docs/schema#open-an-conversation

func SchemePay

func SchemePay(assetId, traceId, recipientId, memo string, amount number.Decimal) string

SchemePay scheme of a pay

assetId required
recipientId required, receiver's user id
amount require, transfer amount
traceId optional, UUID, prevent duplicate payment
memo optional, transaction memo

https://developers.mixin.one/docs/schema#invoke-payment-page

func SchemeSend

func SchemeSend(category SendSchemeCategory, data []byte, conversationID string) string

SchemeSend scheme of a share

category required, category of shared content
data required, shared content
conversationID optional, If you specify conversation and it is the conversation of the user's current session, the confirmation box shown above will appear, the message will be sent after the user clicks the confirmation; if the conversation is not specified or is not the conversation of the current session, an interface where the user chooses which session to share with will show up.

https://developers.mixin.one/docs/schema#sharing

func SchemeSnapshots

func SchemeSnapshots(snapshotId, traceId string) string

SchemeSnapshots scheme of a snapshot

snapshotId required if no traceId
traceId required if no snapshotId

https://developers.mixin.one/docs/schema#transfer-details-interface

func SchemeTransfer

func SchemeTransfer(userId string) string

SchemeTransfer scheme of a transfer

userId required

https://developers.mixin.one/docs/schema#invoke-transfer-page

func SchemeUsers

func SchemeUsers(userId string) string

SchemeUsers scheme of a user

userId required

https://developers.mixin.one/docs/schema#popups-user-profile

func SetBaseUri

func SetBaseUri(base string)

func SetBlazeUri

func SetBlazeUri(blaze string)

func SetUserAgent

func SetUserAgent(ua string)

func SharedKey

func SharedKey(public ed25519.PublicKey, private ed25519.PrivateKey) ([32]byte, error)

func SignAuthenticationToken

func SignAuthenticationToken(method, uri, body string, su *SafeUser) (string, error)

func SignAuthenticationTokenWithoutBody

func SignAuthenticationTokenWithoutBody(method, uri string, user *SafeUser) (string, error)

func SignOauthAccessToken

func SignOauthAccessToken(appID, authorizationID, privateKey, method, uri, body, scp string, requestID string) (string, error)

func SimpleRequest

func SimpleRequest(ctx context.Context, method, path string, body []byte) ([]byte, error)

func TIPBodyForSequencerRegister

func TIPBodyForSequencerRegister(userId, publicKey string) []byte

func TIPBodyForVerify

func TIPBodyForVerify(timestamp int64) []byte

func TIPMigrateBody

func TIPMigrateBody(pub ed25519.PublicKey) string

func TipBody

func TipBody(s string) []byte

func TipBodyForAddressAdd

func TipBodyForAddressAdd(assetId string, publicKey, keyTag, name string) []byte

func TipBodyForEmergencyContactCreate

func TipBodyForEmergencyContactCreate(verificationId, code string) []byte

func TipBodyForOwnershipTransfer

func TipBodyForOwnershipTransfer(userId string) []byte

func TipBodyForPhoneNumberUpdate

func TipBodyForPhoneNumberUpdate(verificationId, code string) []byte

func TipBodyForProvisioningUpdate

func TipBodyForProvisioningUpdate(deviceId string, secret string) []byte

func TipBodyForRawTransactionCreate

func TipBodyForRawTransactionCreate(assetId string, opponentKey string, opponentReceivers []string, opponentThreshold int64, amount number.Decimal, traceId, memo string) []byte

func TipBodyForTransfer

func TipBodyForTransfer(assetId string, counterUserId string, amount number.Decimal, traceId, memo string) []byte

func TipBodyForWithdrawalCreate

func TipBodyForWithdrawalCreate(addressId string, amount, fee number.Decimal, traceId, memo string) []byte

func UniqueConversationId

func UniqueConversationId(userId, recipientId string) string

func UniqueObjectId

func UniqueObjectId(args ...string) string

func UnlockMultisig

func UnlockMultisig(ctx context.Context, id, pin string, su *SafeUser) error

func UpdatePin

func UpdatePin(ctx context.Context, oldEncryptedPin, encryptedPin string, su *SafeUser) error

func UpdateTipPin

func UpdateTipPin(ctx context.Context, pin, pubTip string, su *SafeUser) error

func UuidFromBytes

func UuidFromBytes(input []byte) (uuid.UUID, error)

func UuidFromString

func UuidFromString(id string) (uuid.UUID, error)

func UuidNewV4

func UuidNewV4() uuid.UUID

func WithAPIKey

func WithAPIKey(userId, sessionId, p string)

Types

type Address

type Address struct {
	AddressId   string `json:"address_id"`
	AssetId     string `json:"asset_id"`
	Label       string `json:"label"`
	Destination string `json:"destination"`
	Tag         string `json:"tag"`
	Fee         string `json:"fee"`
	Dust        string `json:"dust"`
	UpdatedAt   string `json:"updated_at"`
}

func CreateAddress

func CreateAddress(ctx context.Context, in *AddressInput, user *SafeUser) (*Address, error)

func GetAddressesByAssetId

func GetAddressesByAssetId(ctx context.Context, assetId string, user *SafeUser) ([]*Address, error)

func ReadAddress

func ReadAddress(ctx context.Context, addressId, user *SafeUser) (*Address, error)

type AddressInput

type AddressInput struct {
	AssetId     string
	Label       string
	Destination string
	Tag         string
}

type App

type App struct {
	Type             string    `json:"type"`
	AppId            string    `json:"app_id"`
	AppNumber        string    `json:"app_number"`
	RedirectURI      string    `json:"redirect_uri"`
	HomeURI          string    `json:"home_uri"`
	Name             string    `json:"name"`
	IconURL          string    `json:"icon_url"`
	Description      string    `json:"description"`
	Capabilities     []string  `json:"capabilities"`
	ResourcePatterns []string  `json:"resource_patterns"`
	Category         string    `json:"category"`
	CreatorId        string    `json:"creator_id"`
	UpdatedAt        time.Time `json:"updated_at"`
	IsVerified       bool      `json:"is_verified"`
}

func Migrate

func Migrate(ctx context.Context, receiver string, user *SafeUser) (*App, error)

type AppButtonView

type AppButtonView struct {
	Label  string `json:"label"`
	Action string `json:"action"`
	Color  string `json:"color"`
}

type Asset

type Asset struct {
	Type           string  `json:"type"`
	AssetID        string  `json:"asset_id"`
	ChainID        string  `json:"chain_id"`
	AssetKey       string  `json:"asset_key"`
	Precision      int     `json:"precision"`
	KernelAssetId  string  `json:"kernel_asset_id"`
	Symbol         string  `json:"symbol"`
	Name           string  `json:"name"`
	IconURL        string  `json:"icon_url"`
	Amount         string  `json:"amount"`
	PriceBTC       string  `json:"price_btc"`
	PriceUSD       string  `json:"price_usd"`
	ChangeBTC      string  `json:"change_btc"`
	ChangeUSD      string  `json:"change_usd"`
	Confirmations  int64   `json:"confirmations"`
	Fee            string  `json:"fee"`
	Reserve        string  `json:"reserve"`
	SnapshotsCount int64   `json:"snapshots_count"`
	Capitalization float64 `json:"capitalization"`
	Liquidity      string  `json:"liquidity"`
}

func AssetSearch

func AssetSearch(ctx context.Context, name string) ([]*Asset, error)

func ReadAsset

func ReadAsset(ctx context.Context, name string) (*Asset, error)

type AssetTicker

type AssetTicker struct {
	Type     string `json:"type"`
	PriceBTC string `json:"price_btc"`
	PriceUSD string `json:"price_usd"`
}

func ReadAssetTicker

func ReadAssetTicker(ctx context.Context, assetId string) (*AssetTicker, error)

type Attachment

type Attachment struct {
	Type         string `json:"type"`
	AttachmentId string `json:"attachment_id"`
	ViewURL      string `json:"view_url"`
	UploadUrl    string `json:"upload_url"`
}

func AttachmentShow

func AttachmentShow(ctx context.Context, id string, user *SafeUser) (*Attachment, error)

func CreateAttachment

func CreateAttachment(ctx context.Context, user *SafeUser) (*Attachment, error)

type Authenticator

type Authenticator struct {
	Uid        string
	Sid        string
	PrivateKey string
}

func NewAuthenticator

func NewAuthenticator(uid, sid, privateKey string) *Authenticator

func (*Authenticator) BuildJWT

func (a *Authenticator) BuildJWT(method, uri, body string) (string, error)

type BlazeClient

type BlazeClient struct {
	// contains filtered or unexported fields
}

func NewBlazeClient

func NewBlazeClient(uid, sid, key string) *BlazeClient

func (*BlazeClient) Loop

func (b *BlazeClient) Loop(ctx context.Context, listener BlazeListener) error

func (*BlazeClient) SendAppButton

func (b *BlazeClient) SendAppButton(ctx context.Context, conversationId, recipientId, label, action, color string) error

func (*BlazeClient) SendAppCard

func (b *BlazeClient) SendAppCard(ctx context.Context, conversationId, recipientId, title, description, action, iconUrl string) error

func (*BlazeClient) SendContact

func (b *BlazeClient) SendContact(ctx context.Context, conversationId, recipientId, contactId string) error

func (*BlazeClient) SendGroupAppButton

func (b *BlazeClient) SendGroupAppButton(ctx context.Context, conversationId, recipientId string, buttons []*AppButtonView) error

func (*BlazeClient) SendMessage

func (b *BlazeClient) SendMessage(ctx context.Context, conversationId, recipientId, messageId, category, content, representativeId string) error

func (*BlazeClient) SendPlainText

func (b *BlazeClient) SendPlainText(ctx context.Context, msg MessageView, content string) error

func (*BlazeClient) SendPost

func (b *BlazeClient) SendPost(ctx context.Context, msg MessageView, content string) error

func (*BlazeClient) SendRecallMessage

func (b *BlazeClient) SendRecallMessage(ctx context.Context, conversationId, recipientId, recallMessageId string) error

func (*BlazeClient) SetupDailer

func (b *BlazeClient) SetupDailer(dailer *websocket.Dialer)

type BlazeListener

type BlazeListener interface {
	OnMessage(ctx context.Context, msg MessageView, userId string) error
	OnAckReceipt(ctx context.Context, msg MessageView, userID string) error
	SyncAck() bool
}

type BlazeMessage

type BlazeMessage struct {
	Id     string                 `json:"id"`
	Action string                 `json:"action"`
	Params map[string]interface{} `json:"params,omitempty"`
	Data   json.RawMessage        `json:"data,omitempty"`
	Error  *Error                 `json:"error,omitempty"`
}

type Code

type Code interface {
	*MultisigRequest | *User | *Conversation
}

type Conversation

type Conversation struct {
	ConversationId string    `json:"conversation_id"`
	CreatorId      string    `json:"creator_id"`
	Category       string    `json:"category"`
	Name           string    `json:"name"`
	IconURL        string    `json:"icon_url"`
	Announcement   string    `json:"announcement"`
	CreatedAt      time.Time `json:"created_at"`

	Participants        []Participant            `json:"participants"`
	ParticipantSessions []ParticipantSessionView `json:"participant_sessions"`
}

func ConversationShow

func ConversationShow(ctx context.Context, conversationId string, user *SafeUser) (*Conversation, error)

func ConversationShowByToken

func ConversationShowByToken(ctx context.Context, conversationId string, accessToken string) (*Conversation, error)

func CreateContactConversation

func CreateContactConversation(ctx context.Context, participantID string, user *SafeUser) (*Conversation, error)

func CreateConversation

func CreateConversation(ctx context.Context, category, conversationId string, name, announcement string, participants []Participant, user *SafeUser) (*Conversation, error)

func JoinConversation

func JoinConversation(ctx context.Context, conversationId string, user *SafeUser) (*Conversation, error)

type DepositEntryView

type DepositEntryView struct {
	Type          string   `json:"type"`
	EntryID       string   `json:"entry_id"`
	Threshold     int64    `json:"threshold"`
	Members       []string `json:"members"`
	Destination   string   `json:"destination"`
	Tag           string   `json:"tag"`
	SafeSignature string   `json:"signature"`
	ChainID       string   `json:"chain_id"`
	IsPrimary     bool     `json:"is_primary"`
}

func CreateDepositEntry

func CreateDepositEntry(ctx context.Context, chainID string, members []string, threshold int64, user *SafeUser) ([]*DepositEntryView, error)

type Error

type Error struct {
	Status      int         `json:"status"`
	Code        int         `json:"code"`
	Description string      `json:"description"`
	Extra       interface{} `json:"extra,omitempty"`
	// contains filtered or unexported fields
}

func AuthorizationError

func AuthorizationError(ctx context.Context) Error

func BadDataError

func BadDataError(ctx context.Context) Error

func BlazeServerError

func BlazeServerError(ctx context.Context, err error) Error

func ForbiddenError

func ForbiddenError(ctx context.Context) Error

func ServerError

func ServerError(ctx context.Context, err error) Error

func (Error) Error

func (sessionError Error) Error() string

type Fiat

type Fiat struct {
	Code string  `json:"code"`
	Rate float64 `json:"rate"`
}

func Fiats

func Fiats(ctx context.Context) ([]*Fiat, error)

func GetFiats

func GetFiats(ctx context.Context) ([]*Fiat, error)

type GhostKeyRequest

type GhostKeyRequest struct {
	Receivers []string `json:"receivers"`
	Index     uint     `json:"index"`
	Hint      string   `json:"hint"`
}

type GhostKeys

type GhostKeys struct {
	Type string   `json:"type"`
	Mask string   `json:"mask"`
	Keys []string `json:"keys"`
}

func RequestSafeGhostKeys

func RequestSafeGhostKeys(ctx context.Context, gkr []*GhostKeyRequest, user *SafeUser) ([]*GhostKeys, error)

func (GhostKeys) KeysSlice

func (g GhostKeys) KeysSlice() []*crypto.Key

type ImageMessagePayload

type ImageMessagePayload struct {
	AttachmentId string `json:"attachment_id"`
	Width        int    `json:"width"`
	Height       int    `json:"height"`
	MimeType     string `json:"mime_type"`
	Thumbnail    string `json:"thumbnail"`
	Size         int64  `json:"size"`
}

type KernelDepositView

type KernelDepositView struct {
	Chain        string `json:"chain"`
	DepositHash  string `json:"deposit_hash"`
	DepositIndex int64  `json:"deposit_index"`
}

type KernelTransactionRequestCreateRequest

type KernelTransactionRequestCreateRequest struct {
	RequestID string `json:"request_id"`
	Raw       string `json:"raw"`
}

type LiveMessagePayload

type LiveMessagePayload struct {
	Width    int    `json:"width"`
	Height   int    `json:"height"`
	ThumbUrl string `json:"thumb_url"`
	Url      string `json:"url"`
}

type MessageRequest

type MessageRequest struct {
	ConversationId   string `json:"conversation_id"`
	RecipientId      string `json:"recipient_id"`
	MessageId        string `json:"message_id"`
	Category         string `json:"category"`
	Data             string `json:"data"`
	RepresentativeId string `json:"representative_id"`
	QuoteMessageId   string `json:"quote_message_id"`
}

type MessageView

type MessageView struct {
	ConversationId   string    `json:"conversation_id"`
	UserId           string    `json:"user_id"`
	MessageId        string    `json:"message_id"`
	Category         string    `json:"category"`
	Data             string    `json:"data"`
	RepresentativeId string    `json:"representative_id"`
	QuoteMessageId   string    `json:"quote_message_id"`
	Status           string    `json:"status"`
	Source           string    `json:"source"`
	CreatedAt        time.Time `json:"created_at"`
	UpdatedAt        time.Time `json:"updated_at"`
}

type MixAddress

type MixAddress struct {
	Version   byte
	Threshold byte
	// contains filtered or unexported fields
}

func NewMainnetMixAddress

func NewMainnetMixAddress(members []string, threshold byte) *MixAddress

func NewMixAddressFromString

func NewMixAddressFromString(s string) (*MixAddress, error)

func NewUUIDMixAddress

func NewUUIDMixAddress(members []string, threshold byte) *MixAddress

func (*MixAddress) Members

func (ma *MixAddress) Members() []string

func (*MixAddress) RequestOrGenerateGhostKeys

func (ma *MixAddress) RequestOrGenerateGhostKeys(ctx context.Context, outputIndex uint, u *SafeUser) (*GhostKeys, error)

func (*MixAddress) String

func (ma *MixAddress) String() string

type MultisigRequest

type MultisigRequest struct {
	Type            string    `json:"type"`
	RequestId       string    `json:"request_id"`
	UserId          string    `json:"user_id"`
	AssetId         string    `json:"asset_id"`
	Amount          string    `json:"amount"`
	Threshold       int64     `json:"threshold"`
	Senders         []string  `json:"senders"`
	Receivers       []string  `json:"receivers"`
	Signers         []string  `json:"signers"`
	Memo            string    `json:"memo"`
	Action          string    `json:"action"`
	State           string    `json:"state"`
	TransactionHash string    `json:"transaction_hash"`
	RawTransaction  string    `json:"raw_transaction"`
	CreatedAt       time.Time `json:"created_at"`
	CodeId          string    `json:"code_id"`
}

func CreateMultisig

func CreateMultisig(ctx context.Context, action, raw string, su *SafeUser) (*MultisigRequest, error)

CreateMultisig create a multisigs request which action is `unlock` or `sign`

func ReadMultisigByCode

func ReadMultisigByCode(ctx context.Context, codeId string) (*MultisigRequest, error)

func SignMultisig

func SignMultisig(ctx context.Context, id, pin string, su *SafeUser) (*MultisigRequest, error)

type MultisigUTXO

type MultisigUTXO struct {
	Type            string    `json:"type"`
	UserId          string    `json:"user_id"`
	UTXOId          string    `json:"utxo_id"`
	AssetId         string    `json:"asset_id"`
	TransactionHash string    `json:"transaction_hash"`
	OutputIndex     int64     `json:"output_index"`
	Amount          string    `json:"amount"`
	Threshold       int64     `json:"threshold"`
	Members         []string  `json:"members"`
	Memo            string    `json:"memo"`
	State           string    `json:"state"`
	Sender          string    `json:"sender"`
	CreatedAt       time.Time `json:"created_at"`
	UpdatedAt       time.Time `json:"updated_at"`
	SignedBy        string    `json:"signed_by"`
	SignedTx        string    `json:"signed_tx"`
}

func ReadMultisigs

func ReadMultisigs(ctx context.Context, limit int, offset, membersHash, threshold, state string, su *SafeUser) ([]*MultisigUTXO, error)

state: spent, unspent, signed

func ReadMultisigsLegacy

func ReadMultisigsLegacy(ctx context.Context, limit int, offset string, user *SafeUser) ([]*MultisigUTXO, error)

type NetworkChain

type NetworkChain struct {
	Type                   string    `json:"type"`
	ChainId                string    `json:"chain_id"`
	Name                   string    `json:"name"`
	Symbol                 string    `json:"symbol"`
	IconURL                string    `json:"icon_url"`
	ManagedBlockHeight     int64     `json:"managed_block_height"`
	DepositBlockHeight     int64     `json:"deposit_block_height"`
	ExternalBlockHeight    int64     `json:"external_block_height"`
	Threshold              int       `json:"threshold"`
	WithdrawalTimestamp    time.Time `json:"withdrawal_timestamp"`
	WithdrawalPendingCount int64     `json:"withdrawal_pending_count"`
	WithdrawalFee          string    `json:"withdrawal_fee"`
	IsSynchronized         bool      `json:"is_synchronized"`
}

func ReadNetworkChainById

func ReadNetworkChainById(ctx context.Context, chainId string) (*NetworkChain, error)

func ReadNetworkChains

func ReadNetworkChains(ctx context.Context, chainId string) ([]*NetworkChain, error)

type Output

type Output struct {
	Type               string    `json:"type"`
	OutputID           string    `json:"output_id"`
	TransactionHash    string    `json:"transaction_hash"`
	OutputIndex        uint      `json:"output_index"`
	AssetId            string    `json:"asset_id"`
	KernelAssetId      string    `json:"kernel_asset_id"`
	Amount             string    `json:"amount"`
	Mask               string    `json:"mask"`
	Keys               []string  `json:"keys"`
	SendersHash        string    `json:"senders_hash"`
	SendersThreshold   int64     `json:"senders_threshold"`
	Senders            []string  `json:"senders"`
	ReceiversHash      string    `json:"receivers_hash"`
	ReceiversThreshold int64     `json:"receivers_threshold"`
	Receivers          []string  `json:"receivers"`
	Extra              string    `json:"extra"`
	State              string    `json:"state"`
	Sequence           int64     `json:"sequence"`
	CreatedAt          time.Time `json:"created_at"`
	Signers            []string  `json:"signers"`
	SignedBy           string    `json:"signed_by"`

	Deposit   *KernelDepositView `json:"deposit,omitempty"`
	RequestId string             `json:"request_id,omitempty"`
}

func ListOutputs

func ListOutputs(ctx context.Context, membersHash string, threshold byte, assetId, state string, offset uint64, limit int, u *SafeUser) ([]*Output, error)

func ListUnspentOutputs

func ListUnspentOutputs(ctx context.Context, membersHash string, threshold byte, kernelAssetId string, u *SafeUser) ([]*Output, error)

type Participant

type Participant struct {
	UserId    string    `json:"user_id"`
	Role      string    `json:"role"`
	CreatedAt time.Time `json:"created_at"`
}

type ParticipantSessionView

type ParticipantSessionView struct {
	Type      string `json:"type"`
	UserId    string `json:"user_id"`
	SessionId string `json:"session_id"`
	PublicKey string `json:"public_key"`
}

type RecallMessagePayload

type RecallMessagePayload struct {
	MessageId string `json:"message_id"`
}

type ReceiptAcknowledgementRequest

type ReceiptAcknowledgementRequest struct {
	MessageId string `json:"message_id"`
	Status    string `json:"status"`
}

type SafeDepositView

type SafeDepositView struct {
	DepositHash  string `json:"deposit_hash"`
	DepositIndex int64  `json:"deposit_index"`
	Sender       string `json:"sender"`
}

type SafeSnapshot

type SafeSnapshot struct {
	Type            string    `json:"type"`
	SnapshotID      string    `json:"snapshot_id"`
	UserID          string    `json:"user_id"`
	OpponentID      string    `json:"opponent_id"`
	TransactionHash string    `json:"transaction_hash"`
	AssetID         string    `json:"asset_id"`
	KernelAssetID   string    `json:"kernel_asset_id"`
	Amount          string    `json:"amount"`
	Memo            string    `json:"memo"`
	RequestId       string    `json:"request_id"`
	CreatedAt       time.Time `json:"created_at"`

	Deposit    *SafeDepositView    `json:"deposit,omitempty"`
	Withdrawal *SafeWithdrawalView `json:"withdrawal,omitempty"`
}

func SafeSnapshotById

func SafeSnapshotById(ctx context.Context, snapshotId string, su *SafeUser) (*SafeSnapshot, error)

func SafeSnapshotByToken

func SafeSnapshotByToken(ctx context.Context, snapshotId string, accessToken string) (*SafeSnapshot, error)

func SafeSnapshots

func SafeSnapshots(ctx context.Context, limit int, app, assetId, opponent, offset string, su *SafeUser) ([]*SafeSnapshot, error)

func SafeSnapshotsByToken

func SafeSnapshotsByToken(ctx context.Context, limit int, app, assetId, opponent, offset, accessToken string) ([]*SafeSnapshot, error)

type SafeUser

type SafeUser struct {
	// this is the app children user uuid or the app uuid of messenger api
	// user id can never change
	UserId string

	// session id could be rotated by the app owner
	SessionId string

	// session private key rotates with the session id
	// this key is used for all authentication of messenger api
	SessionPrivateKey string // hex

	// server public key rotates with the session id
	// server public key is used to verify signature of server response
	// could also be used to do ecdh with session private key
	ServerPublicKey string // hex

	// spend private key is used to query or send money
	// this is the mixin kernel spend private key
	// spend private key can never change
	SpendPrivateKey string // hex
}

type SafeWithdrawalView

type SafeWithdrawalView struct {
	WithdrawalHash string `json:"withdrawal_hash"`
	Receiver       string `json:"receiver"`
}

type SendSchemeCategory

type SendSchemeCategory = string
const (
	SendSchemeCategoryText    SendSchemeCategory = "text"
	SendSchemeCategoryImage   SendSchemeCategory = "image"
	SendSchemeCategoryContact SendSchemeCategory = "contact"
	SendSchemeCategoryAppCard SendSchemeCategory = "app_card"
	SendSchemeCategoryLive    SendSchemeCategory = "live"
	SendSchemeCategoryPost    SendSchemeCategory = "post"
)

type SequencerTransactionRequest

type SequencerTransactionRequest struct {
	RequestID       string    `json:"request_id"`
	TransactionHash string    `json:"transaction_hash"`
	Asset           string    `json:"asset"`
	Amount          string    `json:"amount"`
	Extra           string    `json:"extra"`
	State           string    `json:"state"`
	RawTransaction  string    `json:"raw_transaction"`
	CreatedAt       time.Time `json:"created_at"`
	UpdatedAt       time.Time `json:"updated_at"`
	SnapshotID      string    `json:"snapshot_id"`
	SnapshotHash    string    `json:"snapshot_hash"`
	SnapshotAt      time.Time `json:"snapshot_at"`

	Views []string `json:"views"`
}

func CreateObjectStorageTransaction

func CreateObjectStorageTransaction(ctx context.Context, extra []byte, traceId string, u *SafeUser) (*SequencerTransactionRequest, error)

func GetTransactionById

func GetTransactionById(ctx context.Context, requestId string) (*SequencerTransactionRequest, error)

func SendTransaction

func SendTransaction(ctx context.Context, assetId string, recipients []*TransactionRecipient, traceId string, extra []byte, references []string, u *SafeUser) (*SequencerTransactionRequest, error)

func SendTransferTransaction added in v3.1.1

func SendTransferTransaction(ctx context.Context, assetId, receiver, amount, traceId string, extra []byte, u *SafeUser) (*SequencerTransactionRequest, error)

func SendWithdrawal

func SendWithdrawal(ctx context.Context, assetId, destination, tag, amount, traceId string, u *SafeUser) (*SequencerTransactionRequest, error)

type Session

type Session struct {
	UserID    string
	SessionID string
	PublicKey string
}

type TipNodeData

type TipNodeData struct {
	Commitments []string `json:"commitments"`
	Identity    string   `json:"identity"`
}

func GetTipNodeByPath

func GetTipNodeByPath(ctx context.Context, path string) (*TipNodeData, error)

func GetTipNodeByPathWithRequestId

func GetTipNodeByPathWithRequestId(ctx context.Context, path, requestId string) (*TipNodeData, error)

type TransactionRecipient

type TransactionRecipient struct {
	MixAddress string
	Amount     string

	Destination string
	Tag         string
}

type TransferView

type TransferView struct {
	Type          string    `json:"type"`
	SnapshotId    string    `json:"snapshot_id"`
	CounterUserId string    `json:"counter_user_id"`
	AssetId       string    `json:"asset_id"`
	Amount        string    `json:"amount"`
	TraceId       string    `json:"trace_id"`
	Memo          string    `json:"memo"`
	CreatedAt     time.Time `json:"created_at"`
}

type Turn

type Turn struct {
	Url        string `json:"url"`
	Username   string `json:"username"`
	Credential string `json:"credential"`
}

func GetTurnServer

func GetTurnServer(ctx context.Context, su *SafeUser) ([]*Turn, error)

type User

type User struct {
	UserId         string `json:"user_id"`
	SessionId      string `json:"session_id"`
	PinToken       string `json:"pin_token"`
	PINTokenBase64 string `json:"pin_token_base64"`
	IdentityNumber string `json:"identity_number"`
	HasSafe        bool   `json:"has_safe"`
	TIPKeyBase64   string `json:"tip_key_base64"`
	Phone          string `json:"phone"`
	FullName       string `json:"full_name"`
	AvatarURL      string `json:"avatar_url"`
	DeviceStatus   string `json:"device_status"`
	CreatedAt      string `json:"created_at"`
}

func CreateUser

func CreateUser(ctx context.Context, sessionSecret, fullName string, su *SafeUser) (*User, error)

func CreateUserSimple

func CreateUserSimple(ctx context.Context, sessionSecret, fullName string) (*User, error)

func GetUser

func GetUser(ctx context.Context, userId string, su *SafeUser) (*User, error)

func RegisterSafe

func RegisterSafe(ctx context.Context, userId, publicKey, seed string, su *SafeUser) (*User, error)

If you want to register safe user, you need to call UpdateTipPin upgrade TIP PIN first.

func Relationship

func Relationship(ctx context.Context, userId, action string, su *SafeUser) (*User, error)

func RequestUserMe

func RequestUserMe(ctx context.Context, su *SafeUser) (*User, error)

func SearchUser

func SearchUser(ctx context.Context, mixinId string, su *SafeUser) (*User, error)

func UpdatePreference

func UpdatePreference(ctx context.Context, messageSource, conversationSource, currency string, threshold float64, su *SafeUser) (*User, error)

func UpdateUserMe

func UpdateUserMe(ctx context.Context, fullName, avatarBase64 string, su *SafeUser) (*User, error)

func UserMe

func UserMe(ctx context.Context, accessToken string) (*User, error)

func UserMeWithRequestID

func UserMeWithRequestID(ctx context.Context, accessToken, requestID string) (*User, error)

func VerifyPIN

func VerifyPIN(ctx context.Context, pin string, user *SafeUser) (*User, error)

func VerifyPINTip

func VerifyPINTip(ctx context.Context, su *SafeUser) (*User, error)

type UserSession

type UserSession struct {
	UserId    string `json:"user_id"`
	SessionId string `json:"session_id"`
	PublicKey string `json:"public_key"`
	Platform  string `json:"platform"`
}

func FetchUserSession

func FetchUserSession(ctx context.Context, users []string, su *SafeUser) ([]*UserSession, error)

type UtxoError

type UtxoError struct {
	TotalInput  common.Integer
	TotalOutput common.Integer
	OutputSize  int
}

func (*UtxoError) Error

func (ue *UtxoError) Error() string

Directories

Path Synopsis
examples
blaze command
wallet command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL