# ethanlabs101/frlegends-skeleton-key architecture

> Architecture diagram of the GitHub repository ethanlabs101/frlegends-skeleton-key, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ethanlabs101/frlegends-skeleton-key
- Repository: https://github.com/ethanlabs101/frlegends-skeleton-key
- Video tour (about a minute): https://gitdiagram.com/ethanlabs101/frlegends-skeleton-key/video

## Overview

FR Legends Skeleton Key is a CLI toolkit for managing accounts and editing FR Legends saves and assets. The principal workflow enters through the CLI, authenticates against PlayFab, retrieves and decodes player data, applies a selected sandbox operation, and can upload the changed save; local account and user-generated data management are additional branches. The sampled code confirms the CLI and sandbox dispatch, PlayFab client operations, and car injection upload. Other feature branches are retained from the README and tree; their internal wiring is not inferred where source was not sampled.

Main entry points: [`skeleton-key-vault/cli.js`](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/cli.js) (CLI entry), [`skeleton-key-vault/sandbox/index.js`](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/sandbox/index.js) (Sandbox dispatcher), [`skeleton-key-vault/src/client.js`](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/client.js) (PlayFab client), [`skeleton-key-vault/src/auth.js`](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/auth.js) (Account auth)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI and accounts"]
  node_cli["CLI entry<br/>[cli.js]"]
  node_auth["Account auth<br/>[auth.js]"]
  node_vault[("Local account vault<br/>[cli.js]")]
  node_clone["Account cloning<br/>[account_cloning.js]"]
end

subgraph group_game["Game data workflow"]
  node_playfab["PlayFab client<br/>[client.js]"]
  node_pd["Save codec<br/>[pd.js]"]
  node_validation["Save validation<br/>[validate_system.js]"]
  node_sandbox["Sandbox dispatcher<br/>[index.js]"]
  node_player_edits["Player data edits"]
end

subgraph group_assets["Assets and liveries"]
  node_car_tools["Car tools"]
  node_car_injector["Car injector<br/>[injector.js]"]
  node_garage["Garage manager<br/>[garage_manager.js]"]
  node_livery["Livery tools"]
  node_asset_db["Asset database"]
end

subgraph group_support["Vault and support"]
  node_user_data["User data manager"]
  node_local_files[("Local data files")]
  node_telemetry["Telemetry sync<br/>[telemetry.js]"]
  node_updater["Safe updater<br/>[update.js]"]
  node_security["Vault security<br/>[security.js]"]
end

node_user(("CLI user"))
node_playfab_service{{"PlayFab service"}}

node_user -->|"selects"| node_cli
node_cli -->|"dispatches auth"| node_auth
node_auth -->|"uses"| node_security
node_auth -->|"stores identity"| node_vault
node_cli -->|"dispatches cloning"| node_clone
node_cli -->|"uses"| node_playfab
node_playfab -->|"requests account data"| node_playfab_service
node_playfab_service -->|"returns profile files"| node_playfab
node_cli -->|"decodes save"| node_pd
node_cli -->|"checks save schema"| node_validation
node_cli -->|"opens tools"| node_sandbox
node_sandbox -->|"downloads save"| node_playfab
node_sandbox -->|"decodes profile"| node_pd
node_sandbox -->|"dispatches edits"| node_player_edits
node_sandbox -->|"dispatches car tools"| node_car_tools
node_sandbox -->|"opens garage"| node_garage
node_sandbox -->|"dispatches livery tools"| node_livery
node_livery -->|"uses database tools"| node_asset_db
node_car_tools -->|"injects payload"| node_car_injector
node_car_injector -->|"uploads save"| node_playfab
node_cli -->|"opens data manager"| node_user_data
node_user_data -->|"manages files"| node_local_files
node_cli -->|"syncs telemetry"| node_telemetry
node_cli -->|"checks updates"| node_updater

