core

package
v0.0.0-...-d0dabfa Latest Latest
Warning

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

Go to latest
Published: Dec 30, 2020 License: MIT Imports: 84 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CAFEROLEMAP   = 1
	SHADOWROLEMAP = 2
)
View Source
const CafeApiVersion = "v1"

CafeApiVersion is the cafe api version

View Source
const ContentLinkName = "content"
View Source
const MAX_RETRY = 10
View Source
const MetaLinkName = "meta"

Variables

View Source
var ErrAccountRequired = fmt.Errorf("account required")

common errors

View Source
var ErrBlockNotFound = fmt.Errorf("block not found")

ErrBlockNotFound indicates a block was not found in the index

View Source
var ErrBlockWrongType = fmt.Errorf("block type is not the type requested")

ErrBlockWrongType indicates a block was requested as a type other than its own

View Source
var ErrContactNotFound = fmt.Errorf("contact not found")

ErrContactNotFound indicates a local contact was not found

View Source
var ErrFileNotFound = fmt.Errorf("file not found")
View Source
var ErrInvalidFileNode = fmt.Errorf("invalid files node")

ErrInvalidFileNode indicates files where added via a nil ipld node

View Source
var ErrInvalidNode = fmt.Errorf("thread node is not valid")

ErrInvalidNode indicates the thread node is not valid

View Source
var ErrInvalidThreadBlock = fmt.Errorf("invalid thread block")

ErrInvalidThreadBlock is a catch all error for malformed / invalid blocks

View Source
var ErrJsonSchemaRequired = fmt.Errorf("thread schema does not allow json files")

ErrJsonSchemaRequired indicates json files where added without a json schema

View Source
var ErrMissingContentLink = fmt.Errorf("content link not in node")
View Source
var ErrMissingMetaLink = fmt.Errorf("meta link not in node")
View Source
var ErrMissingRepoConfig = fmt.Errorf("you must specify InitConfig.RepoPath or InitConfig.BaseRepoPath and InitConfig.Account")
View Source
var ErrNotAdmin = fmt.Errorf("not an admin of the thread")

ErrNotAdmin inicates non-admin try to do something that only admins can do

View Source
var ErrNotAnnotatable = fmt.Errorf("thread is not annotatable")

ErrNotAnnotatable indicates the thread is not annotatable (comments/likes)

View Source
var ErrNotReadable = fmt.Errorf("thread is not readable")

ErrNotReadable indicates the thread is not readable

View Source
var ErrNotShareable = fmt.Errorf("thread is not shareable")

ErrNotShareable indicates the thread does not allow invites, at least for _you_

View Source
var ErrNotWritable = fmt.Errorf("thread is not writable")

ErrNotWritable indicates the thread is not writable (files/messages)

View Source
var ErrOffline = fmt.Errorf("node is offline")
View Source
var ErrRemoveSelf = fmt.Errorf("do not use RemovePeer, try use thread.leave")

ErrRemoveSelf indecates an admin try to remove itself from a thread, try use leave

View Source
var ErrStarted = fmt.Errorf("node is started")
View Source
var ErrStopped = fmt.Errorf("node is stopped")
View Source
var ErrStreamAlreadyInUse = fmt.Errorf("stream already in use")
View Source
var ErrStreamNotFound = fmt.Errorf("stream not found")
View Source
var ErrSubscribeFail = fmt.Errorf("subscribe failed")
View Source
var ErrThreadInviteNotFound = fmt.Errorf("thread invite not found")

ErrThreadInviteNotFound indicates thread invite is not found

View Source
var ErrThreadLoaded = fmt.Errorf("thread is loaded")

ErrThreadLoaded indicates the thread is already loaded from the datastore

View Source
var ErrThreadNotFound = fmt.Errorf("thread not found")

ErrThreadNotFound indicates thread is not found in the loaded list

View Source
var ErrThreadSchemaRequired = fmt.Errorf("thread schema required to add files")

ErrThreadSchemaRequired indicates files where added without a thread schema

View Source
var ErrVideoNotFound = fmt.Errorf("video not found")
View Source
var ValidContentLinkNames = []string{"content", "d"}
View Source
var ValidMetaLinkNames = []string{"meta", "f"}

Functions

func AccountRepoExists

func AccountRepoExists(baseRepoPath string, accountAddress string) bool

AccountRepoExists return whether or not the repo at repoPath exists

func ConvertHeadersToCorsOptions

func ConvertHeadersToCorsOptions(headers config.HTTPHeaders) cors.Options

ConvertHeadersToCorsOptions converts http headers into the format that cors options accepts

func FeedItemType

func FeedItemType(item *pb.FeedItem) (pb.Block_BlockType, error)

func GetRandomPort

func GetRandomPort() string

GetRandomPort returns a port within the acceptable range

func InitRepo

func InitRepo(conf InitConfig) error

InitRepo initializes a new node repo

func IsCafe

func IsCafe(p *pb.Peer) bool

func IsShadow

func IsShadow(p *pb.Peer) bool

func Max

func Max(x, y int) int

func MigrateRepo

func MigrateRepo(conf MigrateConfig) error

MigrateRepo runs _all_ repo migrations, including major

func RepoExists

func RepoExists(repoPath string) bool

RepoExists return whether or not the repo at repoPath exists

func SetCafe

func SetCafe(p *pb.Peer)

func SetShadow

func SetShadow(p *pb.Peer)

Types

type AddFileConfig

type AddFileConfig struct {
	Input     []byte `json:"input"`
	Use       string `json:"use"`
	Media     string `json:"media"`
	Name      string `json:"name"`
	Plaintext bool   `json:"plaintext"`
}

type BlockDownloads

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

BlockDownloads manages a queue of pending downloads

func NewBlockDownloads

func NewBlockDownloads(node func() *core.IpfsNode, datastore repo.Datastore, getThread func(id string) *Thread) *BlockDownloads

NewBlockDownloads creates a new download queue

func (*BlockDownloads) Add

func (q *BlockDownloads) Add(download *pb.Block) error

Add queues a download, starting it if flush is not active

func (*BlockDownloads) Flush

func (q *BlockDownloads) Flush()

Flush processes pending messages

type BlockOutbox

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

BlockOutbox queues and processes outbound thread messages

func NewBlockOutbox

