mirror of
https://github.com/getAlby/hub.git
synced 2026-08-13 12:33:39 +02:00
61 lines
1.5 KiB
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)
|
|
}
|