clientintf

package
v0.1.10 Latest Latest
Warning

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

Go to latest
Published: Jan 17, 2024 License: ISC Imports: 21 Imported by: 0

Documentation

Overview

Package clientintf holds client-global interfaces and helper functions.

This works as the root for client types.

Index

Constants

View Source
const LockFileName = "app.lock"

Variables

View Source
var (
	ErrSubsysExiting             = errors.New("subsys exiting")
	ErrInvoiceInsufficientlyPaid = errors.New("invoice insufficiently paid")
	ErrInvoiceExpired            = errors.New("invoice expired")
	ErrOnboardNoFunds            = errors.New("onboarding invite does not have any funds")
	ErrRetriablePayment          = errors.New("retriable payment error")
)

Functions

func ChunkIndexMatches

func ChunkIndexMatches(fm *rpc.FileMetadata, index int, hash []byte) bool

ChunkIndexMatches returns true if the hash of the manifest file at the specified index matches the given hash.

func EstimatePostSize

func EstimatePostSize(content, descr string) (uint64, error)

EstimatePostSize estimates the final size of a post share message, given the specified contents of the post.

func EstimateUploadCost

func EstimateUploadCost(size int64, feeRate uint64) (uint64, error)

Returns the estimate cost (in milliatoms) to upload a file of the given size to a remote user. The feeRate must be specified in milliatoms/byte.

func FileChunkMAtoms

func FileChunkMAtoms(chunkIdx int, fm *rpc.FileMetadata) uint64

FileChunkMAtoms returns the cost to download the specified chunk from the file.

func NetDialer

func NetDialer(addr string, log slog.Logger) func(context.Context) (Conn, *tls.ConnectionState, error)

NetDialer returns a client dialer function that always connects to a specific server address.

func PostTitle

func PostTitle(pm *rpc.PostMetadata) string

PostTitle returns a suggested title for a given post. It fetches from the "title" attribute (if it exists) or from the first non-empty line of the main post content.

func WithDialer added in v0.1.8

func WithDialer(addr string, log slog.Logger, dialFunc DialFunc) func(context.Context) (Conn, *tls.ConnectionState, error)

WithDialer returns a client dialer function that uses the given dialer.

Types

type CertConfirmer

CertConfirmer is a functiion that can be called to confirm whether a given server is safe.

type Conn

type Conn interface {
	io.Reader
	io.Writer
	io.Closer
	RemoteAddr() net.Addr
}

Conn represents the required functions for a remote connection to a server.

type DecodedInvoice

type DecodedInvoice struct {
	ID         []byte
	MAtoms     int64
	ExpiryTime time.Time
}

DecodedInvoice represents an invoice that was successfully decoded by the PaymentClient

func (*DecodedInvoice) IsExpired

func (inv *DecodedInvoice) IsExpired(affordance time.Duration) bool

IsExpired returns whether this invoice has expired taking into account the specified affordance. In other words, it returns true if the expiration time of the invoice is before time.Now().Add(affordance).

type DialFunc added in v0.1.8

type DialFunc func(context.Context, string, string) (net.Conn, error)

type Dialer

type Dialer func(context.Context) (Conn, *tls.ConnectionState, error)

Dialer is a function that can generate new connections to a server.

type FreePaymentClient

type FreePaymentClient struct{}

FreePaymentClient implements the PaymentClient interface for servers that offer the "free" payment scheme: namely, invoices are requested but there is nothing to pay for.

func (FreePaymentClient) DecodeInvoice

func (pc FreePaymentClient) DecodeInvoice(_ context.Context, invoice string) (DecodedInvoice, error)

func (FreePaymentClient) GetInvoice

func (pc FreePaymentClient) GetInvoice(ctx context.Context, mat int64, cb func(int64)) (string, error)

func (FreePaymentClient) IsInvoicePaid

func (pc FreePaymentClient) IsInvoicePaid(context.Context, int64, string) error

func (FreePaymentClient) IsPaymentCompleted added in v0.1.4

func (pc FreePaymentClient) IsPaymentCompleted(context.Context, string) (int64, error)

func (FreePaymentClient) PayInvoice

func (pc FreePaymentClient) PayInvoice(context.Context, string) (int64, error)

func (FreePaymentClient) PayInvoiceAmount

func (pc FreePaymentClient) PayInvoiceAmount(context.Context, string, int64) (int64, error)

func (FreePaymentClient) PayScheme

func (pc FreePaymentClient) PayScheme() string

func (FreePaymentClient) TrackInvoice added in v0.1.8

func (pc FreePaymentClient) TrackInvoice(ctx context.Context, inv string, minMAtoms int64) (int64, error)

type ID

type ID = zkidentity.ShortID

ID is a 32-byte global ID. This is used as an alias for all 32-byte arrays that are interpreted as unique IDs.

func RandomID

func RandomID() ID

type OnboardStage added in v0.1.7

type OnboardStage string

OnboardStage tracks stages of the client onboarding process.

