Skip to main content

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

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:660

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:677

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:647

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:693

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:704

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).