func NewBlockOutbox(
	service func() *ThreadsService,
	node func() *core.IpfsNode,
	datastore repo.Datastore,
	cafeOutbox *CafeOutbox) *BlockOutbox

NewBlockOutbox creates a new outbox queue

func (*BlockOutbox) Add

func (q *BlockOutbox) Add(peerId string, env *pb.Envelope) error

Add adds an outbound message

func (*BlockOutbox) Flush

func (q *BlockOutbox) Flush()

Flush processes pending messages

type CafeError

type CafeError struct {
	Error string `json:"error"`
}

CafeError represents a cafe request error

type CafeInbox

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

CafeInbox queues and processes downloaded cafe messages

func NewCafeInbox

func NewCafeInbox(
	service func() *CafeService,
	threadsService func() *ThreadsService,
	node func() *core.IpfsNode,
	datastore repo.Datastore,
) *CafeInbox

NewCafeInbox creates a new inbox queue

func (*CafeInbox) Add

func (q *CafeInbox) Add(msg *pb.CafeMessage) error

Add adds an inbound message

func (*CafeInbox) CheckMessages

func (q *CafeInbox) CheckMessages() error

CheckMessages asks each active cafe session for new messages

func (*CafeInbox) Flush

func (q *CafeInbox) Flush()

Flush processes pending messages

type CafeOutbox

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

CafeOutbox queues and processes outbound cafe requests

func NewCafeOutbox

func NewCafeOutbox(
	node func() *core.IpfsNode,
	datastore repo.Datastore,
	handler CafeOutboxHandler,
	flushBlocks func()) *CafeOutbox

NewCafeOutbox creates a new outbox queue

func (*CafeOutbox) Add

func (q *CafeOutbox) Add(target string, rtype pb.CafeRequest_Type, opts ...CafeRequestOption) error

Add adds a request for each active cafe session

func (*CafeOutbox) AddForInbox

func (q *CafeOutbox) AddForInbox(peerId string, env *pb.Envelope, inboxes []*pb.Cafe) error

AddForInbox adds a request for a peer's inbox(es)

func (*CafeOutbox) Flush

func (q *CafeOutbox) Flush(skipBlocks bool)

Flush processes pending requests

type CafeOutboxHandler

type CafeOutboxHandler interface {
	Flush()
}

CafeOutboxHandler is fullfilled by the layer responsible for cafe network requests

Desktop and Server => CafeService over libp2p
Mobile => Objc and Java SDKs

type CafeRequestOption

type CafeRequestOption func(*CafeRequestSettings)

CafeRequestOption returns a request setting from an option

func (CafeRequestOption) Cafe

Cafe limits the request to a single cafe

func (CafeRequestOption) Group

Group sets the request's group field

func (CafeRequestOption) Size

Size sets the request's size in bytes

func (CafeRequestOption) SyncGroup

SyncGroup sets the request's sync group field

type CafeRequestSettings

type CafeRequestSettings struct {
	Size      int
	Group     string
	SyncGroup string
	Cafe      string
}

CafeRequestSettings for a request

func CafeRequestOptions

func CafeRequestOptions(opts ...CafeRequestOption) *CafeRequestSettings

CafeRequestOptions returns request settings from options

func (*CafeRequestSettings) Options

func (s *CafeRequestSettings) Options() []CafeRequestOption

Options converts settings back to options

type CafeService

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

CafeService is a libp2p pinning and offline message service

func NewCafeService

func NewCafeService(
	account *keypair.Full,
	node func() *core.IpfsNode,
	datastore repo.Datastore,
	inbox *CafeInbox,
	stream *stream.StreamService,
	shadow *shadow.ShadowService) *CafeService

NewCafeService returns a new threads service

func (*CafeService) CafeFindIpfsAddr

func (h *CafeService) CafeFindIpfsAddr(query *pb.IpfsQuery, cafeId string) (*pb.IpfsQueryResult, error)

func (*CafeService) CheckMessages

func (h *CafeService) CheckMessages(cafeId string) error

CheckMessages asks each session's inbox for new messages

func (*CafeService) DeleteMessages

func (h *CafeService) DeleteMessages(cafeId string) error

DeleteMessages deletes a page of messages from a cafe

func (*CafeService) Deregister

func (h *CafeService) Deregister(cafeId string) error

Deregister removes this peer from a cafe

func (*CafeService) DiscoverPeers

func (h *CafeService) DiscoverPeers(cafeId string) ([]string, error)

func (*CafeService) Flush

func (h *CafeService) Flush()

Flush begins handling requests recursively

func (*CafeService) Handle

func (h *CafeService) Handle(env *pb.Envelope, pid peer.ID) (*pb.Envelope, error)

Handle is called by the underlying service handler method

func (*CafeService) HandleStream

func (h *CafeService) HandleStream(env *pb.Envelope, pid peer.ID) (chan *pb.Envelope, chan error, chan interface{})

HandleStream is called by the underlying service handler method

func (*CafeService) Ping

func (h *CafeService) Ping(pid peer.ID) (service.PeerStatus, error)

Ping pings another peer

func (*CafeService) Protocol

func (h *CafeService) Protocol() protocol.ID

Protocol returns the handler protocol

func (*CafeService) PublishPeer

func (h *CafeService) PublishPeer(peer *pb.Peer, cafeId string) error

PublishPeer publishes the local peer's info

func (*CafeService) PublishSyncFile

func (h *CafeService) PublishSyncFile(file *pb.SyncFile, cafeId string) error

func (*CafeService) PublishVideo

func (h *CafeService) PublishVideo(video *pb.Video, cafeId string, store bool) error

func (*CafeService) PublishVideoChunk

func (h *CafeService) PublishVideoChunk(vchunk *pb.VideoChunk, cafeId string) error

func (*CafeService) Register

func (h *CafeService) Register(cafeId string, token string) (*pb.CafeSession, error)

Register creates a session with a cafe

func (*CafeService) Search

func (h *CafeService) Search(query *pb.Query, cafeId string, reply func(*pb.QueryResult), cancelCh <-chan interface{}) error

Search performs a query via a cafe

func (*CafeService) Start

func (h *CafeService) Start()

Start begins online services

type ErrStreamAlreadyExist

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

func (*ErrStreamAlreadyExist) Error

