react-native-flix-codepush
Version:
A modern CodePush implementation for React Native applications
220 lines (197 loc) • 5.42 kB
text/typescript
/**
* CodePush update status enum
*/
export enum CodePushUpdateState {
RUNNING = 'RUNNING',
PENDING = 'PENDING',
LATEST = 'LATEST',
}
/**
* CodePush installation status enum
*/
export enum CodePushInstallMode {
IMMEDIATE = 'IMMEDIATE',
ON_NEXT_RESTART = 'ON_NEXT_RESTART',
ON_NEXT_RESUME = 'ON_NEXT_RESUME',
ON_NEXT_SUSPEND = 'ON_NEXT_SUSPEND',
}
/**
* CodePush check frequency enum
*/
export enum CodePushCheckFrequency {
MANUAL = 0,
ON_APP_START = 1,
ON_APP_RESUME = 2,
}
/**
* CodePush deployment status enum
*/
export enum CodePushDeploymentStatus {
SUCCEEDED = 'DeploymentSucceeded',
FAILED = 'DeploymentFailed',
}
/**
* CodePush update info interface
*/
export interface CodePushUpdateInfo {
isAvailable: boolean;
appVersion?: string;
description?: string;
isMandatory?: boolean;
packageHash?: string;
label?: string;
packageSize?: number;
downloadURL?: string;
}
/**
* CodePush package interface
*/
export interface CodePushPackage {
deploymentKey: string;
description: string;
label: string;
appVersion: string;
isMandatory: boolean;
packageHash: string;
packageSize: number;
localPath: string;
}
/**
* CodePush remote package interface
*/
export interface CodePushRemotePackage extends CodePushPackage {
downloadUrl: string;
}
/**
* CodePush local package interface
*/
export interface CodePushLocalPackage extends CodePushPackage {
isFirstRun: boolean;
previousLabelOrAppVersion?: string;
isPending: boolean;
}
/**
* CodePush configuration interface
*/
export interface CodePushConfig {
deploymentKey: string;
serverUrl: string;
appVersion: string;
checkFrequency?: CodePushCheckFrequency;
installMode?: CodePushInstallMode;
mandatoryInstallMode?: CodePushInstallMode;
minimumBackgroundDuration?: number;
}
/**
* CodePush sync options interface
*/
export interface CodePushSyncOptions {
deploymentKey?: string;
installMode?: CodePushInstallMode;
mandatoryInstallMode?: CodePushInstallMode;
minimumBackgroundDuration?: number;
updateDialog?: UpdateDialogOptions | boolean;
ignoreFailedUpdates?: boolean;
}
/**
* Update dialog options interface
*/
export interface UpdateDialogOptions {
appendReleaseDescription?: boolean;
descriptionPrefix?: string;
mandatoryContinueButtonLabel?: string;
mandatoryUpdateMessage?: string;
optionalIgnoreButtonLabel?: string;
optionalInstallButtonLabel?: string;
optionalUpdateMessage?: string;
title?: string;
}
/**
* CodePush status report interface
*/
export interface CodePushStatusReport {
deploymentKey: string;
label: string;
appVersion: string;
clientUniqueId: string;
previousLabelOrAppVersion?: string;
status: CodePushDeploymentStatus;
}
/**
* Native module interface
*/
export interface FlixCodePushNativeModule {
// Update management
getUpdateMetadata(): Promise<CodePushLocalPackage | null>;
installUpdate(packageHash: string, installMode: CodePushInstallMode): Promise<void>;
restartApp(onlyIfUpdateIsPending?: boolean): Promise<void>;
// Package management
downloadUpdate(updatePackage: CodePushRemotePackage): Promise<CodePushLocalPackage>;
processPackage(packageData: ArrayBuffer, packageHash: string, updatePackage: CodePushRemotePackage): Promise<CodePushLocalPackage>;
getConfiguration(): Promise<CodePushConfig>;
// Device info
getAppVersion(): Promise<string>;
getDeviceId(): Promise<string>;
// Storage operations
saveUpdateMetadata(updatePackage: CodePushLocalPackage): Promise<void>;
clearUpdates(): Promise<void>;
// New Architecture support
getConstants(): {
isNewArchitectureEnabled: boolean;
isHermesEnabled: boolean;
};
}
/**
* CodePush hook return type
*/
export interface UseCodePushResult {
checkForUpdate: (deploymentKey?: string) => Promise<CodePushRemotePackage | null>;
sync: (options?: CodePushSyncOptions) => Promise<CodePushSyncStatus>;
getCurrentPackage: () => Promise<CodePushLocalPackage | null>;
restartApp: () => Promise<void>;
clearUpdates: () => Promise<void>;
getUpdateMetadata: () => Promise<CodePushLocalPackage | null>;
downloadUpdate: (remotePackage: CodePushRemotePackage) => Promise<CodePushLocalPackage>;
installUpdate: (packageHash: string, installMode?: CodePushInstallMode) => Promise<void>;
syncStatus: CodePushSyncStatus;
currentPackage: CodePushLocalPackage | null;
pendingUpdate: CodePushRemotePackage | null;
isCheckingForUpdate: boolean;
isDownloading: boolean;
isInstalling: boolean;
downloadProgress: { receivedBytes: number; totalBytes: number };
cancelSync: () => void;
}
/**
* CodePush sync status enum
*/
export enum CodePushSyncStatus {
UP_TO_DATE = 0,
UPDATE_INSTALLED = 1,
UPDATE_IGNORED = 2,
UNKNOWN_ERROR = 3,
SYNC_IN_PROGRESS = 4,
CHECKING_FOR_UPDATE = 5,
AWAITING_USER_ACTION = 6,
DOWNLOADING_PACKAGE = 7,
INSTALLING_UPDATE = 8,
}
/**
* CodePush error interface
*/
export interface CodePushError extends Error {
code: string;
domain: string;
}
/**
* Download progress callback
*/
export type DownloadProgressCallback = (progress: { receivedBytes: number; totalBytes: number }) => void;
/**
* Sync status change callback
*/
export type SyncStatusChangedCallback = (status: CodePushSyncStatus) => void;
/**
* Binary version mismatch callback
*/
export type BinaryVersionMismatchCallback = (update: CodePushRemotePackage) => boolean;