Interface: IDiscoveryService
Defined in: src/types/interfaces/discovery.interface.ts:625
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:636
Enriches an eprint with data from Semantic Scholar and OpenAlex.
Parameters
eprint
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<readonlyRelatedEprint[]>
Defined in: src/types/interfaces/discovery.interface.ts:660
Finds related Chive eprints using multiple signals.
Parameters
eprintUri
AT-URI of the source eprint
options?
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:677
Gets personalized recommendations for a user.
Parameters
userDid
User's DID
options?
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:647
Looks up paper metadata from external sources.
Parameters
identifier
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:693
Records a user interaction for feedback loop.
Parameters
userDid
User's DID
interaction
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:704
Sets the plugin manager for external API access.
Parameters
manager
Plugin manager instance
Returns
void
Remarks
Optional late-binding following ClaimingService pattern. Service works without plugins (uses only local data).