⛩️ make beautiful typescript apis
it's always the last argument - by default, renraku will log errors to the console, but you can provide a `LoggerTap` to get verbose logging of everything - here's an example of a `LoggerTap` that logs to a file: ```ts import fs from "node:fs" const logger = new Renraku.LoggerTap({ log(message, meta) { fs.appendFileSync("renraku.log", `${message}\n`) }, error(error, meta) { fs.appendFileSync("renraku.log", `ERROR: ${error.message}\n`) }, }) await new Renraku.Server({rpc: myRpc, tap: logger}) .listen(8000) ``` ### 🍏 transmuters - a transmuter is a function that takes an incoming request and returns a modified request - transmuters are useful for things like authentication, rate limiting, etc - here's an example of a transmuter that adds a `userId` to the request meta: ```ts const addUserId = Renraku.transmuter(async (request, meta) => { const userId = await getUserIdFromRequest(request)
How the donated funds are distributed
Kivach works on the Obyte network, and therefore you can track all donations.