Skip to main content

Class: ArxivPlugin

Defined in: src/plugins/builtin/arxiv.ts:133

arXiv integration plugin.

Remarks​

Fetches eprints from arXiv using OAI-PMH protocol and imports them into the Chive AppView cache. Users can claim eprints they authored.

Extends ImportingPlugin for standardized import/claiming workflow.

Example​

const plugin = new ArxivPlugin();
await manager.loadBuiltinPlugin(plugin);

// Fetch recent linguistics papers
const result = await plugin.runImportCycle({
categories: ['cs.CL'], // Computational Linguistics
fromDate: '2024-01-01',
});

Extends​

Implements​

Constructors​

new ArxivPlugin()​

new ArxivPlugin(): ArxivPlugin

Returns​

ArxivPlugin

Inherited from​

ImportingPlugin.constructor

Properties​

cache​

protected cache: ICacheProvider

Defined in: src/plugins/builtin/base-plugin.ts:88

Cache provider (available after initialization).

Inherited from​

ImportingPlugin.cache


context​

protected context: IPluginContext

Defined in: src/plugins/builtin/base-plugin.ts:78

Plugin context (available after initialization).

Inherited from​

ImportingPlugin.context


id​

readonly id: "pub.chive.plugin.arxiv" = 'pub.chive.plugin.arxiv'

Defined in: src/plugins/builtin/arxiv.ts:137

Plugin ID.

Implementation of​

SearchablePlugin.id

Overrides​

ImportingPlugin.id


importService​

protected importService: IImportService

Defined in: src/plugins/core/importing-plugin.ts:83

Import service instance.

Remarks​

Set during initialization via dependency injection from context.

Inherited from​

ImportingPlugin.importService


logger​

protected logger: ILogger

Defined in: src/plugins/builtin/base-plugin.ts:83

Logger instance (available after initialization).

Inherited from​

ImportingPlugin.logger


manifest​

readonly manifest: IPluginManifest

Defined in: src/plugins/builtin/arxiv.ts:156

Plugin manifest.

Implementation of​

SearchablePlugin.manifest

Overrides​

ImportingPlugin.manifest


metrics​

protected metrics: IMetrics

Defined in: src/plugins/builtin/base-plugin.ts:93

Metrics provider (available after initialization).

Inherited from​

ImportingPlugin.metrics


rateLimitDelayMs​

protected rateLimitDelayMs: number = 1000

Defined in: src/plugins/core/importing-plugin.ts:97

Minimum delay between requests in milliseconds.

Remarks​

Override in subclass to set source-specific rate limit. Default: 1000ms (1 request per second)

Inherited from​

ImportingPlugin.rateLimitDelayMs


source​

readonly source: "arxiv"

Defined in: src/plugins/builtin/arxiv.ts:142

Import source identifier.

Overrides​

ImportingPlugin.source


supportsSearch​

readonly supportsSearch: true

Defined in: src/plugins/builtin/arxiv.ts:151

Indicates this plugin supports on-demand search.

Remarks​

When true, the plugin can be used for real-time search queries against the external arXiv API rather than bulk import.

Implementation of​

SearchablePlugin.supportsSearch

Methods​

buildEprintUrl()​

buildEprintUrl(externalId): string

Defined in: src/plugins/builtin/arxiv.ts:471

Builds the canonical URL for an arXiv paper.

Parameters​

externalId​

string

arXiv ID

Returns​

string

Full URL to the abstract page

Overrides​

ImportingPlugin.buildEprintUrl


buildPdfUrl()​

buildPdfUrl(externalId): null | string

Defined in: src/plugins/builtin/arxiv.ts:481

Builds the PDF URL for an arXiv paper.

Parameters​

externalId​

string

arXiv ID

Returns​

null | string

PDF URL

Overrides​

ImportingPlugin.buildPdfUrl


fetchEprints()​

fetchEprints(options?): AsyncIterable<ExternalEprint>

Defined in: src/plugins/builtin/arxiv.ts:225

Fetches eprints from arXiv via OAI-PMH.