func (e *ErrStreamAlreadyExist) Error() string

type ErrStreamNotExist

type ErrStreamNotExist struct {
	Id string
}

func (*ErrStreamNotExist) Error

func (e *ErrStreamNotExist) Error() string

type FeedItemPayload

type FeedItemPayload interface {
	GetUser() *pb.User
	GetDate() *timestamp.Timestamp
	Reset()
	String() string
	ProtoMessage()
}

func GetFeedItemPayload

func GetFeedItemPayload(item *pb.FeedItem) (FeedItemPayload, error)

type InitConfig

type InitConfig struct {
	Account         *keypair.Full
	PinCode         string
	RepoPath        string
	BaseRepoPath    string
	SwarmPorts      string
	ApiAddr         string
	CafeApiAddr     string
	GatewayAddr     string
	ProfilingAddr   string
	IsMobile        bool
	IsServer        bool
	LogToDisk       bool
	Debug           bool
	CafeOpen        bool
	CafeURL         string
	CafeNeighborURL string
	IsPrivate       bool
	IsShadow        bool // whether the node works as a shadow node, default:0, added in 2020.04.05
	IsAuto          bool // whether the node works as a automatic node. default:0, added in 2020.6.14
}

InitConfig is used to setup a textile node

func (InitConfig) Repo

func (conf InitConfig) Repo() (string, error)

Repo returns the actual location of the configured repo

func (InitConfig) RepoExists

func (conf InitConfig) RepoExists() (bool, error)

RepoExists return whether or not the configured repo already exists

type MigrateConfig

type MigrateConfig struct {
	PinCode  string
	RepoPath string
}

MigrateConfig is used to define options during a major migration

type RunConfig

type RunConfig struct {
	PinCode           string
	RepoPath          string
	CafeOutboxHandler CafeOutboxHandler
	CheckMessages     func() error
	Debug             bool
}

RunConfig is used to define run options for a textile node

type Textile

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

Textile is the main Textile node structure

func CreateAndStartPeer

func CreateAndStartPeer(conf InitConfig, wait bool) (*Textile, error)

func NewTextile

func NewTextile(conf RunConfig) (*Textile, error)

NewTextile runs a node out of an initialized repo

func (*Textile) AcceptExternalInvite

func (t *Textile) AcceptExternalInvite(id string, key []byte) (mh.Multihash, error)

AcceptExternalInvite attemps to download an encrypted thread key from an external invite, adds a new thread, and notifies the inviter of the join

func (*Textile) AcceptInvite

func (t *Textile) AcceptInvite(id string) (mh.Multihash, error)

AcceptInvite adds a new thread, and notifies the inviter of the join

func (*Textile) AcceptInviteViaNotification

func (t *Textile) AcceptInviteViaNotification(id string) (mh.Multihash, error)

AcceptInviteViaNotification uses an invite notification to accept an invite to a thread

func (*Textile) Account

func (t *Textile) Account() *keypair.Full

Account returns account keypair

func (*Textile) AccountContact

func (t *Textile) AccountContact() *pb.Contact

AccountContact returns a contact for this account

func (*Textile) AccountProfile

func (t *Textile) AccountProfile() *pb.User

func (*Textile) AccountThread

func (t *Textile) AccountThread() *Thread

AccountThread returns the account private thread

func (*Textile) AddContact

func (t *Textile) AddContact(card *pb.Contact) error

AddContact adds or updates a card

func (*Textile) AddData

func (t *Textile) AddData(data []byte, pin bool, hashOnly bool) (string, error)

AddData add data to ipfs network

func (*Textile) AddExternalInvite

func (t *Textile) AddExternalInvite(threadId string) (*pb.ExternalInvite, error)

AddExternalInvite generates a new external invite link to a thread

func (*Textile) AddFileIndex

func (t *Textile) AddFileIndex(mill m.Mill, conf AddFileConfig) (*pb.FileIndex, error)

func (*Textile) AddInvite

func (t *Textile) AddInvite(threadId string, address string) error

AddInvite creates an invite for each of the target address's peers

func (*Textile) AddNodeFromDirs

func (t *Textile) AddNodeFromDirs(dirs *pb.DirectoryList) (ipld.Node, *pb.Keys, error)

func (*Textile) AddNodeFromFiles

func (t *Textile) AddNodeFromFiles(files []*pb.FileIndex) (ipld.Node, *pb.Keys, error)

func (*Textile) AddOrUpdateThread

func (t *Textile) AddOrUpdateThread(thread *pb.Thread) error

AddOrUpdateThread add or updates a thread directly, usually from a backup

func (*Textile) AddPeer

func (t *Textile) AddPeer(peer *pb.Peer) error

AddPeer adds or updates a peer

func (*Textile) AddSchema

func (t *Textile) AddSchema(jsonstr string, name string) (*pb.FileIndex, error)

func (*Textile) AddSimpleDirectory

func (t *Textile) AddSimpleDirectory(path string, threadId string) (*pb.Block, error)

func (*Textile) AddSimpleFile

func (t *Textile) AddSimpleFile(path string, threadId string) (*pb.Block, error)

func (*Textile) AddSimplePicture

func (t *Textile) AddSimplePicture(path string, threadId string) (*pb.Block, error)

func (*Textile) AddSyncFile

func (t *Textile) AddSyncFile(file *pb.SyncFile) error

func (*Textile) AddThread

func (t *Textile) AddThread(conf pb.AddThreadConfig, sk libp2pc.PrivKey, initiator string, join bool, inviteAccount bool) (*Thread, error)

AddThread adds a thread with a given name and secret key

func (*Textile) AddVideo

func (t *Textile) AddVideo(video *pb.Video) error

func (*Textile) AddVideoChunk

func (t *Textile) AddVideoChunk(vchunk *pb.VideoChunk) error

func (*Textile) Avatar

func (t *Textile) Avatar() string

Avatar returns profile avatar

func (*Textile) BigFileAtStream

func (t *Textile) BigFileAtStream(feedpb *pb.FeedStreamMeta, cid []byte) (string, string, error)

func (*Textile) Block

func (t *Textile) Block(id string) (*pb.Block, error)

Block returns block with id

func (*Textile) BlockByParent

func (t *Textile) BlockByParent(parent string) (*pb.Block, error)

Block returns block with id

func (*Textile) BlockView

