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.