What's Changed
- docs: add Linux DNS troubleshooting by @Anshumancanrock in #397
- Fixing TODO in web-app-factory.ts. Remove unsafe-inline and implement script nonces. by @Mohit-Davar in #394
- fix: set event_deduplication in seed script by @kanishka0411 in #386
- chore: update doc for start script and remove old script by @kartikangiras in #389
- fix(docker): pin postgres image and use named volume by @CKodidela in #393
- feat: add DNS pre-flight check to verify Docker connectivity before s… by @YashIIT0909 in #398
- docs: add Redis ACL configuration guide for production deployments by @saniddhyaDubey in #408
- fix(ci): update artifact actions to v4 for unit/integration coverage … by @Priyanshubhartistm in #400
- fix: disable Sonarcloud for external PRs by @Justxd22 in #420
- docs: add env.example (#413) by @Justxd22 in #415
- add NIP-62 vanish event support by @vikashsiwach in #418
- fix(ci): correct commit message for NIP-62 vanish support by @phoenix-server in #430
- feat: Import .jsonl file with events into the events table by @Anshumancanrock in #414
- Added expires_at filter in message pipeline by @kushagra0902 in #403
- chore: upgrade to node.js 24 LTS, update dependencies and improve type definitions by @Mahmoud-s-Khedr in #419
- Fix: nip01 replaceable tiebreaker by @YashIIT0909 in #416
- chore: add knip and remove dead code by @Anshumancanrock in #437
- feat: add nginx reverse proxy to docker-compose by @kanishka0411 in #423
- chore: update dependencies for express, body-parser, and js-yaml by @Mahmoud-s-Khedr in #442
- chore: decouple knip from default lint script by @CKodidela in #460
- fix(deps): upgrade axios to 1.15.0 to fix CVE-2025-62718 by @khadar1020 in #466
- feat: implement NIP-17 & NIP-44 v2 for Modern Direct Messages by @CKodidela in #458
- fix(router): NIP-11 being served only on root instead of relay path by @sagar-h007 in #399
- chore: update eslint configuration and dependencies by @Mahmoud-s-Khedr in #448
- test: update unit tests for NIP-01 compliance changes by @phoenix-server in #480
- fix: properly await worker teardown in integration tests to prevent open handles by @phoenix-server in #481
- feat: add opt-in event retention purge (#359) by @Justxd22 in #412
- fix: update Dockerfile to run database migrations in CMD by @kartikangiras in #422
- FIXES TODO in callbacks: implement strict validation for all payment callbacks by @Mohit-Davar in #426
- chore(deps): bump @tootallnate/once, semantic-release, @semantic-release/github and @semantic-release/npm by @dependabot[bot] in #475
- fix: serve real home page instead of redirecting, add templated pages by @CKodidela in #409
- Implementes TODO in payments-service.ts. convert user admission to postgres stored function by @Mohit-Davar in #428
- test: add missing unit tests for message factory functions by @d1vyanshu-kumar in #470
- refactor: migrate validation from Joi to Zod by @CKodidela in #484
- chore(deps): bump minimatch and mocha by @dependabot[bot] in #479
- chore(deps): bump lodash from 4.17.21 to 4.18.1 by @dependabot[bot] in #472
- chore(deps): bump follow-redirects from 1.15.11 to 1.16.0 by @dependabot[bot] in #471
- test: set minimum unit test coverage thresholds by @phoenix-server in #486
- feat: Export events to JSON Lines by @Anshumancanrock in #451
- Feat: addition of nip-05 verification (issue #261) by @archief2910 in #463
- feat: vanish optimization by @vikashsiwach in #446
- test: add unit tests for WebSocket and Redis adapters by @abhinavrathee in #495
- feat: add security load test and regression tooling by @YashIIT0909 in #462
- test: add callback controller specs by @Anshumancanrock in #494
- Implement caching for user admission check by @Mohit-Davar in #498
- fix: OpenNode callback accepts unauthenticated requests by @Anshumancanrock in #454
- test: add unit tests for MaintenanceWorker and PaymentsService by @Mahmoud-s-Khedr in #440
- docs: sort settings list A-Z by @Anshumancanrock in #501
- chore: inline 5 dependencies, removing external packages by @phoenix-server in #500
- feat: i2p support addition (#35) by @archief2910 in #499
- chore: replace semantic-release with changesets by @phoenix-server in #497
- docs: update README for NIP-05 and NIP-44 by @radosvet93 in #518
- feat: add NIP-13 Proof of Work enforcement scenarios and implementation by @Mahmoud-s-Khedr in #513
- feat: implement EWMA rate limiter with strategy support (#404) by @saniddhyaDubey in #476
- feat: NIP-03 opentimestamps support (#105) by @archief2910 in #515
- fix: Multiple tag selections for dedup key in parameterized evetns by @kushagra0902 in #525
- test(nip-11): add integration tests and fix max_filters mapping by @kanishka0411 in #527
- refactor: use exact pubkey matching for whitelist/blacklist by @vikashsiwach in #524
- feat: queries benchmarking and optimization (#68) by @archief2910 in #534
- test: add NIP-17 gift wrap integration tests by @Anshumancanrock in #529
- chore: migrate to pino 456 by @Priyanshubhartistm in #511
- feat: support compression when importing/exporting events (gzip/xz) by @Anshumancanrock in #514
- fix: restore and update CONFIGURATION.md, remove duplicate changesets by @saniddhyaDubey in #538
- test(integration): add NIP-62 vanish tests and fix test enviroment by @vikashsiwach in #537
- fix(ci): enable automatic Release PR creation in changesets workflow by @phoenix-server in #543
- fix: only trust forwarded IP header from configured trusted proxies by @kanishka0411 in #493
- docs: add NIP-62 to supported features list by @vikashsiwach in #544
- docs: remove Sonarqube badge and fix Coveralls badge by @CKodidela in #550
- feat: add NIP-45 Event Count support by @a-khushal in #522
- feat: support uppercase tag filters (#A-Z) in filter schema by @CKodidela in #548
- test(unit): add InvoiceRepository and UserRepository unit tests by @CKodidela in #551
- test(integration): add integration tests for NIP-02 contact lists by @vikashsiwach in #552
- test: add NIP-40 standalone expiration integration coverage by @Priyanshubhartistm in #528
- fix: add tie-breaker to upsertMany by @Anshumancanrock in #553
- docs: deduplicate dev setup from README, revamp CONTRIBUTING with fairness policy and husky guidance by @cameri with @Copilot in #554
- feat: complete NIP-11 relay info parity by @a-khushal in #557
- test: add NIP-22 created_at integration coverage by @Priyanshubhartistm in #547
- fix(ci): version and publish changeset releases by @cameri in #559
- chore(ci): set git config and update package lock by @cameri in #561
- chore(ci): provide attribution on releases by @cameri in #563
- fix: changeset release by @cameri in #564
- feat: support subject tags in text notes and add NIP-14 support coverage by @a-khushal in #566
- chore: migrate npm to pnpm across CI, Docker, and scripts by @Anshumancanrock in #555
- fix: expire stale LNbits pending invoices by @kanishka0411 in #575
- fix: mirror limits optional chaining by @tharu-jwd in #568
- feat: migrate nostream scripts to unified CLI/TUI by @Mahmoud-s-Khedr in #574
- ci: add CodeQL workflow by @cameri in #558
- chore(deps-dev): bump uuid from 8.3.2 to 14.0.0 by @dependabot[bot] in #572
- fix: allow empty generic tag filter values by @kanishka0411 in #583
- fix: close dead connections even if they have active subscriptions by @tharu-jwd in #438
- feat: add NWC payments processor (#323) by @Justxd22 in #539
- test: add NIP-04 integration coverage for encrypted direct messages by @Priyanshubhartistm in #562
- feat: add NIP-65 (Relay List Metadata) support by @CKodidela in #585
- fix: use timing-safe HMAC comparison in Nodeless callback controller by @Anshumancanrock in #584
- fix: return HTML for browser Accept headers on root route (#532) by @Justxd22 in #546
- fix: skip Redis auth when credentials are unset with unit test (#541) by @Justxd22 in #545
- feat: support geohash prefix matching for #g filters by @kanishka0411 in #586
- feat: Add k6 connection and message rate limiter tests by @saniddhyaDubey in #556
- fix: add husky install fallback by @Priyanshubhartistm in #591
- feat: add Marmot Protocol relay support (MIPs 00-03) by @CKodidela in #602
- feat: add nip-25 support by @CKodidela in #589
- fix: maxlimit check to subscription event requests by @saniddhyaDubey in #600
- fix: update serialize-javascript to >=7.0.3 by @Anshumancanrock in #592
- fix: prevent rate limiter bypass via Lua atomic script by @YashIIT0909 in #593
- fix: docker availability precheck by @CKodidela in #596
- test: add maintenance-service-factory unit tests by @phoenix-server in #604
- refactor: guard callback routes with reusable middleware that checks the payment processor by @Anshumancanrock in #597
- test: add maintenance-worker-factory unit tests by @phoenix-server in #606
- chore(ci): skip expensive jobs on non-source changes by @cameri in #565
- fix: check payments.enabled in callback route middleware by @Anshumancanrock in #616
- chore(deps): bump axios from 1.15.1 to 1.15.2 by @dependabot[bot] in #613
- feat: add NIP-42 client authentication by @Anshumancanrock in #622
- feat: wot#1 config by @saniddhyaDubey in #623
- test: optimize NIP-44 unit tests by @Ferryx349 in #624
- feat: Add Nip42 handler by @Anshumancanrock in #629
- refactor(http): remove deprecated remote_ip_header fallback by @Ferryx349 in #628
- refactor: simplify EventRepository query/purge complexity by @Ferryx349 in #625
- test(integration): verify response content-types across HTTP routes by @Ferryx349 in #627
- chore(deps): bump fast-uri from 3.1.0 to 3.1.2 by @dependabot[bot] in #617
- chore(deps): bump ws from 8.20.0 to 8.20.1 by @dependabot[bot] in #618
- chore(deps): bump uuid from 8.3.2 to 14.0.0 by @dependabot[bot] in #620
- chore(deps): bump axios from 1.15.2 to 1.16.0 by @dependabot[bot] in #630
- feat: add NIP-70 protected event detection util by @Anshumancanrock in #643
- chore: release new version 🚀 by @cameri in #560
New Contributors
- @Anshumancanrock made their first contribution in #397
- @Mohit-Davar made their first contribution in #394
- @kanishka0411 made their first contribution in #386
- @kartikangiras made their first contribution in #389
- @CKodidela made their first contribution in #393
- @YashIIT0909 made their first contribution in #398
- @saniddhyaDubey made their first contribution in #408
- @Justxd22 made their first contribution in #420
- @vikashsiwach made their first contribution in #418
- @phoenix-server made their first contribution in #430
- @kushagra0902 made their first contribution in #403
- @Mahmoud-s-Khedr made their first contribution in #419
- @khadar1020 made their first contribution in #466
- @sagar-h007 made their first contribution in #399
- @d1vyanshu-kumar made their first contribution in #470
- @archief2910 made their first contribution in #463
- @abhinavrathee made their first contribution in #495
- @radosvet93 made their first contribution in #518
- @a-khushal made their first contribution in #522
- @tharu-jwd made their first contribution in #568
- @Ferryx349 made their first contribution in #624
Full Changelog: v2.1.0...v3.0.0