bot

package module
v2.1.0 Latest Latest
Warning

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

Go to latest
Published: Dec 21, 2023 License: Apache-2.0 Imports: 40 Imported by: 2

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 added in v2.0.3

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

func AssetBalanceWithSafeUser added in v2.0.3

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

func CallKernelRPC added in v2.0.5

func CallKernelRPC(ctx context.Context, uid, sid, sessionKey, method string, params ...interface{}) ([]byte, error)

func CancelMultisig

func CancelMultisig(ctx context.Context, id string, uid, sid, sessionKey string) 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, uid, sid, sessionKey, pin, pinToken string) error

func EncryptEd25519PIN

func EncryptEd25519PIN(pin, pinTokenBase64, privateKey string, iterator uint64) (string, error)

func EncryptMessageData

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

func EncryptPIN

func EncryptPIN(pin, pinToken, sessionId, privateKey string, iterator uint64) (string, error)

func GenerateUserChecksum

func GenerateUserChecksum(sessions []*Session) string

func GetChainName added in v2.0.3

func GetChainName(chainId string) string

func GetFullChains added in v2.0.3

func GetFullChains() map[string]bool

func HashMembers

func HashMembers(ids []string) string

func IsChainId added in v2.0.3

func IsChainId(id string) bool

func MakeUniqueStringSlice added in v2.0.5

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 added in v2.0.3

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

func PostAcknowledgements

func PostAcknowledgements(ctx context.Context, requests []*ReceiptAcknowledgementRequest, clientId, sessionId, secret string) error

func PostMessage

func PostMessage(ctx context.Context, conversationId, recipientId, messageId, category, data string, clientId, sessionId, secret string) error

func PostMessages

func PostMessages(ctx context.Context, messages []*MessageRequest, clientId, sessionId, secret string) 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 added in v2.0.2

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 added in v2.0.2

func SchemeCodes(codeId string) string

SchemeCodes scheme of a code

code required

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

func SchemeConversations added in v2.0.2

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 added in v2.0.2

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 added in v2.0.2

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 added in v2.0.2

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 added in v2.0.2

func SchemeTransfer(userId string) string

SchemeTransfer scheme of a transfer

userId required

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

func SchemeUsers added in v2.0.2

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 added in v2.0.8

func SetUserAgent(ua string)

func SharedKey

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

func SignAuthenticationToken

func SignAuthenticationToken(uid, sid, privateKey, method, uri, body string) (string, error)

func SignAuthenticationTokenWithoutBody

func SignAuthenticationTokenWithoutBody(uid, sid, privateKey, method, uri string) (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 added in v2.0.3

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, uid, sid, sessionKey string) error

func UpdatePin

func UpdatePin(ctx context.Context, oldEncryptedPin, encryptedPin, uid, sid, sessionKey string) error

func UpdateTipPin

func UpdateTipPin(ctx context.Context, pin, pubTip, pinToken, uid, sid, sessionKey string) 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, uid, sid, sessionKey, pin, pinToken string) (*Address, error)

func GetAddressesByAssetId

func GetAddressesByAssetId(ctx context.Context, assetId, uid, sid, sessionKey string) ([]*Address, error)

func ReadAddress

func ReadAddress(ctx context.Context, addressId, uid, sid, sessionKey string) (*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, uid, sid, sessionKey, pin, pinToken string) (*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 added in v2.0.5

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

type AssetTicker added in v2.0.5

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

func ReadAssetTicker added in v2.0.5

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, uid, sid, key, id string) (*Attachment, error)

func CreateAttachment

func CreateAttachment(ctx context.Context, uid, sid, key string) (*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, uid, sid, key string) (*Conversation, error)

func ConversationShowByToken added in v2.0.5

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

func CreateContactConversation

func CreateContactConversation(ctx context.Context, participantID, uid, sid, key string) (*Conversation, error)

func CreateConversation

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

func JoinConversation

func JoinConversation(ctx context.Context, conversationId, uid, sid, key string) (*Conversation, error)

type DepositEntryView added in v2.0.5

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 added in v2.0.5

func CreateDepositEntry(ctx context.Context, chainID string, members []string, threshold int64) ([]*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 added in v2.0.1

func RequestSafeGhostKeys(ctx context.Context, gkr []*GhostKeyRequest, uid, sid, sessionKey string) ([]*GhostKeys, error)

func (GhostKeys) KeysSlice added in v2.0.3

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 added in v2.0.5

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

type KernelTransactionRequestCreateRequest added in v2.0.3

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 added in v2.0.3

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

func NewMainnetMixAddress added in v2.0.3

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

func NewMixAddressFromString added in v2.0.3

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

func NewUUIDMixAddress added in v2.0.3

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

func (*MixAddress) Members added in v2.0.3

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

func (*MixAddress) RequestOrGenerateGhostKeys added in v2.0.3

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

func (*MixAddress) String added in v2.0.3

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, uid, sid, sessionKey string) (*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, uid, sid, sessionKey string) (*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, uid, sid, sessionKey string) ([]*MultisigUTXO, error)

state: spent, unspent, signed

func ReadMultisigsLegacy

func ReadMultisigsLegacy(ctx context.Context, limit int, offset, uid, sid, sessionKey string) ([]*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 added in v2.0.3

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 added in v2.0.5

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

func ListUnspentOutputs added in v2.0.3

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 added in v2.0.3

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

type SafeSnapshot added in v2.0.3

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 added in v2.0.3

func SafeSnapshotById(ctx context.Context, snapshotId string, uid, sid, sessionKey string) (*SafeSnapshot, error)

func SafeSnapshotByToken added in v2.0.3

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

func SafeSnapshots added in v2.0.3

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

func SafeSnapshotsByToken added in v2.0.3

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

type SafeUser added in v2.0.3

type SafeUser struct {
	// this is the app or bot 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

	// 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

	// 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
}

type SafeWithdrawalView added in v2.0.3

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

type SendSchemeCategory added in v2.0.2

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 added in v2.0.3

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 added in v2.0.8

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

func GetTransactionById added in v2.0.3

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

func SendTransaction added in v2.0.3

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

func SendWithdrawal added in v2.0.3

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 added in v2.0.3

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, uid, sid, sessionKey string) ([]*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, uid, sid, privateKey string) (*User, error)

func CreateUserSimple

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

func GetUser

func GetUser(ctx context.Context, userId, uid, sid, sessionKey string) (*User, error)

func RegisterSafe added in v2.0.3

func RegisterSafe(ctx context.Context, userId, publicKey, seed string, uid, sid, sessionKey, tipPin, pinToken string) (*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, uid, sid, privateKey string, userId, action string) (*User, error)

func RequestUserMe added in v2.0.3

func RequestUserMe(ctx context.Context, uid, sid, privateKey string) (*User, error)

func SearchUser

func SearchUser(ctx context.Context, mixinId, uid, sid, sessionKey string) (*User, error)

func UpdatePreference

func UpdatePreference(ctx context.Context, uid, sid, privateKey string, messageSource, conversationSource, currency string, threshold float64) (*User, error)

func UpdateUserMe

func UpdateUserMe(ctx context.Context, uid, sid, privateKey, fullName, avatarBase64 string) (*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, uid, pin, pinToken, sessionId, privateKey string) (*User, error)

func VerifyPINTip

func VerifyPINTip(ctx context.Context, uid, pinToken, sessionId, privateKey, privateTip string) (*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, uid, sid, sessionKey string) ([]*UserSession, error)

type UtxoError added in v2.0.3

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

func (*UtxoError) Error added in v2.0.3

func (ue *UtxoError) Error() string

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

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