Loading…
TypeScript SDK for BSV Paymail (BRC-121 capability discovery and routing). Provides both client-side capability discovery and server-side router with built-in support for PKI, P2P destinations, and public profiles.
npm install @bsv/paymailimport { PaymailClient, PublicProfileCapability } from '@bsv/paymail'
const client = new PaymailClient()
const publicProfile = await client.getPublicProfile('satoshi@myDomain.com')
console.log(publicProfile.name, publicProfile.avatar)
const profileEndpoint = await client.ensureCapabilityFor(
'myDomain.com',
PublicProfileCapability.getCode()
)
console.log(profileEndpoint)
const pkiResult = await client.getPki('satoshi@myDomain.com')
console.log(pkiResult.pubkey) // user's identity key/.well-known/bsvalias/* endpointsdomainLogicHandler callbackimport express from 'express'
import { PaymailRouter, PublicKeyInfrastructureRoute, PublicProfileRoute } from '@bsv/paymail'
const app = express()
const baseUrl = 'https://myDomain.com'
const publicProfileRoute = new PublicProfileRoute({
domainLogicHandler: async params => {
const { name, domain } = PublicProfileRoute.getNameAndDomain(params)
const user = await fetchUser(name, domain)
return {
name: user.getAlias(),
domain,
avatar: user.getAvatarUrl()
}
}
})
const pkiRoute = new PublicKeyInfrastructureRoute({
domainLogicHandler: async params => {
const { name, domain } = PublicKeyInfrastructureRoute.getNameAndDomain(params)
const user = await fetchUser(name, domain)
return {
bsvalias: '1.0',
handle: `${name}@${domain}`,
pubkey: user.getIdentityKey()
}
}
})
const routes = [publicProfileRoute, pkiRoute]
const paymailRouter = new PaymailRouter({ baseUrl, routes })
app.use(paymailRouter.getRouter())
app.listen(3000, () => {
console.log(`Paymail server running on ${baseUrl}:3000`)
})import { PaymailClient, PublicProfileCapability } from '@bsv/paymail'
const client = new PaymailClient()
// Get public profile
const profile = await client.getPublicProfile('alice@example.com')
console.log(profile.name, profile.avatar)
// Discover all capabilities
const profileEndpoint = await client.ensureCapabilityFor(
'example.com',
PublicProfileCapability.getCode()
)
// Get user's public key
const pki = await client.getPki('alice@example.com')
// Get payment destination
const p2pDest = await client.getP2pPaymentDestination('alice@example.com', 10000)/.well-known/bsvalias/* pathsdomainLogicHandler callbackname@domain validated per BRC-121 specdomainLogicHandler callbacks are async; implement accordinglyname@domain format; invalid paymail raises error