@littlepartytime/dev-kit 1.19.0 → 1.20.0

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.
Files changed (63) hide show
  1. package/dist/__tests__/engine-loader.test.d.ts +2 -0
  2. package/dist/__tests__/engine-loader.test.d.ts.map +1 -0
  3. package/dist/__tests__/engine-loader.test.js +48 -0
  4. package/dist/__tests__/engine-loader.test.js.map +1 -0
  5. package/dist/__tests__/games-api.test.d.ts +2 -0
  6. package/dist/__tests__/games-api.test.d.ts.map +1 -0
  7. package/dist/__tests__/games-api.test.js +109 -0
  8. package/dist/__tests__/games-api.test.js.map +1 -0
  9. package/dist/__tests__/lan-address.test.d.ts +2 -0
  10. package/dist/__tests__/lan-address.test.d.ts.map +1 -0
  11. package/dist/__tests__/lan-address.test.js +14 -0
  12. package/dist/__tests__/lan-address.test.js.map +1 -0
  13. package/dist/__tests__/validate-demo.test.d.ts +2 -0
  14. package/dist/__tests__/validate-demo.test.d.ts.map +1 -0
  15. package/dist/__tests__/validate-demo.test.js +73 -0
  16. package/dist/__tests__/validate-demo.test.js.map +1 -0
  17. package/dist/__tests__/zip-manager.test.d.ts +2 -0
  18. package/dist/__tests__/zip-manager.test.d.ts.map +1 -0
  19. package/dist/__tests__/zip-manager.test.js +111 -0
  20. package/dist/__tests__/zip-manager.test.js.map +1 -0
  21. package/dist/cli.d.ts.map +1 -1
  22. package/dist/cli.js +19 -0
  23. package/dist/cli.js.map +1 -1
  24. package/dist/commands/dev.d.ts.map +1 -1
  25. package/dist/commands/dev.js +11 -0
  26. package/dist/commands/dev.js.map +1 -1
  27. package/dist/commands/pack.d.ts.map +1 -1
  28. package/dist/commands/pack.js +6 -3
  29. package/dist/commands/pack.js.map +1 -1
  30. package/dist/commands/play.d.ts +7 -0
  31. package/dist/commands/play.d.ts.map +1 -0
  32. package/dist/commands/play.js +154 -0
  33. package/dist/commands/play.js.map +1 -0
  34. package/dist/server/engine-loader.d.ts +5 -0
  35. package/dist/server/engine-loader.d.ts.map +1 -1
  36. package/dist/server/engine-loader.js +23 -0
  37. package/dist/server/engine-loader.js.map +1 -1
  38. package/dist/server/games-api.d.ts +7 -0
  39. package/dist/server/games-api.d.ts.map +1 -0
  40. package/dist/server/games-api.js +189 -0
  41. package/dist/server/games-api.js.map +1 -0
  42. package/dist/server/lan-address.d.ts +2 -0
  43. package/dist/server/lan-address.d.ts.map +1 -0
  44. package/dist/server/lan-address.js +19 -0
  45. package/dist/server/lan-address.js.map +1 -0
  46. package/dist/server/socket-server.d.ts +3 -1
  47. package/dist/server/socket-server.d.ts.map +1 -1
  48. package/dist/server/socket-server.js +32 -5
  49. package/dist/server/socket-server.js.map +1 -1
  50. package/dist/server/zip-manager.d.ts +24 -0
  51. package/dist/server/zip-manager.d.ts.map +1 -0
  52. package/dist/server/zip-manager.js +99 -0
  53. package/dist/server/zip-manager.js.map +1 -0
  54. package/dist/utils/validate-demo.d.ts +10 -0
  55. package/dist/utils/validate-demo.d.ts.map +1 -0
  56. package/dist/utils/validate-demo.js +36 -0
  57. package/dist/utils/validate-demo.js.map +1 -0
  58. package/dist/webapp/App.tsx +3 -1
  59. package/dist/webapp/components/GameSelector.tsx +163 -0
  60. package/dist/webapp/pages/Debug.tsx +3 -1
  61. package/dist/webapp/pages/Play.tsx +143 -94
  62. package/dist/webapp/pages/Preview.tsx +273 -219
  63. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"socket-server.js","sourceRoot":"","sources":["../../src/server/socket-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket-server.js","sourceRoot":"","sources":["../../src/server/socket-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface GameEntry {
2
+ id: string;
3
+ name: string;
4
+ description: string;
5
+ version: string;
6
+ minPlayers: number;
7
+ maxPlayers: number;
8
+ iconPath: string | null;
9
+ extractDir: string;
10
+ enginePath: string;
11
+ bundlePath: string;
12
+ assetsDir: string | null;
13
+ }
14
+ export declare class ZipManager {
15
+ private games;
16
+ loadZip(zipPath: string): Promise<GameEntry>;
17
+ loadFromUpload(buffer: Buffer, filename: string): Promise<GameEntry>;
18
+ private registerFromDir;
19
+ getGame(id: string): GameEntry | undefined;
20
+ listGames(): GameEntry[];
21
+ removeGame(id: string): void;
22
+ cleanup(): void;
23
+ }
24
+ //# sourceMappingURL=zip-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip-manager.d.ts","sourceRoot":"","sources":["../../src/server/zip-manager.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAqC;IAE5C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAW5C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAU1E,OAAO,CAAC,eAAe;IAkDvB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,SAAS,IAAI,SAAS,EAAE;IAIxB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQ5B,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ZipManager = void 0;
7
+ // packages/dev-kit/src/server/zip-manager.ts
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const os_1 = __importDefault(require("os"));
11
+ const child_process_1 = require("child_process");
12
+ class ZipManager {
13
+ games = new Map();
14
+ async loadZip(zipPath) {
15
+ const extractDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'lpt-game-'));
16
+ try {
17
+ (0, child_process_1.execSync)(`unzip -o -q "${zipPath}" -d "${extractDir}"`);
18
+ }
19
+ catch {
20
+ fs_1.default.rmSync(extractDir, { recursive: true, force: true });
21
+ throw new Error(`Failed to extract ZIP: ${zipPath}`);
22
+ }
23
+ return this.registerFromDir(extractDir);
24
+ }
25
+ async loadFromUpload(buffer, filename) {
26
+ const tmpZip = path_1.default.join(os_1.default.tmpdir(), `lpt-upload-${Date.now()}-${filename}`);
27
+ fs_1.default.writeFileSync(tmpZip, buffer);
28
+ try {
29
+ return await this.loadZip(tmpZip);
30
+ }
31
+ finally {
32
+ fs_1.default.rmSync(tmpZip, { force: true });
33
+ }
34
+ }
35
+ registerFromDir(extractDir) {
36
+ const manifestPath = path_1.default.join(extractDir, 'manifest.json');
37
+ const enginePath = path_1.default.join(extractDir, 'engine.cjs');
38
+ const bundlePath = path_1.default.join(extractDir, 'bundle.js');
39
+ if (!fs_1.default.existsSync(manifestPath)) {
40
+ fs_1.default.rmSync(extractDir, { recursive: true, force: true });
41
+ throw new Error('Invalid game ZIP: missing manifest.json');
42
+ }
43
+ if (!fs_1.default.existsSync(enginePath)) {
44
+ fs_1.default.rmSync(extractDir, { recursive: true, force: true });
45
+ throw new Error('Invalid game ZIP: missing engine.cjs');
46
+ }
47
+ if (!fs_1.default.existsSync(bundlePath)) {
48
+ fs_1.default.rmSync(extractDir, { recursive: true, force: true });
49
+ throw new Error('Invalid game ZIP: missing bundle.js');
50
+ }
51
+ const manifest = JSON.parse(fs_1.default.readFileSync(manifestPath, 'utf-8'));
52
+ let iconPath = null;
53
+ const iconName = manifest.assets?.icon;
54
+ if (iconName) {
55
+ const candidate = path_1.default.join(extractDir, iconName);
56
+ if (fs_1.default.existsSync(candidate))
57
+ iconPath = candidate;
58
+ }
59
+ const assetsDir = path_1.default.join(extractDir, 'assets');
60
+ const hasAssetsDir = fs_1.default.existsSync(assetsDir) && fs_1.default.statSync(assetsDir).isDirectory();
61
+ const id = `game-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
62
+ const entry = {
63
+ id,
64
+ name: manifest.name || 'Unknown Game',
65
+ description: manifest.description || '',
66
+ version: manifest.version || '0.0.0',
67
+ minPlayers: manifest.minPlayers ?? 2,
68
+ maxPlayers: manifest.maxPlayers ?? 8,
69
+ iconPath,
70
+ extractDir,
71
+ enginePath,
72
+ bundlePath,
73
+ assetsDir: hasAssetsDir ? assetsDir : null,
74
+ };
75
+ this.games.set(id, entry);
76
+ return entry;
77
+ }
78
+ getGame(id) {
79
+ return this.games.get(id);
80
+ }
81
+ listGames() {
82
+ return Array.from(this.games.values());
83
+ }
84
+ removeGame(id) {
85
+ const entry = this.games.get(id);
86
+ if (entry) {
87
+ fs_1.default.rmSync(entry.extractDir, { recursive: true, force: true });
88
+ this.games.delete(id);
89
+ }
90
+ }
91
+ cleanup() {
92
+ for (const entry of this.games.values()) {
93
+ fs_1.default.rmSync(entry.extractDir, { recursive: true, force: true });
94
+ }
95
+ this.games.clear();
96
+ }
97
+ }
98
+ exports.ZipManager = ZipManager;
99
+ //# sourceMappingURL=zip-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip-manager.js","sourceRoot":"","sources":["../../src/server/zip-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface DemoValidationResult {
2
+ valid: boolean;
3
+ errors: string[];
4
+ }
5
+ /**
6
+ * Validate that the demo site exists and uses relative paths.
7
+ * Absolute paths (e.g. src="/assets/...") will 404 when deployed to a CDN subdirectory.
8
+ */
9
+ export declare function validateDemo(demoDistDir: string): DemoValidationResult;
10
+ //# sourceMappingURL=validate-demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-demo.d.ts","sourceRoot":"","sources":["../../src/utils/validate-demo.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,CA8BtE"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateDemo = validateDemo;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ /**
10
+ * Validate that the demo site exists and uses relative paths.
11
+ * Absolute paths (e.g. src="/assets/...") will 404 when deployed to a CDN subdirectory.
12
+ */
13
+ function validateDemo(demoDistDir) {
14
+ const errors = [];
15
+ const indexPath = path_1.default.join(demoDistDir, 'index.html');
16
+ if (!fs_1.default.existsSync(demoDistDir) || !fs_1.default.existsSync(indexPath)) {
17
+ errors.push('GameConfig.demo is set but demo/dist/index.html not found.\n' +
18
+ ' Build your demo site first: cd demo && npm run build');
19
+ return { valid: false, errors };
20
+ }
21
+ const html = fs_1.default.readFileSync(indexPath, 'utf-8');
22
+ // Match src="/" or href="/" but not src="//" (protocol-relative URLs)
23
+ const absolutePathPattern = /(?:src|href)=["']\/(?!\/)/g;
24
+ const matches = html.match(absolutePathPattern);
25
+ if (matches) {
26
+ errors.push(`demo/dist/index.html contains absolute path references:\n` +
27
+ matches.map(m => ` ${m}`).join('\n') + '\n' +
28
+ ' The demo will be deployed to a CDN subdirectory, so absolute paths will cause 404.\n' +
29
+ ' Set base: "./" in your demo Vite config:\n' +
30
+ '\n' +
31
+ ' // demo/vite.config.ts\n' +
32
+ ' export default defineConfig({ base: "./" })');
33
+ }
34
+ return { valid: errors.length === 0, errors };
35
+ }
36
+ //# sourceMappingURL=validate-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-demo.js","sourceRoot":"","sources":["../../src/utils/validate-demo.ts"],"names":[],"mappings":";;;;;AAYA,oCA8BC;AA1CD,4CAAoB;AACpB,gDAAwB;AAOxB;;;GAGG;AACH,SAAgB,YAAY,CAAC,WAAmB;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEvD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CACT,8DAA8D;YAC9D,wDAAwD,CACzD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjD,sEAAsE;IACtE,MAAM,mBAAmB,GAAG,4BAA4B,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAEhD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CACT,2DAA2D;YAC3D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;YAC9C,wFAAwF;YACxF,8CAA8C;YAC9C,IAAI;YACJ,8BAA8B;YAC9B,iDAAiD,CAClD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import React, { useState, useEffect } from 'react';
2
2
  import Preview from './pages/Preview';
3
+
4
+ declare const __SOCKET_PORT__: number;
3
5
  import Play from './pages/Play';
4
6
  import Debug from './pages/Debug';
5
7
  import { captureScreen } from './utils/captureScreen';
@@ -57,7 +59,7 @@ export default function App() {
57
59
  ))}
58
60
  <div style={{ flex: 1 }} />
59
61
  <button
60
- onClick={() => fetch('http://localhost:4001/api/reset', { method: 'POST' })}
62
+ onClick={() => fetch(`http://${window.location.hostname}:${__SOCKET_PORT__}/api/reset`, { method: 'POST' })}
61
63
  className="dk-nav-btn"
62
64
  style={{
63
65
  padding: '4px 12px',
@@ -0,0 +1,163 @@
1
+ // packages/dev-kit/src/webapp/components/GameSelector.tsx
2
+ import React, { useState, useEffect, useCallback } from 'react';
3
+
4
+ declare const __SOCKET_PORT__: number;
5
+
6
+ interface GameInfo {
7
+ id: string;
8
+ name: string;
9
+ description: string;
10
+ version: string;
11
+ minPlayers: number;
12
+ maxPlayers: number;
13
+ active: boolean;
14
+ }
15
+
16
+ interface GameSelectorProps {
17
+ onGameActivated?: () => void;
18
+ }
19
+
20
+ export default function GameSelector({ onGameActivated }: GameSelectorProps) {
21
+ const [games, setGames] = useState<GameInfo[]>([]);
22
+ const [uploading, setUploading] = useState(false);
23
+ const [error, setError] = useState<string | null>(null);
24
+
25
+ const apiBase = `http://${window.location.hostname}:${window.location.port}`;
26
+
27
+ const fetchGames = useCallback(async () => {
28
+ try {
29
+ const res = await fetch(`${apiBase}/api/games`);
30
+ const data = await res.json();
31
+ setGames(data.games);
32
+ } catch {
33
+ // ignore fetch errors
34
+ }
35
+ }, [apiBase]);
36
+
37
+ useEffect(() => {
38
+ fetchGames();
39
+ const interval = setInterval(fetchGames, 3000);
40
+ return () => clearInterval(interval);
41
+ }, [fetchGames]);
42
+
43
+ const handleUpload = useCallback(async (e: React.ChangeEvent<HTMLInputElement>) => {
44
+ const file = e.target.files?.[0];
45
+ if (!file) return;
46
+
47
+ setUploading(true);
48
+ setError(null);
49
+
50
+ try {
51
+ const buffer = await file.arrayBuffer();
52
+ const res = await fetch(`${apiBase}/api/games/upload`, {
53
+ method: 'POST',
54
+ headers: { 'Content-Type': 'application/octet-stream' },
55
+ body: buffer,
56
+ });
57
+
58
+ if (!res.ok) {
59
+ const data = await res.json();
60
+ throw new Error(data.error || 'Upload failed');
61
+ }
62
+
63
+ await fetchGames();
64
+ } catch (err) {
65
+ setError((err as Error).message);
66
+ } finally {
67
+ setUploading(false);
68
+ // Reset input
69
+ e.target.value = '';
70
+ }
71
+ }, [apiBase, fetchGames]);
72
+
73
+ const activate = useCallback(async (id: string) => {
74
+ try {
75
+ await fetch(`${apiBase}/api/games/${id}/activate`, { method: 'POST' });
76
+ await fetchGames();
77
+ onGameActivated?.();
78
+ } catch (err) {
79
+ setError((err as Error).message);
80
+ }
81
+ }, [apiBase, fetchGames, onGameActivated]);
82
+
83
+ const remove = useCallback(async (id: string) => {
84
+ try {
85
+ await fetch(`${apiBase}/api/games/${id}`, { method: 'DELETE' });
86
+ await fetchGames();
87
+ } catch (err) {
88
+ setError((err as Error).message);
89
+ }
90
+ }, [apiBase, fetchGames]);
91
+
92
+ if (games.length === 0 && !uploading) {
93
+ return (
94
+ <div style={{ background: '#18181b', borderRadius: 8, padding: 12, marginBottom: 16, display: 'flex', alignItems: 'center', gap: 12 }}>
95
+ <span style={{ color: '#71717a', fontSize: 13 }}>No games loaded.</span>
96
+ <label style={{ background: '#d97706', color: '#fff', padding: '4px 12px', borderRadius: 4, fontSize: 13, cursor: 'pointer', fontWeight: 600 }}>
97
+ Upload ZIP
98
+ <input type="file" accept=".zip" onChange={handleUpload} style={{ display: 'none' }} />
99
+ </label>
100
+ {error && <span style={{ color: '#ef4444', fontSize: 12 }}>{error}</span>}
101
+ </div>
102
+ );
103
+ }
104
+
105
+ return (
106
+ <div style={{ background: '#18181b', borderRadius: 8, padding: 12, marginBottom: 16 }}>
107
+ <div style={{ display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap' }}>
108
+ {games.map((game) => (
109
+ <div
110
+ key={game.id}
111
+ onClick={() => !game.active && activate(game.id)}
112
+ style={{
113
+ display: 'flex',
114
+ alignItems: 'center',
115
+ gap: 8,
116
+ padding: '6px 12px',
117
+ borderRadius: 6,
118
+ cursor: game.active ? 'default' : 'pointer',
119
+ border: game.active ? '2px solid #d97706' : '1px solid #3f3f46',
120
+ background: game.active ? 'rgba(217, 119, 6, 0.15)' : '#27272a',
121
+ fontSize: 13,
122
+ }}
123
+ >
124
+ <img
125
+ src={`/api/games/${game.id}/icon`}
126
+ alt=""
127
+ style={{ width: 24, height: 24, borderRadius: 4 }}
128
+ onError={(e) => { (e.target as HTMLImageElement).style.display = 'none'; }}
129
+ />
130
+ <div>
131
+ <div style={{ color: '#e5e5e5', fontWeight: 600 }}>{game.name}</div>
132
+ <div style={{ color: '#71717a', fontSize: 10 }}>v{game.version} · {game.minPlayers}-{game.maxPlayers}p</div>
133
+ </div>
134
+ {!game.active && (
135
+ <button
136
+ onClick={(e) => { e.stopPropagation(); remove(game.id); }}
137
+ style={{ background: 'none', border: 'none', color: '#71717a', cursor: 'pointer', fontSize: 14, padding: '0 2px' }}
138
+ title="Remove"
139
+ >
140
+ ×
141
+ </button>
142
+ )}
143
+ </div>
144
+ ))}
145
+
146
+ <label style={{
147
+ background: '#3f3f46',
148
+ color: '#d4d4d8',
149
+ padding: '6px 12px',
150
+ borderRadius: 6,
151
+ fontSize: 13,
152
+ cursor: uploading ? 'default' : 'pointer',
153
+ fontWeight: 600,
154
+ opacity: uploading ? 0.5 : 1,
155
+ }}>
156
+ {uploading ? 'Uploading...' : '+ Upload'}
157
+ <input type="file" accept=".zip" onChange={handleUpload} disabled={uploading} style={{ display: 'none' }} />
158
+ </label>
159
+ </div>
160
+ {error && <div style={{ color: '#ef4444', fontSize: 12, marginTop: 8 }}>{error}</div>}
161
+ </div>
162
+ );
163
+ }
@@ -1,13 +1,15 @@
1
1
  import React, { useState, useEffect } from 'react';
2
2
  import { io, Socket } from 'socket.io-client';
3
3
 
4
+ declare const __SOCKET_PORT__: number;
5
+
4
6
  export default function Debug() {
5
7
  const [socket, setSocket] = useState<Socket | null>(null);
6
8
  const [room, setRoom] = useState<any>({ players: [], phase: 'lobby' });
7
9
  const [fullState, setFullState] = useState<any>(null);
8
10
 
9
11
  useEffect(() => {
10
- const sock = io('http://localhost:4001', { query: { nickname: '__debug__' } });
12
+ const sock = io(`http://${window.location.hostname}:${__SOCKET_PORT__}`, { query: { nickname: '__debug__' } });
11
13
 
12
14
  sock.on('room:update', setRoom);
13
15
  sock.on('game:state', setFullState);