
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
@toast-studios/asset-manager
Advanced tools
A React Native asset management library with intelligent caching and loading strategies
A powerful React Native asset management library with intelligent caching, network-aware downloading, and dynamic manifest loading.
npm install @toast-studios/asset-manager react-native-fs @react-native-community/netinfo react-native-device-info @react-native-async-storage/async-storage
import { ToastAssetManager } from '@toast-studios/asset-manager';
const assetManager = new ToastAssetManager({
basePath: '/assets',
manifestUrl: 'https://api.yourapp.com/manifest',
appVersion: '1.2.3',
appLanguage: 'en'
});
// Single method does everything: initialize + load manifest + start downloads
await assetManager.start();
// Get asset path
const assetPath = await assetManager.getAsset('my-video.mp4');
interface AssetManagerConfig {
basePath: string;
appVersion?: string; // For manifest fetching
manifestUrl?: string; // Dynamic manifest URL
appLanguage?: string; // Localization
maxConcurrentDownloads?: number; // Default: 3
retryAttempts?: number; // Default: 3
retryDelay?: number; // Default: 1000ms
cacheLimit?: number; // Default: 500MB
customHeaders?: Record<string, string>;
enableLogging?: boolean; // Default: false
}
// Configuration generates: GET https://api.yourapp.com/manifest?appVersion=1.2.3&language=en
const assetManager = new ToastAssetManager({
basePath: '/assets',
manifestUrl: 'https://api.yourapp.com/manifest',
appVersion: '1.2.3',
appLanguage: 'en'
});
Manifest Format:
{
"version": "1.0.0",
"bundles": [{
"id": "essential-assets",
"url": "https://cdn.yourapp.com/assets/essential.zip",
"size": 1024000,
"isCritical": true,
"hash": "sha256-abc123...",
"assets": [{
"id": "logo.png",
"filename": "logo.png",
"type": "image",
"size": 5000,
"hash": "sha256-def456..."
}]
}]
}
import React, { useState, useEffect } from 'react';
import { ToastAssetManager } from '@toast-studios/asset-manager';
const AssetComponent = () => {
const [progress, setProgress] = useState(0);
const [assetManager, setAssetManager] = useState(null);
useEffect(() => {
const manager = new ToastAssetManager({
basePath: '/assets',
manifestUrl: 'https://api.yourapp.com/manifest',
appVersion: '1.0.0'
});
manager.onProgress((progress) => setProgress(progress.progress));
// Single call to start everything
manager.start().then(() => setAssetManager(manager));
}, []);
return (
<View>
<Text>Progress: {progress}%</Text>
</View>
);
};
Enterprise:
new ToastAssetManager({
basePath: '/assets',
manifestUrl: 'https://cdn.yourapp.com/manifest',
appVersion: '2.1.0',
cacheLimit: 1024 * 1024 * 1024, // 1GB
retryAttempts: 5,
customHeaders: { 'Authorization': 'Bearer token' }
});
High-Performance:
new ToastAssetManager({
basePath: '/assets',
manifestUrl: 'https://api.yourapp.com/manifest',
maxConcurrentDownloads: 5,
cacheLimit: 2048 * 1024 * 1024, // 2GB
retryDelay: 500
});
// Main method - does everything in one call
await assetManager.start(); // Initialize + load manifest + start downloads
await assetManager.start(manifest); // Or pass manifest directly
// Asset access
const path = await assetManager.getAsset('id'); // Get asset path
const asset = assetManager.getAsset('id'); // Get asset object
// Utility methods
const count = await assetManager.cleanup(); // Manual cleanup
await assetManager.destroy(); // Clean up resources
// Progress monitoring
assetManager.onProgress((progress) => {
console.log(`${progress.progress}% - ${progress.status}`);
});
// Performance optimization methods
await assetManager.flushStorage(); // Force immediate save to disk
const stats = assetManager.getStorageBatchingStats(); // Monitor batching performance
The asset manager uses intelligent batching to dramatically reduce disk I/O operations:
Before (v1.1): Every asset save = 2 disk writes
After (v1.2): Multiple saves batched into 2 disk writes within 1-second windows
Performance Impact:
// Automatic batching (default behavior)
await assetManager.start(); // All downloads are automatically batched
// Manual control for critical operations
await assetManager.flushStorage(); // Force immediate save before app shutdown
// Monitor batching performance
const stats = assetManager.getStorageBatchingStats();
console.log(`Pending updates: ${stats.pendingAssetUpdates}`);
console.log(`Batching active: ${stats.hasPendingTimer}`);
Commercial License - © Toast Studios
Technical Support: Implementation assistance and documentation
Enterprise Services: Priority support, custom features, training
Contact: Toast Studios team for licensing and support
Powered by Toast Studios
FAQs
A React Native asset management library with intelligent caching and loading strategies
The npm package @toast-studios/asset-manager receives a total of 2 weekly downloads. As such, @toast-studios/asset-manager popularity was classified as not popular.
We found that @toast-studios/asset-manager demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.