fix: prevent crash in NIP-11 response when payments settings are absent#682
Open
Priyanshubhartistm wants to merge 1 commit into
Open
Conversation
rootRequestHandler accessed settings.payments.feeSchedules unconditionally Signed-off-by: Priyanshubhartistm <bhartipriyanshustm@gmail.com>
🦋 Changeset detectedLatest commit: 0fafd85 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Collaborator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
rootRequestHandlerbuilds the NIP-11 relay information document'sfeesfield by callingObject.getOwnPropertyNames(settings.payments.feeSchedules)with no guard onsettings.paymentsbeing present. Sincepaymentsis an optional field onSettings, any relay running without apaymentsblock insettings.yamlthrows aTypeErroron every request with anAccept: application/nostr+jsonheader. The fix mirrors the optional-chaining pattern already used elsewhere in this same file (e.g.hasAdmissionRestriction,payment_required): whensettings.paymentsis absent,feesnow resolves to{}instead of crashing.Related Issue
Issue #681
Motivation and Context
Any relay operator who omits the
paymentsblock fromsettings.yaml(rather than settingpayments.enabled: false, which ships with a full block by default) has their worker crash on every NIP-11 discovery request, sincepayments?: Paymentsis typed as optional but was accessed without a null check.How Has This Been Tested?
returns empty fees instead of crashing when the payments block is absent)that strips
paymentsfrom the stubbed settings object and assertsrootRequestHandlerdoes notthrow and returns
fees: {}.pnpm run test:unit— 1394 passing (up from 1393 with the new test).pnpm run test:cli— 73 passing.pnpm run cover:unit— passes;root-request-handler.tsat 98.21% statement coverage.pnpm run docker:test:integration— 99 scenarios / 489steps passing, including the existing umber features that exercise
this handler.
pnpm lint,pnpm exec biome format(on the touched files),pnpm check:deps,pnpm run build:check,pnpm run build, andpnpm run verify:cli:build— all clean.Screenshots (if appropriate):
N/A — backend-only change, no UI impact.
Types of changes
Checklist: