@jokio/sdk

SDK for building decentralised localfirst web apps.
Provides authentication (guest, passkeys, email), tts ai model integrations, realtime communication & crypto encryptions.
Examples
Authentication
import { jok } from '@jokio/sdk'
{
const userData = await jok.auth.guestLogin()
}
{
await jok.auth.requestPasskeyLogin()
await jok.auth.requestPasskeyLogin({ displayName })
await jok.auth.requestPasskeyLogin({
displayName,
isRegistration: true,
})
}
{
const isSent = await jok.auth.requestEmailLogin(email)
const userData = await jok.auth.completeEmailLogin(email, otpCode)
}
Text to speech (TTS)
import { jok } from '@jokio/sdk'
const voices = await jok.tts.getVoices()
console.log(voices)
const audio = await jok.tts.getAudio(
'Hello there, how are you?',
'en-US-AvaNeural',
)
audio.play()
Real-time communication
Between users (browsers), using nats
import { jok } from '@jokio/sdk'
await jok.nats.connect()
await jok.nats.on('dev.test', (data, ctx) => {
console.log('Received event', data, ctx)
})
await jok.nats.publish('dev.test', {
hello: 'world',
})
P2P encrypted message exchange
Works directly in browser
import { jok } from '@jokio/sdk'
const kp1 = await jok.crypto.createSessionKeyPair()
const kp2 = await jok.crypto.createSessionKeyPair()
const p1 = await jok.crypto.exportPublicKey(kp1.publicKey)
const p2 = await jok.crypto.exportPublicKey(kp2.publicKey)
console.log({ p1, p2 })
const shared1 = await jok.crypto.deriveAESKey(kp1.privateKey, p2)
const shared2 = await jok.crypto.deriveAESKey(kp2.privateKey, p1)
const originalText = 'Hello World'
const encrypted = await jok.crypto.encrypt(originalText, shared1)
const decrypted = await jok.crypto.decrypt(encrypted, shared2)
console.log({
match: originalText === decrypted,
originalText,
decrypted,
})
Directly in HTML
You can use directly into html as well:
<script type="module">
import { jok } from 'https://esm.run/@jokio/sdk'
async function textToAudio() {
const audio = await jok.tts.getAudio(
'Hello there, how are you?',
'en-US-AvaNeural',
)
audio.play()
}
window.textToAudio = textToAudio
</script>