expo-callkit-telecom 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,60 @@
1
+ # Changelog
2
+
3
+ All notable changes to `expo-callkit-telecom` are documented here.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.2.4] — 2026-05-16
9
+
10
+ ### Added
11
+ - Documentation site at https://mfairley.github.io/expo-callkit-telecom/ — VitePress with auto-generated typedoc API reference, deployed via a GitHub Actions workflow on push to `main`.
12
+ - "Verified against" matrix in the README and docs site, listing the iOS / Android / Expo SDK / React Native / New Architecture / media-transport versions exercised end-to-end on real devices in each release.
13
+ - `docs:dev` / `docs:build` / `docs:preview` / `docs:api` scripts.
14
+
15
+ ### Changed
16
+ - Reframed the `react-native-callkeep` comparison around architectural choices (Jetpack `androidx.core:core-telecom`, Swift + Kotlin, Expo Modules API, `RTCAudioSession` manual-audio coordination, native VoIP push parsing) — framing tied to platform recommendations rather than to any other library's release cadence.
17
+ - `docs/` and `marketing/` excluded from the npm tarball.
18
+
19
+ ## [0.2.3] — 2026-05-16
20
+
21
+ ### Added
22
+ - `CHANGELOG.md`.
23
+ - `docs/vs-callkeep.md` — standalone migration / comparison guide.
24
+
25
+ ### Changed
26
+ - Tightened the npm description and expanded keywords for discoverability.
27
+ - Trimmed the README callkeep comparison; full side-by-side now lives at [`docs/vs-callkeep.md`](docs/vs-callkeep.md).
28
+
29
+ ## [0.2.2] — 2026-05-16
30
+
31
+ ### Changed
32
+ - Moved README badges below the intro for consistency with sibling repo.
33
+
34
+ ## [0.2.1] — 2026-05-16
35
+
36
+ ### Fixed
37
+ - Dropped `.svg` suffix from the license badge URL.
38
+
39
+ ### Changed
40
+ - Auto-create a GitHub release on publish; README polish.
41
+ - Applied `swift-format` and `ktfmt` across the native sources.
42
+
43
+ ## [0.2.0] — 2026-05-15
44
+
45
+ ### Added
46
+ - Initial public implementation:
47
+ - CallKit (iOS) + Jetpack `androidx.core:core-telecom` (Android) with a single typed `CallSession` and parity API (`request` / `report` / `fulfill`).
48
+ - Native VoIP push parsing: APNs VoIP (PushKit) on iOS, FCM data messages on Android — calls can be reported from a terminated state.
49
+ - System ringtone for incoming calls and looped dialtone (with fade-in) for outgoing calls; both configurable via the config plugin.
50
+ - Cross-platform audio session management with typed port types and live route-change events; integrates with WebRTC's `RTCAudioSession` for manual-audio stacks (LiveKit, plain WebRTC).
51
+ - Mute / hold / video / DTMF, both `app → system` and `system → app`.
52
+ - iOS call intents: Recents list and Siri ("call Jane").
53
+ - Config plugin: entitlements, background modes, microphone permission, ringtone/dialtone bundling, FCM service registration.
54
+ - CI: trusted publishing on Node 24 / npm 11.
55
+
56
+ [0.2.4]: https://github.com/mfairley/expo-callkit-telecom/releases/tag/v0.2.4
57
+ [0.2.3]: https://github.com/mfairley/expo-callkit-telecom/releases/tag/v0.2.3
58
+ [0.2.2]: https://github.com/mfairley/expo-callkit-telecom/releases/tag/v0.2.2
59
+ [0.2.1]: https://github.com/mfairley/expo-callkit-telecom/releases/tag/v0.2.1
60
+ [0.2.0]: https://github.com/mfairley/expo-callkit-telecom/releases/tag/v0.2.0
package/README.md CHANGED
@@ -23,6 +23,21 @@ The module is opinionated about *system integration* and unopinionated about *me
23
23
  - 🗣️ **Call intents on iOS** — Recents list, Siri ("call Jane")
24
24
  - 🧩 **Typed TypeScript API** with a single `CallSession` object that tracks state across the call lifecycle
25
25
 
26
+ ## 🧪 Verified against
27
+
28
+ This release is exercised end-to-end on real devices via the runnable `example/` app.
29
+
30
+ | | Tested against |
31
+ | --- | --- |
32
+ | iOS | 26 (minimum 15.1) |
33
+ | Android | 15 (minimum API 26) |
34
+ | Expo SDK | 55 |
35
+ | React Native | 0.83 |
36
+ | New Architecture | Yes |
37
+ | Media transport | LiveKit RN SDK |
38
+
39
+ Each release updates this table — so the recency signal is the version number on npm, not a promise in prose.
40
+
26
41
  ## 📦 Install
27
42
 
