Skip to main content

Class: OpenReviewPlugin

Defined in: src/plugins/builtin/openreview.ts:310

OpenReview integration plugin.

Remarks​

Fetches submissions from OpenReview via API v2 and imports them into the Chive AppView cache. Users can claim papers they authored using their verified OpenReview profile.

OpenReview profiles with linked ORCID/Semantic Scholar provide high-confidence verification for the multi-authority claiming system.

Extends ImportingPlugin for standardized import/claiming workflow.

Example​

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

// Verify author for claiming
const author = await plugin.getAuthorProfile('~Jane_Doe1');
if (author?.orcid) {
// High-confidence match for claiming
}

Extends​

Implements​

Constructors​

new OpenReviewPlugin()​

new OpenReviewPlugin(): OpenReviewPlugin

Returns​

OpenReviewPlugin

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.openreview" = 'pub.chive.plugin.openreview'

Defined in: src/plugins/builtin/openreview.ts:314

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/openreview.ts:329

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: "openreview"

Defined in: src/plugins/builtin/openreview.ts:319

Import source identifier.

Overrides​

ImportingPlugin.source


supportsSearch​

readonly supportsSearch: true

Defined in: src/plugins/builtin/openreview.ts:324

Indicates this plugin supports on-demand search.

Implementation of​

SearchablePlugin.supportsSearch

Methods​

buildEprintUrl()​

buildEprintUrl(externalId): string

Defined in: src/plugins/builtin/openreview.ts:464

Builds the canonical URL for an OpenReview submission.

Parameters​

externalId​

string

Note ID

Returns​

string

Full URL to the submission

Overrides​

ImportingPlugin.buildEprintUrl


buildPdfUrl()​

buildPdfUrl(externalId): null | string

Defined in: src/plugins/builtin/openreview.ts:474

Builds the PDF URL for an OpenReview submission.

Parameters​

externalId​

string

Note ID

Returns​

null | string

PDF URL or null

Overrides​

ImportingPlugin.buildPdfUrl


fetchEprints()​

fetchEprints(options?): AsyncIterable<ExternalEprint>

Defined in: src/plugins/builtin/openreview.ts:398

Fetches submissions from OpenReview.

Parameters​

options?​

FetchOptions

Fetch options (limit, cursor, filters)

Returns​

AsyncIterable<ExternalEprint>

Async iterable of external eprints

Overrides​

ImportingPlugin.fetchEprints


fetchSubmissionDetails()​

fetchSubmissionDetails(noteId): Promise<null | OpenReviewPaper>

Defined in: src/plugins/builtin/openreview.ts:797

Fetches details for a specific submission.

Parameters​

noteId​

string

Submission note ID

Returns​

Promise<null | OpenReviewPaper>

Paper details or null


findAuthorByEmail()​

findAuthorByEmail(email): Promise<null | OpenReviewAuthor>

Defined in: src/plugins/builtin/openreview.ts:649

Searches for author profile by email (for claiming verification).

Parameters​

email​

string

Email address to search

Returns​

Promise<null | OpenReviewAuthor>

Author profile or null


getAuthorProfile()​

getAuthorProfile(profileId): Promise<null | OpenReviewAuthor>

Defined in: src/plugins/builtin/openreview.ts:556

Gets author profile for claiming verification.

Parameters​

profileId​

string

OpenReview profile ID (tilde ID like ~John_Doe1)

Returns​

Promise<null | OpenReviewAuthor>

Author profile or null

Remarks​

OpenReview profiles with linked ORCID provide high-confidence verification for the multi-authority claiming system.


getAuthorSubmissions()​

getAuthorSubmissions(profileId, options?): Promise<readonly OpenReviewPaper[]>

Defined in: src/plugins/builtin/openreview.ts:692

Gets submissions authored by a profile ID.

Parameters​

profileId​

string

OpenReview profile ID

options?​

Query options

limit​

number

Returns​

Promise<readonly OpenReviewPaper[]>

Papers authored by the profile


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


getPaper()​

getPaper(id): Promise<null | OpenReviewPaper>

Defined in: src/plugins/builtin/openreview.ts:785

Gets a cached paper by ID.

Parameters​

id​

string

Note ID

Returns​

Promise<null | OpenReviewPaper>

Paper metadata or null


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/openreview.ts:380

Initializes the plugin.

Returns​

Promise<void>

Remarks​

Sets up rate limiting. 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/openreview.ts:484

Parses external ID from an OpenReview URL.

Parameters​

url​

string

OpenReview URL

Returns​

null | string

Note 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/openreview.ts:871

Searches OpenReview for submissions matching the query.

Parameters​

query​

ExternalSearchQuery

Search parameters (author, title, externalId)

Returns​

Promise<readonly ExternalEprint[]>

Matching submissions from OpenReview

Throws​

If the search request fails

Remarks​

Uses OpenReview API v2 for search queries. Supports searching by:

  • Title text (content.title parameter)
  • Author profile ID (content.authorids parameter)
  • Note ID (exact match lookup)

Rate limiting: Enforces 600ms delay between requests.

Example​

const results = await openReviewPlugin.search({
title: 'Attention Is All You Need',
limit: 10,
});

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


verifyAuthorship()​

verifyAuthorship(profileId, submissionId): Promise<boolean>

Defined in: src/plugins/builtin/openreview.ts:748

Verifies if a profile ID is an author of a specific submission.

Parameters​

profileId​

string

OpenReview profile ID

submissionId​

string

Submission note ID

Returns​

Promise<boolean>

True if profile is an author