• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

cameri / nostream
78%

Build:
DEFAULT BRANCH: main
Repo Added 24 Dec 2022 08:50PM UTC
Files 334
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH main
branch: main
CHANGE BRANCH
x
Reset
  • main
  • 109-error-unable-to-handle-message-syntaxerror-unexpected-end-of-json-input
  • 110-error-error-value-1672295751103-is-out-of-range-for-type-integer
  • 112-bug-unit-tests-fail-with-cannot-find-module-sinon
  • 117-make-local-dev-ready-for-connections
  • 129-bug-nip-09-kind=5-deletion-bug
  • 130-add-pay-to-relay
  • 137-doc-tor-hidden-service
  • 140-bug-typeerror-cannot-read-properties-of-undefined-reading-__knexuid
  • 162-support-nip-42
  • 175-bug-railway-app-deployment-issue-settingsyaml-file-missing
  • 193-bug-unable-confirm-invoice
  • 197-request-dynamic-config-store-based-for-settings
  • 255-bug-strange-behavior-with-nip-33-parameterized-replacable-events-and-nip-40-expiration-tag
  • 302-request-allow-lightning-zap-receipts-on-paid-relays
  • 304-support-nodelessio-as-payments-processor
  • 306-bug-lnbits-is-no-longer-working-in-version-123
  • 311-generic-tag-query-should-include-capital-letters
  • 319-unable-to-confirm-invoice
  • 331-bug
  • 343-bug-throws-error-when-receiving-a-replaceable-event-after-its-delete-event
  • 50-add-health-api-endpoint-or-kind
  • 60-use-yaml-for-settings
  • 75-support-nip-40-expiration-timestamps
  • 87-tor-hidden-service-automatic
  • 90-add-support-to-dotenv-files
  • 93-information-about-group-chat-nips-28-not-available
  • ADMIN-CONSOLE-1
  • ADMIN-CONSOLE-2-SSE
  • ADMIN-CONSOLE-2-metrics
  • ADMIN-CONSOLE-2-metrics-handlers
  • Billing
  • NIP-66
  • Settings
  • UI-DASH
  • accelerate_with_event_tags_table
  • add-knip
  • add-nip-42
  • add-tests-001
  • admission-check
  • axios_upgrade
  • bugfix/nip11-relay-url-path
  • cache
  • changeset-release/main
  • changesets-migration
  • chore/actions-lockfile
  • chore/add-changeset-maintenance-worker-factory-tests
  • chore/allow-limit-zero
  • chore/brotli-patched-node
  • chore/bump-axios
  • chore/bump-cucumber-version
  • chore/inline-dependencies
  • chore/optimize-ci-path-filters
  • chore/pnpm-migration
  • chore/remove-nip-26-delegation-support
  • chore/rename_project
  • chore/replace-semantic-release-with-changesets
  • chore/sunset-static-mirroring-worker
  • ci/add-codeql-workflow
  • ci/disable-codeql
  • ci/release-dispatch
  • ci/skip-heavy-on-release-pr
  • copilot/add-dependabot-changeset-workflow
  • copilot/fix-yaml-issues-codeql-workflow
  • copilot/revamp-contributing-workflow
  • dedupFix
  • dependabot/github_actions/dot-github/workflows/actions/download-artifact-4.1.7
  • dependabot/npm_and_yarn/axios-1.15.2
  • dependabot/npm_and_yarn/axios-1.16.0
  • dependabot/npm_and_yarn/axios-1.18.0
  • dependabot/npm_and_yarn/axios-1.20.0
  • dependabot/npm_and_yarn/babel/traverse-7.23.7
  • dependabot/npm_and_yarn/body-parser-1.20.3
  • dependabot/npm_and_yarn/braces-3.0.3
  • dependabot/npm_and_yarn/express-4.19.2
  • dependabot/npm_and_yarn/express-4.20.0
  • dependabot/npm_and_yarn/fast-uri-3.1.2
  • dependabot/npm_and_yarn/follow-redirects-1.15.6
  • dependabot/npm_and_yarn/follow-redirects-1.16.0
  • dependabot/npm_and_yarn/js-yaml-4.2.0
  • dependabot/npm_and_yarn/js-yaml-4.3.2
  • dependabot/npm_and_yarn/js-yaml-5.2.0
  • dependabot/npm_and_yarn/json5-2.2.2
  • dependabot/npm_and_yarn/knex-2.4.0
  • dependabot/npm_and_yarn/lodash-4.18.1
  • dependabot/npm_and_yarn/multi-4afa144cf6
  • dependabot/npm_and_yarn/multi-8794fb37d7
  • dependabot/npm_and_yarn/multi-9f37c16f8f
  • dependabot/npm_and_yarn/multi-cf87d80143
  • dependabot/npm_and_yarn/multi-d1b64f7343
  • dependabot/npm_and_yarn/multi-d66d039ac5
  • dependabot/npm_and_yarn/sideway/formula-3.0.1
  • dependabot/npm_and_yarn/stream-json-3.5.0
  • dependabot/npm_and_yarn/uuid-14.0.0
  • dependabot/npm_and_yarn/word-wrap-1.2.5
  • dependabot/npm_and_yarn/ws-8.20.1
  • dependabot/npm_and_yarn/ws-8.21.0
  • deploy/minimal-bootstrap
  • docs/add-env-template
  • docs/add-nip62-feature
  • docs/configuration-settings-az
  • docs/remove-update-badges
  • export-events
  • factory/001-dependabot-security-bump
  • factory/005-rust-foundation
  • factory/007-storage-lmdb
  • factory/017-frame-budget-settings
  • factory/018-zero-is-invalid
  • factory/022-settings-ceiling
  • factory/029-pg-to-lmdb
  • feat-001
  • feat/421-wipe-events-table-script
  • feat/970-deploy-retry
  • feat/adaptive-pow-pipeline
  • feat/admin-console-theme
  • feat/admin-moderation-634
  • feat/admin-network-health-api
  • feat/admin-network-health-history
  • feat/admin-network-health-panel
  • feat/admin-notification-outbox
  • feat/admin-notifications-api
  • feat/admin-notifications-ui
  • feat/admin-operations
  • feat/admin-trust-automation-919
  • feat/bake-migrations
  • feat/callback-validation
  • feat/closed-rate-limited-hint
  • feat/content-reporting
  • feat/dvm-job-dispatch
  • feat/dvm-job-ingestion
  • feat/dvm-job-persistence
  • feat/dvm-nip89-discovery
  • feat/dvm-worker-registry
  • feat/event-retention-purge-opt-in
  • feat/event-store-backend-setting
  • feat/fix-whitelist-matching
  • feat/geohash-prefix-filters
  • feat/haproxy-blue-green
  • feat/integration-tests-nip-22-timestamp-limits
  • feat/marmot-protocol
  • feat/marmot-protocol-v2
  • feat/minimum-coverage-threshold
  • feat/network-health-mismatch-warnings
  • feat/nginx-docker-compose
  • feat/nip-111
  • feat/nip-25
  • feat/nip-50-search
  • feat/nip01-rate-limit-backoff
  • feat/nip11-parity
  • feat/nip14-subject
  • feat/nip25
  • feat/nip42-restricted-reads
  • feat/nip42-session
  • feat/nip43-invite-cli
  • feat/nip43-invite-codes
  • feat/nip43-invite-requests
  • feat/nip43-join-leave
  • feat/nip45-count
  • feat/nip56-hide-deprioritize
  • feat/nip65
  • feat/nip66-publish-events
  • feat/nip66-v2-advanced-probes
  • feat/nip77-negentropy-core
  • feat/nip77-nip11-advertisement
  • feat/nip77-wire-protocol
  • feat/nip98-admin-auth
  • feat/nip98-http-url
  • feat/nip98-redis-nx
  • feat/nip98-verifier
  • feat/nwc-alby
  • feat/paid-peering-1-ledger
  • feat/paid-peering-2-delivery
  • feat/paid-peering-3-lifecycle
  • feat/peering-auth
  • feat/peering-feeds
  • feat/peering-nip11
  • feat/peering-on-demand
  • feat/peering-on-demand-admin
  • feat/readyz-endpoint
  • feat/settings-db-overrides
  • feat/strfry-packed-events
  • feat/subscription-client-status
  • feat/subscription-data-model
  • feat/subscription-lifecycle
  • feat/subscription-tier-limits
  • feat/uppercase-tag-filters
  • feat/website-deploy
  • feat/website-hero-animation
  • feat/wot#1-config
  • feat/wot#2-service
  • feat/wot-aware-pow-policy
  • feat/wot-graph-service
  • feat/ws-drain
  • feature/105-NIP-03-opentimestamps-support
  • feature/130-add-pay-to-relay-zbd-badge
  • feature/261-NIP-05-verification
  • feature/35-I2P-support-addition
  • feature/68-queries-optimization
  • feature/andre-contrib-guide
  • feature/event-import-export-compression
  • feature/issue-404-ewma-rate-limiter
  • feature/modern-dm-standard
  • feature/nip62-vanish
  • feature/vanish-optimization
  • fix-serialize-javascript
  • fix/1074-admit-serializable
  • fix/532-root-browser-html
  • fix/541-redis-auth-unset-credentials
  • fix/723-rejection-logger-event-id
  • fix/811-validate-rate-limit-period
  • fix/admin-moderation-greptile
  • fix/advertise-nip-13-in-supported-nips
  • fix/aikido-security-sast-173168272-c1q2
  • fix/aikido-security-sast-173168663-vbkk
  • fix/astro-7-2026-11-02
  • fix/banner-plain-stdout
  • fix/batch-tiebreak
  • fix/callback-middleware-check-payments-enabled
  • fix/changeset-release
  • fix/changeset-release-2
  • fix/changeset-release-3
  • fix/changeset-release-4
  • fix/cli-info-event-count-hang
  • fix/cli-secret-hash-roundtrip
  • fix/cli-setup-reject-placeholder-secret
  • fix/commitlint-violation
  • fix/commitlint-violation-2922b9c
  • fix/compose-ip-range
  • fix/csp-ws-http-scheme-mapping
  • fix/db-conn
  • fix/dead-connections-with-subscriptions
  • fix/disable-pr-sonar
  • fix/docker-availability-precheck
  • fix/duplicate-events-on-tag-filter-queries
  • fix/empty-generic-tag-values
  • fix/enforce-max-filter-values
  • fix/event-expiration-validation-allows-zero
  • fix/ewma-key-namespace
  • fix/expiration-tag-type-bug
  • fix/expire-stale-lnbits-invoices
  • fix/home-redirect-302
  • fix/husky-not-found
  • fix/integration-test-hanging-open-handle
  • fix/invoice-default-expiry
  • fix/invoice-page
  • fix/issue-391-upload-artifact
  • fix/issue-598-maxlimit-sub-req
  • fix/knex-aikido-2026-10469
  • fix/knex-aikido-2026-10469-rewrite
  • fix/lnbits-callback-body
  • fix/lnbits-iso-dates
  • fix/mirror-limits-optional-chaining
  • fix/multi-tag-filters
  • fix/nip01-replaceable-tiebreaker
  • fix/nip45-count-tag-filter
  • fix/nip56-report-ingestion-gaps
  • fix/nodeless-hmac-timing-safe-comparison
  • fix/opennode-webhook-validation
  • fix/pin-node-base-images
  • fix/publish-image-push-trigger
  • fix/railway-app
  • fix/rate-limit-period-ms
  • fix/rate-limit-wire
  • fix/rate-limiter
  • fix/rate-limiter-continues-after-hit
  • fix/redis-haskey-missing-await
  • fix/relay-url-validation
  • fix/release-ci-triggering
  • fix/release-image-tags
  • fix/replaceable-event-error-message-empty
  • fix/roll-back-docs
  • fix/root-handler-crash-payments-disabled
  • fix/rsv1_error
  • fix/save-events-from-mirrors
  • fix/secret_env_required
  • fix/settings-write-lock-1039
  • fix/site-deploy-on-relay-release
  • fix/static-settings-error
  • fix/stop-publishing-container-outside-release
  • fix/subscribe-abort-controller
  • fix/subscription-third-party-plan-change
  • fix/trusted-proxy-ip-spoofing-v2
  • fix/ts-buffer-type-errors
  • fix/update-readme-badges
  • fix/update-readme-with-nip-40
  • fix/update-tests-for-nip01-ordering
  • import-json-file
  • integration-test-001
  • issue-432-biome-migration
  • m1
  • m2
  • m3
  • m4
  • maintenance-service-factory-tests
  • migrate-joi-to-zod-v2
  • migrate-to-pino-456
  • nip-66-settings
  • nip42-handler
  • nip66-integration-tests
  • nip66_worker
  • nip70-protected-event-util
  • nip70-reject-protected-events
  • nodeinfo
  • optimisation
  • patch-1
  • perf/issue-469-k6-redis-testing
  • phase3
  • poc-zombie-leak
  • prove/1052-early-buffer-removed
  • prove/1052-gated
  • railwayapp
  • refactor/admit-user-stored-func
  • refactor/callback-routes-conditional-registration
  • refactor/readme-payments-fix
  • refs/heads/main
  • refs/pull/338/merge
  • rewrite/main
  • security-audit-002
  • security-audit-003
  • settings-UI
  • settings-api
  • snyk-fix-c49ceb15684ee3e925dd02ffd01f44af
  • snyk-upgrade-0b1b92c9034978547ca6eeb5c5faab01
  • snyk-upgrade-11c00a70567275542a5b51ad3cf25514
  • snyk-upgrade-15bbcf4d43517fa5b0300a5e4a99e2f7
  • snyk-upgrade-2267c0c539bc71828aefd1df8720cbd1
  • snyk-upgrade-22a55f25032d9731d29e7ea049a259f3
  • snyk-upgrade-326fc91135c4c2567ece41eeda504cc4
  • snyk-upgrade-33a7acea82221496995aa436b13c0207
  • snyk-upgrade-35d97ae5940379360969482c59b90c77
  • snyk-upgrade-36f8588f4fb3f9cc7e5eae6a5c0c505a
  • snyk-upgrade-3cd01f8564b6f240610b366b99055fa9
  • snyk-upgrade-3d9ee9a9fcb7768387746d78a86e665e
  • snyk-upgrade-48f3b6be9ef78000a756aa83e532e0f6
  • snyk-upgrade-5b824ccbdbfa0c06b43368e09e194e42
  • snyk-upgrade-5c286fb46a2bff12d9472dae65efbddf
  • snyk-upgrade-736ffef964d236660ea516de447fc55d
  • snyk-upgrade-7a442274d7d09a18c020176489646013
  • snyk-upgrade-870b44ffa34293f10586d8de7d5108e7
  • snyk-upgrade-8efadfa18e513b1aec5aa799baa4a822
  • snyk-upgrade-919ca5395d598d6f939fbbf3c0da8e2f
  • snyk-upgrade-96c2656e0df8d0f66db13a78a01b2800
  • snyk-upgrade-9a71d3f3cdd5d937c38fdba43809a42b
  • snyk-upgrade-b7ebd0b612b559cc21332c6baadeb6f5
  • snyk-upgrade-bb9de293b002479bd82ce6b1df789523
  • snyk-upgrade-bd3e72b5a9abcd5b3331875a36cd043c
  • snyk-upgrade-d2e6e273ff71912ee646e22e832d95bc
  • snyk-upgrade-d58ff74fd1c2f42839fc1a7ef3825543
  • snyk-upgrade-d6d1a0eb26a28265d24f4704d7def61c
  • snyk-upgrade-d8ba3b8ef97b28b5e978c996980ea595
  • snyk-upgrade-d960a465da7768ede865329df3712420
  • snyk-upgrade-e25541a4b3fda39cb1a3b565a3bb9e95
  • snyk-upgrade-e2c7385d5b947f528ce25a39832a9bb8
  • snyk-upgrade-f457a2289961035c3806e402ada76b1b
  • snyk-upgrade-f76e0ae6a848bfd3cf98f57f97cc99fa
  • snyk-upgrade-fd048bf5bc433ac48a3299fa862fadeb
  • sync/main-into-rewrite-2026-11-02
  • task-add-lnurl-processor
  • test/1002-script-cache-recovery
  • test/1052-non-sequential-socket-cases
  • test/488-adapter-unit-tests
  • test/add-missing-message-factory-tests
  • test/app-worker-unit-tests
  • test/invoice-and-user-repositories
  • test/invoice-user-repos
  • test/maintenance-worker-factory
  • test/nip-04-integration-tests
  • test/nip-11-integration
  • test/nip-40-event-expiration
  • test/nip02-contact-list-integration
  • test/nip17-gift-wrap-integration
  • test/nip62-vanish-integration
  • test/payment-callback-controllers-unit-tests
  • test/payment-processors
  • test/repository-specs
  • test/user-subscription-spec-timezone

