@intentrail/sdk
v1.0.0
Published
TypeScript SDK for creating, signing, and verifying IntentRail manifests
Maintainers
Readme
@intentrail/sdk
TypeScript SDK for creating, signing, and verifying IntentRail manifests.
Installation
npm install @intentrail/sdk
# or
pnpm add @intentrail/sdkQuick Start
import {
createIntent,
signIntent,
verifyIntent,
summarizeIntent,
SOL_MINT,
} from "@intentrail/sdk";
// Create an intent
const intent = createIntent({
expires_at: new Date(Date.now() + 15 * 60 * 1000).toISOString(),
network: "mainnet-beta",
action: "swap",
actor: {
wallet_pubkey: "7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV",
},
constraints: {
max_spend: [{ mint: SOL_MINT, amount: "1000000000" }],
min_receive: [{ mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", amount: "95000000" }],
allowed_programs: [],
forbidden_accounts: [],
},
preconditions: {
required_accounts: [],
token_accounts: [],
blockhash_ttl_seconds: 60,
},
metadata: {
dapp: { name: "My App", url: "https://myapp.com" },
human_summary: "Swap 1 SOL for at least 95 USDC",
},
});
// Sign with a wallet
const signed = await signIntent(intent, {
publicKey: wallet.publicKey.toBase58(),
sign: (msg) => wallet.signMessage(msg),
});
// Verify the intent
const result = await verifyIntent(signed);
console.log(result.ok ? "Valid" : result.errors);
// Get wallet-friendly summary
const summary = summarizeIntent(signed);
console.log(summary.title); // "Swap via My App"
console.log(summary.bullets); // ["Spend up to 1 SOL", "Receive at least 95 USDC"]API Reference
Creation
createIntent(input)- Create an unsigned intent manifestcreateIntentWithExpiry(input, expiresInMs?)- Create with auto-generated expiration
Signing
signIntent(intent, signer)- Sign an intent with a wallethasSignatureFrom(intent, pubkey)- Check for signatureisSignedByActor(intent)- Check if signed by acting wallet
Verification
verifyIntent(intent, options?)- Full verification (schema, expiry, signatures)isValidIntent(intent)- Quick validity checkverifySignature(intent, signer)- Verify single signature
Summarization
summarizeIntent(intent)- Generate wallet-friendly summaryformatSummaryText(summary)- Format as plain text
Constraint Enforcement
enforceConstraints(intent, observed)- Check constraints against stateenforceConstraintsStrict(intent, observed)- Throw on violationcalculateSlippage(expected, actual)- Calculate swap slippage
Fetching
fetchIntent(url, options?)- Load and validate from URLfetchIntents(urls, options?)- Batch fetchcheckIntentUrl(url)- Check if URL is reachable
License
MIT
