{"id":20270036,"url":"https://github.com/xcraft-inc/goblin-configurator","last_synced_at":"2025-10-03T23:38:59.762Z","repository":{"id":78426987,"uuid":"196519257","full_name":"Xcraft-Inc/goblin-configurator","owner":"Xcraft-Inc","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-18T14:29:56.000Z","size":182,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-18T18:51:12.793Z","etag":null,"topics":["app-launcher","goblins"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Xcraft-Inc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-07-12T06:11:58.000Z","updated_at":"2025-07-18T14:29:58.000Z","dependencies_parsed_at":"2025-07-18T16:13:01.406Z","dependency_job_id":null,"html_url":"https://github.com/Xcraft-Inc/goblin-configurator","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/Xcraft-Inc/goblin-configurator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xcraft-Inc%2Fgoblin-configurator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xcraft-Inc%2Fgoblin-configurator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xcraft-Inc%2Fgoblin-configurator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xcraft-Inc%2Fgoblin-configurator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Xcraft-Inc","download_url":"https://codeload.github.com/Xcraft-Inc/goblin-configurator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xcraft-Inc%2Fgoblin-configurator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272467928,"owners_count":24939646,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-28T02:00:10.768Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app-launcher","goblins"],"created_at":"2024-11-14T12:28:33.368Z","updated_at":"2025-10-03T23:38:54.718Z","avatar_url":"https://github.com/Xcraft-Inc.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📘 goblin-configurator\n\n## Aperçu\n\nLe module `goblin-configurator` est un acteur Goblin qui fournit une interface de configuration et de gestion des sessions pour les applications Xcraft. Il permet aux utilisateurs de sélectionner des profils d'application, de gérer des sessions actives, et d'accéder à des outils de développement avancés. Le configurateur sert de point d'entrée principal pour lancer et organiser différentes instances d'applications dans l'écosystème Xcraft.\n\n## Sommaire\n\n- [Structure du module](#structure-du-module)\n- [Fonctionnement global](#fonctionnement-global)\n- [Exemples d'utilisation](#exemples-dutilisation)\n- [Interactions avec d'autres modules](#interactions-avec-dautres-modules)\n- [Configuration avancée](#configuration-avancée)\n- [Détails des sources](#détails-des-sources)\n\n## Structure du module\n\nLe module est organisé autour de plusieurs composants principaux :\n\n- **Acteur principal** : `configurator` (service Goblin)\n- **Acteur shell** : Service de démarrage et d'orchestration\n- **Interface utilisateur** : Collection de widgets React pour l'interface de configuration\n- **Outils de développement** : Intégration avec le workshop et générateurs de code\n\n## Fonctionnement global\n\nLe configurateur fonctionne selon un modèle de gestion de sessions multi-profils :\n\n1. **Initialisation** : Au démarrage, le configurateur charge les profils disponibles depuis la configuration\n2. **Sélection de profil** : L'utilisateur choisit un profil d'application parmi ceux disponibles\n3. **Gestion des sessions** : Création, ouverture et fermeture de sessions utilisateur\n4. **Outils avancés** : Accès aux fonctionnalités de développement (workshop, générateurs)\n\nLe système supporte deux modes d'affichage :\n\n- **Mode classique** : Interface en grille avec détails des sessions\n- **Mode launcher** : Interface moderne avec des \"rockets\" représentant les sessions\n\n## Exemples d'utilisation\n\n### Création d'une session utilisateur\n\n```javascript\n// Ouverture d'une nouvelle session avec un profil spécifique\nconst configurator = await this.quest.create('configurator', {\n  id: 'configurator@myApp',\n  labId: 'main-lab',\n  clientSessionId: 'client-123',\n  username: 'john.doe',\n  useLogin: false,\n});\n\n// Configuration d'un bureau avec un profil\nawait configurator.openSession({\n  profileKey: 'production-profile',\n  feed: null,\n});\n```\n\n### Gestion des sessions actives\n\n```javascript\n// Fermeture d'une session spécifique\nawait configurator.closeSession({\n  name: 'desktop@mandate@user-session-uuid',\n});\n\n// Mise à jour des feeds disponibles\nawait configurator.updateFeeds({\n  feeds: ['desktop@mandate1@session1', 'desktop@mandate2@session2'],\n});\n```\n\n## Interactions avec d'autres modules\n\nLe configurateur interagit avec plusieurs modules de l'écosystème Xcraft :\n\n- **[xcraft-core-etc]** : Chargement de la configuration des profils\n- **[goblin-client]** : Gestion des sessions client et authentification\n- **[goblin-warehouse]** : Gestion des feeds et stockage des données\n- **[goblin-desktop]** : Création et fermeture des bureaux\n- **[goblin-workshop]** : Outils de développement et génération de code\n\n## Configuration avancée\n\n| Option       | Description                   | Type   | Valeur par défaut |\n| ------------ | ----------------------------- | ------ | ----------------- |\n| `mainWidget` | Widget principal à monter     | string | `'configurator'`  |\n| `profiles`   | Liste des profils disponibles | array  | `[]`              |\n| `buildInfo`  | Information de build affichée | string | `''`              |\n\n### Variables d'environnement\n\nAucune variable d'environnement spécifique n'est utilisée par ce module.\n\n## Détails des sources\n\n### `configurator.js`\n\nPoint d'entrée principal qui expose les commandes Xcraft du service configurator via le système de découverte automatique.\n\n### `shell.js`\n\nService de démarrage qui orchestre l'initialisation des différents composants :\n\n#### État et modèle de données\n\nL'acteur shell maintient un état minimal pour la coordination des services.\n\n#### Méthodes publiques\n\n- **`boot()`** — Initialise le client et démarre tous les profils configurés, incluant l'intégration optionnelle avec cresus-launcher.\n- **`configureDesktop(clientSessionId, labId, desktopId, session, username, locale, configuration)`** — Configure un bureau avec les paramètres utilisateur spécifiés.\n- **`afterConfigureDesktop(labId, desktopId)`** — Exécute les actions post-configuration du bureau.\n\n### `widgets/configurator/service.js`\n\nService principal de l'acteur configurator qui gère l'état global et les interactions utilisateur.\n\n#### État et modèle de données\n\nL'état du configurateur comprend :\n\n```javascript\nconst logicState = {\n  form: {}, // Données du formulaire utilisateur\n  available: {}, // Profils disponibles\n  profiles: {}, // Configuration des profils\n  advanced: false, // Mode avancé activé\n  selectedEntity: null, // Entité sélectionnée pour génération\n  ripley: {\n    // Système de replay d'actions\n    profileKey: null,\n    db: {},\n    selected: {from: null, to: null},\n  },\n  relaunch: {\n    // Gestion du redémarrage\n    reason: null,\n    desktops: [],\n  },\n};\n```\n\n#### Méthodes publiques\n\n- **`create(labId, clientSessionId, username, appArgs, useLogin, next)`** — Initialise le configurateur avec les paramètres de session et charge les profils disponibles.\n- **`openSession(profileKey, feed)`** — Ouvre une nouvelle session utilisateur avec le profil spécifié ou reconnecte à une session existante.\n- **`closeSession(name)`** — Ferme une session utilisateur existante via le desktop-manager.\n- **`toggleAdvanced()`** — Bascule entre le mode normal et avancé pour afficher les profils de développement.\n- **`change(path, newValue)`** — Met à jour une valeur dans l'état du configurateur.\n- **`select(type, selectedId)`** — Sélectionne un élément dans l'interface (pour Ripley).\n- **`createNewEntity()`** — Génère une nouvelle entité via le workshop.\n- **`generateWorkitemsTemplates()`** — Génère des templates de workitems pour une entité sélectionnée.\n- **`clearWorkitemsTemplates()`** — Efface la sélection d'entité pour les templates.\n- **`replayActionStore()`** — Rejoue des actions depuis un store sauvegardé via le système Ripley.\n- **`logout()`** — Déconnecte l'utilisateur et redémarre l'interface.\n- **`getRelaunchDesktops()`** — Récupère la liste des bureaux à relancer après un redémarrage.\n- **`resetRelaunchDesktops()`** — Remet à zéro la liste des bureaux à relancer.\n- **`updateCurrentUser(username)`** — Met à jour le nom d'utilisateur actuel.\n- **`updateFeeds(feeds)`** — Met à jour la liste des feeds disponibles suite aux changements du warehouse.\n\n### `widgets/configurator/widget.js`\n\nInterface utilisateur principale du configurateur avec gestion des sessions et profils. Le composant gère l'affichage en mode classique ou launcher et intègre plusieurs popups pour les fonctionnalités avancées. Il utilise MouseTrap pour la gestion des raccourcis clavier (Ctrl+K pour le mode avancé).\n\n### `widgets/configurator/styles.js`\n\nStyles CSS pour l'interface du configurateur avec support des modes classique et launcher.\n\n### `widgets/app-icon/widget.js`\n\nComposant représentant une application ou session avec support des détails configurables et actions de fermeture. Affiche les informations de configuration en mode détaillé pour les sessions.\n\n### `widgets/app-icon/styles.js`\n\nStyles pour les icônes d'applications avec effets visuels, états actifs et animations de survol.\n\n### `widgets/configurator-navigator/widget.js`\n\nNavigateur principal gérant l'affichage des sessions sous forme de grille ou de launcher moderne avec des \"rockets\". Supporte le redimensionnement dynamique et la gestion des passagers. Le composant utilise un debounce pour optimiser les performances lors du redimensionnement de la fenêtre.\n\n### `widgets/configurator-navigator/styles.js`\n\nStyles pour le navigateur avec support des deux modes d'affichage et animations.\n\n### `widgets/configurator-popup/widget.js`\n\nComposant popup générique pour les dialogues de configuration avec animations, gestion des touches (Escape) et fermeture par clic extérieur.\n\n### `widgets/configurator-popup/styles.js`\n\nStyles pour les popups avec animations d'entrée/sortie et positionnement centré.\n\n### `widgets/configurator-confirm-popup/widget.js`\n\nPopup de confirmation pour les actions destructives comme la réinitialisation de mandats.\n\n### `widgets/configurator-build-popup/widget.js`\n\nInterface pour les outils de génération de code, permettant de créer des entités ou des templates de workitems.\n\n### `widgets/configurator-build-entity-popup/widget.js`\n\nFormulaire de création d'entités avec champs configurables pour les propriétés.\n\n### `widgets/configurator-build-workitem-popup/widget.js`\n\nInterface de sélection d'entités pour la génération de templates de workitems.\n\n### `widgets/configurator-action-store-popup/widget.js`\n\nInterface du système Ripley pour le replay d'actions et le voyage dans le temps entre états de base de données.\n\n### `widgets/main-layout/widget.js`\n\nLayout principal de l'application avec header, footer et zone de contenu. Inclut les boutons d'outils de développement et la gestion de l'authentification. Le composant détecte automatiquement le mode développeur basé sur la présence de \"ctrl+k\" dans le buildInfo.\n\n### `widgets/clock/widget.js`\n\nHorloge temps réel affichée dans le footer de l'application avec mise à jour automatique toutes les secondes.\n\n### `widgets/ripley/widget.js`\n\nInterface de gestion du système de replay d'actions permettant de sélectionner des bases de données source et destination pour le voyage temporel. Utilise un système d'arbre pour afficher les branches de base de données avec timestamps formatés.\n\n### `widgets/ripley/styles.js`\n\nStyles pour l'interface Ripley avec dégradé visuel et layout en colonnes.\n\n### Fichiers spéciaux (workers, backends, etc.)\n\nLe module utilise le système de découverte automatique de commandes Xcraft via les exports `xcraftCommands` dans les fichiers racine, permettant au framework de charger dynamiquement les services au démarrage. Le système supporte également l'intégration avec des modules externes comme `goblin-cresus` (non public) et `goblin-workshop` pour étendre les fonctionnalités.\n\nLe configurateur intègre également un système de gestion des branches de base de données via le module `cryo`, permettant le voyage temporel entre différents états de données.\n\n---\n\n_Documentation mise à jour_\n\n[xcraft-core-etc]: https://github.com/Xcraft-Inc/xcraft-core-etc\n[goblin-client]: https://github.com/Xcraft-Inc/goblin-client\n[goblin-warehouse]: https://github.com/Xcraft-Inc/goblin-warehouse\n[goblin-desktop]: https://github.com/Xcraft-Inc/goblin-desktop\n[goblin-workshop]: https://github.com/Xcraft-Inc/goblin-workshop\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxcraft-inc%2Fgoblin-configurator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxcraft-inc%2Fgoblin-configurator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxcraft-inc%2Fgoblin-configurator/lists"}