const (
	StageFetchingInvite      OnboardStage = "fetching_invite"
	StageInviteNoFunds       OnboardStage = "invite_no_funds"
	StageRedeemingFunds      OnboardStage = "redeeming_funds"
	StageWaitingFundsConfirm OnboardStage = "waiting_funds_confirm"
	StageOpeningOutbound     OnboardStage = "opening_outbound"
	StageWaitingOutConfirm   OnboardStage = "waiting_out_confirm"
	StageOpeningInbound      OnboardStage = "opening_inbound"
	StageInitialKX           OnboardStage = "initial_kx"
	StageOnboardDone         OnboardStage = "done"
)

type OnboardState added in v0.1.7

type OnboardState struct {
	Stage        OnboardStage                 `json:"stage"`
	Key          *PaidInviteKey               `json:"key"`
	Invite       *rpc.OOBPublicIdentityInvite `json:"invite"`
	RedeemTx     *chainhash.Hash              `json:"redeem_tx"`
	RedeemAmount dcrutil.Amount               `json:"redeem_amount"`
	OutChannelID string                       `json:"out_channel_id"`
	InChannelID  string                       `json:"in_channel_id"`
}

OnboardState tracks a state of the client onboarding process.

type PagesSessionID added in v0.1.8

type PagesSessionID uint64

PagesSessionID is a type that represents a page navigation session.

func (PagesSessionID) String added in v0.1.8

func (id PagesSessionID) String() string

type PaidInviteKey added in v0.1.7

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

PaidInviteKey is the encryption key that is used in paid invites.

func DecodePaidInviteKey added in v0.1.7

func DecodePaidInviteKey(s string) (PaidInviteKey, error)

DecodePaidInviteKey decodes a given string as a PaidInviteKey.

func GeneratePaidInviteKey added in v0.1.7

func GeneratePaidInviteKey() PaidInviteKey

GeneratePaidInviteKey generates a new, cryptographically secure paid invite key.

func (*PaidInviteKey) Decode added in v0.1.7

func (pik *PaidInviteKey) Decode(s string) error

Decode the key from its string encoding.

func (PaidInviteKey) Decrypt added in v0.1.7

func (pik PaidInviteKey) Decrypt(box []byte) ([]byte, error)

Decrypt a message with this key.

func (PaidInviteKey) Encode added in v0.1.7

func (pik PaidInviteKey) Encode() (string, error)

Encode this key as a string.

func (PaidInviteKey) Encrypt added in v0.1.7

func (pik PaidInviteKey) Encrypt(message []byte) ([]byte, error)

Encrypt a message with this key.

func (PaidInviteKey) MarshalJSON added in v0.1.7

func (pik PaidInviteKey) MarshalJSON() ([]byte, error)

MarshalJSON marshals the id into a json string.

func (PaidInviteKey) RVPoint added in v0.1.7

func (pik PaidInviteKey) RVPoint() ratchet.RVPoint

RVPoint calculates the RV point that corresponds to this key.

func (PaidInviteKey) String added in v0.1.7

func (pik PaidInviteKey) String() string

String returns the encoded paid invite key or an error string.

func (*PaidInviteKey) UnmarshalJSON added in v0.1.7

func (pik *PaidInviteKey) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals the json representation of a ShortID.

type PaymentClient

type PaymentClient interface {
	PayScheme() string
	PayInvoice(context.Context, string) (int64, error)
	PayInvoiceAmount(context.Context, string, int64) (int64, error)
	GetInvoice(context.Context, int64, func(int64)) (string, error)
	DecodeInvoice(context.Context, string) (DecodedInvoice, error)
	IsInvoicePaid(context.Context, int64, string) error
	TrackInvoice(context.Context, string, int64) (int64, error)
	IsPaymentCompleted(context.Context, string) (int64, error)
}

PaymentClient is the interface for clients that can pay for invoices.

type PostID

type PostID = ID

type RawRVID

type RawRVID = ID

type ReceivedGCMsg added in v0.1.8

type ReceivedGCMsg struct {
	MsgID zkidentity.ShortID `json:"msg_id"`
	UID   UserID             `json:"uid"`
	GCM   rpc.RMGroupMessage `json:"gcm"`
	TS    time.Time          `json:"ts"`
}

ReceivedGCMsg is an individual GC message received by a local client.

type ServerPolicy added in v0.1.4

type ServerPolicy struct {
	PushPaymentLifetime time.Duration
	MaxPushInvoices     int

	// MaxMsgSizeVersion is the version of the max message size accepted
	// by the server.
	MaxMsgSizeVersion rpc.MaxMsgSizeVersion

	// MaxMsgSize is the maximum message size accepted by the server.
	MaxMsgSize uint

	// ExpirationDays is the number of days after which data pushed to the server
	// is removed if not fetched.
	ExpirationDays int

	// PushPayRate is the rate (in milli-atoms per byte) to push data to
	// the server.
	PushPayRate uint64

	// SubPayRate is the rate (in milli-atoms) to subscribe to an RV point
	// on the server.
	SubPayRate uint64
}

ServerPolicy is the policy for a given server session.

type ServerSessionIntf

type ServerSessionIntf interface {
	SendPRPC(msg rpc.Message, payload interface{}, reply chan<- interface{}) error
	RequestClose(err error)
	PayClient() PaymentClient
	Policy() ServerPolicy

	// Context returns a context that gets cancelled once this session stops
	// running.
	Context() context.Context
}

ServerSessionIntf is the interface available from serverSession to consumers.

type UserID

type UserID = ID

Jump to

Keyboard shortcuts

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