
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-client
Advanced tools
Le module goblin-client
est un composant central du framework Xcraft qui gère le côté client des applications. Il fournit les fonctionnalités essentielles pour démarrer, configurer et gérer les sessions client, les fenêtres d'application, les laboratoires (environnements d'exécution) et les interactions avec le système d'exploitation.
Ce module sert de pont entre le framework Xcraft et l'environnement Electron, permettant de créer des applications de bureau riches et interactives.
client.js
) : Gère le cycle de vie de l'application clientclient-session.js
) : Gère la persistance des préférences utilisateurchild-process.js
) : Permet de lancer des processus externesGPUStatus.js
) : Analyse et rapporte les capacités GPUboot
qui initialise l'environnement Electronxcraft-core-etc
Le module maintient l'état des fenêtres, des sessions et des préférences utilisateur, et fournit des mécanismes pour gérer les événements du système et les interactions entre les différents composants de l'application.
Variable | Description | Exemple | Valeur par défaut |
---|---|---|---|
NODE_ENV | Détermine le mode d'exécution (development/production) | development | - |
APPIMAGE | Chemin vers l'AppImage lors de l'exécution dans ce format | /path/to/app.AppImage | - |
// Dans une méthode d'un acteur Elf
async elfQuest() {
// Démarrage du client
const client = this.quest.getAPI('client');
await client.start();
}
// Dans une méthode d'un acteur Elf
async elfQuest() {
const client = this.quest.getAPI('client');
// Ouvrir une nouvelle session
await client.openSession({
session: this.uuidV4(),
username: 'user',
userId: 'user-1',
mainGoblin: 'my-app',
configuration: {
defaultTheme: 'default',
},
});
}
// Dans une méthode d'un acteur Elf
async elfQuest() {
const client = this.quest.getAPI('client');
// Changer la langue de l'interface
await client.changeLocale({
locale: 'fr-FR',
mainGoblin: 'my-app',
});
}
Le module goblin-client
peut être configuré via le fichier config.js
avec les options suivantes :
Option | Description | Type | Valeur par défaut |
---|---|---|---|
mainGoblin | Le goblin principal à démarrer | String | "" |
mainGoblinModule | Le nom du module du goblin principal | String | "" |
contextId | Le contexte initial | String | "" |
themeContexts | Les contextes de thème disponibles | Array | [] |
useConfigurator | Utiliser le widget configurateur comme racine | Boolean | false |
useLogin | Utiliser le processus de login passport | Boolean | false |
appUserModelId | L'identifiant AppUserModelId pour Windows | String | null |
fullscreenable | Activer ou désactiver le support du mode plein écran | Boolean | true |
client.js
Ce fichier définit le service principal du client. Il gère le cycle de vie complet de l'application :
L'état du service client comprend :
{
booted: false, // Indique si le client a démarré
private: {
desktopByLab: {}, // Mapping des laboratoires vers les bureaux
labByDesktop: {}, // Mapping des bureaux vers les laboratoires
}
}
boot()
- Initialise l'environnement Electron, configure les outils de développement, et prépare l'URL pour le chargement de l'application.start()
- Démarre le client, crée une session laboratoire et charge l'interface utilisateur.createSession(mainGoblin, labId, feed, parent)
- Crée une nouvelle session client pour persister les préférences utilisateur.loadLaboratory()
- Charge l'environnement laboratoire pour l'interface utilisateur.getLoginSessionId()
- Récupère l'ID de la session de login.startUX()
- Démarre l'interface utilisateur, gère le login si nécessaire et lance la configuration ou la session d'application.dataTransfer(labId, desktopId, filePaths)
- Gère le transfert de fichiers vers l'application.logout()
- Déconnecte l'utilisateur en supprimant les tokens d'authentification.login(desktopId, loginSessionId, clientConfig)
- Gère le processus de login, vérifie les tokens existants ou demande une nouvelle authentification.configure(desktopId, userId, username, clientSessionId, clientConfig, oldDesktopId)
- Configure l'interface utilisateur avec le configurateur.getConfig()
- Récupère la configuration du client.closeWindow(labId)
- Ferme une fenêtre d'application.openSession(session, username, userId, rootWidget, configuration, mainGoblin, mandate)
- Ouvre une nouvelle session d'application.startDesktopAppSession(rootWidget, configuration, session, username, userId, labId, clientSessionId, desktopId, mainGoblin, useConfigurator)
- Démarre une session d'application de bureau.closeSession(labId, sessionDesktopId)
- Ferme une session d'application.openExternal(url)
- Ouvre une URL ou un chemin dans le navigateur ou l'application par défaut du système.changeLocale(locale, mainGoblin, clientSessionId)
- Change la langue de l'interface.getLocale(mainGoblin, clientSessionId)
- Récupère la langue actuelle de l'interface.appRelaunch(reason)
- Relance l'application en cas de problème avec la connexion au serveur.// Dans une méthode d'un acteur Elf
async elfQuest() {
const client = this.quest.getAPI('client');
// Exemple d'utilisation
await client.boot();
await client.start();
}
client-session.js
Ce fichier définit un service qui gère la persistance des préférences utilisateur entre les sessions. Il stocke :
L'état de la session client comprend :
{
zoom: 1, // Niveau de zoom de l'interface
locale: null, // Langue actuelle de l'interface
userLocale: null, // Préférence de langue de l'utilisateur
theme: null, // Thème visuel actuel
views: {}, // Configuration des vues (colonnes, tris)
tips: {}, // État des astuces (affichées/masquées)
splitters: {}, // Position des séparateurs
dialogs: {}, // État des boîtes de dialogue
desktopClock: {}, // Configuration de l'horloge de bureau
translatableTextField: {}, // Configuration des champs de texte traduisibles
lastColorsPicker: [], // Dernières couleurs utilisées
accessToEggsThemes: false, // Accès aux thèmes spéciaux
prototypeMode: false, // Mode prototype activé/désactivé
windows: [], // État des fenêtres
private: { // Données privées
osLocale: null, // Langue du système d'exploitation
windowIndexes: {count: 0} // Compteur et index des fenêtres
}
}
create(id, sessionStorage)
- Crée une nouvelle session client ou restaure une session existante.setViewColumnsOrder(viewId, columnsIds)
- Définit l'ordre des colonnes pour une vue.setViewColumnWidth(viewId, columnId, width)
- Définit la largeur d'une colonne pour une vue.setViewColumnSorting(viewId, columnId, direction)
- Définit le tri d'une colonne pour une vue.resetViewColumn(viewId)
- Réinitialise la configuration d'une vue.setWindowState(winId, state)
- Enregistre l'état d'une fenêtre.getWindowState(winId, defaultState)
- Récupère l'état d'une fenêtre.closeWindow(winId)
- Ferme une fenêtre.setLocale(locale)
- Définit la langue de l'interface.changeLocale(locale)
- Change la préférence de langue de l'utilisateur.getLocale()
- Récupère la langue actuelle de l'interface.setTips(tipsId, state)
- Enregistre l'état d'une astuce.setSplitters(splitterId, state)
- Enregistre l'état d'un séparateur.setDialogs(dialogId, state)
- Enregistre l'état d'une boîte de dialogue.setLastColorsPicker(state)
- Enregistre les dernières couleurs utilisées.setDesktopClock(theme, state)
- Enregistre la configuration de l'horloge de bureau.setTranslatableTextField(state)
- Enregistre la configuration des champs de texte traduisibles.setZoom(zoom)
- Définit le niveau de zoom de l'interface.getZoom()
- Récupère le niveau de zoom actuel de l'interface.setTheme(theme)
- Définit le thème visuel.getTheme()
- Récupère le thème visuel actuel.setAccessToEggsThemes(show)
- Active ou désactive l'accès aux thèmes spéciaux.togglePrototypeMode()
- Active ou désactive le mode prototype.save()
- Sauvegarde l'état de la session client.// Dans une méthode d'un acteur Elf
async elfQuest() {
// Exemple d'utilisation
const clientSession = await this.quest.create('client-session', {
id: clientSessionId,
sessionStorage: '/path'
});
await clientSession.setTheme({theme: 'dark'});
await clientSession.setZoom({zoom: 1.2});
}
child-process.js
Ce fichier définit un service qui permet de lancer des processus externes depuis l'application. Il utilise xcraft-core-process
pour gérer les processus.
L'état du service de processus enfant est minimal :
{
id: 'child-process@id' // Identifiant du service
}
create(executablePath, options)
- Crée un nouveau gestionnaire de processus enfant.spawn(executableArguments, additionalOptions)
- Lance un processus externe avec les arguments spécifiés.// Dans une méthode d'un acteur Elf
async elfQuest() {
// Exemple d'utilisation
const childProcess = await this.quest.create('child-process', {
id: childProcessId,
executablePath: '/usr/bin/some-program',
options: {cwd: '/tmp'},
});
await childProcess.spawn({
executableArguments: ['--arg1', '--arg2'],
});
}
GPUStatus.js
Ce fichier contient des utilitaires pour analyser et rapporter les capacités GPU de l'ordinateur. Il catégorise les fonctionnalités GPU en trois niveaux :
Il est utilisé pour vérifier si l'ordinateur peut exécuter correctement l'application et pour afficher des avertissements si nécessaire.
isBad(features)
- Vérifie si les fonctionnalités GPU sont insuffisantes.isMinimal(features)
- Vérifie si les fonctionnalités GPU minimales sont disponibles.getReport(features)
- Génère un rapport détaillé des fonctionnalités GPU.// Exemple d'utilisation interne
const {isBad, isMinimal, getReport} = require('./GPUStatus.js');
const infos = app.getGPUFeatureStatus();
if (isBad(infos) || !isMinimal(infos)) {
// Afficher un avertissement à l'utilisateur
}
console.log(getReport(infos));
Ce module est au cœur du framework Xcraft côté client, fournissant l'infrastructure nécessaire pour créer des applications de bureau riches et interactives.
Cette documentation a été mise à jour automatiquement.
FAQs
Main goblin - client side
The npm package goblin-client receives a total of 7 weekly downloads. As such, goblin-client popularity was classified as not popular.
We found that goblin-client 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.