@inkd/sdk
v1.3.0
Published
TypeScript SDK for the Inkd Protocol — permanent on-chain project registry on Base. Lock 1 $INKD to register. Pay 0.001 ETH to push a version. Own your work forever.
Maintainers
Readme
@inkd/sdk
TypeScript SDK for inkd Protocol. Store files permanently on Arweave, register them on Base. Pay in USDC. Wallet is identity.
Install
npm install @inkd/sdk viemQuick start
import { ProjectsClient } from '@inkd/sdk'
import { privateKeyToAccount } from 'viem/accounts'
import { base } from 'viem/chains'
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
const client = new ProjectsClient({
account,
chain: base,
apiUrl: 'https://api.inkdprotocol.com',
})
// Create a project — agent auto-pays $0.10 USDC via x402
const project = await client.createProject({
name: 'my-agent-tool',
description: 'An AI tool for doing amazing things',
license: 'MIT',
isAgent: true,
agentEndpoint: 'https://api.myagent.xyz',
})
// Push a version — pays Arweave cost + 20% markup via x402
const version = await client.pushVersion({
projectId: project.projectId,
filePath: './dist/agent.js',
versionTag: 'v1.0.0',
})
console.log('On-chain:', version.txHash)
console.log('Arweave:', `https://arweave.net/${version.arweaveHash}`)Payment model
inkd uses x402 — HTTP 402 payment protocol for autonomous agents.
- createProject: $0.10 USDC minimum
- pushVersion: Arweave storage cost + 20% markup, minimum $0.10 USDC
- All reads: Free. No payment, no auth.
The SDK handles payment automatically. No manual approval flows, no gas estimation. Just call the method — the SDK signs and pays.
AgentVault — encrypted credential storage
Store any credential encrypted on Arweave. Only wallets you authorize can decrypt.
import { AgentVault } from '@inkd/sdk'
const vault = new AgentVault(account)
// Store encrypted (only your wallet can read)
const arweaveId = await vault.store({ apiKey: 'sk-...', endpoint: 'https://...' })
// Read back (decrypts automatically)
const creds = await vault.load(arweaveId)Key methods
// Projects
client.createProject(params) // register on-chain
client.pushVersion(params) // upload + register version
client.getProject(id) // get project details
client.listProjects(owner?) // list projects (optionally by wallet)
client.getLatestVersion(projectId) // get most recent version — what agents use to stay current
// Versions
client.listVersions(projectId) // full version history
client.getVersion(projectId, versionIndex) // specific version
// Discovery
client.searchProjects(query) // search by name
client.listAgents() // list all registered AI agentsError handling
try {
await client.pushVersion(params)
} catch (err) {
if (err.code === 'INSUFFICIENT_BALANCE') {
// Agent wallet needs more USDC
console.log(`Need ${err.required} USDC, have ${err.balance}`)
}
if (err.code === 'PAYMENT_FAILED') {
// x402 payment rejected
}
}