feat: wot core service#642
Conversation
🦋 Changeset detectedLatest commit: a36249d The changes in this PR will be included in the next version bump. 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 |
There was a problem hiding this comment.
Pull request overview
Introduces a new WotService implementing the core Web of Trust (WoT) graph-building logic, along with settings/type updates and unit tests to support and validate the new behavior.
Changes:
- Adds
WotServiceto build a 2-hop trust graph by fetching kind-3 follow lists from configured seed relays. - Extends WoT settings to include
seedRelays, updates default settings, and adjusts settings unit tests. - Adds a comprehensive unit test suite for
WotService.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
src/services/wot-service.ts |
Adds the WoT graph building logic with relay fetching, batching, and trust-map swapping. |
src/@types/settings.ts |
Extends WoTSettings with seedRelays. |
src/@types/services.ts |
Introduces the IWotService interface. |
resources/default-settings.yaml |
Adds default wot.seedRelays values. |
test/unit/services/wot-service.spec.ts |
Adds unit tests covering WoT service behavior and edge cases. |
test/unit/utils/settings.spec.ts |
Updates settings tests to assert seedRelays defaulting and override behavior. |
.knip.json |
Ignores the new service file for unused-code checks. |
.changeset/solid-boats-try.md |
Adds a changeset entry for the new feature. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| minimumFollowers: 1 | ||
| # Hours between full trust graph rebuilds. | ||
| refreshIntervalHours: 24 | ||
| # Relay URLs to fetch follow lists from when building the trust graph. |
| /** | ||
| * Relay URLs to fetch follow lists from when building the trust graph. | ||
| * Falls back to the relay's own URL if empty. | ||
| */ | ||
| seedRelays: string[] |
47b2fc6 to
a36249d
Compare
| const oneHopRows = await (this.eventRepository as any).masterDbClient('event_tags') | ||
| .select('tag_value') | ||
| .whereIn( | ||
| 'event_id', | ||
| (this.eventRepository as any).masterDbClient('events') | ||
| .select('event_id') | ||
| .where('event_pubkey', Buffer.from(settings.seedPubkey, 'hex')) | ||
| .where('event_kind', KIND_FOLLOW_LIST), | ||
| ) | ||
| .where('tag_name', 'p') |
There was a problem hiding this comment.
@saniddhyaDubey this is outside the database layer and needs to be refactored into a repository
| .groupBy('tag_value') | ||
| .havingRaw('COUNT(*) >= ?', [settings.minimumFollowers]) | ||
|
|
||
| const trustedSet = new Set<string>(trustedRows.map((r: any) => r.tag_value as string)) |
There was a problem hiding this comment.
this can be done in SQL using DISTINCT
Description
Introduces WotService - the core Web of Trust graph logic. Builds a 2-hop trust graph rooted at the relay owner's pubkey by fetching kind-3 follow lists from configured seed relays.
Also patches the wot: config block (#623) with the missing seedRelays field, and updates the settings unit tests accordingly.
Related Issue
Closes (#626).
How Has This Been Tested?
14 new unit tests in
test/unit/services/wot-service.spec.tscover:seedPubkeyalways trusted regardless of follower countminimumFollowersthreshold : pubkeys above pass, pubkeys below are rejectedbuildGraph()calls are no-opsbuildingflag cleared correctly even when the build throwsptags and pubkeys shorter than 64 chars ignoredreset()clears all state and allows a fresh buildScreenshots (if appropriate):
Types of changes
Checklist: