Skip to main content

Install

pnpm add @arc/shlp-sdk viem

Create a client

import { createShlpClient } from "@arc/shlp-sdk";

const shlp = createShlpClient({
  apiBaseUrl: "https://shlp-web-production.up.railway.app",
  signer: walletProvider,
  fetch,
  timeoutMs: 10_000,
  retries: 2,
});

Read readiness and vault state

import { summarizeReadiness } from "@arc/shlp-sdk";

const [health, vault] = await Promise.all([
  shlp.getHealth(),
  shlp.getVault(),
]);

const readiness = summarizeReadiness(health, vault);

if (!readiness.canDisplay) {
  showUnavailableState(readiness.reasonCodes);
}

if (!readiness.canDeposit) {
  disableDeposit(readiness.reasonCodes);
}

Quote a deposit

import { parseUsdc } from "@arc/shlp-sdk/format";

const quote = await shlp.quoteDepositAction({
  amount: parseUsdc("100"),
  account: wallet.address,
  receiver: wallet.address,
  slippageBps: 50,
});

for (const requirement of quote.requirements ?? []) {
  await shlp.sendApiTransaction(requirement.tx, wallet.address);
}

await shlp.sendApiTransaction(quote.tx, wallet.address);
Deposit quotes are server-side gated. If deposits are paused or operations are not ready, the endpoint returns a typed business error instead of calldata.

Verify before partner demos

API_BASE=https://shlp-web-production.up.railway.app npm run smoke:api
PARTNER_READY_REQUIRED=1 API_BASE=https://shlp-web-production.up.railway.app npm run readiness:partner
The strict readiness command must pass before external partner write-flow demos.