nostr 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.editorconfig +1 -1
- data/.rubocop.yml +23 -0
- data/.tool-versions +2 -1
- data/CHANGELOG.md +36 -1
- data/README.md +92 -228
- data/docs/.gitignore +4 -0
- data/docs/.vitepress/config.mjs +112 -0
- data/docs/README.md +44 -0
- data/docs/api-examples.md +49 -0
- data/docs/bun.lockb +0 -0
- data/docs/common-use-cases/bech32-encoding-and-decoding-(NIP-19).md +190 -0
- data/docs/core/client.md +108 -0
- data/docs/core/keys.md +136 -0
- data/docs/core/user.md +43 -0
- data/docs/events/contact-list.md +29 -0
- data/docs/events/encrypted-direct-message.md +28 -0
- data/docs/events/recommend-server.md +32 -0
- data/docs/events/set-metadata.md +20 -0
- data/docs/events/text-note.md +15 -0
- data/docs/events.md +11 -0
- data/docs/getting-started/installation.md +21 -0
- data/docs/getting-started/overview.md +170 -0
- data/docs/implemented-nips.md +9 -0
- data/docs/index.md +44 -0
- data/docs/markdown-examples.md +85 -0
- data/docs/package.json +12 -0
- data/docs/relays/connecting-to-a-relay.md +21 -0
- data/docs/relays/publishing-events.md +29 -0
- data/docs/relays/receiving-events.md +6 -0
- data/docs/subscriptions/creating-a-subscription.md +49 -0
- data/docs/subscriptions/deleting-a-subscription.md +10 -0
- data/docs/subscriptions/filtering-subscription-events.md +115 -0
- data/docs/subscriptions/updating-a-subscription.md +4 -0
- data/lib/nostr/bech32.rb +203 -0
- data/lib/nostr/client.rb +2 -1
- data/lib/nostr/crypto.rb +11 -7
- data/lib/nostr/errors/error.rb +7 -0
- data/lib/nostr/errors/invalid_hrp_error.rb +21 -0
- data/lib/nostr/errors/invalid_key_format_error.rb +20 -0
- data/lib/nostr/errors/invalid_key_length_error.rb +20 -0
- data/lib/nostr/errors/invalid_key_type_error.rb +18 -0
- data/lib/nostr/errors/key_validation_error.rb +6 -0
- data/lib/nostr/errors.rb +8 -0
- data/lib/nostr/event.rb +3 -4
- data/lib/nostr/events/encrypted_direct_message.rb +4 -3
- data/lib/nostr/filter.rb +4 -4
- data/lib/nostr/key.rb +100 -0
- data/lib/nostr/key_pair.rb +30 -6
- data/lib/nostr/keygen.rb +43 -4
- data/lib/nostr/private_key.rb +36 -0
- data/lib/nostr/public_key.rb +36 -0
- data/lib/nostr/relay_message_type.rb +18 -0
- data/lib/nostr/subscription.rb +2 -2
- data/lib/nostr/user.rb +17 -8
- data/lib/nostr/version.rb +1 -1
- data/lib/nostr.rb +6 -0
- data/nostr.gemspec +9 -9
- data/sig/nostr/bech32.rbs +14 -0
- data/sig/nostr/client.rbs +5 -5
- data/sig/nostr/crypto.rbs +5 -5
- data/sig/nostr/errors/error.rbs +4 -0
- data/sig/nostr/errors/invalid_hrb_error.rbs +6 -0
- data/sig/nostr/errors/invalid_key_format_error.rbs +5 -0
- data/sig/nostr/errors/invalid_key_length_error.rbs +5 -0
- data/sig/nostr/errors/invalid_key_type_error.rbs +5 -0
- data/sig/nostr/errors/key_validation_error.rbs +4 -0
- data/sig/nostr/event.rbs +4 -4
- data/sig/nostr/events/encrypted_direct_message.rbs +2 -2
- data/sig/nostr/filter.rbs +3 -12
- data/sig/nostr/key.rbs +16 -0
- data/sig/nostr/key_pair.rbs +7 -3
- data/sig/nostr/keygen.rbs +5 -2
- data/sig/nostr/private_key.rbs +4 -0
- data/sig/nostr/public_key.rbs +4 -0
- data/sig/nostr/relay_message_type.rbs +8 -0
- data/sig/nostr/user.rbs +4 -8
- data/sig/vendor/bech32/nostr/entity.rbs +41 -0
- data/sig/vendor/bech32/nostr/nip19.rbs +20 -0
- data/sig/vendor/bech32/segwit_addr.rbs +21 -0
- data/sig/vendor/bech32.rbs +25 -0
- data/sig/vendor/event_emitter.rbs +10 -3
- data/sig/vendor/event_machine/channel.rbs +1 -1
- data/sig/vendor/faye/websocket/api.rbs +45 -0
- data/sig/vendor/faye/websocket/client.rbs +43 -0
- data/sig/vendor/faye/websocket.rbs +30 -0
- metadata +79 -21
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # Added only to satisfy the Steep requirements. Not 100% reliable.
         | 