func (t *Textile) BlockView(id string) (*pb.Block, error)

BlockView returns block with expanded view properties

func (*Textile) Blocks

func (t *Textile) Blocks(offset string, limit int, query string) *pb.BlockList

GetBlocks paginates blocks

func (*Textile) BlocksByTarget

func (t *Textile) BlocksByTarget(target string) *pb.BlockList

BlocksByTarget returns block with parent

func (*Textile) CafeApiAddr

func (t *Textile) CafeApiAddr() string

CafeApiAddr returns the cafe api address

func (*Textile) CafeInfo

func (t *Textile) CafeInfo() *pb.Cafe

CafeInfo returns info about this cafe

func (*Textile) CafeRequestThreadsContent

func (t *Textile) CafeRequestThreadsContent(cafe string) error

CafeRequestThreadContent sync the entire thread conents (blocks and files) to the given cafe

func (*Textile) CafeSession

func (t *Textile) CafeSession(id string) (*pb.CafeSession, error)

CafeSession returns an active session by id

func (*Textile) CafeSessions

func (t *Textile) CafeSessions() *pb.CafeSessionList

CafeSessions lists active cafe sessions

func (*Textile) CafeTokens

func (t *Textile) CafeTokens() ([]string, error)

CafeTokens lists all locally-stored (bcrypt hashed) tokens

func (*Textile) CheckCafeMessages

func (t *Textile) CheckCafeMessages() error

CheckCafeMessages fetches new messages from registered cafes

func (*Textile) ChunksByVideoId

func (t *Textile) ChunksByVideoId(videoId string) *pb.VideoChunkList

func (*Textile) CloseChns

func (t *Textile) CloseChns()

CloseChns closes update channels

func (*Textile) CloseStream

func (t *Textile) CloseStream(threadId string, streamId string) error

CloseStream close a stream already exist.

func (*Textile) Comment

func (t *Textile) Comment(blockId string) (*pb.Comment, error)

func (*Textile) Comments

func (t *Textile) Comments(target string) (*pb.CommentList, error)

func (*Textile) Config

func (t *Textile) Config() *config.Config

Config returns the textile configuration file

func (*Textile) ConnectCafes

func (t *Textile) ConnectCafes()

func (*Textile) ConnectShadowTCP

func (t *Textile) ConnectShadowTCP(ip string, port int) error

Connect to shadow peer through tcp command directly.

func (*Textile) ConnectThreadPeers

func (t *Textile) ConnectThreadPeers(tid string) error

func (*Textile) ConnectedAddresses

func (t *Textile) ConnectedAddresses() (*pb.SwarmPeerList, error)

func (*Textile) Contact

func (t *Textile) Contact(address string) *pb.Contact

Contact looks up a contact by address

func (*Textile) ContactThreads

func (t *Textile) ContactThreads(address string) (*pb.ThreadList, error)

ContactThreads returns all threads with the given address

func (*Textile) Contacts

func (t *Textile) Contacts() *pb.ContactList

Contacts returns all known contacts, excluding self

func (*Textile) CountUnreadNotifications

func (t *Textile) CountUnreadNotifications() int

CountUnreadNotifications counts unread notifications

func (*Textile) CreateCafeToken

func (t *Textile) CreateCafeToken(token string, store bool) (string, error)

CreateCafeToken creates (or uses `token`) random access token, returns base58 encoded version, and stores (unless `store` is false) a bcrypt hashed version for later comparison

func (*Textile) CreateTCPPool

func (t *Textile) CreateTCPPool()

func (*Textile) DataAtPath

func (t *Textile) DataAtPath(path string) ([]byte, error)

DataAtPath returns raw data behind an ipfs path

func (*Textile) DataAtStreamFile

func (t *Textile) DataAtStreamFile(feedpb *pb.FeedStreamMeta, cid []byte) ([]byte, string, error)

Moved from mobile/ipfs.go So that desktop daemon can send notification back too.

func (*Textile) Datastore

func (t *Textile) Datastore() repo.Datastore

Datastore returns the underlying sqlite datastore interface

func (*Textile) Decrypt

func (t *Textile) Decrypt(input []byte) ([]byte, error)

Decrypt decrypts input with account address

func (*Textile) DeregisterCafe

func (t *Textile) DeregisterCafe(id string) error

DeregisterCafe removes the session associated with the given cafe

func (*Textile) DiscoverAndConnect

func (t *Textile) DiscoverAndConnect()

func (*Textile) DiscoverContacts

func (t *Textile) DiscoverContacts(options *pb.QueryOptions) (<-chan *pb.QueryResult, <-chan error, *broadcast.Broadcaster, error)

func (*Textile) DoneCh

func (t *Textile) DoneCh() <-chan struct{}

DoneCh returns the core node done channel

func (*Textile) Encrypt

func (t *Textile) Encrypt(input []byte) ([]byte, error)

Encrypt encrypts input with account address

func (*Textile) Feed

func (t *Textile) Feed(req *pb.FeedRequest) (*pb.FeedItemList, error)

func (*Textile) File

func (t *Textile) File(blockId string) (*pb.Files, error)

func (*Textile) FileAsStream_Text

func (t *Textile) FileAsStream_Text(threadId string, sf *pb.StreamFile, file_type pb.StreamMeta_Type) (*pb.StreamMeta, error)

func (*Textile) FileContent

func (t *Textile) FileContent(hash string) (io.ReadSeeker, *pb.FileIndex, error)

func (*Textile) FileIndexContent

func (t *Textile) FileIndexContent(file *pb.FileIndex) (io.ReadSeeker, error)

func (*Textile) FileMeta

func (t *Textile) FileMeta(hash string) (*pb.FileIndex, error)

func (*Textile) FilePathAtPath

func (t *Textile) FilePathAtPath(path string) (string, error)

func (*Textile) Files

func (t *Textile) Files(offset string, limit int, threadId string) (*pb.FilesList, error)

func (*Textile) FlushBlocks

func (t *Textile) FlushBlocks()

FlushBlocks flushes the block message outbox

func (*Textile) FlushCafes

func (t *Textile) FlushCafes()

FlushCafes flushes the cafe request outbox

func (*Textile) FolderAtPath

func (t *Textile) FolderAtPath(path string) (string, error)

func (*Textile) GetDuration

