@hexah/create-skin 0.1.1 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,22 +13,47 @@ npm install
13
13
  npm run dev # rspack serve z HMR
14
14
  ```
15
15
 
16
- Następnie podłącz remote do hosta na teście (instrukcja w wygenerowanym `README.md` skórki):
17
- `localStorage["hexah.skinRemote"]` + motyw „SDK Remote (zdalna skórka)".
16
+ ## Podłączenie do test.kf2.pl
17
+
18
+ Skórkę ładuje aplikacja działająca pod publicznym adresem (HTTPS), a przeglądarka nie pozwala
19
+ takiej stronie pobrać zasobu z `localhost`. Wystaw więc dev server pod **publicznym URL przez
20
+ tunel**:
21
+
22
+ ```bash
23
+ npx cloudflared tunnel --url http://localhost:3001 # → https://<rand>.trycloudflare.com
24
+ ```
25
+
26
+ `<rand>.trycloudflare.com` to adres, który cloudflared wypisze w terminalu — skopiuj go
27
+ (zmienia się po każdym restarcie tunelu). Następnie otwórz `https://test.kf2.pl`, zaloguj się i
28
+ **w konsoli przeglądarki (F12 → Console)** wklej:
29
+
30
+ ```js
31
+ localStorage.setItem('hexah.skinRemoteAllowedOrigins', JSON.stringify(['https://<rand>.trycloudflare.com']))
32
+ localStorage.setItem('hexah.skinRemote', JSON.stringify({
33
+ name: 'moja_skorka', // = nazwa kontenera (uniqueName w rspack.config.js)
34
+ entry: 'https://<rand>.trycloudflare.com/remoteEntry.js',
35
+ template: 'sdkremote',
36
+ screens: { report: './ReportScreen' },
37
+ apiVersion: '0.2.0',
38
+ }))
39
+ ```
40
+
41
+ Odśwież stronę, w **Ustawieniach Gry** wybierz motyw **„SDK Remote (zdalna skórka)"** i wejdź na
42
+ ekran zgłoszeń — zobaczysz swój `ReportScreen` na realnych danych. Po każdej zmianie w `src/`
43
+ odśwież stronę (remote przebuduje się przez HMR).
18
44
 
19
45
  ## Co generuje
20
46
 
21
- Starter (`template/`) z placeholderami `__SKIN_NAME__` / `__SKIN_FEDERATION_NAME__`:
47
+ Gotowy projekt skórki:
22
48
 
23
49
  - `rspack.config.js` — `ModuleFederationPlugin` wystawiający `./ReportScreen`, paczki
24
- współdzielone z hostem (`import: false`), dev server na `:3001` z CORS.
25
- - `src/ReportScreen.jsx` — przykładowy ekran na `@hexah/skin-sdk`.
26
- - `package.json`, `.gitignore`, `README.md`.
50
+ współdzielone z hostem (`import: false`), dev server na `:3001` (CORS + `allowedHosts`).
51
+ - `src/ReportScreen.jsx` — przykładowy ekran zbudowany na `@hexah/skin-sdk`.
52
+ - `package.json`, `.gitignore`, `README.md` z instrukcją podłączenia do środowiska testowego.
27
53
 
28
- Nazwa kontenera MF jest sanityzowana z nazwy katalogu (`toFederationName` — identyfikator JS).
54
+ Nazwa kontenera Module Federation jest automatycznie sanityzowana z nazwy katalogu do
55
+ poprawnego identyfikatora.
29
56
 
30
- ## Status
57
+ ## Licencja
31
58
 
