UNPKG

@synerty/peek-ns-update

Version:

Allows the Peek platform to deploy content to the Nativescript apps

485 lines (427 loc) 17.2 kB
import {EventEmitter} from "@angular/core"; declare namespace Http { export const enum Verb { GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH } export interface Response { statusCode: number; body?: string; } export interface Requester { request(verb: Verb, url: string, callback: Callback<Response>): void; request(verb: Verb, url: string, requestBody: string, callback: Callback<Response>): void; } } interface Window { codePush: CodePushCordovaPlugin; } /** * Defines a package. All fields are non-nullable, except when retrieving the currently * running package on the first run of the app, * in which case only the appVersion is compulsory. * * !! THIS TYPE IS READ FROM NATIVE CODE AS WELL. ANY CHANGES TO THIS INTERFACE NEEDS * TO BE UPDATED IN NATIVE CODE !! */ interface IPackage { deploymentKey: string; description: string; label: string; appVersion: string; isMandatory: boolean; packageHash: string; packageSize: number; failedInstall: boolean; } /** * Defines a remote package, which represents an update package available for download. */ interface IRemotePackage extends IPackage { /** * The URL at which the package is available for download. */ downloadUrl: string; /** * Downloads the package update from the CodePush service. * * @param downloadProgress Optional callback invoked during the download process. * It is called several times with one DownloadProgress parameter. * * @return resolve is Called with one parameter, the downloaded package * information, once the download completed successfully. * reject is called in case of an error. */ download(downloadProgressEvent: EventEmitter<null | DownloadProgress>): Promise<ILocalPackage>; /** * Aborts the current download session, previously started with download(). * * @param abortSuccess Optional callback invoked if the abort operation succeeded. * @param abortError Optional callback invoked in case of an error. */ // abortDownload(abortSuccess?: SuccessCallback<void>, abortError?: ErrorCallback): void; } /** * Defines a local package. * * !! THIS TYPE IS READ FROM NATIVE CODE AS WELL. ANY CHANGES TO THIS INTERFACE NEEDS * TO BE UPDATED IN NATIVE CODE !! */ interface ILocalPackage extends IPackage { /** * The local storage path where this package is located. */ localPath: string; /** * Indicates if the current application run is the first one after the package was * applied. */ isFirstRun: boolean; /** * Applies this package to the application. The application will be reloaded with * this package and on every application launch this package will be loaded. * On the first run after the update, the application will wait for a * codePush.notifyApplicationReady() call. Once this call is made, the install * operation is considered a success. * Otherwise, the install operation will be marked as failed, and the application is * reverted to its previous version on the next run. * * @param installSuccess Callback invoked if the install operation succeeded. * @param installError Optional callback inovoked in case of an error. * @param installOptions Optional parameter used for customizing the installation * behavior. */ install(installSuccess: SuccessCallback<InstallMode>, installError?: ErrorCallback, installOptions?: InstallOptions): void; installWithPromise(installProgressEvent: EventEmitter<null | number>, installOptions?: InstallOptions): Promise<InstallMode>; } /** * Decomposed static side of RemotePackage. * For Class Decomposition guidelines see * http://www.typescriptlang.org/Handbook#writing-dts-files-guidelines-and-specifics */ interface RemotePackageStatic { new (): IRemotePackage; } /** * Decomposed static side of LocalPackage. * For Class Decomposition guidelines see * http://www.typescriptlang.org/Handbook#writing-dts-files-guidelines-and-specifics */ interface LocalPackageStatic { new (): ILocalPackage; } declare var RemotePackage: RemotePackageStatic; declare var LocalPackage: LocalPackageStatic; /** * Defines the JSON format of the current package information file. * This file is stored in the local storage of the device and persists between * store updates and code-push updates. * * !! THIS FILE IS READ FROM NATIVE CODE AS WELL. ANY CHANGES TO THIS INTERFACE * NEEDS TO BE UPDATED IN NATIVE CODE !! */ interface IPackageInfoMetadata extends ILocalPackage { nativeBuildTime: string; } interface NativeUpdateNotification { updateAppVersion: boolean; // Always true appVersion: string; } interface Callback<T> { (error: Error, parameter: T): void; } interface SuccessCallback<T> { (result?: T): void; } interface ErrorCallback { (error?: Error): void; } interface Configuration { appVersion: string; clientUniqueId: string; deploymentKey: string; serverUrl: string; ignoreAppVersion?: boolean; } declare class AcquisitionStatus { static DeploymentSucceeded: string; static DeploymentFailed: string; } declare class AcquisitionManager { constructor(httpRequester: Http.Requester, configuration: Configuration); public queryUpdateWithCurrentPackage(currentPackage: IPackage, callback?: Callback<IRemotePackage | NativeUpdateNotification>): void; public reportStatusDeploy(pkg?: IPackage, status?: string, previousLabelOrAppVersion?: string, previousDeploymentKey?: string, callback?: Callback<void>): void; public reportStatusDownload(pkg: IPackage, callback?: Callback<void>): void; } interface CodePushCordovaPlugin { /** * Get the current package information. * * @param packageSuccess Callback invoked with the currently deployed * package information. * @param packageError Optional callback invoked in case of an error. */ getCurrentPackage(packageSuccess: SuccessCallback<ILocalPackage>, packageError?: ErrorCallback): void; /** * Gets the pending package information, if any. A pending package is one * that has been installed but the application still runs the old code. * This happends only after a package has been installed using * ON_NEXT_RESTART or ON_NEXT_RESUME mode, but the application was not * restarted/resumed yet. */ getPendingPackage(packageSuccess: SuccessCallback<ILocalPackage>, packageError?: ErrorCallback): void; /** * Checks with the CodePush server if an update package is available for download. * * @param querySuccess Callback invoked in case of a successful response from the server. * The callback takes one RemotePackage parameter. * A non-null package is a valid update. * A null package means the application is up to date for the * current native application version. * @param queryError Optional callback invoked in case of an error. * @param deploymentKey Optional deployment key that overrides the config.xml setting. */ checkForUpdate(querySuccess: SuccessCallback<IRemotePackage>, queryError?: ErrorCallback, deploymentKey?: string): void; /** * Notifies the plugin that the update operation succeeded and that the application * is ready. * Calling this function is required on the first run after an update. * On every subsequent application run, calling this function is a noop. * If using sync API, calling this function is not required since sync * calls it internally. * * @param notifySucceeded Optional callback invoked if the plugin was successfully * notified. * @param notifyFailed Optional callback invoked in case of an error during notifying * the plugin. */ notifyApplicationReady(notifySucceeded?: SuccessCallback<void>, notifyFailed?: ErrorCallback): void; /** * Reloads the application. If there is a pending update package installed using * ON_NEXT_RESTART or ON_NEXT_RESUME modes, the update * will be immediately visible to the user. Otherwise, calling this function will * simply reload the current version of the application. */ restartApplication(installSuccess: SuccessCallback<void>, errorCallback?: ErrorCallback): void; /** * Convenience method for installing updates in one method call. * This method is provided for simplicity, and its behavior can be replicated by * using window.codePush.checkForUpdate(), RemotePackage's download() and * LocalPackage's install() methods. * * The algorithm of this method is the following: * - Checks for an update on the CodePush server. * - If an update is available * - If the update is mandatory and the alertMessage is set in options, * the user will be informed that the application will be updated to the * latest version. * The update package will then be downloaded and applied. * - If the update is not mandatory and the confirmMessage is set in options * the user will be asked if they want to update to the latest version. * If they decline, the syncCallback will be invoked with SyncStatus. * UPDATE_IGNORED. * - Otherwise, the update package will be downloaded and applied with * no user interaction. * - If no update is available on the server, or if a previously rolled back update * is available and the ignoreFailedUpdates is set to true, the syncCallback will * be invoked with the SyncStatus.UP_TO_DATE. * - If an error occurs during checking for update, downloading or installing it, * the syncCallback will be invoked with the SyncStatus.ERROR. * * @param syncCallback Optional callback to be called with the status of the sync * operation. * The callback will be called only once, and the possible * statuses are defined by the SyncStatus enum. * @param syncOptions Optional SyncOptions parameter configuring the behavior of * the sync operation. * @param downloadProgress Optional callback invoked during the download process. * It is called several times with one DownloadProgress parameter. * */ sync(syncCallback?: SuccessCallback<SyncStatus>, syncOptions?: SyncOptions, downloadProgress?: SuccessCallback<DownloadProgress>): void; } /** * Defines the possible result statuses of the window.codePush.sync operation. */ declare enum SyncStatus { /** * The application is up to date. */ UP_TO_DATE, /** * An update is available, it has been downloaded, unzipped and copied to the * deployment folder. * After the completion of the callback invoked with SyncStatus.UPDATE_INSTALLED, * the application will be reloaded with the updated code and resources. */ UPDATE_INSTALLED, /** * An optional update is available, but the user declined to install it. * The update was not downloaded. */ UPDATE_IGNORED, /** * An error happened during the sync operation. * This might be an error while communicating with the server, * downloading or unziping the update. * The console logs should contain more information about what happened. * No update has been applied in this case. */ ERROR, /** * There is an ongoing sync in progress, so this attempt to sync has been aborted. */ IN_PROGRESS, /** * Intermediate status - the plugin is about to check for updates. */ CHECKING_FOR_UPDATE, /** * Intermediate status - a user dialog is about to be displayed. * This status will be reported only if user interaction is enabled. */ AWAITING_USER_ACTION, /** * Intermediate status - the update package is about to be downloaded. */ DOWNLOADING_PACKAGE, /** * Intermediate status - the update package is about to be installed. */ INSTALLING_UPDATE } /** * Defines the available install modes for updates. */ declare enum InstallMode { /** * The update will be applied to the running application immediately. * The application will be reloaded with the new content immediately. */ IMMEDIATE, /** * The update is downloaded but not installed immediately. * The new content will be available the next time the application is started. */ ON_NEXT_RESTART, /** * The udpate is downloaded but not installed immediately. * The new content will be available the next time the application is * resumed or restarted, whichever event happends first. */ ON_NEXT_RESUME } /** * Defines the install operation options. */ interface InstallOptions { /** * Used to specify the InstallMode used for the install operation. * This is optional and defaults to InstallMode.ON_NEXT_RESTART. */ installMode?: InstallMode; /** * If installMode === ON_NEXT_RESUME, the minimum amount of time (in seconds) * which needs to pass with the app in the background before an update install * occurs when the app is resumed. */ minimumBackgroundDuration?: number; /** * Used to specify the InstallMode used for the install operation if the update * is mandatory. This is optional and defaults to InstallMode.IMMEDIATE. */ mandatoryInstallMode?: InstallMode; } /** * Defines the sync operation options. */ interface SyncOptions extends InstallOptions { /** * Optional boolean flag. If set, previous updates which were rolled back will * be ignored. Defaults to true. */ ignoreFailedUpdates?: boolean; /** * Used to enable, disable or customize the user interaction during sync. * If set to false, user interaction will be disabled. If set to true, the user will * be alerted or asked to confirm new updates, based on whether the update is mandatory. * To customize the user dialog, this option can be set to a custom * UpdateDialogOptions instance. */ updateDialog?: boolean | UpdateDialogOptions; /** * Overrides the config.xml deployment key when checking for updates. */ deploymentKey?: string; } /** * Defines the configuration options for the alert or confirmation dialog */ interface UpdateDialogOptions { /** * If a mandatory update is available and this option is set, the message will be * displayed to the user in an alert dialog before downloading and installing the update. * The user will not be able to cancel the operation, since the update is mandatory. */ mandatoryUpdateMessage?: string; /** * If an optional update is available and this option is set, the message will * be displayed to the user in a confirmation dialog. * If the user confirms the update, it will be downloaded and installed. Otherwise, * the update update is not downloaded. */ optionalUpdateMessage?: string; /** * The title of the dialog box used for interacting with the user in case of a * mandatory or optional update. * This title will only be used if at least one of mandatoryUpdateMessage or * optionalUpdateMessage options are set. */ updateTitle?: string; /** * The label of the confirmation button in case of an optional update. */ optionalInstallButtonLabel?: string; /** * The label of the cancel button in case of an optional update. */ optionalIgnoreButtonLabel?: string; /** * The label of the continue button in case of a mandatory update. */ mandatoryContinueButtonLabel?: string; /** * Flag indicating if the update description provided by the CodePush server should * be displayed in the dialog box appended to the update message. */ appendReleaseDescription?: boolean; /** * Optional prefix to add to the release description. */ descriptionPrefix?: string; } /** * Defines the JSON format of the package diff manifest file. */ interface IDiffManifest { deletedFiles: string[]; } /** * Defines the format of the DownloadProgress object, used to send periodical update * notifications on the progress of the update download. */ interface DownloadProgress { totalBytes: number; receivedBytes: number; }