Skip to main content

Interface: IDiscoveryService

Defined in: src/types/interfaces/discovery.interface.ts:651

Discovery service interface.

Remarks​

Orchestrates eprint enrichment and discovery using external APIs (Semantic Scholar, OpenAlex) and internal data (citation graph, search).

Critical Constraint: All methods return only eprints indexed in Chive. External APIs are used as enrichment signals, not as sources of recommendations.

Follows the ClaimingService pattern:

  • Constructor takes core dependencies (logger, db, search, ranking)
  • Optional setter for plugin manager (works without plugins)
  • Graceful degradation when external APIs are unavailable

Example​

// Get recommendations for a user
const result = await discoveryService.getRecommendationsForUser(
userDid,
{ limit: 10, signals: ['fields', 'citations'] }
);

// Find related eprints
const related = await discoveryService.findRelatedEprints(
eprintUri,
{ limit: 5, signals: ['citations', 'concepts'] }
);

Since​

0.1.0

Methods​

enrichEprint()​

enrichEprint(eprint): Promise<EnrichmentResult>

Defined in: src/types/interfaces/discovery.interface.ts:662

Enriches an eprint with data from Semantic Scholar and OpenAlex.

Parameters​

eprint​

EnrichmentInput

Eprint to enrich

Returns​

Promise<EnrichmentResult>

Enrichment result with external data

Remarks​

Fetches citation data, concepts, and topics from external APIs. Stores Chive-to-Chive citations in Neo4j for graph queries.


findRelatedEprints()​

findRelatedEprints(eprintUri, options?): Promise<readonly RelatedEprint[]>

Defined in: src/types/interfaces/discovery.interface.ts:686

Finds related Chive eprints using multiple signals.

Parameters​

eprintUri​

AtUri

AT-URI of the source eprint

options?​

RelatedEprintOptions

Query options

Returns​

Promise<readonly RelatedEprint[]>

Related eprints with relationship metadata

Remarks​

Combines citation graph, concept overlap, and semantic similarity to find related eprints. All results are from Chive's index.


getRecommendationsForUser()​

getRecommendationsForUser(userDid, options?): Promise<RecommendationResult>

Defined in: src/types/interfaces/discovery.interface.ts:703

Gets personalized recommendations for a user.

Parameters​

userDid​

DID

User's DID

options?​

RecommendationOptions

Recommendation options

Returns​

Promise<RecommendationResult>

Paginated recommendations with explanations

Remarks​

Uses user's research fields, claimed papers, and citation network to generate personalized recommendations. Uses extended RankingService for scoring with discovery signals.


lookupPaper()​

lookupPaper(identifier): Promise<null | UnifiedPaperMetadata>

Defined in: src/types/interfaces/discovery.interface.ts:673

Looks up paper metadata from external sources.

Parameters​

identifier​

PaperIdentifier

Paper identifier (DOI, arXiv, etc.)

Returns​

Promise<null | UnifiedPaperMetadata>

Unified metadata or null if not found

Remarks​

Queries Semantic Scholar and OpenAlex in parallel, merges results.


recordInteraction()​

recordInteraction(userDid, interaction): Promise<void>

Defined in: src/types/interfaces/discovery.interface.ts:719

Records a user interaction for feedback loop.

Parameters​

userDid​

DID

User's DID

interaction​

UserInteraction

Interaction details

Returns​

Promise<void>

Remarks​

Tracks views, clicks, dismissals, and claims to improve future recommendations. Uses dismissals as negative signals for Semantic Scholar multi-example learning.


setPluginManager()​

setPluginManager(manager): void

Defined in: src/types/interfaces/discovery.interface.ts:730

Sets the plugin manager for external API access.

Parameters​

manager​

IPluginManager

Plugin manager instance

Returns​

void

Remarks​

Optional late-binding following ClaimingService pattern. Service works without plugins (uses only local data).