32
- POC etapu C. Publikowany jako `@hexah/create-skin` (licencja MIT) przez ręczny workflow —
33
- patrz `docs/skin-sdk/publishing.md`. Przed publikacją działa tylko z repo
34
- (`node packages/create-hexah-skin/index.js <katalog>`). Pełne demo wymaga środowiska testowego.
59
+ MIT.
package/index.js CHANGED
@@ -36,18 +36,19 @@ function main(argv) {
36
36
  console.log("Dalej:");
37
37
  console.log(` cd ${target}`);
38
38
  console.log(" npm install");
39
- console.log(" npm run dev # rspack serve z HMR (np. https://localhost:3001/remoteEntry.js)");
39
+ console.log(" npm run dev # rspack serve z HMR (http://localhost:3001/remoteEntry.js)");
40
40
  console.log("");
41
41
  console.log("Podłączenie do hosta (środowisko testowe) — w konsoli przeglądarki:");
42
42
  console.log(
43
43
  ` localStorage.setItem('hexah.skinRemote', JSON.stringify({ name: '${federationName}',`,
44
44
  );
45
45
  console.log(
46
- " entry: 'https://localhost:3001/remoteEntry.js', template: 'sdkremote',",
46
+ " entry: 'http://localhost:3001/remoteEntry.js', template: 'sdkremote',",
47
47
  );
48
48
  console.log(" screens: { report: './ReportScreen' }, apiVersion: '0.2.0' }))");
49
- console.log("Dev server jedzie po HTTPSwejdź raz na https://localhost:3001/remoteEntry.js");
50
- console.log("i zaakceptuj samopodpisany cert (inaczej host na HTTPS zablokuje ładowanie).");
49
+ console.log("Zdeployowany test (https) wymaga publicznego URL odpal tunel:");
50
+ console.log(" npx cloudflared tunnel --url http://localhost:3001 # https://<rand>.trycloudflare.com");
51
+ console.log("i użyj tego URL w entry + hexah.skinRemoteAllowedOrigins. Patrz README.");
51
52
  console.log("Następnie w Ustawieniach Gry wybierz motyw „SDK Remote (zdalna skórka)\".");
52
53
  return 0;
53
54
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hexah/create-skin",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Scaffolder skórki Hexah (zdalny kontener Module Federation, harness dev z HMR).",
5
5
  "bin": {
6
6
  "create-hexah-skin": "index.js"
@@ -1,37 +1,47 @@
1
1
  # __SKIN_NAME__
2
2
 
3
- Skórka Hexah zbudowana jako **zdalny kontener Module Federation**. Działa na realnej
4
- aplikacji Hexah (host) podpiętej do środowiska testowego bez dostępu do kodu gry.
3
+ Skórka Hexah zbudowana jako **zdalny kontener Module Federation**. Renderuje się w działającej
4
+ aplikacji Hexah na środowisku testowym budujesz wyłącznie na publicznym SDK
5
+ `@hexah/skin-sdk`, bez dostępu do kodu gry.
5
6
 
6
7
  ## Start
7
8
 
8
9
  ```bash
9
10
  npm install
10
- npm run dev # rspack serve z HMR → https://localhost:3001/remoteEntry.js
11
+ npm run dev # rspack serve z HMR → http://localhost:3001/remoteEntry.js
11
12
  ```
12
13
 
13
- ## Podłączenie do hosta (środowisko testowe)
14
+ ## Podłączenie do środowiska testowego Hexah
14
15
 
15
- W konsoli przeglądarki na środowisku testowym Hexah:
16
+ Skórkę ładuje aplikacja działająca pod publicznym adresem (HTTPS). Przeglądarka **nie pozwala**
17
+ takiej stronie pobrać zasobu z `localhost` (Local/Private Network Access — `NS_BINDING_ABORTED`).
18
+ Dlatego wystaw swój dev server pod **publicznym URL przez tunel**:
19
+
20
+ ```bash
21
+ npm run dev # http://localhost:3001
22
+ npx cloudflared tunnel --url http://localhost:3001 # → https://<rand>.trycloudflare.com
23
+ ```
24
+
25
+ `<rand>.trycloudflare.com` to adres, który cloudflared wypisze w terminalu — skopiuj go.
26
+ Następnie w konsoli przeglądarki na środowisku testowym Hexah:
16
27
 
17
28
  ```js
29
+ localStorage.setItem('hexah.skinRemoteAllowedOrigins', JSON.stringify(['https://<rand>.trycloudflare.com']))
18
30
  localStorage.setItem('hexah.skinRemote', JSON.stringify({
19
31
  name: '__SKIN_FEDERATION_NAME__',
20
- entry: 'https://localhost:3001/remoteEntry.js',
32
+ entry: 'https://<rand>.trycloudflare.com/remoteEntry.js',
21
33
  template: 'sdkremote',
22
34
  screens: { report: './ReportScreen' },
23
35
  apiVersion: '0.2.0',
24
36
  }))
25
37
  ```
26
38
 
27
- > **Pierwsze uruchomienie:** dev server jedzie po **HTTPS** z samopodpisanym certem (host na
28
- > teście jest HTTPS — remote po HTTP byłby zablokowany jako mixed content / „dostęp do sieci
29
- > lokalnej"). Wejdź **raz** na <https://localhost:3001/remoteEntry.js> i zaakceptuj wyjątek
30
- > certyfikatu, dopiero potem odśwież `test.kf2.pl`.
31
-
32
39
  Odśwież, w **Ustawieniach Gry** wybierz motyw **„SDK Remote (zdalna skórka)"** i wejdź na ekran
33
- zgłoszeń — zobaczysz swój `ReportScreen` na realnych danych. Dzięki HMR zmiany w `src/`
34
- widoczne po odświeżeniu (rebuild remote'a).
40
+ zgłoszeń — zobaczysz swój `ReportScreen` na realnych danych. HMR pokazuje zmiany w `src/` po
41
+ odświeżeniu (i ponownym pobraniu remote'a).
42
+
43
+ > Adres tunelu zmienia się po każdym restarcie cloudflared — wklej wtedy nowy URL w oba wpisy
44
+ > `localStorage`.
35
45
 
36
46
  ## Co możesz edytować
37
47
 
@@ -40,7 +50,8 @@ widoczne po odświeżeniu (rebuild remote'a).
40
50
 
41
51
  ## Zasady
42
52
 
43
- - Importuj tylko z `@hexah/skin-sdk` — to publiczny kontrakt (stałe, typy, hooki, UI).
44
- - Pakiety react/jotai/@mui/@emotion/@hexah/skin-sdk są współdzielone (`import: false`)
45
- nie pakujesz ich, bierzesz instancje hosta.
46
- - Host ładuje skórkę tylko z dozwolonych originów i przy zgodnym `apiVersion`.
53
+ - Importuj **tylko** z `@hexah/skin-sdk` — to publiczny kontrakt (stałe, typy, hooki, UI).
54
+ - Pakiety `react`/`jotai`/`@mui`/`@emotion`/`@hexah/skin-sdk` są współdzielone (`import: false`)
55
+ nie pakujesz ich, dostajesz instancje z aplikacji-hosta.
56
+ - `apiVersion` musi być zgodna z hostem (ten sam major, minor ≤ host) — inaczej host odmówi
57
+ załadowania.
@@ -52,14 +52,14 @@ module.exports = {
52
52
  },
53
53
  }),
54
54
  ],
55
- // Dev server po HTTPS: host (np. https://test.kf2.pl) jest na HTTPS, więc remote po HTTP
56
- // byłby zablokowany jako mixed content + „dostęp do sieci lokalnej" (NS_BINDING_ABORTED).
57
- // HTTPS daje samopodpisany cert wejdź raz na https://localhost:3001/remoteEntry.js i
58
- // zaakceptuj wyjątek. Nagłówki: CORS (cross-origin load) + Private Network Access
59
- // (Chrome wymaga przy żądaniu z publicznego hosta do localhost).
55
+ // Dev server po HTTP najprostszy. Dwa działające tryby ładowania w hoście:
56
+ // tunel (cloudflared/ngrok) wystawia to publicznie po HTTPS działa na zdeployowanym teście,
57
+ // lokalny host KF2 (http://localhost) ładuje remote po HTTP wprost.
58
+ // `allowedHosts: "all"` tunel przekazuje nagłówek Host domeny publicznej; bez tego rspack
59
+ // odrzuca żądanie („Invalid Host header"). Nagłówki: CORS + Private Network Access.
60
60
  devServer: {
61
61
  port: 3001,
62
- server: "https",
62
+ allowedHosts: "all",
63
63
  headers: {
64
64
  "Access-Control-Allow-Origin": "*",
65
65
  "Access-Control-Allow-Private-Network": "true",