Files
com.pearcal/package.json
Your NameandClaude Opus 4.7 6cf81b4d72 feat: mnemonic-derived identity with platform-backed recovery (Phase 1 of #76)
Identity is now derived from a BIP39 12-word mnemonic via keet-identity-key
(SLIP-48 Ed25519). profile.id becomes a deterministic 32-hex hash of the
identity public key, and writer-announce exchanges identity-signed proofs so
peers can prove ownership across reinstalls.

Mnemonic backup:
- Android: Google Play Services Block Store (BlockStoreModule)
- iOS: iCloud Keychain via Security.framework with kSecAttrSynchronizable
- Local copy persisted via expo-secure-store for in-session reveal

Onboarding adds "I already use PearCal" with cloud-restore and manual
12-word entry paths, a completion toast naming the backup platform, and a
soft nudge banner shown once the user has authored events when only a
local copy exists. Tapping "Back up" opens the Profile tab, auto-expands
Advanced, and scrolls to the recovery-phrase row. The row's Save action
writes pearcal-recovery-phrase.txt through the native share sheet.

Phase 1 restores identity only — group/event rebinding lands in Phase 2.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-20 22:58:07 -05:00

62 lines
1.9 KiB
JSON

{
"private": true,
"name": "pearcal-native",
"main": "expo-router/entry",
"scripts": {
"start": "expo start",
"android": "expo run:android",
"ios": "expo run:ios",
"bundle:bare": "bare-pack --linked src/bare.js -o assets/bare-universal.bundle",
"bundle:ui": "esbuild src/ui/App.jsx --bundle --format=iife --global-name=PearCalApp --jsx-factory=React.createElement --jsx-fragment=React.Fragment --outfile=assets/app-ui.bundle",
"postinstall": "patch-package"
},
"author": "Holepunch",
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/holepunchto/bare-expo/issues"
},
"homepage": "https://github.com/holepunchto/bare-expo#readme",
"dependencies": {
"@fontsource/manrope": "^5.2.8",
"@phosphor-icons/react": "^2.1.10",
"autobase": "^7.25.1",
"b4a": "^1.8.0",
"blind-peering": "^2.0.1",
"corestore": "^7.8.0",
"expo": "^54.0.10",
"expo-build-properties": "^1.0.9",
"expo-constants": "^18.0.9",
"expo-file-system": "~19.0.21",
"expo-linking": "^8.0.8",
"expo-router": "^6.0.8",
"expo-secure-store": "~15.0.8",
"expo-system-ui": "^6.0.7",
"hyperbee": "^2.27.3",
"hypercore": "^11.26.0",
"hyperdht": "^6.29.0",
"hyperswarm": "^4.17.0",
"keet-identity-key": "^3.1.0",
"qrcode": "^1.5.4",
"react": "^19.1.4",
"react-dom": "^19.1.4",
"react-native": "^0.81.4",
"react-native-b4a": "^0.0.4",
"react-native-bare-kit": "^0.12.2",
"react-native-safe-area-context": "^5.4.0",
"react-native-screens": "^4.23.0",
"react-native-webview": "13.15.0",
"sodium-universal": "^5.0.1"
},
"devDependencies": {
"@types/react": "^19.1.3",
"bare-bundle": "^1.10.0",
"bare-pack": "^2.0.0",
"esbuild": "^0.27.3",
"patch-package": "^8.0.1",
"prettier": "^3.3.3",
"prettier-config-standard": "^7.0.0",
"typescript": "^5.3.3"
},
"version": "1.0.0"
}