mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
ecf242c6c6
Summary: Update for the admin page to show the latest available version information. - Latest version is read from docs.getgrist.com by default - It sends basic information (installationId, deployment type, and version) - Checks are done only on the page itself - The actual request is routed through the API (to avoid CORS) Test Plan: Added new test Reviewers: paulfitz Reviewed By: paulfitz Subscribers: paulfitz Differential Revision: https://phab.getgrist.com/D4238
85 lines
2.2 KiB
TypeScript
85 lines
2.2 KiB
TypeScript
import {BaseAPI, IOptions} from 'app/common/BaseAPI';
|
|
import {InstallPrefs} from 'app/common/Install';
|
|
import {TelemetryLevel} from 'app/common/Telemetry';
|
|
import {addCurrentOrgToPath} from 'app/common/urlUtils';
|
|
|
|
export const installPropertyKeys = ['prefs'];
|
|
|
|
export interface InstallProperties {
|
|
prefs: InstallPrefs;
|
|
}
|
|
|
|
export interface InstallPrefsWithSources {
|
|
telemetry: {
|
|
telemetryLevel: PrefWithSource<TelemetryLevel>;
|
|
},
|
|
}
|
|
|
|
export type TelemetryPrefsWithSources = InstallPrefsWithSources['telemetry'];
|
|
|
|
export interface PrefWithSource<T> {
|
|
value: T;
|
|
source: PrefSource;
|
|
}
|
|
|
|
export type PrefSource = 'environment-variable' | 'preferences';
|
|
|
|
|
|
/**
|
|
* JSON returned to the client (exported for tests).
|
|
*/
|
|
export interface LatestVersion {
|
|
/**
|
|
* Latest version of core component of the client.
|
|
*/
|
|
latestVersion: string;
|
|
/**
|
|
* If there were any critical updates after client's version. Undefined if
|
|
* we don't know client version or couldn't figure this out for some other reason.
|
|
*/
|
|
isCritical?: boolean;
|
|
/**
|
|
* Url where the client can download the latest version (if applicable)
|
|
*/
|
|
updateURL?: string;
|
|
|
|
/**
|
|
* When the latest version was updated (in ISO format).
|
|
*/
|
|
updatedAt?: string;
|
|
}
|
|
|
|
export interface InstallAPI {
|
|
getInstallPrefs(): Promise<InstallPrefsWithSources>;
|
|
updateInstallPrefs(prefs: Partial<InstallPrefs>): Promise<void>;
|
|
/**
|
|
* Returns information about latest version of Grist
|
|
*/
|
|
checkUpdates(): Promise<LatestVersion>;
|
|
}
|
|
|
|
export class InstallAPIImpl extends BaseAPI implements InstallAPI {
|
|
constructor(private _homeUrl: string, options: IOptions = {}) {
|
|
super(options);
|
|
}
|
|
|
|
public async getInstallPrefs(): Promise<InstallPrefsWithSources> {
|
|
return this.requestJson(`${this._url}/api/install/prefs`, {method: 'GET'});
|
|
}
|
|
|
|
public async updateInstallPrefs(prefs: Partial<InstallPrefs>): Promise<void> {
|
|
await this.request(`${this._url}/api/install/prefs`, {
|
|
method: 'PATCH',
|
|
body: JSON.stringify({...prefs}),
|
|
});
|
|
}
|
|
|
|
public checkUpdates(): Promise<LatestVersion> {
|
|
return this.requestJson(`${this._url}/api/install/updates`, {method: 'GET'});
|
|
}
|
|
|
|
private get _url(): string {
|
|
return addCurrentOrgToPath(this._homeUrl);
|
|
}
|
|
}
|