Loading…
Canonical collection of pre-built BSV overlay topic managers and lookup services for identity, tokens, supply chain, messaging, and more.
npm install @bsv/overlay-topicsimport { HelloWorldTopicManager, createHelloWorldLookupService } from '@bsv/overlay-topics'
import { BTMSTopicManager, createBTMSLookupService } from '@bsv/overlay-topics'
const helloManager = new HelloWorldTopicManager()
const helloService = await createHelloWorldLookupService(mongoDb)
const btmsManager = new BTMSTopicManager()
const btmsService = await createBTMSLookupService(mongoDb)
const results = await btmsService.lookup({
service: 'ls_btms',
query: { assetId: 'txid.0' }
})For UMP, UMPTopicManager and createUMPLookupService can share a
MongoUMPIdentityStore. Presentation and recovery hashes are reserved by the
first unspent outpoint and can move only through a transaction that consumes
the current owner. The lookup intentionally returns every matching current
UTXO so a wallet can resolve lineage or use a verified WAB pin for pre-existing
ambiguous state.
import OverlayExpress from '@bsv/overlay-express'
import {
HelloWorldTopicManager,
createHelloWorldLookupService,
DIDTopicManager,
createDIDLookupService,
KVStoreTopicManager,
createKVStoreLookupService,
BTMSTopicManager,
createBTMSLookupService
} from '@bsv/overlay-topics'
const server = new OverlayExpress('mynode', privateKey, 'example.com')
server.configureTopicManager('tm_helloworld', new HelloWorldTopicManager())
server.configureTopicManager('tm_did', new DIDTopicManager())
server.configureTopicManager('tm_kvstore', new KVStoreTopicManager())
server.configureTopicManager('tm_btms', new BTMSTopicManager())
await server.configureLookupServiceWithMongo('ls_helloworld', db =>
createHelloWorldLookupService(db)
)
await server.configureLookupServiceWithMongo('ls_did', db => createDIDLookupService(db))
await server.configureLookupServiceWithMongo('ls_kvstore', db => createKVStoreLookupService(db))
await server.configureLookupServiceWithMongo('ls_btms', db => createBTMSLookupService(db))
await server.configureEngine()
await server.start()// DID query
const didResults = await didService.lookup({
service: 'ls_did',
query: { serialNumber: 'c24tMTIzNDU=' }
})
// KVStore query
const kvResults = await kvService.lookup({
service: 'ls_kvstore',
query: {
key: 'mykey',
controller: '025706528f0f6894b2ba505007267ccff1133e004452a1f6b72ac716f246216366'
}
})
// Supply chain query
const scResults = await scService.lookup({
service: 'ls_supplychain',
query: { chainId: 'abc123' }
})const manager = new DIDTopicManager()
const admittance = await manager.identifyAdmissibleOutputs(beef, [])
// Expects 2-field PushDrop: [serialNumber, signature]create*LookupService(db) functions are async and return configured servicesOVERLAY_INDEX_REPAIR — Opt-in. When a unique index cannot be built because the collection
already holds duplicate rows, setting this to true deletes the duplicates (oldest row per key is
kept) and rebuilds the index. It deletes rows, so it is off by defaultcreate*LookupService() returns Promise; must await