func (t *Textile) GetDuration(streamId string) int64

func (*Textile) GetMaxWorkers

func (t *Textile) GetMaxWorkers() int

func (*Textile) GetMedia

func (t *Textile) GetMedia(reader io.Reader) (string, error)

func (*Textile) GetMillMedia

func (t *Textile) GetMillMedia(reader io.Reader, mill m.Mill) (string, error)

func (*Textile) GetRecord

func (t *Textile) GetRecord(key string) (string, error)

func (*Textile) GetStreamBlocks

func (t *Textile) GetStreamBlocks(streamId string, startIndex int) ([]cid.Cid, error)

func (*Textile) GetStreamMeta

func (t *Textile) GetStreamMeta(id string) *pb.StreamMeta

GetStreamMeta return a streamMeta from datastore.

func (*Textile) GetStreamMode

func (t *Textile) GetStreamMode() int

func (*Textile) GetSwarmAddress

func (t *Textile) GetSwarmAddress(peerId string) string

func (*Textile) GetVideo

func (t *Textile) GetVideo(id string) *pb.Video

func (*Textile) GetVideoChunk

func (t *Textile) GetVideoChunk(videoId string, chunk string) *pb.VideoChunk

func (*Textile) GetVideoChunkByIndex

func (t *Textile) GetVideoChunkByIndex(videoId string, index int64) *pb.VideoChunk

func (*Textile) IgnoreInvite

func (t *Textile) IgnoreInvite(id string) error

IgnoreInvite deletes the invite and removes the associated notification.

func (*Textile) IgnoreInviteViaNotification

func (t *Textile) IgnoreInviteViaNotification(id string) error

IgnoreInviteViaNotification uses an invite notification to ignore an invite to a thread

func (*Textile) Inbox

func (t *Textile) Inbox() *CafeInbox

Inbox returns the cafe inbox

func (*Textile) InviteView

func (t *Textile) InviteView(invite *pb.Invite) *pb.InviteView

InviteView gets a pending invite as a view object, which does not include the block payload

func (*Textile) Invites

func (t *Textile) Invites() *pb.InviteViewList

Invites lists info on all pending invites

func (*Textile) Ipfs

func (t *Textile) Ipfs() *core.IpfsNode

Ipfs returns the underlying ipfs node

func (*Textile) IsAdminByAddress

func (t *Textile) IsAdminByAddress(threadId string, peerAddr string) (bool, error)

check if peer is admin by peer address

func (*Textile) IsAdminById

func (t *Textile) IsAdminById(threadId string, peerId string) (bool, error)

check if peer is admin by peer id

func (*Textile) IsStreamFinished

func (t *Textile) IsStreamFinished(id string) bool

func (*Textile) Like

func (t *Textile) Like(blockId string) (*pb.Like, error)

func (*Textile) Likes

func (t *Textile) Likes(target string) (*pb.LikeList, error)

func (*Textile) LinksAtPath

func (t *Textile) LinksAtPath(path string) ([]*ipld.Link, error)

LinksAtPath returns ipld links behind an ipfs path

func (*Textile) ListStreamMeta

func (t *Textile) ListStreamMeta() *pb.StreamMetaList

ListStreamMeta return a list of streamMetas from datastore.

func (*Textile) ListSyncFile

func (t *Textile) ListSyncFile(address string, fileType pb.SyncFile_Type) *pb.SyncFileList

func (*Textile) Message

func (t *Textile) Message(blockId string) (*pb.Text, error)

func (*Textile) Messages

func (t *Textile) Messages(offset string, limit int, threadId string) (*pb.TextList, error)

func (*Textile) Mobile

func (t *Textile) Mobile() bool

Mobile returns whether or not node is configured for a mobile device

func (*Textile) MySwarmAddress

func (t *Textile) MySwarmAddress() string

MySwarmAddress returns my swarm address

func (*Textile) Name

func (t *Textile) Name() string

Username returns profile username

func (*Textile) NotificationCh

func (t *Textile) NotificationCh() <-chan *pb.Notification

NotificationsCh returns the notifications channel

func (*Textile) NotificationView

func (t *Textile) NotificationView(note *pb.Notification) *pb.Notification

NotificationView returns a notification with expanded view info

func (*Textile) Notifications

func (t *Textile) Notifications(offset string, limit int) *pb.NotificationList

Notifications lists notifications

func (*Textile) OLD_PublishVideo

func (t *Textile) OLD_PublishVideo(video *pb.Video, store bool) error

--------------- OLD METHOD ----------------------------

func (*Textile) OLD_PublishVideoChunk

func (t *Textile) OLD_PublishVideoChunk(vchunk *pb.VideoChunk) error

--------------- OLD METHOD ----------------------------

func (*Textile) Online

func (t *Textile) Online() bool

Online returns node online status

func (*Textile) OnlineCh

func (t *Textile) OnlineCh() <-chan struct{}

OnlineCh returns the online channel

func (*Textile) PeerId

func (t *Textile) PeerId() (peer.ID, error)

PeerId returns peer id

func (*Textile) PeerUser

func (t *Textile) PeerUser(id string) *pb.User

PeerUser returns a user object with the most recently updated contact for the given id Note: If no underlying contact is found, this will return a blank object w/ a generic user name for display-only purposes.

func (*Textile) Ping

func (t *Textile) Ping(pid peer.ID) (service.PeerStatus, error)

Ping pings another peer

func (*Textile) Profile

func (t *Textile) Profile() *pb.Peer

Profile returns this node's own peer? No! We let it return the best peer!

func (*Textile) Publish

func (t *Textile) Publish(payload []byte, topic string) error

Publish sends 'data' to 'topic'

func (*Textile) PublishPeer

func (t *Textile) PublishPeer() error

PublishPeer publishes this peer's info to the cafe network

func (*Textile) PublishPeerToCafe

func (t *Textile) PublishPeerToCafe(id string) error

func (*Textile) PublishSyncFile

func (t *Textile) PublishSyncFile(file *pb.SyncFile) error

func (*Textile) PublishVideo

func (t *Textile) PublishVideo(video string) error

--------------- NEW METHOD ----------------------------

func (*Textile) PublishVideoChunk

func (t *Textile) PublishVideoChunk(vchunk string) error

--------------- NEW METHOD ----------------------------

