update_app_consumer.go raw
1 package service
2
3 import (
4 "context"
5
6 "github.com/getAlby/go-nostr"
7 "github.com/getAlby/hub/events"
8 "github.com/getAlby/hub/logger"
9 )
10
11 type updateAppConsumer struct {
12 events.EventSubscriber
13 svc *service
14 }
15
16 // When a app is updated, re-publish the nip47 info event
17 func (s *updateAppConsumer) ConsumeEvent(ctx context.Context, event *events.Event, globalProperties map[string]interface{}) {
18 if event.Event != "nwc_app_updated" {
19 return
20 }
21
22 properties, ok := event.Properties.(map[string]interface{})
23 if !ok {
24 logger.Logger.WithField("event", event).Error("Failed to cast event.Properties to map")
25 return
26 }
27 id, ok := properties["id"].(uint)
28 if !ok {
29 logger.Logger.WithField("event", event).Error("Failed to get app id")
30 return
31 }
32 walletPrivKey, err := s.svc.keys.GetAppWalletKey(id)
33 if err != nil {
34 logger.Logger.WithError(err).Error("Failed to calculate app wallet priv key")
35 return
36 }
37 walletPubKey, err := nostr.GetPublicKey(walletPrivKey)
38 if err != nil {
39 logger.Logger.WithError(err).Error("Failed to calculate app wallet pub key")
40 return
41 }
42
43 if s.svc.keys.GetNostrPublicKey() != walletPubKey {
44 // only need to re-publish the nip47 event info if it is not a legacy app connection (shared wallet pubkey)
45 // (legacy app connection can be used for multiple apps - so it cannot be app-specific)
46 for _, relayUrl := range s.svc.cfg.GetRelayUrls() {
47 s.svc.nip47Service.EnqueueNip47InfoPublishRequest(id, walletPubKey, walletPrivKey, relayUrl)
48 }
49 }
50 }
51