Nitro V3 Secure Runtime

# Documentazione configurazione runtime

Questa pagina riassume in modo ordinato come configurare i toggle runtime, i file example e i parametri lato client / emulatore senza sporcare i componenti in `src`.

## Indice

## Overview

### Dist Obfuscation

Sceglie se caricare `app.js/app.css` oppure `.dat`.

### Secure Assets

Controlla se `renderer-config`, `ui-config` e gamedata passano da `/nitro-sec/file`.

### Secure API

Attiva o disattiva la cifratura runtime automatica su `/api/*`.

## File da usare

File | Scopo | Nota
--- | --- | ---
`public/configuration/client-mode.example` | Template per i toggle runtime | Da copiare in `configuration/client-mode.json` nel deploy reale, che resta ignorato da Git
`public/configuration/renderer-config.example` | Template sicuro del renderer config | Non tocca il tuo `configuration/renderer-config.json` locale
`public/configuration/ui-config.example` | Template UI config | Da mantenere come riferimento pulito
`Latest_Compiled_Version/config.ini.example` | Flag backend secure | Specifica la parte lato emulatore

## client-mode.example

È il punto centrale per attivare o disattivare il comportamento runtime senza dover modificare il codice.

    {
        "distObfuscationEnabled": true,
        "secureAssetsEnabled": true,
        "secureApiEnabled": true,
        "apiBaseUrl": "https://nitro.example.com:2096",
        "plainConfigBaseUrl": "https://hotel.example.com/configuration/",
        "plainGamedataBaseUrl": "https://hotel.example.com/client/nitro/gamedata/"
    }

### Campi

- `distObfuscationEnabled`: usa `.dat` oppure file plain
- `secureAssetsEnabled`: attiva `/nitro-sec/file`
- `secureApiEnabled`: cifra le richieste `/api/*`
- `apiBaseUrl`: base URL emulatore/API

### Suggerimento

Conviene impostare sempre `apiBaseUrl` in modo esplicito, così non dipendi da fallback impliciti del runtime.

## renderer-config.example

Qui definisci URL di socket, API, asset library e gamedata. Tutti i link pubblici dovrebbero vivere qui, non nei componenti React.

### Chiavi principali

- `socket.url`
- `api.url`
- `asset.url`
- `image.library.url`
- `images.url`
- `gamedata.url`

### Traduzioni

- `external.texts.translation.url`
- `furnidata.translation.url`
- Usano `%locale%` e `%timestamp%`

## ui-config.example

Per la login view e altre immagini UI, la sorgente deve stare qui o in renderer config, non hardcoded nei componenti.

### Login view

- `loginview.images.background`
- `loginview.images.drape`
- `loginview.images.left`
- `loginview.images.right`
- `loginview.widgets` per i blocchi promozionali

## Codice runtime coinvolto

### `src/bootstrap.ts`

Legge `client-mode`, costruisce `NitroConfig['config.urls']` e prepara il bootstrap del client.

### `src/secure-assets.ts`

Gestisce ECDH, decrypt/encrypt, fallback plain e secure API runtime.

### `scripts/write-asset-loader.mjs`

Genera `public/configuration/asset-loader.js` e decide se usare file plain o `.dat`.

### `scripts/minify-dist.mjs`

Genera i `.dat` ma mantiene anche i file plain per il toggle runtime.

## Emulatore

    nitro.secure.assets.enabled=true
    nitro.secure.api.enabled=true
    nitro.secure.config.root=C:/path/to/Nitro-V3/public
    nitro.secure.gamedata.root=C:/path/to/gamedata
    nitro.secure.master_key=change-me-to-a-long-random-secret

- `nitro.secure.assets.enabled`: abilita `/nitro-sec/bootstrap` e `/nitro-sec/file`
- `nitro.secure.api.enabled`: abilita la cifratura su `/api/*`
- `nitro.secure.config.root`: cartella dei config live
- `nitro.secure.gamedata.root`: cartella del gamedata live
- `nitro.secure.master_key`: chiave persistente server-side

## Scenari rapidi

### Tutto attivo

Secure assets, secure API e dist obfuscation tutti attivi.

### Solo .dat

Usi i `.dat`, ma lasci config/API in plain.

### Tutto plain

Modalità fallback completa per debug o test locali.

## Checklist finale

Hai creato i file reali partendo da `client-mode.example`, `renderer-config.example` e `ui-config.example`
Gli URL pubblici stanno nei file config, non nei componenti React
Hai deployato sia i file plain sia i `.dat`
Il server espone correttamente il MIME type per `.dat`
Hai impostato `nitro.secure.master_key` lato emulatore