Files
timmy-tower/artifacts/mobile/app.json
Alexander Whitestone 6433d9172c feat: mobile Nostr identity — Amber NIP-55 + nsec fallback (Fixes #29)
- Add NostrIdentityContext with SecureStore-backed nsec storage
  and pure-JS bech32/secp256k1 for nsec→npub derivation; private key
  never enters React state or logs
- Android: NIP-55 Amber deep-link integration (get_public_key +
  sign_event) with install-prompt fallback to Play Store when Amber
  is absent; Android queries manifest entry for com.greenart7c3.nostrsigner
- iOS/both: manual nsec entry stored exclusively in expo-secure-store
- Settings tab (gear icon) added to both NativeTabLayout and
  ClassicTabLayout showing: connected npub (truncated), signing method
  badge, Disconnect button (with confirmation + SecureStore wipe)
- Root layout wrapped with NostrIdentityProvider
- app.json: add expo-secure-store plugin + Android intentFilters for
  mobile://amber-callback deep-link return path

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 16:24:45 -04:00

60 lines
1.3 KiB
JSON

{
"expo": {
"name": "Timmy Mobile",
"slug": "mobile",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/images/icon.png",
"scheme": "mobile",
"userInterfaceStyle": "dark",
"newArchEnabled": true,
"splash": {
"image": "./assets/images/splash-icon.png",
"resizeMode": "contain",
"backgroundColor": "#0A0A12"
},
"ios": {
"supportsTablet": false
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/images/icon.png",
"backgroundColor": "#0A0A12"
},
"intentFilters": [
{
"action": "VIEW",
"autoVerify": true,
"data": [{ "scheme": "mobile", "host": "amber-callback" }],
"category": ["BROWSABLE", "DEFAULT"]
}
],
"queries": [
{ "package": "com.greenart7c3.nostrsigner" }
]
},
"web": {
"favicon": "./assets/images/icon.png",
"backgroundColor": "#0A0A12"
},
"plugins": [
[
"expo-router",
{
"origin": "https://replit.com/"
}
],
"expo-font",
"expo-secure-store",
"expo-web-browser"
],
"extra": {
"apiDomain": "${EXPO_PUBLIC_DOMAIN}"
},
"experiments": {
"typedRoutes": true,
"reactCompiler": true
}
}
}