@sapkalabs/react-native-app-updates
v0.1.12
Published
A React Native TurboModule for checking versions and performing app updates
Maintainers
Readme
@sapkalabs/react-native-app-updates
A React Native TurboModule-first library for version checks and in-app update flows on React Native 0.81+ New Architecture apps.
Installation
npm install @sapkalabs/react-native-app-updatesUsage
import {
androidDebug,
createUpdateClient,
sources,
type ILogger,
type CustomUpdateProvider,
} from '@sapkalabs/react-native-app-updates';
const updates = createUpdateClient({
platforms: {
ios: {
source: sources.appStore({
country: 'us',
retry: {
maxAttempts: 3,
},
}),
},
android: {
source: sources.playStore({
flow: 'auto',
}),
},
},
debugging: {
logger: console as ILogger,
verbose: __DEV__,
},
});
const result = await updates.checkForUpdate({
mode: 'offerUpdateAllowed',
});
if (result.kind === 'updateAvailable' && result.mode === 'offerUpdateAllowed') {
await updates.performUpdate(result);
}
const fakeUpdates = createUpdateClient({
platforms: {
android: {
source: sources.fakePlayStore({
flow: 'auto',
}),
},
},
});
await androidDebug.fakePlayStore.configureState({
availability: 'available',
availableVersionCode: 100,
allowedUpdateTypes: ['flexible', 'immediate'],
});Custom Providers
const provider: CustomUpdateProvider = {
async getLatestVersion() {
return {
latestVersion: '2.0.0',
targetUrl: 'https://example.com/app-updates',
metadata: {
channel: 'beta',
},
};
},
};
const updates = createUpdateClient({
platforms: {
ios: { source: sources.custom(provider) },
android: { source: sources.custom(provider) },
},
});Result Model
checkForUpdate() returns one of:
upToDateupdateAvailableunsupportedproviderErrorinvalidConfiguration
For App Store lookups, providerError can include a typed error object:
if (result.kind === 'providerError' && result.sourceType === 'appStore') {
result.error?.type; // 'network' | 'system' | 'unknown'
result.error?.message;
}performUpdate() returns one of:
startedredirectedcancelledfailed
Notes
- iOS store lookup uses axios internally with optional App Store-scoped retry configuration. By default it attempts the request up to 3 times with a base delay of 3000 ms for stepped network retries.
- iOS store lookup uses the installed bundle identifier by default, plus an optional App Store country.
debugging.identifierOverrideanddebugging.versionOverridecan override the installed values for iOS and custom sources. - Android Play integration uses the native Play Core API and supports
auto,immediate, andflexibleflow selection. sources.fakePlayStore(...)uses Android'sFakeAppUpdateManagerso you can debug Play update flows locally. UseandroidDebug.fakePlayStoreto reset, configure, and advance the fake state machine.- The official Android Play source ignores
debugging.identifierOverrideanddebugging.versionOverrideand always uses the installed app metadata. - The library does not own timers, cooldown state, prompts, or localized UI copy.
Contributing
License
MIT