| 2 | 
            +
            module Bech32
         | 
| 3 | 
            +
              SEPARATOR: String
         | 
| 4 | 
            +
              BECH32M_CONST: Integer
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              def encode: (untyped hrp, untyped data, untyped spec) -> untyped
         | 
| 7 | 
            +
              def self.encode: (untyped hrp, untyped data, untyped spec) -> untyped
         | 
| 8 | 
            +
              def decode: (untyped bech, ?Integer max_length) -> [untyped, untyped, Integer]?
         | 
| 9 | 
            +
              def self.decode: (untyped bech, ?Integer max_length) -> [untyped, untyped, Integer]?
         | 
| 10 | 
            +
              def create_checksum: (untyped hrp, untyped data, untyped spec) -> Array[Integer]
         | 
| 11 | 
            +
              def self.create_checksum: (untyped hrp, untyped data, untyped spec) -> Array[Integer]
         | 
| 12 | 
            +
              def verify_checksum: (untyped hrp, untyped data) -> Integer?
         | 
| 13 | 
            +
              def self.verify_checksum: (untyped hrp, untyped data) -> Integer?
         | 
| 14 | 
            +
              def expand_hrp: (untyped hrp) -> untyped
         | 
| 15 | 
            +
              def self.expand_hrp: (untyped hrp) -> untyped
         | 
| 16 | 
            +
              def convert_bits: (untyped data, untyped from, untyped to, ?true padding) -> Array[Integer]?
         | 
| 17 | 
            +
              def self.convert_bits: (untyped data, untyped from, untyped to, ?true padding) -> Array[Integer]?
         | 
| 18 | 
            +
              def polymod: (untyped values) -> Integer
         | 
| 19 | 
            +
              def self.polymod: (untyped values) -> Integer
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              module Encoding
         | 
| 22 | 
            +
                BECH32: Integer
         | 
| 23 | 
            +
                BECH32M: Integer
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -1,9 +1,16 @@ | |
| 1 1 | 
             
            # Added only to satisfy the Steep requirements. Not 100% reliable.
         | 
| 2 2 | 
             
            module EventEmitter
         | 
| 3 | 
            -
               | 
| 3 | 
            +
              interface _Event
         | 
| 4 | 
            +
                def data: -> String
         | 
| 5 | 
            +
                def message: -> String
         | 
| 6 | 
            +
                def code: -> Integer
         | 
| 7 | 
            +
                def reason: -> String
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              def add_listener: (Symbol event_name) { (_Event event) -> void } -> void
         | 
| 4 11 | 
             
              alias on add_listener
         | 
| 5 12 |  | 
| 6 13 | 
             
              def remove_listener: (untyped id_or_type) -> Array[untyped]?
         | 
