Skip to content

Package subpaths ​

@lelantos-org/sdk publishes eleven typed entry points. Every exported name has exactly one home: the SDK's CI fails if a name is published from two subpaths, so there is never a choice to make about where to import something from.

Most applications import only from the root.

ImportContentsStability
@lelantos-org/sdkconnect, the WalletApi / ReadOnlyWalletApi types and every option, quote, and result type; amounts (parseAmount, formatAmount, toBaseUnits, fromBaseUnits) and brands; NETWORKS; logging; configureWasm; key helpers (generateMnemonic, deriveNskFromSigner, deriveNskFromPasskey, viewing-key codec, parseAddress); every error class and isWalletErrorsemver
@lelantos-org/sdk/watchconnectWatchsemver
@lelantos-org/sdk/x402x402 payers: x402, shieldedExact, unshieldedExact, budgetssemver
@lelantos-org/sdk/advancedcreateWallet, createWatchWallet, WalletConfig; the ChainReader / ChainAdapter ports, the viem adapter and reader, signers, supports* guards; Submitter / HttpRelayerSubmitter; note stores and sources; tree and nullifier persistence; coin selectors; scanners; hasTokenMeta, outAmountsemver, integrator tier
@lelantos-org/sdk/proverProver, WasmProver, SnarkjsProver, WorkerProver, browserWorkerProver; artifact resolution and caching; configureProverThreadssemver, integrator tier
@lelantos-org/sdk/protocolfees (depositTotals, withdrawNet, withdrawNetFor, grossForNet, depositFeeAssetRefusal), deposit pulls, denominations, units (RAY, toCircuitUnits, toTokenUnitsAtRate), swap sizing, circuit shapes, relayer wire types, bundle builders, Permit2 signingsemver, integrator tier
@lelantos-org/sdk/primitiveshex, bytes, field, randomness; Poseidon and Jubjub; keys, diversifiers and addresses; note encryption and output-secret derivation; FMDsemver, integrator tier
@lelantos-org/sdk/servicesRelayerClient, DepositStream, FmdClient, fetchSwapQuote, the shared HTTP clientsemver, integrator tier
@lelantos-org/sdk/workers/proverthe prover worker's entry module, for new Worker(new URL(…))semver
@lelantos-org/sdk/workers/scannerthe scanner worker's entry modulesemver
@lelantos-org/sdk/internalwalletInternals, circuit internals, the stored-note codec, sync engine pieces, test hooksunstable

The raw wasm-pack modules are also exported as @lelantos-org/sdk/wasm/{prover,jubjub,poseidon} and …/wasm for bundler setups that resolve wasm assets themselves.

Stability tiers ​

  • semver — the application surface. Breaking changes follow the pre-1.0 policy in Versioning.
  • semver, integrator tier — covered too, but shaped by the SDK's internals, so expect wider changes than on the root.
  • unstable — @lelantos-org/sdk/internal can change in any release, including patches. Pin an exact version and the @lelantos-org/circuits version when relying on it.

Where to find things ​

You want toImport from
connect, move value, read balances, format amounts, handle errors@lelantos-org/sdk
show a balance from a viewing key@lelantos-org/sdk/watch
pay an HTTP 402 from the pool@lelantos-org/sdk/x402
build a wallet with a custom submitter, selector, note source, or fee override@lelantos-org/sdk/advanced
implement a chain adapter, note store, or persistence backend@lelantos-org/sdk/advanced
run proving in a worker you construct, or manage the artifact cache@lelantos-org/sdk/prover
compute fees, pulls, or denominations without a wallet@lelantos-org/sdk/protocol
derive keys, decode addresses, register an FMD subscription@lelantos-org/sdk/primitives
talk to the relayer, FMD server, or quoter directly@lelantos-org/sdk/services
reach a wallet's note store, prover, or markSpent@lelantos-org/sdk/internal
ts
import { 
connect
,
formatAmount
,
isWalletError
, type WalletApi } from "@lelantos-org/sdk";
import {
connectWatch
} from "@lelantos-org/sdk/watch";
import {
createWallet
,
ViemChainAdapter
} from "@lelantos-org/sdk/advanced";
import {
browserWorkerProver
} from "@lelantos-org/sdk/prover";
import {
depositTotals
,
RAY
} from "@lelantos-org/sdk/protocol";
import {
cryptoContext
,
decodeAddress
} from "@lelantos-org/sdk/primitives";
import {
DepositStream
,
FmdClient
} from "@lelantos-org/sdk/services";
import {
x402
} from "@lelantos-org/sdk/x402";

Bundle size ​

The root entry is lazy: importing connect does not bundle the spend path, the prover, or the deposit family until they are first used. @lelantos-org/sdk/watch never reaches the prover or the relayer submitter. Each entry has a size budget checked in the SDK's CI, so importing from the root is not a bundle-size penalty.

x402 payments ​

x402(wallet, options) wraps fetch so that an HTTP 402 Payment Required is paid from the shielded pool and the request retried once. A budget is required.

ts
import { 
isWalletError
} from "@lelantos-org/sdk";
import {
x402
} from "@lelantos-org/sdk/x402";
await
wallet
.
sync
();
const
pay
=
x402
(
wallet
, {
budget
: {
total
: "5",
perRequest
: "0.5" }, // human units, per asset
allowHosts
: ["api.example.com"],
}); try { const
data
= await
pay
("https://api.example.com/premium").
then
((
r
) =>
r
.
json
());
} catch (
err
) {
if (
isWalletError
(
err
, "X402_PAYMENT"))
console
.
warn
("not paid:",
err
.
reason
);
else throw
err
;
}

To send the wrapped requests through your own fetch (a proxy, instrumentation), pass http: { fetch }, as with connect.

Payments are shielded transfers by default. allowUnshielded: true also pays servers that accept only standard EVM exact, by unshielding into a throwaway address; it is off by default.

Budgets, offer selection, the unshielded mechanism and every refusal reason are covered in x402 payments.

Next ​