events.ts raw

   1  import { DomainEvent } from '../shared/events'
   2  import { Pubkey } from '../shared/value-objects/Pubkey'
   3  import { RelayUrl } from '../shared/value-objects/RelayUrl'
   4  
   5  // ============================================================================
   6  // Favorite Relay Events
   7  // ============================================================================
   8  
   9  /**
  10   * Raised when a favorite relay is added
  11   */
  12  export class FavoriteRelayAdded extends DomainEvent {
  13    get eventType(): string {
  14      return 'relay.favorite_added'
  15    }
  16  
  17    constructor(
  18      readonly owner: Pubkey,
  19      readonly relayUrl: RelayUrl
  20    ) {
  21      super()
  22    }
  23  }
  24  
  25  /**
  26   * Raised when a favorite relay is removed
  27   */
  28  export class FavoriteRelayRemoved extends DomainEvent {
  29    get eventType(): string {
  30      return 'relay.favorite_removed'
  31    }
  32  
  33    constructor(
  34      readonly owner: Pubkey,
  35      readonly relayUrl: RelayUrl
  36    ) {
  37      super()
  38    }
  39  }
  40  
  41  /**
  42   * Raised when favorite relays list is published
  43   */
  44  export class FavoriteRelaysPublished extends DomainEvent {
  45    get eventType(): string {
  46      return 'relay.favorites_published'
  47    }
  48  
  49    constructor(
  50      readonly owner: Pubkey,
  51      readonly relayCount: number,
  52      readonly setCount: number
  53    ) {
  54      super()
  55    }
  56  }
  57  
  58  // ============================================================================
  59  // Relay Set Events
  60  // ============================================================================
  61  
  62  /**
  63   * Raised when a new relay set is created
  64   */
  65  export class RelaySetCreated extends DomainEvent {
  66    get eventType(): string {
  67      return 'relay.set_created'
  68    }
  69  
  70    constructor(
  71      readonly owner: Pubkey,
  72      readonly setId: string,
  73      readonly name: string,
  74      readonly relays: readonly RelayUrl[]
  75    ) {
  76      super()
  77    }
  78  }
  79  
  80  /**
  81   * Changes that can be made to a relay set
  82   */
  83  export interface RelaySetChanges {
  84    name?: { from: string; to: string }
  85    addedRelays?: RelayUrl[]
  86    removedRelays?: RelayUrl[]
  87  }
  88  
  89  /**
  90   * Raised when a relay set is updated
  91   */
  92  export class RelaySetUpdated extends DomainEvent {
  93    get eventType(): string {
  94      return 'relay.set_updated'
  95    }
  96  
  97    constructor(
  98      readonly owner: Pubkey,
  99      readonly setId: string,
 100      readonly changes: RelaySetChanges
 101    ) {
 102      super()
 103    }
 104  
 105    get nameChanged(): boolean {
 106      return this.changes.name !== undefined
 107    }
 108  
 109    get relaysChanged(): boolean {
 110      return (
 111        (this.changes.addedRelays?.length ?? 0) > 0 ||
 112        (this.changes.removedRelays?.length ?? 0) > 0
 113      )
 114    }
 115  }
 116  
 117  /**
 118   * Raised when a relay set is deleted
 119   */
 120  export class RelaySetDeleted extends DomainEvent {
 121    get eventType(): string {
 122      return 'relay.set_deleted'
 123    }
 124  
 125    constructor(
 126      readonly owner: Pubkey,
 127      readonly setId: string
 128    ) {
 129      super()
 130    }
 131  }
 132  
 133  // ============================================================================
 134  // Mailbox Relay (NIP-65) Events
 135  // ============================================================================
 136  
 137  /**
 138   * Raised when a relay is added to the user's relay list
 139   */
 140  export class MailboxRelayAdded extends DomainEvent {
 141    get eventType(): string {
 142      return 'relay.mailbox_added'
 143    }
 144  
 145    constructor(
 146      readonly owner: Pubkey,
 147      readonly relayUrl: RelayUrl,
 148      readonly scope: 'read' | 'write' | 'both'
 149    ) {
 150      super()
 151    }
 152  }
 153  
 154  /**
 155   * Raised when a relay is removed from the user's relay list
 156   */
 157  export class MailboxRelayRemoved extends DomainEvent {
 158    get eventType(): string {
 159      return 'relay.mailbox_removed'
 160    }
 161  
 162    constructor(
 163      readonly owner: Pubkey,
 164      readonly relayUrl: RelayUrl
 165    ) {
 166      super()
 167    }
 168  }
 169  
 170  /**
 171   * Raised when a relay's scope is changed
 172   */
 173  export class MailboxRelayScopeChanged extends DomainEvent {
 174    get eventType(): string {
 175      return 'relay.mailbox_scope_changed'
 176    }
 177  
 178    constructor(
 179      readonly owner: Pubkey,
 180      readonly relayUrl: RelayUrl,
 181      readonly fromScope: 'read' | 'write' | 'both',
 182      readonly toScope: 'read' | 'write' | 'both'
 183    ) {
 184      super()
 185    }
 186  }
 187  
 188  /**
 189   * Raised when the relay list is published
 190   */
 191  export class RelayListPublished extends DomainEvent {
 192    get eventType(): string {
 193      return 'relay.list_published'
 194    }
 195  
 196    constructor(
 197      readonly owner: Pubkey,
 198      readonly readRelayCount: number,
 199      readonly writeRelayCount: number
 200    ) {
 201      super()
 202    }
 203  }
 204