npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cordova-updater

v1.0.1

Published

OTA update for cordova apps

Downloads

14

Readme

cordova-updater

Update cordova app withtout store review.

WIP => This module is not ready yet.

Only the documentation is ready. Not the code.

You have 3 ways possible :

  • use capgo.app a full featured auto update system in 5 min Setup, to manage version, update, revert and see stats.
  • use your own server update with auto update system
  • use manual methods to zip, upload, download, from JS to do it when you want.

Community

Join the discord to get help.

Documentation

I maintain a more user friendly documentation.

install plugin

cordova plugin add cordova-plugin-cocoapod-support
cordova plugin add cordova-updater

Auto update setup

Create account in capgo.app and get your API key

  • Download the CLI npm i -g capgo
  • Add app from CLI capgo add -a API_KEY
  • Upload app capgo upload -a API_KEY
  • Upload app capgo set -a API_KEY -s public
  • Edit your 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"
		}
	}
}
  • Add to your main code
  import { CordovaUpdater } from 'cordova-updater'
  CordovaUpdater.notifyAppReady()
  // To let auto update know you app boot well.
  • Do npm run build && npx cordova prepare to copy the build to cordova.
  • Run the app and see app auto update after each backgrounding.
  • If update fail it will roolback to previous version.

See more there in the Auto update documentation.

Manual setup

Zip your builded app code and upload it somewhere.

Add in your main code

  import { CordovaUpdater } from 'cordova-updater'


  let version = ""
  document.addEventListener("pause", async () => {
    await CapacitorUpdater.set(version)
    console.log("Version set")
  }), false);
  document.addEventListener("resume", async () => {
      version = await CapacitorUpdater.download({
        url: 'https://github.com/Forgr-ee/Mimesis/releases/download/0.0.1/dist.zip',
      })
  }), false);

  // or do it when click on button
  const updateNow = async () => {
    const version = await CapacitorUpdater.download({
      url: 'https://github.com/Forgr-ee/Mimesis/releases/download/0.0.1/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.

You can list the version and manage it with the command below.

Packaging 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.

API

download(...)

download(options: { url: 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; } |

Returns: Promise<{ version: string; }>


set(...)

set(options: { version: string; versionName?: string; }) => 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; versionName?: string; } |


delete(...)

delete(options: { version: string; }) => Promise<void>

Delete version in storage

| Param | Type | | ------------- | --------------------------------- | | options | { version: string; } |


list()

list() => Promise<{ versions: string[]; }>

Get all available versions

Returns: Promise<{ versions: string[]; }>


reset(...)

reset(options: { toAutoUpdate?: boolean; }) => Promise<void>

Set the builtin version (the one sent to Apple store / Google play store ) as current version

| Param | Type | | ------------- | ---------------------------------------- | | options | { toAutoUpdate?: boolean; } |


current()

current() => Promise<{ current: string; }>

Get the current version, if none are set it returns builtin

Returns: Promise<{ current: string; }>


reload()

reload() => Promise<void>

Reload the view


versionName()

versionName() => Promise<{ versionName: string; }>

Get the version name, if it was set during the set phase

Returns: Promise<{ versionName: string; }>


notifyAppReady()

notifyAppReady() => Promise<void>

Notify native plugin that the update is working, only in auto-update


delayUpdate()

delayUpdate() => Promise<void>

Skip updates in the next time the app goes into the background, only in auto-update


cancelDelay()

cancelDelay() => Promise<void>

allow update in the next time the app goes into the background, only in auto-update


Listen to download events

  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.

Inspiration