
Research
Malicious fezbox npm Package Steals Browser Passwords from Cookies via Innovative QR Code Steganographic Technique
A malicious package uses a QR code as steganography in an innovative technique.
goblin-blacksmith
Advanced tools
Le module goblin-blacksmith est un moteur de rendu backend pour l'écosystème Xcraft. Il permet de générer du contenu HTML, CSS et PDF à partir de composants React côté serveur, sans interface utilisateur. Ce module est particulièrement utile pour la génération de rapports, d'exports PDF, et le rendu statique de composants pour l'optimisation SEO ou la mise en cache.
Le module s'organise autour de plusieurs composants clés :
service.js
) : Acteur Goblin singleton qui orchestre le renduchild-renderer/
) : Environnement isolé pour le rendu ReactLe module fonctionne selon une architecture de processus séparés :
blacksmith
reçoit les demandes de renduLe système utilise des verrous (mutex) pour éviter les conflits lors de rendus simultanés et met en cache les builds Webpack pour optimiser les performances.
Le module utilise une approche multi-processus pour isoler le rendu :
// Rendu d'un widget avec état Redux
const {html, css} = await this.quest.cmd('blacksmith.renderComponent', {
mainGoblin: 'laboratory',
widgetPath: './widgets/my-component/widget.js',
props: {title: 'Mon titre', data: myData},
labId: 'lab@main',
state: reduxState,
forReact: false,
themeContext: themeContext,
currentTheme: 'default',
});
// Rendu d'un document PDF
await this.quest.cmd('blacksmith.renderPDF', {
mainGoblin: 'laboratory',
documentPath: './documents/invoice/widget.js',
props: {invoice: invoiceData},
outputDir: '/tmp/invoices/invoice-123.pdf',
});
// Rendu et sauvegarde automatique
const {htmlFilePath, cssFilePath} = await this.quest.cmd(
'blacksmith.renderComponentToFile',
{
mainGoblin: 'laboratory',
widgetPath: './widgets/report/widget.js',
props: {reportData},
labId: 'lab@main',
state: reduxState,
outputDir: '/tmp/reports',
outputName: 'monthly-report',
isRoot: true,
}
);
Option | Description | Type | Valeur par défaut |
---|---|---|---|
outputDir | Répertoire de sortie pour les renderers pré-compilés | string | 'blacksmith' |
renderers.component | Liste des renderers de composants à construire | array | [] |
renderers.root | Liste des renderers racine à construire | array | [] |
renderers.pdf | Liste des renderers PDF à construire | array | [] |
Variable | Description | Exemple | Valeur par défaut |
---|---|---|---|
NODE_ENV | Mode d'exécution, active le debugger en développement | development | - |
BABEL_CACHE_PATH | Chemin du cache Babel pour la compilation | /tmp/babel-cache | {xcraftRoot}/var/babel |
service.js
Acteur Goblin singleton qui orchestre tout le système de rendu. Il gère le cycle de vie des processus enfants, la compilation Webpack, et expose les méthodes de rendu publiques.
L'acteur blacksmith
est créé en tant que singleton et reste actif pendant toute la durée de vie de l'application. Il maintient une collection de processus enfants et gère leur cycle de vie selon les besoins.
startProcess(id)
— Démarre un processus enfant de rendu avec l'identifiant spécifié. Chaque processus est isolé et peut traiter des demandes de rendu. Utilise un verrou pour éviter les démarrages simultanés.stopProcess(id)
— Arrête proprement un processus enfant spécifique et libère ses ressources. Le processus est retiré de la collection des processus actifs.restartProcesses()
— Redémarre tous les processus enfants actifs, utile lors de mises à jour de code ou de configuration.build(backend, mainGoblin, componentPath, outputPath, outputFilename, publicPath, releasePath)
— Compile un composant avec Webpack pour un backend spécifique (component, root, ou pdf). Génère un bundle optimisé pour le rendu côté serveur.renderComponent(mainGoblin, widgetPath, props, labId, state, forReact, themeContext, currentTheme, isRoot)
— Rend un composant React en HTML/CSS statique avec support du state Redux et des thèmes. Utilise un verrou pour éviter les conflits de rendu.renderPDF(mainGoblin, documentPath, props, outputDir)
— Génère un fichier PDF à partir d'un composant React PDF. Le processus enfant est automatiquement arrêté après le rendu pour éviter les fuites mémoire.renderComponentToFile(mainGoblin, widgetPath, props, labId, state, forReact, themeContext, currentTheme, outputDir, outputName, isRoot)
— Rend un composant et sauvegarde automatiquement les fichiers HTML et CSS résultants dans le répertoire spécifié.child-renderer/index.js
Point d'entrée du processus enfant qui configure l'environnement de rendu et traite les messages IPC du processus principal. Il charge dynamiquement les renderers et gère les erreurs de rendu.
Le processus enfant :
child-renderer/render.js
Module principal du processus enfant qui configure l'environnement global pour React et expose la fonction de rendu universelle. Il supprime les références au DOM pour permettre le rendu côté serveur.
Fonctionnalités clés :
global.window
avant l'import d'Aphroditerender
globalechild-renderer/renderStatic.js
Utilitaire de rendu statique qui utilise Aphrodite pour extraire le CSS et ReactDOMServer pour générer le HTML. Il collecte également les styles injectés dynamiquement dans le document.
La fonction renderStatic
:
StyleSheetServer.renderStatic
d'Aphroditechild-renderer/setupGlobals.js
Configure un environnement DOM simulé pour permettre l'exécution de composants React côté serveur. Il crée des objets window
, document
, et navigator
minimaux.
Objets simulés :
document
: Avec createElement
, head
, et gestion des événementsnavigator
: Avec support de la langue et de la plateformewindow
: Avec location
, history
, et référence au documentchild-renderer/store.js
Configure un store Redux pour le rendu avec les reducers de goblin-laboratory. Il convertit l'état initial en structures Immutable.js compatibles.
Reducers inclus :
widgets
: Gestion des états des widgetsbackend
: Gestion des données backendrenderers/component.js
Renderer pour les composants standards avec support complet du state Redux, des thèmes, et du Frame de goblin-laboratory.
Fonctionnalités :
renderers/pdf.js
Renderer spécialisé pour la génération de PDF utilisant @react-pdf/renderer. Il traite les composants PDF et génère directement les fichiers de sortie.
Spécificités :
@react-pdf/renderer
pour la génération PDFrenderers/root.js
Renderer pour les composants racine d'application, similaire au renderer de composant mais optimisé pour les éléments de plus haut niveau.
Différences avec le renderer de composant :
Document mis à jour
FAQs
Backend renderer
We found that goblin-blacksmith demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 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
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.
Application Security
/Research
/Security News
Socket detected multiple compromised CrowdStrike npm packages, continuing the "Shai-Hulud" supply chain attack that has now impacted nearly 500 packages.