alby-hub/service/create_app_consumer.go

61 lines
1.5 KiB
Go

package service
import (
"context"
"github.com/getAlby/go-nostr"
"github.com/sirupsen/logrus"
"github.com/getAlby/hub/db"
"github.com/getAlby/hub/events"
"github.com/getAlby/hub/logger"
)
type createAppConsumer struct {
events.EventSubscriber
svc *service
pool *nostr.SimplePool
}
// When a new app is created, subscribe to it on the relay
func (s *createAppConsumer) ConsumeEvent(ctx context.Context, event *events.Event, globalProperties map[string]interface{}) {
if event.Event != "nwc_app_created" {
return
}
properties, ok := event.Properties.(map[string]interface{})
if !ok {
logger.Logger.WithField("event", event).Error("Failed to cast event.Properties to map")
return
}
id, ok := properties["id"].(uint)
if !ok {
logger.Logger.WithField("event", event).Error("Failed to get app id")
return
}
app := db.App{}
err := s.svc.db.First(&app, id).Error
if err != nil {
logger.Logger.WithFields(logrus.Fields{
"id": id,
}).WithError(err).Error("Failed to find app for id")
return
}
walletPrivKey, err := s.svc.keys.GetAppWalletKey(id)
if err != nil {
logger.Logger.WithError(err).Error("Failed to calculate app wallet priv key")
return
}
walletPubKey, err := nostr.GetPublicKey(walletPrivKey)
if err != nil {
logger.Logger.WithError(err).Error("Failed to calculate app wallet pub key")
return
}
for _, relayUrl := range s.svc.cfg.GetRelayUrls() {
s.svc.nip47Service.EnqueueNip47InfoPublishRequest(id, walletPubKey, walletPrivKey, relayUrl)
}
go s.svc.startAppWalletSubscription(ctx, s.pool, walletPubKey)
}