func (*Textile) ReSubscribeStream

func (t *Textile) ReSubscribeStream(id string) error

func (*Textile) ReadAllNotifications

func (t *Textile) ReadAllNotifications() error

ReadAllNotifications marks all notification as read

func (*Textile) ReadNotification

func (t *Textile) ReadNotification(id string) error

ReadNotification marks a notification as read

func (*Textile) RefreshCafeSession

func (t *Textile) RefreshCafeSession(id string) (*pb.CafeSession, error)

RefreshCafeSession attempts to refresh a token with a cafe

func (*Textile) RegisterCafe

func (t *Textile) RegisterCafe(id string, token string) (*pb.CafeSession, error)

RegisterCafe registers this account with another peer (the "cafe"), which provides a session token for the service

func (*Textile) RemoveCafeToken

func (t *Textile) RemoveCafeToken(token string) error

RemoveCafeToken removes a given cafe token from the local store

func (*Textile) RemoveContact

func (t *Textile) RemoveContact(address string) error

RemoveContact removes all contacts that share the given address @todo Add ignore to account thread targeted at the join

func (*Textile) RemoveRecordReport

func (t *Textile) RemoveRecordReport(key string) error

func (*Textile) RemoveThread

func (t *Textile) RemoveThread(id string) (mh.Multihash, error)

RemoveThread removes a thread @todo rename to abandon to be consistent with CLI+API

func (*Textile) RemoveVideo

func (t *Textile) RemoveVideo(id string) error

func (*Textile) RenameThread

func (t *Textile) RenameThread(id string, name string) error

RenameThread adds an announce block to the thread w/ a new name Note: Only thread initiators can update the thread's name

func (*Textile) RepoPath

func (t *Textile) RepoPath() string

RepoPath returns the node's repo path

func (*Textile) RequestStream

func (t *Textile) RequestStream(pid string, config *pb.StreamRequest) (*pb.Envelope, error)

RequestStream request a stream from a provider by sending stream request.

func (*Textile) SearchContacts

func (t *Textile) SearchContacts(query *pb.ContactQuery, options *pb.QueryOptions) (<-chan *pb.QueryResult, <-chan error, *broadcast.Broadcaster, error)

SearchContacts searches the network for peers and returns contacts

func (*Textile) SearchStream

func (t *Textile) SearchStream(query *pb.StreamQuery, options *pb.QueryOptions) (<-chan *pb.QueryResult, <-chan error, *broadcast.Broadcaster, error)

SearchStream search a stream by pubsub in network.

func (*Textile) SearchSyncFiles

func (t *Textile) SearchSyncFiles(query *pb.SyncFileQuery, options *pb.QueryOptions) (<-chan *pb.QueryResult, <-chan error, *broadcast.Broadcaster, error)

SearchVideo searches the network for a video

func (*Textile) SearchThreadSnapshots

func (t *Textile) SearchThreadSnapshots(query *pb.ThreadSnapshotQuery, options *pb.QueryOptions) (<-chan *pb.QueryResult, <-chan error, *broadcast.Broadcaster, error)

SearchThreadSnapshots searches the network for snapshots

func (*Textile) SearchVideo

func (t *Textile) SearchVideo(query *pb.VideoQuery, options *pb.QueryOptions) (<-chan *pb.QueryResult, <-chan error, *broadcast.Broadcaster, error)

SearchVideo searches the network for a video

func (*Textile) SearchVideoChunks

func (t *Textile) SearchVideoChunks(query *pb.VideoChunkQuery, options *pb.QueryOptions) (<-chan *pb.QueryResult, <-chan error, *broadcast.Broadcaster, error)

SearchVideoChunks searches the network for videoChunks

func (*Textile) SendRecordReport

func (t *Textile) SendRecordReport(key string, peerId string) error

func (*Textile) SendRecordReportPb

func (t *Textile) SendRecordReportPb(report *pb.RecordReport, peerId string) error

func (*Textile) Server

func (t *Textile) Server() bool

Server returns whether or not node is configured for a server

func (*Textile) SetAvatar

func (t *Textile) SetAvatar() error

SetAvatar updates profile with a new avatar at the given file hash.

func (*Textile) SetLogLevel

func (t *Textile) SetLogLevel(level *pb.LogLevel, color bool) error

SetLogLevel provides node scoped access to the logging system

func (*Textile) SetMaxWorkers

func (t *Textile) SetMaxWorkers(n int)

func (*Textile) SetName

func (t *Textile) SetName(name string) error

SetName updates profile with a new username

func (*Textile) SetServePeer

func (t *Textile) SetServePeer(pubkey string) error

func (*Textile) SetStreamMode

func (t *Textile) SetStreamMode(mode int)

func (*Textile) Shadow

func (t *Textile) Shadow() string

func (*Textile) ShadowIp

func (t *Textile) ShadowIp() string

func (*Textile) ShadowSpeedSlow

func (t *Textile) ShadowSpeedSlow(intv int64)

func (*Textile) ShadowStat

func (t *Textile) ShadowStat() *pb.ShadowStat

func (*Textile) Sign

func (t *Textile) Sign(input []byte) ([]byte, error)

Sign signs input with account seed

func (*Textile) SimpleThreadView

func (t *Textile) SimpleThreadView(id string) (*pb.Thread, error)

func (*Textile) SnapshotThreads

func (t *Textile) SnapshotThreads() error

SnapshotThreads creates a store thread request for all threads

func (*Textile) Start

func (t *Textile) Start() error

Start creates an ipfs node and starts textile services

func (*Textile) StartRecord

func (t *Textile) StartRecord(key string) error

func (*Textile) StartRecordReport

func (t *Textile) StartRecordReport(key string) error

func (*Textile) StartStream

func (t *Textile) StartStream(threadId string, config *pb.StreamMeta) error

StartStream does two tasks:

  • Add stream to datastore.
  • Start stream routine.

TODO:

Support renewal for existing stream.

func (*Textile) StartStream_Text

func (t *Textile) StartStream_Text(threadId string, config *pb.StreamMeta) error

func (*Textile) Started

func (t *Textile) Started() bool

Started returns node started status

func (*Textile) Stop

func (t *Textile) Stop() error

Stop destroys the ipfs node and shutsdown textile services

func (*Textile) StopRecord

