Documentation ¶
Index ¶
- Constants
- func ValidStatus(status string) bool
- type APIKey
- type APIKeyPage
- type Account
- type AccountsPage
- type Counterparty
- type CounterpartyPage
- type CounterpartySourceInfo
- type CryptoAddress
- type CryptoAddressPage
- type EnvelopeStorage
- type Model
- type PageInfo
- type Permission
- type PreparedTransaction
- type Role
- type Scanner
- type SearchQuery
- type SecureEnvelope
- type SecureEnvelopePage
- type Transaction
- func (t *Transaction) NumEnvelopes() int64
- func (t *Transaction) Params() []any
- func (t *Transaction) Scan(scanner Scanner) error
- func (t *Transaction) ScanWithCount(scanner Scanner) error
- func (t *Transaction) SecureEnvelopes() ([]*SecureEnvelope, error)
- func (t *Transaction) SetNumEnvelopes(count int64)
- func (t *Transaction) SetSecureEnvelopes(envelopes []*SecureEnvelope)
- func (t *Transaction) Update(other *Transaction)
- type TransactionPage
- type TravelAddressFactory
- type User
- type UserPage
- type VASPCategories
Constants ¶
const ( SourceDirectorySync = "gds" SourceUserEntry = "user" SourcePeer = "peer" ProtocolTRISA = "trisa" ProtocolTRP = "trp" )
const ( SourceUnknown = "unknown" SourceLocal = "local" SourceRemote = "remote" StatusUnspecified = "unspecified" StatusDraft = "draft" StatusPending = "pending" StatusReview = "review" StatusRepair = "repair" StatusAccepted = "accepted" StatusCompleted = "completed" StatusRejected = "rejected" DirectionOut = "out" DirectionOutgoing = DirectionOut DirectionIn = "in" DirectionIncoming = DirectionIn DirectionAny = "any" CounterpartyUnknown = "unknown" VirtualAssetUnknown = "UNK" )
const DefaultPageSize = uint32(50)
Variables ¶
This section is empty.
Functions ¶
func ValidStatus ¶
Types ¶
type APIKey ¶
type APIKey struct { Model Description sql.NullString ClientID string Secret string LastSeen sql.NullTime // contains filtered or unexported fields }
func (APIKey) Permissions ¶
func (*APIKey) ScanSummary ¶
func (*APIKey) SetPermissions ¶
type APIKeyPage ¶
type Account ¶
type Account struct { Model CustomerID sql.NullString // Account ID of internal user record (optional) FirstName sql.NullString // First name (forename) of user LastName sql.NullString // Last name (surname) of user TravelAddress sql.NullString // Generated TravelAddress for this user IVMSRecord *ivms101.Person // IVMS101 record for the account // contains filtered or unexported fields }
Account holds information about a user account for the local VASP including identifying information to link the account to the user record and IVMS101 data. Accounts automatically generate a TravelAddress for creating travel rule transactions with the specified VASPs. Accounts can also be associated with one or more wallet addresses for specific crypto currencies and networks.
func (*Account) CryptoAddresses ¶
func (a *Account) CryptoAddresses() ([]*CryptoAddress, error)
Returns associated crypto addresses if they are cached on the account model, returns an ErrMissingAssociation error if they are not cached.
func (*Account) ScanSummary ¶
ScanSummary scans only the summary information into the account model.
func (*Account) SetCryptoAddresses ¶
func (a *Account) SetCryptoAddresses(addresses []*CryptoAddress)
Used by store implementations to cache associated crypto addresses on the account.
type AccountsPage ¶
type Counterparty ¶
type Counterparty struct { Model Source string // either directory or locally created DirectoryID sql.NullString // the directory ID associated with the counterparty (directory only) RegisteredDirectory sql.NullString // the registered directory of the counterparty (directory only) Protocol string // either TRISA or TRP; the protocol to use to send travel rule information CommonName string // common name - a unique name to identify the endpoint Endpoint string // the full endpoint to connect to the counterparty on Name string // the counterparty's legal entity name Website sql.NullString // website with more information about the counterparty Country sql.NullString // country the counterparty is associated with BusinessCategory sql.NullString // the business category of the counterparty VASPCategories VASPCategories // the categories of how the VASP handles crypto assets VerifiedOn sql.NullTime // the datetime the VASP was verified in the directory (directory only) IVMSRecord *ivms101.LegalPerson // IVMS101 record for the counterparty }
TODO: how to incorporate the TRIXO form into this model? TODO: make sure that we add contacts associated with this model.
func (*Counterparty) Params ¶
func (c *Counterparty) Params() []any
Get complete named params of the counterparty from the model.
func (*Counterparty) Scan ¶
func (c *Counterparty) Scan(scanner Scanner) error
Scan a complete SELECT into the counterparty model
func (*Counterparty) ScanSummary ¶
func (c *Counterparty) ScanSummary(scanner Scanner) error
Scan a partial SELECT into the counterparty model
type CounterpartyPage ¶
type CounterpartyPage struct { Counterparties []*Counterparty `json:"counterparties"` Page *PageInfo `json:"page"` }
type CounterpartySourceInfo ¶
type CounterpartySourceInfo struct { ID ulid.ULID Source string // either directory or locally created DirectoryID sql.NullString // the directory ID associated with the counterparty (directory only) RegisteredDirectory sql.NullString // the registered directory of the counterparty (directory only) Protocol string // either TRISA or TRP; the protocol to use to send travel rule information }
func (*CounterpartySourceInfo) Scan ¶
func (c *CounterpartySourceInfo) Scan(scanner Scanner) error
type CryptoAddress ¶
type CryptoAddress struct { Model AccountID ulid.ULID // Reference to account the crypto address belongs to CryptoAddress string // The actual crypto address of the wallet Network string // The network associated with the crypto address in SIP0044 encoding AssetType sql.NullString // The asset type with the crypto address (optional) Tag sql.NullString // The memo or destination tag associated with the address (optional) TravelAddress sql.NullString // Generated TravelAddress for this wallet address // contains filtered or unexported fields }
func (*CryptoAddress) Account ¶
func (a *CryptoAddress) Account() (*Account, error)
Returns associated account if it is cached on the crypto address model, returns an ErrMissingAssociation error if they are not cached.
func (*CryptoAddress) Params ¶
func (a *CryptoAddress) Params() []any
Get the complete named params of the crypto address from the model.
func (*CryptoAddress) Scan ¶
func (a *CryptoAddress) Scan(scanner Scanner) error
Scans a complete SELECT into the CryptoAddress model
func (*CryptoAddress) SetAccount ¶
func (a *CryptoAddress) SetAccount(account *Account)
Used by store implementations to cache associated account on the crypto address.
type CryptoAddressPage ¶
type CryptoAddressPage struct { CryptoAddresses []*CryptoAddress `json:"crypto_addresses"` Page *PageInfo `json:"page"` }
type EnvelopeStorage ¶ added in v0.14.0
type EnvelopeStorage interface {
AddEnvelope(*SecureEnvelope) error
}
EnvelopeStorage is a subset of the PreparedTransaction interface that focuses on the database interactions with SecureEnvelopes. This sub-interface makes it easier to write tests, though in practice the PreparedTransaction is passed in for this.
type Model ¶
type Model struct { ID ulid.ULID `json:"id"` Created time.Time `json:"created"` Modified time.Time `json:"modified"` }
Model is the base model for all models stored in the database.
type PageInfo ¶
type PageInfo struct { PageSize uint32 `json:"page_size"` NextPageID ulid.ULID `json:"next_page_id"` PrevPageID ulid.ULID `json:"prev_page_id"` }
func PageInfoFrom ¶
type Permission ¶
type Permission struct { ID int64 Title string Description string Created time.Time Modified time.Time }
func (*Permission) Params ¶
func (p *Permission) Params() []any
func (*Permission) Scan ¶
func (p *Permission) Scan(scanner Scanner) error
type PreparedTransaction ¶
type PreparedTransaction interface { Created() bool // Returns true if the transaction was newly created, false if it already existed Fetch() (*Transaction, error) // Fetches the current transaction record from the database Update(*Transaction) error // Update the transaction with new information; e.g. data from decryption AddCounterparty(*Counterparty) error // Add counterparty by database ULID, counterparty name, or registered directory ID; if the counterparty doesn't exist, it is created AddEnvelope(*SecureEnvelope) error // Associate a secure envelope with the prepared transaction Rollback() error // Rollback the prepared transaction and conclude it Commit() error // Commit the prepared transaction and conclude it }
PreparedTransaction allows you to manage the creation/modification of a transaction w.r.t a secure envelope. It is unified in a single interface to allow backend stores that have database transactions to perform all operations in a single transaction without concurrency issues.
type Role ¶
type Role struct { ID int64 Title string Description string IsDefault bool Created time.Time Modified time.Time // contains filtered or unexported fields }
func (Role) Permissions ¶
func (r Role) Permissions() ([]*Permission, error)
func (*Role) SetPermissions ¶
func (r *Role) SetPermissions(permissions []*Permission)
type Scanner ¶
Scanner is an interface for *sql.Rows and *sql.Row so that models can implement how they scan fields into their struct without having to specify every field every time.
type SearchQuery ¶ added in v0.23.0
type SecureEnvelope ¶
type SecureEnvelope struct { Model EnvelopeID uuid.UUID // Also a foreign key reference to the Transaction Direction string // Either "out" outgoing or "in" incoming Remote sql.NullString // The common name of the remote peer this message was going to or coming from ReplyTo ulids.NullULID // If this envelope is a response, a reference to the original request envelope IsError bool // If the envelope contains an error/rejection rather than a payload EncryptionKey []byte // The encryption key, encrypted with the public key of the local node. Note this may differ from the value in the envelope for outgoing messages HMACSecret []byte // The hmac secret, encrypted with the public key of the local node. Note that this may differ from the value in the envelope for outgoing messages ValidHMAC sql.NullBool // If the hmac has been validated against the payload and non-repudiation properties are satisfied Timestamp time.Time // The timestamp of the envelope as defined by the envelope PublicKey sql.NullString // The signature of the public key that sealed the encryption key and hmac secret, may differ from the value in the envelope for ougoing envelopes. TransferState int32 // The transfer state of the secure envelope Envelope *api.SecureEnvelope // The secure envelope protocol buffer stored as a BLOB // contains filtered or unexported fields }
func FromEnvelope ¶
func FromEnvelope(env *envelope.Envelope) *SecureEnvelope
FromEnvelope creates a SecureEnvelope model from a trisa wrapped secure envelope protocol buffer; this is primarily used for testing and should not be relied on for production work without testing and verification that the complete model is present.
func (*SecureEnvelope) Params ¶
func (e *SecureEnvelope) Params() []any
func (*SecureEnvelope) Scan ¶
func (e *SecureEnvelope) Scan(scanner Scanner) error
func (*SecureEnvelope) SetTransaction ¶
func (e *SecureEnvelope) SetTransaction(tx *Transaction)
func (*SecureEnvelope) Transaction ¶
func (e *SecureEnvelope) Transaction() (*Transaction, error)
type SecureEnvelopePage ¶
type SecureEnvelopePage struct { Envelopes []*SecureEnvelope `json:"envelopes"` Page *PageInfo `json:"page"` }
type Transaction ¶
type Transaction struct { ID uuid.UUID // Transaction IDs are UUIDs not ULIDs per the TRISA spec, this is also used for the envelope ID Source string // Either "local" meaning the transaction was created by the user, or "remote" meaning it is an incoming message Status string // Can be "unspecified", "started", "pending", "review", "repair", "accepted", "completed", or "rejected" Counterparty string // The name of the counterparty in the transaction CounterpartyID ulids.NullULID // A reference to the counterparty in the database, if any Originator sql.NullString // Full name of the originator natural person or account OriginatorAddress sql.NullString // The crypto address of the originator Beneficiary sql.NullString // Full name of the beneficiary natural person or account BeneficiaryAddress sql.NullString // The crypto address of the beneficiary VirtualAsset string // A representation of the network/asset type Amount float64 // The amount of the transaction LastUpdate sql.NullTime // The last time a TRISA RPC occurred for this transaction Created time.Time // Timestamp the transaction was created Modified time.Time // Timestamp the transaction was last modified, including when a new secure envelope was received // contains filtered or unexported fields }
func (*Transaction) NumEnvelopes ¶
func (t *Transaction) NumEnvelopes() int64
func (*Transaction) Params ¶
func (t *Transaction) Params() []any
func (*Transaction) Scan ¶
func (t *Transaction) Scan(scanner Scanner) error
func (*Transaction) ScanWithCount ¶
func (t *Transaction) ScanWithCount(scanner Scanner) error
func (*Transaction) SecureEnvelopes ¶
func (t *Transaction) SecureEnvelopes() ([]*SecureEnvelope, error)
func (*Transaction) SetNumEnvelopes ¶
func (t *Transaction) SetNumEnvelopes(count int64)
func (*Transaction) SetSecureEnvelopes ¶
func (t *Transaction) SetSecureEnvelopes(envelopes []*SecureEnvelope)
func (*Transaction) Update ¶
func (t *Transaction) Update(other *Transaction)
Update the transaction t with values from other if the field in other is non-zero; e.g. if a nullable field is valid or an empty string is empty. This method skips the ID and Modified fields.
type TransactionPage ¶
type TransactionPage struct { Transactions []*Transaction `json:"transactions"` Page *PageInfo `json:"page"` }
type TravelAddressFactory ¶
Factory function that can create travel addresses from models or IDs. This function should be able to handle any model defined in this package or a ULID or UUID.
func NewTravelAddressFactory ¶
func NewTravelAddressFactory(endpoint, protocol string) (TravelAddressFactory, error)
Create a travel address factory with the endpoint and protocol.
type User ¶
type User struct { Model Name sql.NullString Email string Password string RoleID int64 LastLogin sql.NullTime // contains filtered or unexported fields }
func (User) Permissions ¶
func (*User) ScanSummary ¶
func (*User) SetPermissions ¶
type VASPCategories ¶
type VASPCategories []string
VASPCategories allows the string list to be stored in the database as a JSON array.
func (*VASPCategories) Scan ¶
func (c *VASPCategories) Scan(src interface{}) error