| 7 | 
            -
              def emit: ( | 
| 8 | 
            -
              def once: ( | 
| 14 | 
            +
              def emit: (Symbol `type`, *untyped data) -> Array[untyped]
         | 
| 15 | 
            +
              def once: (Symbol `type`) -> Integer
         | 
| 9 16 | 
             
            end
         | 
| @@ -6,7 +6,7 @@ module EventMachine | |
| 6 6 |  | 
| 7 7 | 
             
                def initialize: -> void
         | 
| 8 8 | 
             
                def num_subscribers: -> Integer
         | 
| 9 | 
            -
                def subscribe: (*untyped a) ?{ -> untyped } -> Integer
         | 
| 9 | 
            +
                def subscribe: (*untyped a) ?{ (untyped) -> untyped } -> Integer
         | 
| 10 10 | 
             
                def unsubscribe: (untyped name) -> untyped
         | 
| 11 11 | 
             
                def push: (*untyped items) -> untyped
         | 
| 12 12 | 
             
                alias << push
         | 
| @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            # Added only to satisfy the Steep requirements. Not 100% reliable.
         | 
| 2 | 
            +
            module Faye
         | 
| 3 | 
            +
              class WebSocket
         | 
| 4 | 
            +
                module API
         | 
| 5 | 
            +
                  CONNECTING: Integer
         | 
| 6 | 
            +
                  OPEN: Integer
         | 
| 7 | 
            +
                  CLOSING: Integer
         | 
| 8 | 
            +
                  CLOSED: Integer
         | 
| 9 | 
            +
                  CLOSE_TIMEOUT: Integer
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  @driver: untyped
         | 
| 12 | 
            +
                  @ping: nil
         | 
| 13 | 
            +
                  @ping_id: Integer
         | 
| 14 | 
            +
                  @stream: nil
         | 
| 15 | 
            +
                  @proxy: nil
         | 
| 16 | 
            +
                  @ping_timer: nil
         | 
| 17 | 
            +
                  @close_timer: nil
         | 
| 18 | 
            +
                  @close_params: [String, Integer]?
         | 
| 19 | 
            +
                  @onerror: nil
         | 
| 20 | 
            +
                  @onclose: nil
         | 
| 21 | 
            +
                  @onmessage: nil
         | 
| 22 | 
            +
                  @onopen: nil
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  attr_reader url: untyped
         | 
| 25 | 
            +
                  attr_reader ready_state: Integer
         | 
| 26 | 
            +
                  attr_reader buffered_amount: Integer
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  def initialize: (?Hash[untyped, untyped] options) -> void
         | 
| 29 | 
            +
                  def write: (untyped data) -> untyped
         | 
| 30 | 
            +
                  def send: (untyped message) -> false
         | 
| 31 | 
            +
                  def ping: (?String message) -> false
         | 
| 32 | 
            +
                  def close: (?nil code, ?nil reason) -> untyped
         | 
| 33 | 
            +
                  def protocol: -> String
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  private
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def open: -> nil
         | 
| 38 | 
            +
                  def receive_message: (untyped data) -> nil
         | 
| 39 | 
            +
                  def emit_error: (untyped message) -> nil
         | 
| 40 | 
            +
                  def begin_close: (String reason, Integer code, ?Hash[untyped, untyped] options) -> nil
         | 
| 41 | 
            +
                  def finalize_close: -> nil
         | 
| 42 | 
            +
                  def parse: (untyped data) -> untyped
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         | 
| @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            # Added only to satisfy the Steep requirements. Not 100% reliable.
         | 
| 2 | 
            +
            module Faye
         | 
| 3 | 
            +
              class WebSocket
         | 
| 4 | 
            +
                class Client
         | 
| 5 | 
            +
                  DEFAULT_PORTS: Hash[String, Integer]
         | 
| 6 | 
            +
                  SECURE_PROTOCOLS: [String, String]
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  include EventEmitter
         | 
| 9 | 
            +
                  include API
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  @url: untyped
         | 
| 12 | 
            +
                  @endpoint: untyped
         | 
| 13 | 
            +
                  @origin_tls: Hash[untyped, untyped]
         | 
| 14 | 
            +
                  @socket_tls: Hash[untyped, untyped]
         | 
| 15 | 
            +
                  @driver: bot
         | 
| 16 | 
            +
                  @proxy: nil
         | 
| 17 | 
            +
                  @ssl_verifier: untyped
         | 
| 18 | 
            +
                  @stream: untyped
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def initialize: (untyped url, ?Array[String] protocols, ?Hash[untyped, untyped] options) -> void
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  private
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def configure_proxy: (Hash[untyped, untyped] proxy) -> nil
         | 
| 25 | 
            +
                  def start_tls: (untyped uri, Hash[untyped, untyped] options) -> nil
         | 
| 26 | 
            +
                  def on_connect: (untyped stream) -> untyped
         | 
| 27 | 
            +
                  def on_network_error: (nil error) -> untyped
         | 
| 28 | 
            +
                  def ssl_verify_peer: (untyped cert) -> untyped
         | 
| 29 | 
            +
                  def ssl_handshake_completed: -> untyped
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  module Connection
         | 
| 32 | 
            +
                    attr_accessor parent: bot
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    def connection_completed: -> untyped
         | 
| 35 | 
            +
                    def ssl_verify_peer: (untyped cert) -> untyped
         | 
| 36 | 
            +
                    def ssl_handshake_completed: -> untyped
         | 
| 37 | 
            +
                    def receive_data: (untyped data) -> untyped
         | 
| 38 | 
            +
                    def unbind: (?nil error) -> untyped
         | 
| 39 | 
            +
                    def write: (untyped data) -> nil
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
            end
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            # Added only to satisfy the Steep requirements. Not 100% reliable.
         | 
| 2 | 
            +
            module Faye
         | 
| 3 | 
            +
              class WebSocket
         | 
| 4 | 
            +
                ADAPTERS: Hash[String, :Goliath | :Rainbows | :Thin]
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                @url: String
         | 
| 7 | 
            +
                @driver_started: false
         | 
| 8 | 
            +
                @stream: Stream
         | 
| 9 | 
            +
                @driver: bot
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def self.determine_url: (untyped env, ?[String, String] schemes) -> String
         | 
| 12 | 
            +
                def self.ensure_reactor_running: -> nil
         | 
| 13 | 
            +
                def self.load_adapter: (untyped backend) -> bool?
         | 
| 14 | 
            +
                def self.secure_request?: (untyped env) -> bool
         | 
| 15 | 
            +
                def self.websocket?: (untyped env) -> untyped
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                attr_reader env: untyped
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def initialize: (untyped env, ?nil protocols, ?Hash[untyped, untyped] options) -> void
         | 
| 20 | 
            +
                def start_driver: -> nil
         | 
| 21 | 
            +
                def rack_response: -> [Integer, Hash[untyped, untyped], Array[untyped]]
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                class Stream
         | 
| 24 | 
            +
                  @socket_object: bot
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  def fail: -> untyped
         | 
| 27 | 
            +
                  def receive: (untyped data) -> untyped
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: nostr
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.5.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Wilson Silva
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023- | 
| 11 | 
            +
            date: 2023-11-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bech32
         | 
| @@ -16,28 +16,28 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '1. | 
| 19 | 
            +
                    version: '1.4'
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: '1. | 
| 26 | 
            +
                    version: '1.4'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: bip-schnorr
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: '0. | 
| 33 | 
            +
                    version: '0.6'
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: '0. | 
| 40 | 
            +
                    version: '0.6'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: ecdsa
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -226,14 +226,14 @@ dependencies: | |
| 226 226 | 
             
                requirements:
         | 
| 227 227 | 
             
                - - "~>"
         | 
| 228 228 | 
             
                  - !ruby/object:Gem::Version
         | 
| 229 | 
            -
                    version: ' | 
| 229 | 
            +
                    version: '6.4'
         | 
| 230 230 | 
             
              type: :development
         | 
| 231 231 | 
             
              prerelease: false
         | 
| 232 232 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 233 233 | 
             
                requirements:
         | 
| 234 234 | 
             
                - - "~>"
         | 
| 235 235 | 
             
                  - !ruby/object:Gem::Version
         | 
| 236 | 
            -
                    version: ' | 
| 236 | 
            +
                    version: '6.4'
         | 
| 237 237 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 238 238 | 
             
              name: rack
         | 
| 239 239 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -254,28 +254,28 @@ dependencies: | |
| 254 254 | 
             
                requirements:
         | 
| 255 255 | 
             
                - - "~>"
         | 
| 256 256 | 
             
                  - !ruby/object:Gem::Version
         | 
| 257 | 
            -
                    version: '13. | 
| 257 | 
            +
                    version: '13.1'
         | 
| 258 258 | 
             
              type: :development
         | 
| 259 259 | 
             
              prerelease: false
         | 
| 260 260 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 261 261 | 
             
                requirements:
         | 
| 262 262 | 
             
                - - "~>"
         | 
| 263 263 | 
             
                  - !ruby/object:Gem::Version
         | 
| 264 | 
            -
                    version: '13. | 
| 264 | 
            +
                    version: '13.1'
         | 
| 265 265 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 266 266 | 
             
              name: rbs
         | 
| 267 267 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 268 268 | 
             
                requirements:
         | 
| 269 269 | 
             
                - - "~>"
         | 
| 270 270 | 
             
                  - !ruby/object:Gem::Version
         | 
| 271 | 
            -
                    version: ' | 
| 271 | 
            +
                    version: '3.3'
         | 
| 272 272 | 
             
              type: :development
         | 
| 273 273 | 
             
              prerelease: false
         | 
| 274 274 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 275 275 | 
             
                requirements:
         | 
| 276 276 | 
             
                - - "~>"
         | 
| 277 277 | 
             
                  - !ruby/object:Gem::Version
         | 
| 278 | 
            -
                    version: ' | 
| 278 | 
            +
                    version: '3.3'
         | 
| 279 279 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 280 280 | 
             
              name: rspec
         | 
| 281 281 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -296,14 +296,14 @@ dependencies: | |
| 296 296 | 
             
                requirements:
         | 
| 297 297 | 
             
                - - "~>"
         | 
| 298 298 | 
             
                  - !ruby/object:Gem::Version
         | 
| 299 | 
            -
                    version: '1. | 
| 299 | 
            +
                    version: '1.57'
         | 
| 300 300 | 
             
              type: :development
         | 
| 301 301 | 
             
              prerelease: false
         | 
| 302 302 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 303 303 | 
             
                requirements:
         | 
| 304 304 | 
             
                - - "~>"
         | 
| 305 305 | 
             
                  - !ruby/object:Gem::Version
         | 
| 306 | 
            -
                    version: '1. | 
| 306 | 
            +
                    version: '1.57'
         | 
| 307 307 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 308 308 | 
             
              name: rubocop-rake
         | 
| 309 309 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -324,14 +324,14 @@ dependencies: | |
| 324 324 | 
             
                requirements:
         | 
| 325 325 | 
             
                - - '='
         | 
| 326 326 | 
             
                  - !ruby/object:Gem::Version
         | 
| 327 | 
            -
                    version: '2. | 
| 327 | 
            +
                    version: '2.25'
         | 
| 328 328 | 
             
              type: :development
         | 
| 329 329 | 
             
              prerelease: false
         | 
| 330 330 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 331 331 | 
             
                requirements:
         | 
| 332 332 | 
             
                - - '='
         | 
| 333 333 | 
             
                  - !ruby/object:Gem::Version
         | 
| 334 | 
            -
                    version: '2. | 
| 334 | 
            +
                    version: '2.25'
         | 
| 335 335 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 336 336 | 
             
              name: simplecov
         | 
| 337 337 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -366,14 +366,14 @@ dependencies: | |
| 366 366 | 
             
                requirements:
         | 
| 367 367 | 
             
                - - "~>"
         | 
| 368 368 | 
             
                  - !ruby/object:Gem::Version
         | 
| 369 | 
            -
                    version: '1. | 
| 369 | 
            +
                    version: '1.6'
         | 
| 370 370 | 
             
              type: :development
         | 
| 371 371 | 
             
              prerelease: false
         | 
| 372 372 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 373 373 | 
             
                requirements:
         | 
| 374 374 | 
             
                - - "~>"
         | 
| 375 375 | 
             
                  - !ruby/object:Gem::Version
         | 
| 376 | 
            -
                    version: '1. | 
| 376 | 
            +
                    version: '1.6'
         | 
| 377 377 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 378 378 | 
             
              name: typeprof
         | 
| 379 379 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -452,45 +452,103 @@ files: | |
| 452 452 | 
             
            - README.md
         | 
| 453 453 | 
             
            - Rakefile
         | 
| 454 454 | 
             
            - Steepfile
         | 
| 455 | 
            +
            - docs/.gitignore
         | 
| 456 | 
            +
            - docs/.vitepress/config.mjs
         | 
| 457 | 
            +
            - docs/README.md
         | 
| 458 | 
            +
            - docs/api-examples.md
         | 
| 459 | 
            +
            - docs/bun.lockb
         | 
| 460 | 
            +
            - docs/common-use-cases/bech32-encoding-and-decoding-(NIP-19).md
         | 
| 461 | 
            +
            - docs/core/client.md
         | 
| 462 | 
            +
            - docs/core/keys.md
         | 
| 463 | 
            +
            - docs/core/user.md
         | 
| 464 | 
            +
            - docs/events.md
         | 
| 465 | 
            +
            - docs/events/contact-list.md
         | 
| 466 | 
            +
            - docs/events/encrypted-direct-message.md
         | 
| 467 | 
            +
            - docs/events/recommend-server.md
         | 
| 468 | 
            +
            - docs/events/set-metadata.md
         | 
| 469 | 
            +
            - docs/events/text-note.md
         | 
| 470 | 
            +
            - docs/getting-started/installation.md
         | 
| 471 | 
            +
            - docs/getting-started/overview.md
         | 
| 472 | 
            +
            - docs/implemented-nips.md
         | 
| 473 | 
            +
            - docs/index.md
         | 
| 474 | 
            +
            - docs/markdown-examples.md
         | 
| 475 | 
            +
            - docs/package.json
         | 
| 476 | 
            +
            - docs/relays/connecting-to-a-relay.md
         | 
| 477 | 
            +
            - docs/relays/publishing-events.md
         | 
| 478 | 
            +
            - docs/relays/receiving-events.md
         | 
| 479 | 
            +
            - docs/subscriptions/creating-a-subscription.md
         | 
| 480 | 
            +
            - docs/subscriptions/deleting-a-subscription.md
         | 
| 481 | 
            +
            - docs/subscriptions/filtering-subscription-events.md
         | 
| 482 | 
            +
            - docs/subscriptions/updating-a-subscription.md
         | 
| 455 483 | 
             
            - lib/nostr.rb
         | 
| 484 | 
            +
            - lib/nostr/bech32.rb
         | 
| 456 485 | 
             
            - lib/nostr/client.rb
         | 
| 457 486 | 
             
            - lib/nostr/client_message_type.rb
         | 
| 458 487 | 
             
            - lib/nostr/crypto.rb
         | 
| 488 | 
            +
            - lib/nostr/errors.rb
         | 
| 489 | 
            +
            - lib/nostr/errors/error.rb
         | 
| 490 | 
            +
            - lib/nostr/errors/invalid_hrp_error.rb
         | 
| 491 | 
            +
            - lib/nostr/errors/invalid_key_format_error.rb
         | 
| 492 | 
            +
            - lib/nostr/errors/invalid_key_length_error.rb
         | 
| 493 | 
            +
            - lib/nostr/errors/invalid_key_type_error.rb
         | 
| 494 | 
            +
            - lib/nostr/errors/key_validation_error.rb
         | 
| 459 495 | 
             
            - lib/nostr/event.rb
         | 
| 460 496 | 
             
            - lib/nostr/event_kind.rb
         | 
| 461 497 | 
             
            - lib/nostr/events/encrypted_direct_message.rb
         | 
| 462 498 | 
             
            - lib/nostr/filter.rb
         | 
| 499 | 
            +
            - lib/nostr/key.rb
         | 
| 463 500 | 
             
            - lib/nostr/key_pair.rb
         | 
| 464 501 | 
             
            - lib/nostr/keygen.rb
         | 
| 502 | 
            +
            - lib/nostr/private_key.rb
         | 
| 503 | 
            +
            - lib/nostr/public_key.rb
         | 
| 465 504 | 
             
            - lib/nostr/relay.rb
         | 
| 505 | 
            +
            - lib/nostr/relay_message_type.rb
         | 
| 466 506 | 
             
            - lib/nostr/subscription.rb
         | 
| 467 507 | 
             
            - lib/nostr/user.rb
         | 
| 468 508 | 
             
            - lib/nostr/version.rb
         | 
| 469 509 | 
             
            - nostr.gemspec
         | 
| 470 510 | 
             
            - sig/nostr.rbs
         | 
| 511 | 
            +
            - sig/nostr/bech32.rbs
         | 
| 471 512 | 
             
            - sig/nostr/client.rbs
         | 
| 472 513 | 
             
            - sig/nostr/client_message_type.rbs
         | 
| 473 514 | 
             
            - sig/nostr/crypto.rbs
         | 
| 515 | 
            +
            - sig/nostr/errors/error.rbs
         | 
| 516 | 
            +
            - sig/nostr/errors/invalid_hrb_error.rbs
         | 
| 517 | 
            +
            - sig/nostr/errors/invalid_key_format_error.rbs
         | 
| 518 | 
            +
            - sig/nostr/errors/invalid_key_length_error.rbs
         | 
| 519 | 
            +
            - sig/nostr/errors/invalid_key_type_error.rbs
         | 
| 520 | 
            +
            - sig/nostr/errors/key_validation_error.rbs
         | 
| 474 521 | 
             
            - sig/nostr/event.rbs
         | 
| 475 522 | 
             
            - sig/nostr/event_kind.rbs
         | 
| 476 523 | 
             
            - sig/nostr/events/encrypted_direct_message.rbs
         | 
| 477 524 | 
             
            - sig/nostr/filter.rbs
         | 
| 525 | 
            +
            - sig/nostr/key.rbs
         | 
| 478 526 | 
             
            - sig/nostr/key_pair.rbs
         | 
| 479 527 | 
             
            - sig/nostr/keygen.rbs
         | 
| 528 | 
            +
            - sig/nostr/private_key.rbs
         | 
| 529 | 
            +
            - sig/nostr/public_key.rbs
         | 
| 480 530 | 
             
            - sig/nostr/relay.rbs
         | 
| 531 | 
            +
            - sig/nostr/relay_message_type.rbs
         | 
| 481 532 | 
             
            - sig/nostr/subscription.rbs
         | 
| 482 533 | 
             
            - sig/nostr/user.rbs
         | 
| 534 | 
            +
            - sig/vendor/bech32.rbs
         | 
| 535 | 
            +
            - sig/vendor/bech32/nostr/entity.rbs
         | 
| 536 | 
            +
            - sig/vendor/bech32/nostr/nip19.rbs
         | 
| 537 | 
            +
            - sig/vendor/bech32/segwit_addr.rbs
         | 
| 483 538 | 
             
            - sig/vendor/ecsda/group/secp256k1.rbs
         | 
| 484 539 | 
             
            - sig/vendor/event_emitter.rbs
         | 
| 485 540 | 
             
            - sig/vendor/event_machine.rbs
         | 
| 486 541 | 
             
            - sig/vendor/event_machine/channel.rbs
         | 
| 542 | 
            +
            - sig/vendor/faye/websocket.rbs
         | 
| 543 | 
            +
            - sig/vendor/faye/websocket/api.rbs
         | 
| 544 | 
            +
            - sig/vendor/faye/websocket/client.rbs
         | 
| 487 545 | 
             
            - sig/vendor/schnorr.rbs
         | 
| 488 | 
            -
            homepage: https:// | 
| 546 | 
            +
            homepage: https://nostr-ruby.com/
         | 
| 489 547 | 
             
            licenses:
         | 
| 490 548 | 
             
            - MIT
         | 
| 491 549 | 
             
            metadata:
         | 
| 492 550 | 
             
              rubygems_mfa_required: 'true'
         | 
| 493 | 
            -
              homepage_uri: https:// | 
| 551 | 
            +
              homepage_uri: https://nostr-ruby.com/
         | 
| 494 552 | 
             
              source_code_uri: https://github.com/wilsonsilva/nostr
         | 
| 495 553 | 
             
              changelog_uri: https://github.com/wilsonsilva/nostr/blob/main/CHANGELOG.md
         | 
| 496 554 | 
             
            post_install_message:
         | 
| @@ -508,7 +566,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 508 566 | 
             
                - !ruby/object:Gem::Version
         | 
| 509 567 | 
             
                  version: '0'
         | 
| 510 568 | 
             
            requirements: []
         | 
| 511 | 
            -
            rubygems_version: 3.4. | 
| 569 | 
            +
            rubygems_version: 3.4.20
         | 
| 512 570 | 
             
            signing_key:
         | 
| 513 571 | 
             
            specification_version: 4
         | 
| 514 572 | 
             
            summary: Client and relay implementation of the Nostr protocol.
         |