feat(plugins): count marketplace downloads and installs
This commit is contained in:
6 files changed
+178
-1
No files matched your search
@@ -15,7 +15,7 @@ import { clearPluginIconCache } from "@/lib/plugins/pluginIconResolver";
|
||||
import { isTauriRuntime } from "@/lib/backend/tauriRuntime";
|
||||
import { physicalDropPositionInsideRect } from "@/lib/ai/aiAttachments";
|
||||
import { createFrontendPluginRegistry, pluginConnectionProviderIcon } from "@/lib/plugins/frontendPlugin";
|
||||
import { buildMarketplacePluginListings, filterMarketplacePluginListings, listingRepositoryCanVerify, type MarketplacePluginListing } from "@/lib/plugins/pluginMarketplace";
|
||||
import { beaconPluginInstall, buildMarketplacePluginListings, filterMarketplacePluginListings, listingRepositoryCanVerify, type MarketplacePluginListing } from "@/lib/plugins/pluginMarketplace";
|
||||
import { formatBytes } from "@/lib/database/serverMetrics";
|
||||
import type { PluginCenterFocus } from "@/lib/plugins/pluginCenterNavigation";
|
||||
import { useConnectionStore } from "@/stores/connectionStore";
|
||||
@@ -173,6 +173,7 @@ async function installMarketplaceListing(listing: MarketplacePluginListing) {
|
||||
version: listing.plugin.latestVersion,
|
||||
});
|
||||
toast(t(listing.status === "update" ? "pluginPlatform.updateSuccess" : "pluginPlatform.installSuccess", { name: result.plugin.manifest.name, version: result.plugin.manifest.version }));
|
||||
beaconPluginInstall(listing.plugin.id, listing.plugin.latestVersion);
|
||||
installedPlugins.value = await api.listPlugins();
|
||||
selectPlugin(result.plugin.manifest.id);
|
||||
} catch (cause) {
|
||||
|
||||
@@ -52,6 +52,22 @@ export function listingRepositoryCanVerify(repository: PluginRepository): boolea
|
||||
return repository.kind === "official" || repository.kind === "enterprise";
|
||||
}
|
||||
|
||||
const INSTALL_BEACON_URL = "https://dbxio.com/api/plugins/install";
|
||||
|
||||
// Fire-and-forget install beacon for marketplace statistics; never blocks or fails the install.
|
||||
export function beaconPluginInstall(pluginId: string, version: string): void {
|
||||
try {
|
||||
void fetch(INSTALL_BEACON_URL, {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "text/plain" },
|
||||
body: JSON.stringify({ id: pluginId, version }),
|
||||
keepalive: true,
|
||||
}).catch(() => undefined);
|
||||
} catch {
|
||||
// Statistics are best-effort.
|
||||
}
|
||||
}
|
||||
|
||||
export function filterMarketplacePluginListings(listings: readonly MarketplacePluginListing[], query: string, repositoryId: string): MarketplacePluginListing[] {
|
||||
const normalizedQuery = query.trim().toLocaleLowerCase();
|
||||
return listings.filter((listing) => {
|
||||
|
||||
Reference in new issue
Block a user