Parameters​

options?​

FetchOptions

Fetch options (limit, cursor is resumptionToken)

Returns​

AsyncIterable<ExternalEprint>

Async iterable of external eprints

Overrides​

ImportingPlugin.fetchEprints


fetchPaperDetails()​

fetchPaperDetails(arxivId): Promise<null | ArxivPaper>

Defined in: src/plugins/builtin/arxiv.ts:511

Fetches paper details from arXiv API.

Parameters​

arxivId​

string

arXiv identifier

Returns​

Promise<null | ArxivPaper>

Paper metadata or null


getConfig()​

protected getConfig<T>(key): undefined | T

Defined in: src/plugins/builtin/base-plugin.ts:226

Gets a configuration value with type safety.

Type Parameters​

• T

Parameters​

key​

string

Configuration key

Returns​

undefined | T

Configuration value or undefined

Example​

const apiKey = this.getConfig<string>('apiKey');

Inherited from​

ImportingPlugin.getConfig


getExistingImport()​

getExistingImport(externalId): Promise<null | ImportedEprint>

Defined in: src/plugins/core/importing-plugin.ts:167

Gets an existing import by external ID.

Parameters​

externalId​

string

Source-specific identifier

Returns​

Promise<null | ImportedEprint>

Imported eprint or null if not found

Inherited from​

ImportingPlugin.getExistingImport


getRequiredConfig()​

protected getRequiredConfig<T>(key): T

Defined in: src/plugins/builtin/base-plugin.ts:242

Gets a required configuration value.

Type Parameters​

• T

Parameters​

key​

string

Configuration key

Returns​

T

Configuration value

Throws​

Error if key not found

Example​

const apiKey = this.getRequiredConfig<string>('apiKey');

Inherited from​

ImportingPlugin.getRequiredConfig


getState()​

getState(): PluginState

Defined in: src/plugins/builtin/base-plugin.ts:162

Gets current plugin state.

Returns​

PluginState

Current lifecycle state

Implementation of​

SearchablePlugin.getState

Inherited from​

ImportingPlugin.getState


importEprint()​

importEprint(eprint): Promise<ImportedEprint>

Defined in: src/plugins/core/importing-plugin.ts:185

Imports an eprint into the AppView cache.

Parameters​

eprint​

ExternalEprint

External eprint data

Returns​

Promise<ImportedEprint>

Created or existing imported eprint

Remarks​

Performs deduplication and emits import.created event on success.

Throws​

Error if import service unavailable

Inherited from​

ImportingPlugin.importEprint


initialize()​

initialize(context): Promise<void>

Defined in: src/plugins/core/importing-plugin.ts:107

Initializes the importing plugin.

Parameters​

context​

IPluginContext

Plugin context with injected dependencies

Returns​

Promise<void>

Remarks​

Retrieves import service from context and calls onInitialize().

Implementation of​

SearchablePlugin.initialize

Inherited from​

ImportingPlugin.initialize


isImported()​

isImported(externalId): Promise<boolean>

Defined in: src/plugins/core/importing-plugin.ts:153

Checks if an eprint has already been imported.

Parameters​

externalId​

string

Source-specific identifier

Returns​

Promise<boolean>

True if already imported

Inherited from​

ImportingPlugin.isImported


onInitialize()​

protected onInitialize(): Promise<void>

Defined in: src/plugins/builtin/arxiv.ts:207

Initializes the plugin.

Returns​

Promise<void>

Remarks​

Sets up rate limiting for arXiv API requests. No startup bulk import since this plugin uses on-demand search via the search() method.

Overrides​

ImportingPlugin.onInitialize


onShutdown()​

protected onShutdown(): Promise<void>

Defined in: src/plugins/builtin/base-plugin.ts:211

Override in subclass for shutdown logic.

Returns​

Promise<void>

Remarks​

Called during shutdown(). Use this to:

  • Save state
  • Close connections
  • Clean up resources

Default implementation does nothing.

Example​

protected async onShutdown(): Promise<void> {
await this.saveState();
this.connection?.close();
}