28
43
  ```sh
@@ -196,13 +211,7 @@ This module hands the OS a CallKit/Telecom call, which keeps the *process* alive
196
211
 
197
212
  ## 🆚 Comparison with `react-native-callkeep`
198
213
 
199
- [`react-native-callkeep`](https://github.com/react-native-webrtc/react-native-callkeep) is the long-standing option in this space. Here are some differences with this package:
214
+ [`react-native-callkeep`](https://github.com/react-native-webrtc/react-native-callkeep) is the long-standing React Native library in this space. `expo-callkit-telecom` solves the same problem but is built on the current generation of platform APIs: Jetpack `androidx.core:core-telecom` on Android, Swift + Kotlin, the Expo Modules API with a config plugin, and `RTCAudioSession` coordination for manual-audio WebRTC stacks like LiveKit. It also parses APNs VoIP and FCM data payloads natively, so the cold-start incoming-call case works without app-side glue.
200
215
 
201
- - **Android backend.** callkeep uses the classic `android.telecom.ConnectionService` (`minSdk 23`). This module uses Jetpack `androidx.core:core-telecom` (`minSdk 26`), the Google-recommended path going forward — it owns the foreground service, the incoming-call notification, and the full-screen intent, so you don't wire any of that up.
202
- - **Native language.** callkeep is Objective-C + Java. This module is Swift + Kotlin.
203
- - **VoIP push parsing.** callkeep doesn't parse pushes — you wire up `pushRegistry:didReceiveIncomingPushWithPayload:` (or `react-native-voip-push-notification`) and FCM data handling yourself. This module parses APNs VoIP and FCM payloads natively, before JS is running, so calls report correctly from a terminated state without app-side glue.
204
- - **Audio session.** callkeep manipulates `AVAudioSession` directly, leaving WebRTC's `RTCAudioSession` to be coordinated by the app. This module integrates with `RTCAudioSession` so manual-audio WebRTC stacks (LiveKit, plain WebRTC) work without extra wiring.
205
- - **API shape.** callkeep's options are split into `{ ios: {...}, android: {...} }` and several methods are platform-only. This module exposes one typed `CallSession` object and one set of verbs (`request` / `report` / `fulfill`) that work the same on both platforms.
206
- - **Expo support.** This module is an Expo Module with a config plugin that handles entitlements, background modes, permissions, ringtone bundling, and FCM service registration.
207
- - **Tested with.** iOS 26 / Android 15, on real devices, with LiveKit as the media transport.
216
+ Full side-by-side, compatibility matrix, and migration notes: **[docs/vs-callkeep.md](docs/vs-callkeep.md)**.
208
217
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "expo-callkit-telecom",
3
- "version": "0.2.2",
4
- "description": "Expo module wrapping CallKit (iOS) and Jetpack Core-Telecom (Android) with API parity",
3
+ "version": "0.2.4",
4
+ "description": "CallKit + Jetpack Core-Telecom for Expo / React Native native call UI, VoIP push, LiveKit-friendly audio. A modern react-native-callkeep alternative.",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
7
7
  "scripts": {
@@ -14,16 +14,30 @@
14
14
  "prepublishOnly": "expo-module prepublishOnly",
15
15
  "expo-module": "expo-module",
16
16
  "open:ios": "xed example/client/ios",
17
- "open:android": "open -a \"Android Studio\" example/client/android"
17
+ "open:android": "open -a \"Android Studio\" example/client/android",
18
+ "docs:api": "typedoc",
19
+ "docs:dev": "bun run docs:api && vitepress dev docs",
20
+ "docs:build": "bun run docs:api && vitepress build docs",
21
+ "docs:preview": "vitepress preview docs"
18
22
  },
19
23
  "keywords": [
20
24
  "react-native",
21
25
  "expo",
26
+ "expo-module",
22
27
  "callkit",
28
+ "callkeep",
23
29
  "telecom",
30
+ "core-telecom",
31
+ "jetpack",
24
32
  "voip",
25
33
  "calling",
26
- "webrtc"
34
+ "incoming-call",
35
+ "webrtc",
36
+ "livekit",
37
+ "pushkit",
38
+ "apns",
39
+ "fcm",
40
+ "push-notifications"
27
41
  ],
28
42
  "repository": {
29
43
  "type": "git",
@@ -41,10 +55,13 @@
41
55
  "dependencies": {},
42
56
  "devDependencies": {
43
57
  "@types/react": "~19.2.14",
44
- "expo-module-scripts": "^55.0.2",
45
58
  "expo": "^55.0.24",
59
+ "expo-module-scripts": "^55.0.2",
46
60
  "react": "19.2.0",
47
- "react-native": "0.83.6"
61
+ "react-native": "0.83.6",
62
+ "typedoc": "^0.28.19",
63
+ "typedoc-plugin-markdown": "^4.11.0",
64
+ "vitepress": "^1.6.4"
48
65
  },
49
66
  "peerDependencies": {
50
67
  "expo": "*",
package/typedoc.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://typedoc-plugin-markdown.org/schema.json",
3
+ "entryPoints": ["src/index.ts"],
4
+ "out": "docs/api",
5
+ "plugin": ["typedoc-plugin-markdown"],
6
+ "readme": "none",
7
+ "githubPages": false,
8
+ "skipErrorChecking": true,
9
+ "excludePrivate": true,
10
+ "excludeInternal": true,
11
+ "hideBreadcrumbs": true,
12
+ "hidePageHeader": true,
13
+ "useCodeBlocks": true,
14
+ "expandObjects": true,
15
+ "parametersFormat": "table",
16
+ "indexFormat": "table",
17
+ "entryFileName": "index.md",
18
+ "fileExtension": ".md"
19
+ }