{"_id":"@alaznah/calling","_rev":"4-3ebdaa13b09a46c2a038ca3d67c15336","name":"@alaznah/calling","dist-tags":{"beta":"0.1.0-beta.2","latest":"0.1.0"},"versions":{"0.1.0-beta.1":{"name":"@alaznah/calling","version":"0.1.0-beta.1","keywords":["react-native","calling","voice","video","voip","alaznah"],"author":{"name":"Alaznah"},"license":"MIT","_id":"@alaznah/calling@0.1.0-beta.1","maintainers":[{"name":"dev-alaznah","email":"dev.huzaifa.khalil@gmail.com"}],"homepage":"https://docs.alaznah.com","bugs":{"url":"https://github.com/alaznah/alaznah-sdk/issues"},"dist":{"shasum":"6c06326271c0804b8a7d7fb79d164e2b68c660fe","tarball":"https://registry.npmjs.org/@alaznah/calling/-/calling-0.1.0-beta.1.tgz","fileCount":252,"integrity":"sha512-ZflIhq+9AAjkrUgrXKxp0v+9hsKisUG+ZHPWSF5MIyWsHPD5vnqTr43Or3s8rr2uzkv5S4DYvdxt/F5lgEWbgA==","signatures":[{"sig":"MEYCIQDYGjDCB9CwEgqtys8oMrPS3g9UCFuNao8qsnh4dH2yHgIhAOKnLL9llOiwIrIvq1RzYEfLoyyM8TjCahgA+LO7EXWn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":700413},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","react-native":"./dist/index.js"},"./ui":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js","default":"./dist/components/index.js","react-native":"./dist/components/index.js"},"./package.json":"./package.json","./app.plugin.js":"./app.plugin.js"},"gitHead":"6e5e31fc2c028ce10ae98f9d395e23e7390a797a","scripts":{"lint":"tsc -p tsconfig.json --noEmit","test":"vitest run","build":"npm run clean && tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","pack:check":"npm pack --dry-run","publish:beta":"npm publish --access public --tag beta","prepublishOnly":"npm run build"},"_npmUser":{"name":"dev-alaznah","email":"dev.huzaifa.khalil@gmail.com"},"app.plugin":"./app.plugin.js","repository":{"url":"git+https://github.com/alaznah/alaznah-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"Alaznah Calling — voice & video for real-time experiences in React Native","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@alaznah/protocol":"0.1.0"},"react-native":"./dist/index.js","codegenConfig":{"ios":{"modulesProvider":{"AlaznahCalling":"AlaznahCalling"}},"name":"AlaznahCallingSpec","type":"modules","android":{"javaPackageName":"com.alaznah.calling"},"jsSrcsDir":"src/specs"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","react":"18.3.1","vitest":"^3.0.8","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/react":"^18.3.18","react-native":"0.76.9","react-native-svg":"^15.15.5","react-native-webrtc":"^124.0.5","react-native-callkeep":"^4.3.16","react-native-incall-manager":"^4.2.0","@react-native-community/netinfo":"^11.4.1"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-svg":">=15.0.0","react-native-webrtc":">=118.0.0","react-native-callkeep":">=4.3.0","react-native-incall-manager":">=4.0.0","@react-native-community/netinfo":">=11.0.0"},"peerDependenciesMeta":{"react-native-svg":{"optional":true},"react-native-callkeep":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/calling_0.1.0-beta.1_1786207940640_0.2047481624741283","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.2":{"name":"@alaznah/calling","version":"0.1.0-beta.2","keywords":["react-native","calling","voice","video","voip","alaznah"],"author":{"name":"Alaznah"},"license":"MIT","_id":"@alaznah/calling@0.1.0-beta.2","maintainers":[{"name":"dev-alaznah","email":"dev.huzaifa.khalil@gmail.com"}],"homepage":"https://docs.alaznah.com","bugs":{"url":"https://github.com/alaznah/alaznah-sdk/issues"},"dist":{"shasum":"73b35a98323089927efbfd4c6fc66d342ed83f1b","tarball":"https://registry.npmjs.org/@alaznah/calling/-/calling-0.1.0-beta.2.tgz","fileCount":257,"integrity":"sha512-me3xQP2u/PQhABB75iMx9lnPqDiIMnXMxanR9yERme674Fgpm8j/1TQGqPolWzSG3tl8LgxAsXe1hp9Hh8tXeA==","signatures":[{"sig":"MEQCIEorgwTPBslncvFIi5yz6NHp8QdH5muxRdOpZduABCB7AiBfpvcuwkLXppGEx5vNeOsA8WSg4hsho2zJk/eTtv7Ysg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":770363},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","react-native":"./dist/index.js"},"./ui":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js","default":"./dist/components/index.js","react-native":"./dist/components/index.js"},"./package.json":"./package.json","./app.plugin.js":"./app.plugin.js"},"gitHead":"a97b2570c3ede55084e2f8d575e18fd3bb756dd4","scripts":{"lint":"tsc -p tsconfig.json --noEmit","test":"vitest run","build":"npm run clean && tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","pack:check":"npm pack --dry-run","publish:beta":"npm publish --access public --tag beta","prepublishOnly":"npm run build"},"_npmUser":{"name":"dev-alaznah","email":"dev.huzaifa.khalil@gmail.com"},"app.plugin":"./app.plugin.js","repository":{"url":"git+https://github.com/alaznah/alaznah-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"Alaznah Calling — voice & video for real-time experiences in React Native","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@alaznah/protocol":"0.1.0"},"react-native":"./dist/index.js","codegenConfig":{"ios":{"modulesProvider":{"AlaznahCalling":"AlaznahCalling"}},"name":"AlaznahCallingSpec","type":"modules","android":{"javaPackageName":"com.alaznah.calling"},"jsSrcsDir":"src/specs"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"ws":"^8.18.0","react":"18.3.1","vitest":"^3.0.8","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/react":"^18.3.18","react-native":"0.76.9","react-native-svg":"^15.15.5","react-native-webrtc":"^124.0.5","react-native-callkeep":"^4.3.16","react-native-incall-manager":"^4.2.0","@react-native-community/netinfo":"^11.4.1"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.76.0","react-native-svg":">=15.0.0","react-native-webrtc":">=118.0.0","react-native-callkeep":">=4.3.0","react-native-incall-manager":">=4.0.0","@react-native-community/netinfo":">=11.0.0"},"peerDependenciesMeta":{"react-native-callkeep":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/calling_0.1.0-beta.2_1786493245136_0.7346858864448749","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@alaznah/calling","version":"0.1.0","description":"Alaznah Calling — voice & video for real-time experiences in React Native","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","react-native":"./dist/index.js","app.plugin":"./app.plugin.js","exports":{".":{"types":"./dist/index.d.ts","react-native":"./dist/index.js","import":"./dist/index.js","default":"./dist/index.js"},"./ui":{"types":"./dist/components/index.d.ts","react-native":"./dist/components/index.js","import":"./dist/components/index.js","default":"./dist/components/index.js"},"./app.plugin.js":"./app.plugin.js","./package.json":"./package.json"},"scripts":{"clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","build":"npm run clean && tsc -p tsconfig.json","prepack":"npm run build","prepublishOnly":"npm run build","pack:check":"npm pack --dry-run","publish:release":"npm publish --access public","test":"vitest run","lint":"tsc -p tsconfig.json --noEmit","typecheck":"tsc -p tsconfig.json --noEmit"},"peerDependencies":{"@react-native-community/netinfo":">=11.0.0","react":">=18.0.0","react-native":">=0.76.0","react-native-callkeep":">=4.3.0","react-native-incall-manager":">=4.0.0","react-native-svg":">=15.0.0","react-native-webrtc":">=118.0.0"},"peerDependenciesMeta":{"react-native-callkeep":{"optional":true}},"dependencies":{"@alaznah/protocol":"0.1.1"},"devDependencies":{"@react-native-community/netinfo":"^11.4.1","@types/react":"^18.3.18","@types/ws":"^8.5.13","react":"18.3.1","react-native":"0.76.9","react-native-callkeep":"^4.3.16","react-native-incall-manager":"^4.2.0","react-native-svg":"^15.15.5","react-native-webrtc":"^124.0.5","typescript":"^5.8.2","vitest":"^3.0.8","ws":"^8.18.0"},"publishConfig":{"access":"public"},"codegenConfig":{"name":"AlaznahCallingSpec","type":"modules","jsSrcsDir":"src/specs","android":{"javaPackageName":"com.alaznah.calling"},"ios":{"modulesProvider":{"AlaznahCalling":"AlaznahCalling"}}},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/alaznah/alaznah-sdk.git"},"homepage":"https://docs.alaznah.com","keywords":["react-native","calling","voice","video","voip","alaznah"],"author":{"name":"Alaznah"},"bugs":{"url":"https://github.com/alaznah/alaznah-sdk/issues"},"_id":"@alaznah/calling@0.1.0","gitHead":"9dc401477e93d773968b7fb88e9251bc09e9684d","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-HFYCnhg4s0ZyuDfhd1fKinedXXoG+M81SG0rEYDkl66HaVD/D83u+OAmCDBloGLVrQMhkpRVxqcwEdfNnhNtiQ==","shasum":"4daaf72c0dadaf69a1b5238e65681a7a75cadc8e","tarball":"https://registry.npmjs.org/@alaznah/calling/-/calling-0.1.0.tgz","fileCount":275,"unpackedSize":1104505,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDGTDiKPz/ydR1rG0CGEx59Sna0ReCCEDUMOSvZHZorGAIhAOPvZ6IEcAWElCXwLKMZP9Yk2biaYbBIiaHVJNtY/GaH"}]},"_npmUser":{"name":"dev-alaznah","email":"dev.huzaifa.khalil@gmail.com"},"directories":{},"maintainers":[{"name":"dev-alaznah","email":"dev.huzaifa.khalil@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/calling_0.1.0_1789230848712_0.7249325289724213"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-08T16:52:20.484Z","modified":"2026-09-12T16:34:09.017Z","0.1.0-beta.1":"2026-08-08T16:52:20.828Z","0.1.0-beta.2":"2026-08-12T00:07:25.286Z","0.1.0":"2026-09-12T16:34:08.860Z"},"bugs":{"url":"https://github.com/alaznah/alaznah-sdk/issues"},"author":{"name":"Alaznah"},"license":"MIT","homepage":"https://docs.alaznah.com","keywords":["react-native","calling","voice","video","voip","alaznah"],"repository":{"type":"git","url":"git+https://github.com/alaznah/alaznah-sdk.git"},"description":"Alaznah Calling — voice & video for real-time experiences in React Native","maintainers":[{"name":"dev-alaznah","email":"dev.huzaifa.khalil@gmail.com"}],"readme":"# @alaznah/calling\n\n**1:1 voice & video calling for React Native** — provider, hooks, and ready-made call UI on Alaznah Cloud.\n\n> [!IMPORTANT]\n> First stable release: **`@alaznah/calling@0.1.0`**. Pin this version. Group calling and further API freeze land in `1.0.0`. Guides: [docs.alaznah.com](https://docs.alaznah.com).\n\n---\n\n## 🔍 Features\n\n| Feature | Status |\n|---------|--------|\n| 📞 **1:1 voice calling** | ✅ Available |\n| 🎥 **1:1 video calling** | ✅ Available |\n| 🧩 **`CallingProvider` + hooks** (`useCallingClient`, `useCall`, …) | ✅ Available |\n| 🖼️ **Built-in UI** — `CallingScreen` / `CallingUI` (incoming, outgoing, active) | ✅ Available |\n| 🎨 **Themes & slots** for branded call chrome | ✅ Available |\n| 🔐 **Short-lived JWT auth** (mint from your backend / Console Test Token) | ✅ Available |\n| ☁️ **Hosted Signaling** (`wss://signal.alaznah.com`) | ✅ Available |\n| 🏠 **Self-hosted signaling** (point `signalingUrl` at your WSS) | ✅ Available |\n| 📱 **iOS & Android** (RN CLI / Expo **dev builds**) | ✅ Available |\n| 🔔 **Push / background ringing** (Console credentials + docs) | ✅ Available |\n| 👥 **Group calling** | 🗺️ Roadmap |\n\n---\n\n## ✨ Project Status\n\n| Package | State | Notes |\n|---------|-------|--------|\n| **`@alaznah/calling` `0.1.0`** | ✅ Stable | Public npm · New Architecture–friendly RN **0.76+** |\n| **Protocol** [`@alaznah/protocol`](https://github.com/alaznah/alaznah-protocol) | ✅ `0.1.1` | Shared message contracts |\n| **Hosted Cloud** | ✅ Live | Signaling + Console minting |\n| **`1.0.0`** | 🏗️ Ahead | Group calling and further API freeze |\n\n---\n\n## 📚 Documentation & Examples\n\n| Resource | Link |\n|----------|------|\n| 📖 **Docs** | [docs.alaznah.com](https://docs.alaznah.com) |\n| 🚀 **Quick Start** | [docs → Quick Start](https://docs.alaznah.com/docs/quick-start) |\n| 📦 **Installation** | [docs → Installation](https://docs.alaznah.com/docs/installation) |\n| 🧭 **Compatibility** | [docs → Compatibility](https://docs.alaznah.com/docs/compatibility) |\n| 🔑 **Authentication** | [docs → Authentication](https://docs.alaznah.com/docs/authentication) |\n| 🖼️ **Call UI** | [docs → Call UI](https://docs.alaznah.com/docs/call-ui) |\n| 🎛️ **Console** | [console.alaznah.com](https://console.alaznah.com) |\n| 📦 **npm** | [`@alaznah/calling`](https://www.npmjs.com/package/@alaznah/calling) |\n| 🧪 **Examples** | [alaznah/alaznah-examples](https://github.com/alaznah/alaznah-examples) |\n\n---\n\n## 🚀 Quick Start\n\n### Requirements\n\n- React Native **0.76+**\n- Android **compileSdk 35 or 36** · **minSdk 24**\n- iOS **13+**\n- RN **CLI** or Expo **development build** (Expo Go is **not** supported)\n- `@alaznah/calling` requires the following React Native peer dependencies (see Install)\n- Calling tokens from **your** backend (never ship API secrets in the app)\n\nFull matrix: [Compatibility](https://docs.alaznah.com/docs/compatibility).\n\n### Install\n\nPick your package manager — peers stay in **your app** (native modules are not bundled inside the SDK):\n\n```bash\n# npm — package, then required peers\nnpm install @alaznah/calling\nnpm install react-native-webrtc react-native-incall-manager @react-native-community/netinfo react-native-svg\n\n# Yarn — one line\nyarn add @alaznah/calling react-native-webrtc react-native-incall-manager @react-native-community/netinfo react-native-svg\n\n# pnpm — one line\npnpm add @alaznah/calling react-native-webrtc react-native-incall-manager @react-native-community/netinfo react-native-svg\n\ncd ios && pod install && cd ..\n# rebuild the native app after install\n```\n\n`@alaznah/calling` requires the following React Native peer dependencies:\n\n**REQUIRED**\n\n- `react-native-webrtc`\n- `react-native-incall-manager`\n- `@react-native-community/netinfo`\n- `react-native-svg`\n\nYour React Native app already includes `react` and `react-native`.\n\n**OPTIONAL**\n\n- `react-native-callkeep` — only when you explicitly choose CallKeep integration. The SDK’s own native calling path does not require CallKeep.\n\nWithout `react-native-webrtc`, `startCall` fails with **WebRTC adapters not found**.\n\n**iOS Picture-in-Picture:** apply the `react-native-webrtc` patch shipped under\n`node_modules/@alaznah/calling/patches/` (see that folder’s README):\n\n```json\n\"postinstall\": \"patch-package --patch-dir node_modules/@alaznah/calling/patches\"\n```\n\nDo not copy patches into the host app — the SDK is the source of truth.\nThe `basic-call` example already uses this `postinstall`.\n\nMore: [Installation](https://docs.alaznah.com/docs/installation).\n\n### Usage\n\n```tsx\nimport { Button } from 'react-native';\nimport {\n  CallingProvider,\n  CallingUI,\n  useCallingClient,\n  useCallingReady,\n} from '@alaznah/calling';\nasync function fetchCallingToken(): Promise<string> {\n  const res = await fetch('https://your-api.example.com/calling/token');\n  const { token } = await res.json();\n  return token;\n}\n\nfunction Dialer() {\n  const client = useCallingClient();\n  const ready = useCallingReady();\n\n  return (\n    <>\n      <Button\n        disabled={!ready}\n        title=\"Call\"\n        onPress={() =>\n          void client.startCall({\n            calleeId: 'bob',\n            calleeDisplayName: 'Bob',\n            mediaType: 'video',\n          })\n        }\n      />\n      <CallingUI client={client} />\n    </>\n  );\n}\n\nexport function App() {\n  return (\n    <CallingProvider\n      config={{\n        // omit signalingUrl to use Hosted Signaling default\n        signalingUrl: 'wss://signal.alaznah.com',\n        userId: 'alice',\n        displayName: 'Alice',\n        getAuthToken: fetchCallingToken,\n      }}\n    >\n      <Dialer />\n    </CallingProvider>\n  );\n}\n```\n\n> **Tip:** For the fastest first call, use **`CallingScreen`** from `@alaznah/calling` (built-in dialer + incoming + active). Chat apps usually mount **`CallingUI`** as an overlay — [Call UI](https://docs.alaznah.com/docs/call-ui).\n\nIncoming accept is **swipe up** on the green control (tap does not accept).\n\n---\n\n## ☁️ Alaznah Cloud\n\n| Service | Endpoint |\n|---------|----------|\n| 📡 Signaling | `wss://signal.alaznah.com` |\n| ❤️ Health | `https://signal.alaznah.com/health` |\n| 📖 Docs | [docs.alaznah.com](https://docs.alaznah.com) |\n| 🎛️ Console | [console.alaznah.com](https://console.alaznah.com) |\n\nSelf-hosting: set `signalingUrl` to your own `wss://` endpoint. Operator source: [alaznah/alaznah-signaling](https://github.com/alaznah/alaznah-signaling) (private).\n\n---\n\n## ✅ Mobile checklist\n\n- [ ] Camera / microphone permissions (+ iOS usage strings)\n- [ ] Peer deps installed + **native rebuild**\n- [ ] Distinct `userId` per device (must match token claim)\n- [ ] Fresh calling JWT from Console Test Token or your mint API\n- [ ] Physical devices for real media tests\n- [ ] Push credentials for background / kill-state ringing\n\n---\n\n## 🧪 Develop in this repo\n\n```bash\nnpm install\nnpm run build\nnpm test\nnpm run pack:check\n```\n\n| Related repo | Role |\n|--------------|------|\n| [alaznah-protocol](https://github.com/alaznah/alaznah-protocol) | Wire protocol |\n| [alaznah-signaling](https://github.com/alaznah/alaznah-signaling) | Signaling server (private) |\n| [alaznah-examples](https://github.com/alaznah/alaznah-examples) | Sample apps |\n| [alaznah-docs](https://github.com/alaznah/alaznah-docs) | Docs site (private) |\n\n---\n\n## 📄 License\n\nMIT — see [`LICENSE`](./LICENSE).\n","readmeFilename":"README.md"}