click node_cli "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/cli.js"
click node_auth "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/auth.js"
click node_vault "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/cli.js"
click node_clone "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/menu/account_cloning.js"
click node_playfab "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/client.js"
click node_pd "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/pd.js"
click node_validation "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/menu/validate_system.js"
click node_sandbox "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/sandbox/index.js"
click node_player_edits "https://github.com/ethanlabs101/frlegends-skeleton-key/tree/main/skeleton-key-vault/sandbox"
click node_car_tools "https://github.com/ethanlabs101/frlegends-skeleton-key/tree/main/skeleton-key-vault/sandbox"
click node_car_injector "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/sandbox/cars/injector.js"
click node_garage "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/sandbox/garage_manager.js"
click node_livery "https://github.com/ethanlabs101/frlegends-skeleton-key/tree/main/skeleton-key-vault/sandbox/livery"
click node_asset_db "https://github.com/ethanlabs101/frlegends-skeleton-key/tree/main/skeleton-key-vault/sandbox/livery/database"
click node_user_data "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/sandbox/user_data_manager.js"
click node_telemetry "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/telemetry.js"
click node_updater "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/update.js"
click node_security "https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/security.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_auth,node_vault,node_clone,node_user toneBlue
class node_playfab,node_pd,node_validation,node_sandbox,node_player_edits toneAmber
class node_car_tools,node_car_injector,node_garage,node_livery,node_asset_db toneMint
class node_user_data,node_local_files,node_telemetry,node_updater,node_security toneRose
class node_playfab_service toneIndigo
```

## Components

### CLI and accounts

- [CLI entry](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/cli.js): `skeleton-key-vault/cli.js`
- [Account auth](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/auth.js): `skeleton-key-vault/src/auth.js`
- [Local account vault](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/cli.js): `skeleton-key-vault/cli.js`
- [Account cloning](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/menu/account_cloning.js): `skeleton-key-vault/menu/account_cloning.js`

### Game data workflow

- [PlayFab client](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/client.js): `skeleton-key-vault/src/client.js`
- [Save codec](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/pd.js): `skeleton-key-vault/src/pd.js`
- [Save validation](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/menu/validate_system.js): `skeleton-key-vault/menu/validate_system.js`
- [Sandbox dispatcher](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/sandbox/index.js): `skeleton-key-vault/sandbox/index.js`
- [Player data edits](https://github.com/ethanlabs101/frlegends-skeleton-key/tree/main/skeleton-key-vault/sandbox): `skeleton-key-vault/sandbox`

### Assets and liveries

- [Car tools](https://github.com/ethanlabs101/frlegends-skeleton-key/tree/main/skeleton-key-vault/sandbox): `skeleton-key-vault/sandbox`
- [Car injector](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/sandbox/cars/injector.js): `skeleton-key-vault/sandbox/cars/injector.js`
- [Garage manager](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/sandbox/garage_manager.js): `skeleton-key-vault/sandbox/garage_manager.js`
- [Livery tools](https://github.com/ethanlabs101/frlegends-skeleton-key/tree/main/skeleton-key-vault/sandbox/livery): `skeleton-key-vault/sandbox/livery`
- [Asset database](https://github.com/ethanlabs101/frlegends-skeleton-key/tree/main/skeleton-key-vault/sandbox/livery/database): `skeleton-key-vault/sandbox/livery/database`

### Vault and support

- [User data manager](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/sandbox/user_data_manager.js): `skeleton-key-vault/sandbox/user_data_manager.js`
- **Local data files**
- [Telemetry sync](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/telemetry.js): `skeleton-key-vault/src/telemetry.js`
- [Safe updater](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/update.js): `skeleton-key-vault/src/update.js`
- [Vault security](https://github.com/ethanlabs101/frlegends-skeleton-key/blob/main/skeleton-key-vault/src/security.js): `skeleton-key-vault/src/security.js`

### Other components

- **CLI user**
- **PlayFab service**

## Connections

- CLI user → CLI entry: selects
- CLI entry → Account auth: dispatches auth
- Account auth → Vault security: uses
- Account auth → Local account vault: stores identity
- CLI entry → Account cloning: dispatches cloning
- CLI entry → PlayFab client: uses
- PlayFab client → PlayFab service: requests account data
- PlayFab service → PlayFab client: returns profile files
- CLI entry → Save codec: decodes save
- CLI entry → Save validation: checks save schema
- CLI entry → Sandbox dispatcher: opens tools
- Sandbox dispatcher → PlayFab client: downloads save
- Sandbox dispatcher → Save codec: decodes profile
- Sandbox dispatcher → Player data edits: dispatches edits
- Sandbox dispatcher → Car tools: dispatches car tools
- Sandbox dispatcher → Garage manager: opens garage
- Sandbox dispatcher → Livery tools: dispatches livery tools
- Livery tools → Asset database: uses database tools
- Car tools → Car injector: injects payload
- Car injector → PlayFab client: uploads save
- CLI entry → User data manager: opens data manager
- User data manager → Local data files: manages files
- CLI entry → Telemetry sync: syncs telemetry
- CLI entry → Safe updater: checks updates
