All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
0.7.0 2024-04-13
- Added the
Nostr::Client::Logger
class to log connection events, messages sent and received, errors, and connection closures. - Added the
Nostr::Client::ColorLogger
class to log events in color using ANSI escape codes. - Added the
Nostr::Client::PlainLogger
class to log events without color coding. - Added Architecture Decision Records (ADRs) to document the decision process for logging functionality.
- Added a new common use case document for logging and debugging.
- Updated the
Nostr::Client
class to use theColorLogger
by default for logging client interactions with relays. - Updated the
Nostr::Client#connect
method to emit a:send
event when sending a message. - Updated the
Nostr::Client#on
method to pass therelay
parameter to the:connect
event handler. - Updated bun to version
1.1.3
(was1.0.30
). - Updated the gem
json
to version2.7
(was2.6
). - Updated the gem
mermaid
to version10.9
(was10.6
). - Updated the gem
rubocop-rspec
to version2.29
(was2.27
). - Updated the gem
steep
to version1.7.dev3
(was1.6
). - Updated the gem
vitepress
to version1.1
(was1.0.0-rc.25
). - Updated the gem
vitepress-plugin-mermaid
to version2.0.16
(was2.0.15
). - Updated the error message in
Nostr::InvalidSignatureTypeError
to provide more detail.
- Fixed a type-checking issue in
Nostr::Event#verify_signature
by removing a workaround after the steep gem author, @soutaro resolved the problem I reported.
0.6.0 2024-03-15
- Added Architecture Decision Records (ADRs) to document architectural decisions
- Added the
Signature
class to fix the primitive obsession with signatures and to make it easier to work with them - Added
valid_sig?
andcheck_sig!
to theCrypto
class to verify whether an event's signature is valid - Added
sign_message
to theCrypto
class to sign a message - Added
verify_signature?
to theEvent
class to verify whether an event's signature is valid - Added
#to_ary
to theKeyPair
class to enable keypair destructuring - Added RBS types for
schnorr
- Updated the required Ruby version to
3.3.0
(was3.2.0
) - Updated the gem
dotenv
to version3.1
(was2.8
) - Updated the gem
bip-schnorr
to version0.7
(was0.6
) - Updated the gem
overcommit
to version0.63
(was0.59
) - Updated the gem
rbs
to version3.4
(was3.3
) - Updated the gem
rspec
to version3.13
(was3.12
) - Updated the gem
rspec-rubocop
to version2.27
(was2.25
) - Updated the gem
rubocop
to version1.62
(was1.57
)
- Fixed a typo in the README (
generate_keypair
->generate_key_pair
) - Fixed a typo in the YARD documentation of
Nostr::Key#initialize
(ValidationError
->KeyValidationError
) - Fixed YARD example rendering issues in
InvalidKeyFormatError#initialize
,InvalidKeyLengthError#initialize
,InvalidKeyTypeError#initialize
,Event#initialize
,EncryptedDirectMessage#initialize
andFilter#to_h
0.5.0 2023-11-20
- Added relay message type enums
Nostr::RelayMessageType
- Compliance with NIP-19 - bech32-formatted strings
- Added
Nostr::PrivateKey
andNostr::PublicKey
to represent private and public keys, respectively - Added a validation of private and public keys
- Added an ability to convert keys to and from Bech32 format
- Added RBS types for
faye-websocket
andbech32
- Set the gem's homepage to
https://nostr-ruby.com/
- Updated the filter's documentation to reflect the removal of prefix matching
- Updated the subscription's id documentation to reflect the changes in the protocol definition
- Updated
Nostr::PrivateKey
andNostr::PublicKey
internally, instead of Strings - Updated the gem
bip-schnorr
to version0.6
(was0.4
) - Updated the gem
puma
to version6.4
(was6.3
) - Updated the gem
rake
to version13.1
(was13.0
) - Updated the gem
rbs
to version3.3
(was2.8
) - Updated the gem
rubocop
to version1.57
(was1.42
) - Updated the gem
rubocop-rspec
to version2.25
(was2.16
) - Updated the gem
steep
to version1.6
(was1.4
)
- Fixed the RBS type of the constant
Nostr::Crypto::BN_BASE
- Fixed the return type of
Nostr::Crypto#decrypt_text
when given an invalid ciphertext - Fixed the RBS type of
Nostr::Filter#to_h
,Nostr::Filter#e
andNostr::Filter#p
- Fixed the RBS types of
EventEmitter
andEventMachine::Channel
- Fixed the generation of private keys
0.4.0 - 2023-02-25
- Removed
EventFragment
class. TheEvent
class is no longer a Value Object. In other words, it is no longer immutable and it may be invalid by not having attributesid
orsig
. TheEventFragment
abstraction, along with the principles of immutability and was a major source of internal complexity as I needed to scale the codebase.
- Client compliance with NIP-04 (encrypted direct messages)
- Extracted the cryptographic concerns into a
Crypto
class. - Added the setters
Event#id=
andEvent#sig=
- Added a method on the event class to sign events (
Event#sign
) - Added a missing test for
EventKind::CONTACT_LIST
- Added two convenience methods to append event and pubkey references to an event's tags
add_event_reference
andadd_pubkey_reference
- Fixed the generation of public keys
- Fixed the RBS signature of
User#create_event
0.3.0 - 2023-02-15
- Client compliance wth NIP-02 (manage contact lists)
- RBS type checking using Steep and TypeProf
- Fixed a documentation typo
- Fixed a documentation error regarding the receiving of messages via websockets
0.2.0 - 2023-01-12
- NIP-01 compliant client
0.1.0 - 2023-01-06
- Initial release