Documentation
¶
Index ¶
- Variables
- func SendContactDmPush(ctx context.Context, pusher Pusher, badges badge.Store, ...) error
- func SendContactJoinedFlipcashPush(ctx context.Context, pusher Pusher, joinedPhone *phonepb.PhoneNumber, ...) error
- func SendFlipcashCurrencyBoughtPush(ctx context.Context, pusher Pusher, user *commonpb.UserId, ...) error
- func SendFlipcashCurrencyDepositedPush(ctx context.Context, pusher Pusher, user *commonpb.UserId, ...) error
- func SendFlipcashCurrencyGainPush(ctx context.Context, pusher Pusher, user *commonpb.UserId, ...) error
- func SendFlipcashCurrencySoldPush(ctx context.Context, pusher Pusher, user *commonpb.UserId, ...) error
- func SendTipDmPush(ctx context.Context, pusher Pusher, badges badge.Store, ...) error
- func SendUsdfDepositProcessingPush(ctx context.Context, pusher Pusher, user *commonpb.UserId, ...) error
- func SendUsdfDepositedPush(ctx context.Context, pusher Pusher, user *commonpb.UserId, ...) error
- type CurrencyState
- type CurrencyStateStore
- type FCMClient
- type FCMPusher
- type NoOpPusher
- type Pusher
- type Server
- type Store
- type Token
- type TokenStore
Constants ¶
This section is empty.
Variables ¶
var ErrCurrencyStateNotFound = errors.New("currency state not found")
ErrCurrencyStateNotFound is returned when no push state exists for a mint.
Functions ¶
func SendContactDmPush ¶ added in v1.14.0
func SendContactDmPush(ctx context.Context, pusher Pusher, badges badge.Store, ocpData ocp_data.Provider, chatId *commonpb.ChatId, message *messagingpb.Message, senderID *commonpb.UserId, senderContact *phonepb.PhoneNumber, recipients ...*commonpb.UserId) error
SendContactDmPush notifies recipients of a new message in a contact DM. The title is a contact substitution on the sender's phone number, which the recipient's client resolves against their address book.
func SendContactJoinedFlipcashPush ¶ added in v1.11.0
func SendFlipcashCurrencyBoughtPush ¶ added in v0.4.0
func SendFlipcashCurrencyDepositedPush ¶ added in v0.4.0
func SendFlipcashCurrencyGainPush ¶ added in v1.1.0
func SendFlipcashCurrencySoldPush ¶ added in v0.4.0
func SendTipDmPush ¶ added in v1.23.0
func SendTipDmPush(ctx context.Context, pusher Pusher, badges badge.Store, ocpData ocp_data.Provider, chatId *commonpb.ChatId, message *messagingpb.Message, senderID *commonpb.UserId, senderDisplayName string, recipients ...*commonpb.UserId) error
SendTipDmPush notifies recipients of a new message in a tip DM. The sender is typically not in the recipient's contacts, so the title carries the sender's display name directly rather than a contact substitution — and never the sender's phone number, which is private in a tip DM.
func SendUsdfDepositProcessingPush ¶ added in v1.9.0
Types ¶
type CurrencyState ¶ added in v1.19.0
type CurrencyState struct {
Mint *commonpb.PublicKey
AllTimeHighSupply uint64
AllTimeHighSlot uint64
LastGainPushAt *time.Time // nil if a gain push has never been granted for the mint
}
CurrencyState captures per-currency state used to gate push notifications.
AllTimeHighSupply tracks the circulating supply (in quarks) observed at the last granted gain push, NOT a true high-water mark: it only advances when a gain push is actually granted (see CurrencyStateStore.ClaimGainPush).
type CurrencyStateStore ¶ added in v1.19.0
type CurrencyStateStore interface {
// ClaimGainPush atomically gates a "currency gain" push wave for a mint.
//
// granted is true only when both conditions hold against the currently stored
// state: (1) supply is strictly greater than the stored all-time high, and
// (2) at least cooldown has elapsed since the last granted gain push (or none
// has ever been granted). When granted, the stored all-time high (supply,
// slot) and last-gain-push timestamp are advanced to the provided values / now.
// When not granted, the stored state is left unchanged — in particular a new
// high observed during cooldown is NOT recorded.
//
// Whenever err is nil, the returned CurrencyState reflects the resulting stored
// state — the freshly written values when granted, or the existing values when
// not — so callers can populate a local cache regardless of the outcome.
ClaimGainPush(ctx context.Context, mint *commonpb.PublicKey, supply, slot uint64, cooldown time.Duration) (granted bool, state *CurrencyState, err error)
// GetCurrencyState returns the stored push state for a mint, or
// ErrCurrencyStateNotFound if none has been recorded yet.
GetCurrencyState(ctx context.Context, mint *commonpb.PublicKey) (*CurrencyState, error)
}
type FCMClient ¶
type FCMClient interface {
SendEachForMulticast(ctx context.Context, message *messaging.MulticastMessage) (*messaging.BatchResponse, error)
}
type FCMPusher ¶
type FCMPusher struct {
// contains filtered or unexported fields
}
func NewFCMPusher ¶
func NewFCMPusher(log *zap.Logger, tokens TokenStore, client FCMClient) *FCMPusher
func (*FCMPusher) SendBadgeCountPush ¶ added in v1.16.0
func (p *FCMPusher) SendBadgeCountPush(ctx context.Context, user *commonpb.UserId, count uint64) error
SendBadgeCountPush updates the app-icon badge to count on a user's iOS devices only. It sends a badge-only APNs notification — no alert, sound, or payload — so the icon updates without showing a banner.
It targets iOS exclusively: APNs is the only platform with a server-settable numeric badge, so FCM_ANDROID tokens are skipped. Android badges are driven by notification state, not a pushed number.
type Pusher ¶
type Pusher interface {
SendPushes(ctx context.Context, title, body string, customPayload *pushpb.Payload, users ...*commonpb.UserId) error
SendBadgeCountPush(ctx context.Context, user *commonpb.UserId, count uint64) error
}
func NewNoOpPusher ¶
func NewNoOpPusher() Pusher
type Server ¶
type Server struct {
pushpb.UnimplementedPushServer
// contains filtered or unexported fields
}
func NewServer ¶
func NewServer(log *zap.Logger, authz auth.Authorizer, tokens TokenStore) *Server
func (*Server) AddToken ¶
func (s *Server) AddToken(ctx context.Context, req *pushpb.AddTokenRequest) (*pushpb.AddTokenResponse, error)
func (*Server) DeleteTokens ¶
func (s *Server) DeleteTokens(ctx context.Context, req *pushpb.DeleteTokensRequest) (*pushpb.DeleteTokensResponse, error)
type Store ¶ added in v1.19.0
type Store interface {
TokenStore
CurrencyStateStore
}
Store is the combined push persistence surface, implemented by each backend.
type Token ¶
Token represents a push notification token.
Tokens are bound to a (user, device) pair, identified by the AppInstallID.
type TokenStore ¶
type TokenStore interface {
// GetTokens returns all tokens for a user.
GetTokens(ctx context.Context, userID *commonpb.UserId) ([]Token, error)
// GetTokensBatch returns all tokens for a batch of users.
GetTokensBatch(ctx context.Context, userIDs ...*commonpb.UserId) ([]Token, error)
// AddToken adds a token for a user.
//
// If the token already exists for the same user and device, it will be updated.
AddToken(ctx context.Context, userID *commonpb.UserId, appInstallID *commonpb.AppInstallId, tokenType pushpb.TokenType, token string) error
// DeleteToken deletes a token for a user.
DeleteToken(ctx context.Context, tokenType pushpb.TokenType, token string) error
// FilterUsersWithTokens returns the subset of user IDs that have at least one push token.
FilterUsersWithTokens(ctx context.Context, userIDs ...*commonpb.UserId) ([]*commonpb.UserId, error)
}