func (t *Textile) StopRecord(key string) error

func (*Textile) StopRecordReport

func (t *Textile) StopRecordReport(key string) error

func (*Textile) StreamAddFile

func (t *Textile) StreamAddFile(id string, sf *pb.StreamFile) error

StreamAddFile add the new file to the corresponding channel.

func (*Textile) StreamGetParent

func (t *Textile) StreamGetParent(sid string) string

func (*Textile) StreamGetStatusString

func (t *Textile) StreamGetStatusString(sid string) string

func (*Textile) StreamRequestAccepted

func (t *Textile) StreamRequestAccepted(pid string, config *pb.StreamRequest)

func (*Textile) StreamWorkerStat

func (t *Textile) StreamWorkerStat()

func (*Textile) SubscribeNotify

func (t *Textile) SubscribeNotify(id string, res bool)

SubscribeNotify print the log of subscribing a stream success or not, do not support substream currently.

func (*Textile) SubscribeStream

func (t *Textile) SubscribeStream(id string) error

SubscribeStream calls SearchStream and handleProviderSearchResult to subscribe a stream, and shadow node will also subscribe the same stream.

func (*Textile) Summary

func (t *Textile) Summary() *pb.Summary

Summary returns a summary of node data

func (*Textile) SyncAccount

func (t *Textile) SyncAccount(options *pb.QueryOptions) (*broadcast.Broadcaster, error)

SyncAccount performs a thread backup search and applies the result

func (*Textile) SyncFile

func (t *Textile) SyncFile(file *pb.SyncFile) error

func (*Textile) TargetNodeKeys

func (t *Textile) TargetNodeKeys(node ipld.Node) (*pb.Keys, error)

func (*Textile) Thread

func (t *Textile) Thread(id string) *Thread

Thread get a thread by id from loaded threads

func (*Textile) ThreadAddAdmin

func (t *Textile) ThreadAddAdmin(threadId string, peerId string) error

func (*Textile) ThreadAddStream

func (t *Textile) ThreadAddStream(threadId string, streamId string) error

ThreadAddStream add a stream to a thread.

func (*Textile) ThreadAddVideo

func (t *Textile) ThreadAddVideo(threadId string, videoId string) error

func (*Textile) ThreadAdmins

func (t *Textile) ThreadAdmins(id string) (*pb.PeerList, error)

ThreadAdmins returns a list of thread admins

func (*Textile) ThreadByKey

func (t *Textile) ThreadByKey(key string) *Thread

ThreadByKey get a thread by key from loaded threads

func (*Textile) ThreadByName

func (t *Textile) ThreadByName(name string) *Thread

ThreadByName get a thread by name from loaded threads WILL BE REMOVED!!!!

func (*Textile) ThreadNonAdmins

func (t *Textile) ThreadNonAdmins(id string) (*pb.PeerList, error)

ThreadAdmins returns a list of thread admins

func (*Textile) ThreadPeers

func (t *Textile) ThreadPeers(id string) (*pb.PeerList, error)

ThreadPeers returns a list of thread peers

func (*Textile) ThreadRemovePeer

func (t *Textile) ThreadRemovePeer(threadId string, peerId string) error

func (*Textile) ThreadUpdateListener

func (t *Textile) ThreadUpdateListener() *broadcast.Listener

ThreadUpdateListener returns the thread update channel

func (*Textile) ThreadView

func (t *Textile) ThreadView(id string) (*pb.Thread, error)

ThreadView returns a thread with expanded view properties

func (*Textile) Threads

func (t *Textile) Threads() []*Thread

Threads lists loaded threads

func (*Textile) TryConnect

func (t *Textile) TryConnect(peerId string)

func (*Textile) TryConnectPeers

func (t *Textile) TryConnectPeers(query *pb.IpfsQuery) (bool, error)

func (*Textile) TryConnectShadowByRelay

func (t *Textile) TryConnectShadowByRelay(shadowId string)

func (*Textile) TryConnectThroughRelay

func (t *Textile) TryConnectThroughRelay(ids []string) (bool, error)

func (*Textile) UnsubscribeStream

func (t *Textile) UnsubscribeStream(id string) error

UnsubscribeStream cancel subscribe to a stream.

func (*Textile) UpdateCh

func (t *Textile) UpdateCh() <-chan *pb.AccountUpdate

UpdateCh returns the account update channel

func (*Textile) UpdatePeerInboxes

func (t *Textile) UpdatePeerInboxes() error

UpdatePeerInboxes sets own peer inboxes from the current cafe sessions

func (*Textile) ValidateCafeToken

func (t *Textile) ValidateCafeToken(token string) (bool, error)

ValidateCafeToken checks whether a supplied base58 encoded token matches the locally-stored bcrypt hashed equivalent

func (*Textile) Verify

func (t *Textile) Verify(input []byte, sig []byte) error

Verify verifies input with account address

func (*Textile) WaitAdd

func (t *Textile) WaitAdd(delta int, src string)

WaitAdd add delta wait to the stop wait group

func (*Textile) WaitDone

func (t *Textile) WaitDone(src string)

WaitDone marks a wait as done in the stop wait group

func (*Textile) WriteTreeCSV

func (t *Textile) WriteTreeCSV(streamId string, outPath string) error

func (*Textile) Writer

func (t *Textile) Writer() io.Writer

Writer returns the output writer (logger / stdout)

type Thread

type Thread struct {
	Id      string
	Key     string // app key, usually UUID
	Name    string
	PrivKey libp2pc.PrivKey
	Schema  *pb.Node
	// contains filtered or unexported fields
}

Thread is the primary mechanism representing a collecion of data / files / photos

func NewThread

func NewThread(model *pb.Thread, conf *ThreadConfig) (*Thread, error)

NewThread create a new Thread from a repo model and config

func (*Thread) AddAdmin

func (t *Thread) AddAdmin(peerId string) (mh.Multihash, error)

func (*Thread) AddComment

func (t *Thread) AddComment(target string, body string) (mh.Multihash, error)

AddComment adds an outgoing comment block

func (*Thread) AddExternalInvite

func (t *Thread) AddExternalInvite() (mh.Multihash, []byte, error)

AddExternalInvite creates an add block, which can be retrieved by any peer and does not become part of the hash chain

func (*Thread) AddFiles

