# @orbital-stellar/orbital-indexer

> Auto-publish indexer: discovers unknown contracts' interfaces via WASM auto-discovery and publishes them to the on-chain ABI registry as part of normal engine operation.

Latest version **0.2.0** (published 2026-09-24) · MIT license · 0 weekly downloads

## Install

```sh
npm install @orbital-stellar/orbital-indexer
pnpm add @orbital-stellar/orbital-indexer
yarn add @orbital-stellar/orbital-indexer
bun add @orbital-stellar/orbital-indexer
```

## Health

**Score 70/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; recently updated; high maintenance score; high quality score.

Warnings: low downloads; pre 1.0.

## Facts

| | |
|---|---|
| Version | 0.2.0 |
| Published | 2026-09-24 |
| First published | 2026-09-24 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=20 |
| Dependencies | 2 |
| Unpacked size | 20.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 6 |
| Maintainers | determined-001 |

## Links

- npm: https://www.npmjs.com/package/@orbital-stellar/orbital-indexer
- Repository: https://github.com/determined-001/orbital_stellar
- Homepage: https://github.com/determined-001/orbital_stellar#readme
- Issues: https://github.com/determined-001/orbital_stellar/issues
- npm.io page: https://npm.io/package/@orbital-stellar/orbital-indexer

## Dependencies (2)

- [@orbital-stellar/pulse-core](https://npm.io/package/@orbital-stellar/pulse-core.md) 0.2.0
- [@orbital-stellar/abi-registry](https://npm.io/package/@orbital-stellar/abi-registry.md) 0.2.0

## Recent versions

- 0.2.0 (latest) — 2026-09-24

## README

# @orbital-stellar/orbital-indexer

Auto-publish indexer for Orbital's semantic layer (maintainer.md stage 4).
Watches an `EventEngine`'s contract stream for `contractId`s the ABI
registry doesn't yet have a spec for, discovers their interface via WASM
auto-discovery (`@orbital-stellar/abi-registry`'s `discoverContractSpec`),
and publishes the result to the on-chain registry - so Orbital writes
on-chain continuously as part of normal operation, with manual
`abi-registry publish` staying available as the override path for teams
that want custom naming.

## Usage

```ts
import { EventEngine } from "@orbital-stellar/pulse-core";
import { OnChainAbiRegistryClient, OnChainRegistryPublisher } from "@orbital-stellar/abi-registry";
import { AutoPublishIndexer } from "@orbital-stellar/orbital-indexer";

const engine = new EventEngine({ network: "testnet" });
engine.start();

const registryClient = new OnChainAbiRegistryClient({
  contractId: REGISTRY_CONTRACT_ID,
  rpcUrl: RPC_URL,
  networkPassphrase: NETWORK_PASSPHRASE,
  publisher: ORBITAL_PUBLISHER_ADDRESS,
});

const publisher = new OnChainRegistryPublisher({
  contractId: REGISTRY_CONTRACT_ID,
  rpcUrl: RPC_URL,
  networkPassphrase: NETWORK_PASSPHRASE,
  publisherSecret: ORBITAL_PUBLISHER_SECRET,
});

const indexer = new AutoPublishIndexer({
  engine,
  registryClient,
  publisher,
  rpcUrl: RPC_URL,
  network: "testnet",
  pointerStrategy: async (spec, canonicalJson) => {
    // Host canonicalJson somewhere and return the URL it's served from.
    return await uploadSpecBlob(spec.contractId!, canonicalJson);
  },
});

indexer.start();
```

**Not** wired into any public-facing route - anonymous visitors triggering
real signed transactions per typed contract ID is an abuse vector. This is a
standalone process/script, not part of a public request path.

## Behavior

- Skips contracts the registry already has a spec for.
- Concurrent events for the same not-yet-known contract share one in-flight
  discovery - no duplicate publish attempts.
- Contracts with no embedded spec section (`NoEmbeddedSpecError` - stripped
  or non-Rust) are cached as undiscoverable and retried after a backoff
  window (`undiscoverableTtlMs`, default 30 minutes) rather than retried on
  every single event.

---
_Source: https://npm.io/package/@orbital-stellar/orbital-indexer · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
