JavaScript & TypeScript SDK
The official Mumin SDK provides a verified, type-safe, and cached way to interact with the API. It works in Node.js, Browsers, React, and Vue.
Installation
# Core (Node.js / Vanilla JS)
npm install @mumin/core
# React
npm install @mumin/react @mumin/core
# Vue
npm install @mumin/vue @mumin/coreCore SDK (Node.js / Vanilla JS)
Suitable for server-side logic (Next.js API routes) or plain JavaScript apps.
Quick Start
javascript
import { MuminClient } from '@mumin/core'
const client = new MuminClient('YOUR_API_KEY')
// 1. Get a random hadith
const random = await client.hadiths.random()
console.log('Random:', random.translation?.text)
// 2. Search for hadiths
const search = await client.search.query('prayer')
console.log('Found:', search.data.length, 'hadiths')
// 3. Get specific hadith
const hadith = await client.hadiths.get(1)
console.log('Hadith #1:', hadith.arabicText)Client Configuration
const client = new MuminClient("API_KEY", {
baseURL: "https://api.hadith.mumin.ink/v1",
timeout: 5000, // 5 seconds
retries: 3, // Retry failed requests 3 times
retryDelay: 1000, // Wait 1s between retries
});React SDK
React hooks for seamless data fetching.
Setup Provider
Wrap your app in MuminProvider:
// App.tsx
import { MuminProvider } from "@mumin/react";
export default function App() {
return (
<MuminProvider apiKey="YOUR_API_KEY">
<YourApp />
</MuminProvider>
);
}Usage
import { useHadith } from "@mumin/react";
function HadithCard() {
const { data, loading, error } = useHadith(1);
if (loading) return <div>Loading...</div>;
if (error) return <div>Error: {error.message}</div>;
return (
<div className="card">
<h3>Hadith #{data?.hadithNumber}</h3>
<p>{data?.translation?.text}</p>
</div>
);
}Vue SDK
Composables for Vue 3 applications.
Setup Plugin
// main.ts
import { createApp } from "vue";
import { MuminPlugin } from "@mumin/vue";
const app = createApp(App);
app.use(MuminPlugin, { apiKey: "YOUR_API_KEY" });Usage
<script setup>
import { useHadith } from "@mumin/vue";
const { data, loading } = useHadith(1);
</script>
<template>
<div v-if="loading">Loading...</div>
<div v-else>
{{ data?.translation?.text }}
</div>
</template>Error Handling
The SDK provides typed error classes:
import { AuthenticationError, RateLimitError } from "@mumin/core";
try {
await client.hadiths.get(1);
} catch (error) {
if (error instanceof AuthenticationError) {
console.error("Please check your API key");
} else if (error instanceof RateLimitError) {
console.error("Slow down!");
}
}