
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
@wisdomgarden/capacitor-updater
Advanced tools
Update capacitor app withtout store review.
You have 3 ways possible :
Join the discord to get help.
I maintain a more user friendly and complete documentation in notion site.
npm install capacitor-updater
npx cap sync
Create account in capgo.app and get your API key
npm i -g capgo
capgo add -a API_KEY
capgo upload -a API_KEY
capgo set -a API_KEY -s public
capacitor.config.json
like below, set autoUpdateUrl
with the url printed in the previous step.// capacitor.config.json
{
"appId": "**.***.**",
"appName": "Name",
"plugins": {
"CapacitorUpdater": {
"autoUpdateUrl": "https://capgo.app/api/latest?appid=**.****.***&channel=dev"
}
}
}
import { CapacitorUpdater } from 'capacitor-updater'
CapacitorUpdater.notifyAppReady()
// To let auto update know you app boot well.
npm run build && npx cap copy
to copy the build to capacitor.See more there in the Auto update documentation.
Download app update from url when user enter the app install it when user background the app.
In your main code :
import { CapacitorUpdater } from 'capacitor-updater'
import { SplashScreen } from '@capacitor/splash-screen'
import { App } from '@capacitor/app'
let version = ""
App.addListener('appStateChange', async(state) => {
if (state.isActive) {
// Do the download during user active app time to prevent failed download
version = await CapacitorUpdater.download({
url: 'https://github.com/Cap-go/demo-app/releases/download/0.0.4/dist.zip',
})
}
if (!state.isActive && version !== "") {
// Do the switch when user leave app
SplashScreen.show()
try {
await CapacitorUpdater.set(version)
} catch () {
SplashScreen.hide() // in case the set fail, otherwise the new app will have to hide it
}
}
})
// or do it when click on button
const updateNow = async () => {
const version = await CapacitorUpdater.download({
url: 'https://github.com/Cap-go/demo-app/releases/download/0.0.4/dist.zip',
})
// show the splashscreen to let the update happen
SplashScreen.show()
await CapacitorUpdater.set(version)
SplashScreen.hide() // in case the set fail, otherwise the new app will have to hide it
}
Be extra carufull for your update if you send a broken update, the app will crash until the user reinstalls it.
If you need more secure way to update your app, you can use Auto update system.
You can list the version and manage it with the command below.
dist.zip
Whatever you choose to name the file you download from your release/update server URL, the zip file should contain the full contents of your production Capacitor build output folder, usually {project directory}/dist/
or {project directory}/www/
. This is where index.html
will be located, and it should also contain all bundled JavaScript, CSS, and web resources necessary for your app to run.
Do not password encrypt this file, or it will fail to unpack.
download(options: { url: string; version: string; }) => Promise<{ version: string; }>
Download a new version from the provided URL, it should be a zip file, with files inside or with a unique folder inside with all your files
Param | Type |
---|---|
options | { url: string; version: string; } |
Returns: Promise<{ version: string; }>
set(options: { version: string; autoReload?: boolean; }) => Promise<void>
Set version as current version, set will return an error if there are is no index.html file inside the version folder. versionName
is optional and it's a custom value that will be saved for you
Param | Type |
---|---|
options | { version: string; autoReload?: boolean; } |
delete(options: { version: string; }) => Promise<void>
Delete version in storage
Param | Type |
---|---|
options | { version: string; } |
list() => Promise<{ versions: string[]; }>
Get all available versions
Returns: Promise<{ versions: string[]; }>
reset(options: { autoReload: boolean; }) => Promise<void>
Set the builtin
version (the one sent to Apple store / Google play store ) as current version
Param | Type |
---|---|
options | { autoReload: boolean; } |
current() => Promise<{ serverBasePath: string; pathPersist: string; }>
Get the current version, if none are set it returns builtin
Returns: Promise<{ serverBasePath: string; pathPersist: string; }>
reload() => Promise<void>
Reload the view
import { CapacitorUpdater } from 'capacitor-updater';
CapacitorUpdater.addListener('download', (info: any) => {
console.log('download was fired', info.percent);
});
On iOS, Apple don't allow you to show a message when the app is updated, so you can't show a progress bar.
jamesyoung1337 Thanks a lot for your guidance and support, it was impossible to make this plugin work without you.
FAQs
OTA update for capacitor apps
The npm package @wisdomgarden/capacitor-updater receives a total of 0 weekly downloads. As such, @wisdomgarden/capacitor-updater popularity was classified as not popular.
We found that @wisdomgarden/capacitor-updater demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.