連絡
れんらく
R·E·N·R·A·K·U
npm install renraku
🔆 make smart typescript apis
🛎️ simply expose async functions
🛡 you set auth policies for groups of functions
🎭 easy mocks for testing and development
🧠 designed for good typescript types
🌐 make http json-rpc apis
🔁 make bidirectional websocket json-rpc apis
⛩️ RENRAKU teaches by example
-
let's make an example api
import * as renraku from "renraku"
export const exampleApi = renraku.api({
greeter: renraku.service()
.policy(async(meta: {token: string}) => {
if (meta.token) return {doctorate: meta.token === "doctor"}
else throw new Error("invalid token")
})
.expose(auth => ({
async greet(name: string) {
return auth.doctorate
? `hello dr. ${name}`
: `hi ${name}`
},
})),
})
-
now let's run our api on a node server
import * as renraku from "renraku"
import {nodeServer} from "renraku/x/http/node-server.js"
import {exampleApi} from "./example-api.js"
const server = nodeServer({
api: exampleApi,
exposeErrors: false,
maxPayloadSize: renraku.megabytes(10),
})
server.listen(8000)
-
now let's call that function from a browser
import * as renraku from "renraku"
import type {exampleApi} from "./example-api.js"
let meta = {token: "doctor"}
const {greeter} = renraku.browserClient({
url: "http://localhost:8000/",
metaMap: {
calculator: async() => meta,
},
})
const result1 = await greeter.greet("chase")
meta = {token: "not a doctor"}
const result2 = await greeter.greet("chase")
meta = {token: undefined}
const result3 = await greeter.greet("chase")
⛩️ RENRAKU mocks help you test your app
-
let's test our example-api, locally, in our test suite
import * as renraku from "renraku"
import {exampleApi} from "./example-api.js"
let meta = {token: "doctor"}
const {greeter} = renraku.mock()
.forApi(exampleApi)
.withMetaMap({
greeter: async() => meta,
})
const result1 = await greeter.greet("chase")
meta = {token: "not a doctor"}
const result2 = await greeter.greet("chase")
-
when making our mocks, we may choose to skip the auth policy logic
const {greeter} = renraku.mock()
.forApi(exampleApi)
.withAuthMap({
greeter: async() => ({doctorate: true}),
})
⛩️ RENRAKU error handling
~ readme docs coming soon lol ~
⛩️ RENRAKU also lets you build two-way websocket systems
~ readme docs coming soon lol ~
— RENRAKU means "contact" —