Inherited from​

ImportingPlugin.onShutdown


parseExternalId()​

parseExternalId(url): null | string

Defined in: src/plugins/builtin/arxiv.ts:491

Parses external ID from an arXiv URL.

Parameters​

url​

string

arXiv URL

Returns​

null | string

arXiv ID or null

Overrides​

ImportingPlugin.parseExternalId


rateLimit()​

protected rateLimit(): Promise<void>

Defined in: src/plugins/core/importing-plugin.ts:342

Enforces rate limiting for external requests.

Returns​

Promise<void>

Remarks​

Call this before making external API/HTTP requests. Delays execution if needed to respect rate limit.

Inherited from​

ImportingPlugin.rateLimit


recordCounter()​

protected recordCounter(name, labels?, value?): void

Defined in: src/plugins/builtin/base-plugin.ts:257

Records a counter metric.

Parameters​

name​

string

Metric name

labels?​

Record<string, string>

Optional labels

value?​

number

Optional increment value (default 1)

Returns​

void

Inherited from​

ImportingPlugin.recordCounter


recordGauge()​

protected recordGauge(name, value, labels?): void

Defined in: src/plugins/builtin/base-plugin.ts:268

Records a gauge metric.

Parameters​

name​

string

Metric name

value​

number

Gauge value

labels?​

Record<string, string>

Optional labels

Returns​

void

Inherited from​

ImportingPlugin.recordGauge


runImportCycle()​

runImportCycle(options?): Promise<ImportCycleResult>

Defined in: src/plugins/core/importing-plugin.ts:285

Runs a full import cycle.

Parameters​

options?​

FetchOptions

Fetch options

Returns​

Promise<ImportCycleResult>

Import statistics

Remarks​

Fetches eprints and imports new ones, updating existing ones. Respects rate limits and handles errors gracefully.

Inherited from​

ImportingPlugin.runImportCycle


search(query): Promise<readonly ExternalEprint[]>

Defined in: src/plugins/builtin/arxiv.ts:584

Searches arXiv for eprints matching the query.

Parameters​

query​

ExternalSearchQuery

Search parameters (author, title, externalId, doi)

Returns​

Promise<readonly ExternalEprint[]>

Matching eprints from arXiv

Throws​

If the search request fails

Remarks​

Uses the arXiv Atom API for search queries. Supports searching by:

  • Author name (au: prefix)
  • Title text (ti: prefix)
  • arXiv ID (id_list parameter for exact match)
  • Categories (cat: prefix)

Rate limiting: Enforces 3 second delay between requests as required by arXiv.

Example​

const results = await arxivPlugin.search({
author: 'Vaswani',
title: 'Attention Is All You Need',
limit: 5,
});

Implementation of​

SearchablePlugin.search


shutdown()​

shutdown(): Promise<void>

Defined in: src/plugins/builtin/base-plugin.ts:142

Shuts down the plugin.

Returns​

Promise<void>

Remarks​

Calls onShutdown() and updates state. Subclasses should override onShutdown() instead of this method.

Implementation of​

SearchablePlugin.shutdown

Inherited from​

ImportingPlugin.shutdown


startTimer()​

protected startTimer(name, labels?): () => void

Defined in: src/plugins/builtin/base-plugin.ts:286

Starts a timer for histogram metrics.

Parameters​

name​

string

Metric name

labels?​

Record<string, string>

Optional labels

Returns​

Function

Function to call when operation completes

Returns​

void

Example​

const endTimer = this.startTimer('api_request');
await this.fetchData();
endTimer(); // Records duration

Inherited from​

ImportingPlugin.startTimer


updateImport()​

updateImport(id, eprint): Promise<ImportedEprint>

Defined in: src/plugins/core/importing-plugin.ts:243

Updates an existing import with new data.

Parameters​

id​

number

Internal import ID

eprint​

Partial<ExternalEprint>

Updated eprint data

Returns​

Promise<ImportedEprint>

Updated imported eprint

Inherited from​

ImportingPlugin.updateImport