12 Nov 2026 11:01PM UTC coverage: 77.635% (-0.04%) from 77.676%
43325203152

push

github

web-flow
fix(payments): do not downgrade a pubkey whose dearer plan is still running (#1092)

## Description
Anyone can pay an invoice for any pubkey (`POST /invoices` takes the
pubkey and a plan, and a Lightning payment carries no proof of who
paid). `applyPayment` switched the pubkey to the paid plan at once, so
someone could buy the cheapest plan for another pubkey and take away the
dearer plan the pubkey had paid for: its rate limits and retention would
change immediately, and the purge would then delete events its own plan
keeps.

While a period of a dearer plan is running, a payment for a cheaper plan
now leaves the plan alone and credits the money to it: the running
period is extended by the share of one of its periods the payment covers
(a payment of a fifth of the price adds a fifth of the interval), with
the grace of the plan the pubkey has. Nothing the pubkey has paid for is
shortened or taken away.

Unchanged: paying for the plan the pubkey has, paying for a dearer plan
(it takes effect as before), and paying after the running period has
ended or when the pubkey has no running paid plan. `confirmInvoice`
passes the plan the pubkey has and the amount paid (converted to msats),
so the credit follows what was paid.

## Related Issue
Closes #1017

## Motivation and Context
#1017 is an automated finding, not a confirmed exploit, but the path it
describes is real: the pubkey and plan are public inputs and
`confirmInvoice` replaced the plan. I read it as a payment changing a
plan the payer has no right to change, and fixed it without a schema
change by making a payment unable to lower an existing running plan,
rather than requiring the beneficiary to authenticate (the other fix the
issue suggests), which would need an auth step in the invoice flow.

Known limits, left out on purpose: a pubkey admitted before plans
existed (the never-ending `grandfathered` plan) is still moved onto a
paid plan by a payment, and someone who really wants a cheaper plan has
t... (continued)

4905 of 6918 branches covered (70.9%)

Branch coverage included in aggregate %.

6 of 6 new or added lines in 1 file covered. (100.0%)

5 existing lines in 2 files now uncovered.

10681 of 13158 relevant lines covered (81.17%)

707.26 hits per line

Relevant lines Covered
Build:
Build:
13158 RELEVANT LINES 10681 COVERED LINES
707.26 HITS PER LINE
Source Files on main
  • Tree
  • List 334
  • Changed 12
  • Source Changed 2
  • Coverage Changed 12
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
43325203152 main fix(payments): do not downgrade a pubkey whose dearer plan is still running (#1092) ## Description Anyone can pay an invoice for any pubkey (`POST /invoices` takes the pubkey and a plan, and a Lightning payment carries no proof of who paid). `app... push 12 Nov 2026 11:05PM UTC web-flow github
77.63
42450377626 main chore: release new version 🚀 (#1080) push 08 Nov 2026 05:24AM UTC web-flow github
77.68
42449644437 main test(relay): non-sequential socket cases — commands that race the connection (#1052) (#1072) push 08 Nov 2026 05:13AM UTC web-flow github
77.68
42411766472 main chore: release new version 🚀 (#1076) push 07 Nov 2026 08:39PM UTC web-flow github
77.62
42409508704 main fix(nip-43): admit users inside a serializable transaction (#1075) push 07 Nov 2026 08:11PM UTC web-flow github
77.61
42379014360 main chore: release new version 🚀 (#1071) push 07 Nov 2026 01:57PM UTC web-flow github
77.58
42376513549 main ci(website): keep the relay deploy trigger and assert run provenance (#1069) push 07 Nov 2026 01:24PM UTC web-flow github
77.58
42376005479 main feat(web): set security headers on every web response (#1068) push 07 Nov 2026 01:17PM UTC web-flow github
77.58
42373933224 main fix(payments): accept LNbits 1.x callback bodies (#1067) <!--- Provide a general summary of your changes in the Title above --> ## Description <!--- Describe your changes in detail --> ## Problem LNbits 1.x sends the payment object as a JSON st... push 07 Nov 2026 12:50PM UTC web-flow github
77.58
42213341450 main chore: release new version 🚀 (#1065) push 06 Nov 2026 11:55AM UTC web-flow github
77.57
See All Builds (1495)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc