
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
goblin-builder
Advanced tools
Le module goblin-builder
est un outil de construction et de packaging polyvalent pour les applications Xcraft. Il permet de générer différents types de packages pour diverses plateformes (Windows, Linux, macOS) et formats (Electron, Debian, Node.js, Web, Blitz, NPX). Ce module transforme une application Xcraft en un produit déployable en gérant les dépendances, les ressources et les configurations spécifiques à chaque plateforme.
Le module est organisé autour de plusieurs constructeurs spécialisés, chacun exposé via une commande Xcraft :
app-builder
) : Crée des applications Electron pour Windows, Linux et macOSdeb-builder
) : Génère des packages Debian pour Linuxnode-builder
) : Crée des applications Node.js autonomesweb-builder
) : Construit des applications webblitz-builder
) : Crée des applications web exécutables dans un conteneur WebAssemblynpx-builder
) : Génère des packages NPX pour distribution via npmTous ces constructeurs héritent d'une classe de base Builder
qui fournit les fonctionnalités communes.
Le processus de construction suit généralement ces étapes :
app.json
et des dépendancesChaque constructeur spécialise ce flux de travail pour son format cible spécifique.
// Via la ligne de commande Xcraft
await quest.cmd('electronify.build', {
appId: 'my-app',
output: '/path/to/output',
});
// Avec des options avancées
await quest.cmd('electronify.build-opts', {
appId: 'my-app',
variantId: 'pro',
appDir: '/path/to/app',
libDir: '/path/to/lib',
output: '/path/to/output',
release: true,
arch: 'x64',
compression: 'maximum',
});
await quest.cmd('debify.build', {
appId: 'my-app',
output: '/path/to/output',
});
await quest.cmd('nodify.build', {
appId: 'my-app',
output: '/path/to/output',
});
await quest.cmd('blitzify.build', {
appId: 'my-app',
output: '/path/to/output',
});
await quest.cmd('npxify.build', {
appId: 'my-app',
output: '/path/to/output',
});
Le module goblin-builder
peut être configuré via le fichier app.json
de l'application :
Option | Description | Type | Valeur par défaut |
---|---|---|---|
appId | Identifiant de l'application | String | - |
productName | Nom du produit | String | 'Goblins' |
description | Description de l'application | String | - |
versionFrom | Module à partir duquel extraire la version | String | - |
goblinEntryPoint | Point d'entrée goblin | String | 'laboratory' |
mainGoblinModule | Module goblin principal | String | - |
fileAssociations | Associations de fichiers pour l'application | Array | - |
protocols | Protocoles URL gérés par l'application | Array | - |
build | Options spécifiques à electron-builder | Object | - |
debify | Options spécifiques à node-deb | Object | - |
excludeResources | Ressources à exclure du package | Array/String | - |
unpackedResources | Ressources à ne pas inclure dans l'archive ASAR | Array/String | - |
extraBuilds | Builds supplémentaires à effectuer | Object | - |
blitzify | Options spécifiques pour le builder Blitz | Object | - |
noAsar | Désactive l'archive ASAR pour Electron | Boolean | false |
arch | Architecture cible (ia32, x64, arm, arm64) | String/Object | process.arch |
debDeps | Dépendances Debian supplémentaires | Array | - |
goblinResources | Dossiers de ressources des modules goblin | Array/String | - |
excludedGoblinFiles | Fichiers goblin à exclure | Array/String | - |
excludedFiles | Fichiers généraux à exclure | Array/String | - |
Variable | Description | Exemple | Valeur par défaut |
---|---|---|---|
NODE_ENV | Environnement Node.js | 'production' | - |
BUILD_NUMBER | Numéro de build (généré automatiquement sur Windows) | '2508' | - |
SIGNTOOL_PATH | Chemin vers l'outil de signature (Windows) | 'C:\Program Files\esign.exe' | - |
APPLE_ID_TEAM | ID d'équipe Apple pour la notarisation (macOS) | 'ABC123DEF' | - |
blitzify.js
Point d'entrée pour les commandes Xcraft du constructeur Blitz. Expose les commandes via xcraftCommands
en utilisant le service générique avec le backend blitz-builder
.
debify.js
Point d'entrée pour les commandes Xcraft du constructeur Debian. Expose les commandes via xcraftCommands
en utilisant le service générique avec le backend deb-builder
.
electronify.js
Point d'entrée pour les commandes Xcraft du constructeur Electron. Expose les commandes via xcraftCommands
en utilisant le service générique avec le backend app-builder
.
nodify.js
Point d'entrée pour les commandes Xcraft du constructeur Node.js. Expose les commandes via xcraftCommands
en utilisant le service générique avec le backend node-builder
.
npxify.js
Point d'entrée pour les commandes Xcraft du constructeur NPX. Expose les commandes via xcraftCommands
en utilisant le service générique avec le backend npx-builder
.
webify.js
Point d'entrée pour les commandes Xcraft du constructeur Web. Expose les commandes via xcraftCommands
en utilisant le service générique avec le backend web-builder
.
lib/builder.js
Classe de base pour tous les constructeurs. Elle fournit les fonctionnalités communes :
app.json
extractStartCraft(libDir, dep, isDev, deps)
— Extrait récursivement les dépendances d'un module pour la construction._assets(isDev, next)
— Prépare les assets pour la construction, en mode développement ou production._installDeps(isDev, next)
— Installe les dépendances npm, en mode développement ou production._blacksmith()
— Exécute les tâches de rendu côté serveur via goblin-blacksmith._extraBuilds()
— Exécute des builds supplémentaires configurés dans app.json._cleanup()
— Nettoie les fichiers temporaires après la construction.lib/app-builder.js
Constructeur spécialisé pour les applications Electron. Il gère :
_clean(next)
— Nettoie les répertoires de construction._webpack()
— Compile les sources JavaScript avec webpack pour le rendu Electron._esignInit()
— Initialise l'outil de signature pour Windows._esign(configuration)
— Signe un fichier exécutable sur Windows avec gestion des timeouts et retry._electron()
— Exécute electron-builder pour créer les packages avec configuration complète.run()
— Point d'entrée principal qui orchestre tout le processus de construction.lib/blitz-builder.js
Constructeur spécialisé pour les applications Blitz (WebAssembly). Il gère :
cleanReleaseDir()
— Nettoie et réorganise le répertoire de release en déplaçant les modules du dossier lib vers node_modules.generateBlitz(chunks, clientId)
— Génère les fichiers nécessaires pour l'application Blitz en utilisant les templates.splitSnapshot(snapshot, size)
— Divise le snapshot en chunks de 4MB pour optimiser le chargement.run()
— Point d'entrée principal qui orchestre tout le processus de construction.lib/deb-builder.js
Constructeur spécialisé pour les packages Debian. Il gère :
_copyResources(resourcesName)
— Copie les ressources spécifiques selon la plateforme et les variantes._assetsDeb()
— Prépare les assets spécifiques pour les packages Debian._npmInstall(next)
— Installe les dépendances npm pour le package Debian._nodeDeb(next)
— Exécute node-deb pour créer le package Debian._hasBlacksmith()
— Vérifie si le module utilise goblin-blacksmith.run()
— Point d'entrée principal qui orchestre tout le processus de construction.lib/get-year-week-number.js
Utilitaire pour générer des numéros de build basés sur l'année et la semaine ISO, utilisé principalement pour les versions Windows.
getYearWeekNumber(d)
— Obtient le numéro de semaine ISO et l'année correspondante pour une date donnée selon la norme ISO 8601.yearWeekToBuildNumber(year, week)
— Convertit une année et un numéro de semaine en numéro de build au format YYWW.lib/node-builder.js
Constructeur spécialisé pour les applications Node.js autonomes. Il gère :
_copyResources(resourcesName)
— Copie les ressources spécifiques selon la plateforme et les variantes._assetsDeb()
— Prépare les assets spécifiques._npmInstall(next)
— Installe les dépendances npm avec support pour les options d'omission._hasBlacksmith()
— Vérifie si le module utilise goblin-blacksmith._clean()
— Nettoie les répertoires de construction.run()
— Point d'entrée principal qui orchestre tout le processus de construction.lib/npx-builder.js
Constructeur spécialisé pour les packages NPX. Il gère :
_copyResources(resourcesName)
— Copie les ressources spécifiques selon la plateforme et les variantes._assets()
— Prépare les assets spécifiques pour NPX en utilisant les versions exactes des dépendances._assetsNpx()
— Prépare les assets spécifiques pour NPX._clean()
— Nettoie les répertoires de construction.run()
— Point d'entrée principal qui orchestre tout le processus de construction.lib/service.js
Définit les commandes Xcraft exposées par le module. Utilise le pattern de factory pour créer des services spécialisés :
build(quest, appId, output, $arch)
— Construction avec les paramètres par défaut en utilisant les chemins du projet.build-release(quest, appId, output, $arch)
— Construction en mode release avec signature activée.build-opts(quest, appId, variantId, appDir, libDir, output, release, arch, compression, $targetRuntime, $targetVersion, $targetArch)
— Construction avec des options personnalisées complètes.lib/web-builder.js
Constructeur spécialisé pour les applications web. Il gère :
_clean(next)
— Nettoie les répertoires de construction._webpack()
— Compile les sources JavaScript avec webpack pour le web avec target 'web'.run()
— Point d'entrée principal qui orchestre tout le processus de construction.lib/blitz/snapshot.js
Utilitaire pour créer un snapshot d'une application Node.js, utilisé par le constructeur Blitz. Il parcourt récursivement le système de fichiers et sérialise la structure en utilisant msgpackr.
snapshot(inputDir, outputFile)
— Crée un snapshot du répertoire d'entrée et l'écrit dans le fichier de sortie en format msgpack.lib/blitz/www/main.js
Script principal pour l'application Blitz qui :
lib/blitz/www/package.json
Configuration npm pour l'environnement WebContainer incluant les dépendances nécessaires (@webcontainer/api) et un script de post-installation pour corriger un bug de chemin de module dans l'API WebContainer.
Les définitions d'applications sont situées dans le répertoire app/
du projet d'application. Le nom du répertoire doit correspondre au nom fourni dans le fichier app.json
.
Les entrées appCompany
et appId
doivent être aussi simples que possible (uniquement /[a-z]+/
) car elles sont utilisées pour créer les répertoires de configuration dans le $HOME
(utilisateur OS).
La section xcraft
est très utile pour fournir des paramètres aux modules xcraft
, en particulier xcraft-core-host
. Ce module est utilisé pour démarrer la première application.
Exemple :
{
"xcraft": {
"xcraft-core-host": {
"mainQuest": "myapp.boot",
"secondaryQuest": "myapp.start"
}
}
}
La mainQuest
est exécutée avant l'état ready
d'Electron. Elle doit être utilisée pour gérer des paramètres spéciaux (en ligne de commande) par exemple et toutes les autres choses qui ne dépendent pas d'Electron.
La secondaryQuest
est appelée lorsqu'Electron est prêt. Il est alors possible d'utiliser des goblins comme goblin-wm
pour créer des fenêtres.
Cette documentation a été mise à jour.
FAQs
Electron and Debian builder
The npm package goblin-builder receives a total of 40 weekly downloads. As such, goblin-builder popularity was classified as not popular.
We found that goblin-builder 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
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
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.