import { WebApplication } from '@/ui_models/application'; import { SNComponent, ClientDisplayableError, FeatureDescription, } from '@standardnotes/snjs'; import { makeAutoObservable, observable } from 'mobx'; export class ExtensionsLatestVersions { static async load( application: WebApplication ): Promise { const response = await application.getAvailableSubscriptions(); if (response instanceof ClientDisplayableError) { return undefined; } const versionMap: Map = new Map(); collectFeatures( response.CORE_PLAN?.features as FeatureDescription[], versionMap ); collectFeatures( response.PLUS_PLAN?.features as FeatureDescription[], versionMap ); collectFeatures( response.PRO_PLAN?.features as FeatureDescription[], versionMap ); return new ExtensionsLatestVersions(versionMap); } constructor(private readonly latestVersionsMap: Map) { makeAutoObservable(this, { latestVersionsMap: observable.ref, }); } getVersion(extension: SNComponent): string | undefined { return this.latestVersionsMap.get(extension.package_info.identifier); } } function collectFeatures( features: FeatureDescription[] | undefined, versionMap: Map ) { if (features == undefined) return; for (const feature of features) { versionMap.set(feature.identifier, feature.version!); } }