Aedes 基础 (TCP)
最小 mqttkit app:Aedes TCP broker、用户名鉴权、审计中间件、publish 时校验 params.uid === principal.uid。
bash
bun run --cwd examples/aedes-basic dev监听 mqtt://localhost:1883,任意 MQTT 客户端可连。
源码
ts
import { aedes } from '@mqttkit/aedes'
import { MqttApp, router } from '@mqttkit/core'
type Services = {
audit: {
log(event: string, fields: Record<string, unknown>): Promise<void>
}
}
const app = new MqttApp<{ principal?: { uid: string }; services: Services }>()
.decorate('audit', {
async log(event: string, fields: Record<string, unknown>) {
console.log(event, fields)
},
})
.use(
aedes({
tcp: { port: 1883 },
authenticate: ({ clientId, username }) => {
if (!username) return false
return { uid: username || clientId }
},
}),
)
.use(async (ctx, next) => {
await ctx.services.audit.log('mqtt.message', {
clientId: ctx.clientId,
topic: ctx.topic,
})
await next()
})
.use(
router<{ principal?: { uid: string }; services: Services }>()
.topic('devices/:uid/events', {
publish: ({ params, principal }) => params.uid === principal?.uid,
async onMessage(ctx) {
await ctx.publish(`server/${ctx.params.uid}/echo`, ctx.payload, { qos: 0 })
},
})
.topic('server/:uid/echo', {
subscribe: ({ params, principal }) => params.uid === principal?.uid,
}),
)
await app.listen()
console.log('mqttkit Aedes TCP example listening on mqtt://localhost:1883')