func (t *Thread) AddFiles(node ipld.Node, target string, caption string, keys map[string]string) (mh.Multihash, error)

AddFile adds an outgoing files block

func (*Thread) AddFlag

func (t *Thread) AddFlag(block string) (mh.Multihash, error)

AddFlag adds an outgoing flag block targeted at another block to flag

func (*Thread) AddIgnore

func (t *Thread) AddIgnore(block string) (mh.Multihash, error)

AddIgnore adds an outgoing ignore block targeted at another block to ignore

func (*Thread) AddInvite

func (t *Thread) AddInvite(p *pb.Peer) (mh.Multihash, error)

AddInvite creates an outgoing add block, which is sent directly to the recipient and does not become part of the hash chain

func (*Thread) AddLike

func (t *Thread) AddLike(target string) (mh.Multihash, error)

AddLike adds an outgoing like block

func (*Thread) AddMessage

func (t *Thread) AddMessage(target string, body string) (mh.Multihash, error)

AddMessage adds an outgoing message block

func (*Thread) AddPicture

func (t *Thread) AddPicture(node ipld.Node, target string, caption string, keys map[string]string) (mh.Multihash, error)

AddPicture add a picture

func (*Thread) AddSimpleFile

func (t *Thread) AddSimpleFile(file *pb.SimpleFile) (*pb.Block, error)

func (*Thread) AddStreamMeta

func (t *Thread) AddStreamMeta(stream *pb.StreamMeta) (mh.Multihash, error)

func (*Thread) AddStreamMeta_Text

func (t *Thread) AddStreamMeta_Text(stream *pb.StreamMeta) (mh.Multihash, error)

func (*Thread) AddVideo

func (t *Thread) AddVideo(video *pb.Video) (mh.Multihash, error)

func (*Thread) Admins

func (t *Thread) Admins() []pb.ThreadPeer

Admins returns locally known admins in this thread

func (*Thread) Annouce

func (t *Thread) Annouce(msg *pb.ThreadAnnounce) (mh.Multihash, error)

announce creates an outgoing announce block

func (*Thread) Decrypt

func (t *Thread) Decrypt(data []byte) ([]byte, error)

Decrypt data with thread secret key

func (*Thread) Encrypt

func (t *Thread) Encrypt(data []byte) ([]byte, error)

Encrypt data with thread public key

func (*Thread) Heads

func (t *Thread) Heads() ([]string, error)

Heads returns the node ids of the current HEADs

func (*Thread) LatestFiles

func (t *Thread) LatestFiles() *pb.Block

LatestFiles returns the most recent files block

func (*Thread) NonAdmins

func (t *Thread) NonAdmins() []pb.ThreadPeer

NonAdmins returns locally known none-admins in this thread

func (*Thread) Peers

func (t *Thread) Peers() []pb.ThreadPeer

Peers returns locally known peers in this thread

func (*Thread) RemovePeer

func (t *Thread) RemovePeer(peerId string) (mh.Multihash, error)

func (*Thread) UpdateSchema

func (t *Thread) UpdateSchema(hash string) error

UpdateSchema sets a new schema hash on the model and loads its node

type ThreadConfig

type ThreadConfig struct {
	RepoPath       string
	Config         *config.Config
	Account        *keypair.Full
	Node           func() *core.IpfsNode
	Datastore      repo.Datastore
	Service        func() *ThreadsService
	BlockOutbox    *BlockOutbox
	BlockDownloads *BlockDownloads
	CafeOutbox     *CafeOutbox
	AddPeer        func(*pb.Peer) error
	PushUpdate     func(*pb.Block, string)
}

ThreadConfig is used to construct a Thread

type ThreadsService

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

ThreadService is a libp2p service for orchestrating a collection of files with annotations amongst a group of peers

func NewThreadsService

func NewThreadsService(
	account *keypair.Full,
	node func() *core.IpfsNode,
	datastore repo.Datastore,
	getThread func(string) *Thread,
	addThread func([]byte, []string) (mh.Multihash, error),
	removeThread func(string) (mh.Multihash, error),
	sendNotification func(*pb.Notification) error,
) *ThreadsService

NewThreadsService returns a new threads service

func (*ThreadsService) Handle

func (h *ThreadsService) Handle(env *pb.Envelope, pid peer.ID) (*pb.Envelope, error)

Handle is called by the underlying service handler method

func (*ThreadsService) HandleStream

func (h *ThreadsService) HandleStream(env *pb.Envelope, pid peer.ID) (chan *pb.Envelope, chan error, chan interface{})

HandleStream is called by the underlying service handler method

func (*ThreadsService) ListenOneThread

func (h *ThreadsService) ListenOneThread(threadId string)

func (*ThreadsService) ListenThreads

func (h *ThreadsService) ListenThreads()

Subscribe topic for each thread

func (*ThreadsService) NewEnvelope

func (h *ThreadsService) NewEnvelope(threadId string, node []byte, block []byte, sig []byte) (*pb.Envelope, error)

NewEnvelope signs and wraps an encypted block for transport

func (*ThreadsService) NewEnvelopeAck

func (h *ThreadsService) NewEnvelopeAck(sig []byte) (*pb.Envelope, error)

NewEnvelopeAck signs and wraps an ack message

func (*ThreadsService) Ping

func (h *ThreadsService) Ping(pid peer.ID) (service.PeerStatus, error)

Ping pings another peer

func (*ThreadsService) Protocol

func (h *ThreadsService) Protocol() protocol.ID

Protocol returns the handler protocol

func (*ThreadsService) SendMessage

func (h *ThreadsService) SendMessage(ctx context.Context, peerId string, env *pb.Envelope) error

SendMessage sends a message to a peer

func (*ThreadsService) SendPubSubMessage

func (h *ThreadsService) SendPubSubMessage(msg pb.BlockMessage) error

SendPubSubMessage publishes the message to the recipient's peerID-based topic and waits for an acknowledgement response. This mechanism can result in inbox-free direct messaging via a relay node, which can be useful when two peers are not direcly connected.

func (*ThreadsService) Start

func (h *ThreadsService) Start()

Start begins online services

type Variables

type Variables struct {
	SwarmAddress    string
	FailedAddresses []string
	// contains filtered or unexported fields
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
JackTT - Gopher 🇻🇳