@freegamestore/games 0.16.0 → 0.19.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.
- package/README.md +106 -8
- package/TOKENS.md +132 -0
- package/dist/Confetti.d.ts +18 -0
- package/dist/Confetti.d.ts.map +1 -0
- package/dist/Confetti.js +43 -0
- package/dist/Confetti.js.map +1 -0
- package/dist/GameAuth.d.ts.map +1 -1
- package/dist/GameAuth.js +5 -87
- package/dist/GameAuth.js.map +1 -1
- package/dist/GameButton.d.ts +2 -1
- package/dist/GameButton.d.ts.map +1 -1
- package/dist/GameButton.js +16 -67
- package/dist/GameButton.js.map +1 -1
- package/dist/GameConfirm.d.ts +1 -1
- package/dist/GameConfirm.d.ts.map +1 -1
- package/dist/GameConfirm.js +1 -7
- package/dist/GameConfirm.js.map +1 -1
- package/dist/GameModal.d.ts +3 -2
- package/dist/GameModal.d.ts.map +1 -1
- package/dist/GameModal.js +3 -40
- package/dist/GameModal.js.map +1 -1
- package/dist/GameOverScreen.d.ts +3 -2
- package/dist/GameOverScreen.d.ts.map +1 -1
- package/dist/GameOverScreen.js +3 -37
- package/dist/GameOverScreen.js.map +1 -1
- package/dist/GameResultScreen.d.ts +41 -0
- package/dist/GameResultScreen.d.ts.map +1 -0
- package/dist/GameResultScreen.js +25 -0
- package/dist/GameResultScreen.js.map +1 -0
- package/dist/GameShell.d.ts +3 -0
- package/dist/GameShell.d.ts.map +1 -1
- package/dist/GameShell.js +4 -43
- package/dist/GameShell.js.map +1 -1
- package/dist/GameTextSizeToggle.d.ts +1 -1
- package/dist/GameTextSizeToggle.d.ts.map +1 -1
- package/dist/GameTextSizeToggle.js +1 -16
- package/dist/GameTextSizeToggle.js.map +1 -1
- package/dist/GameThemeToggle.d.ts +1 -1
- package/dist/GameThemeToggle.d.ts.map +1 -1
- package/dist/GameThemeToggle.js +44 -21
- package/dist/GameThemeToggle.js.map +1 -1
- package/dist/GameTopbar.d.ts +12 -7
- package/dist/GameTopbar.d.ts.map +1 -1
- package/dist/GameTopbar.js +54 -188
- package/dist/GameTopbar.js.map +1 -1
- package/dist/GameTopbar.module.css +201 -0
- package/dist/Leaderboard.d.ts.map +1 -1
- package/dist/Leaderboard.js +2 -5
- package/dist/Leaderboard.js.map +1 -1
- package/dist/StartScreen.d.ts +41 -0
- package/dist/StartScreen.d.ts.map +1 -0
- package/dist/StartScreen.js +30 -0
- package/dist/StartScreen.js.map +1 -0
- package/dist/feel/ScorePopup.d.ts +20 -0
- package/dist/feel/ScorePopup.d.ts.map +1 -0
- package/dist/feel/ScorePopup.js +51 -0
- package/dist/feel/ScorePopup.js.map +1 -0
- package/dist/feel/easing.d.ts +14 -0
- package/dist/feel/easing.d.ts.map +1 -0
- package/dist/feel/easing.js +12 -0
- package/dist/feel/easing.js.map +1 -0
- package/dist/feel/haptics.d.ts +19 -0
- package/dist/feel/haptics.d.ts.map +1 -0
- package/dist/feel/haptics.js +24 -0
- package/dist/feel/haptics.js.map +1 -0
- package/dist/feel/index.d.ts +17 -0
- package/dist/feel/index.d.ts.map +1 -0
- package/dist/feel/index.js +17 -0
- package/dist/feel/index.js.map +1 -0
- package/dist/feel/particles.d.ts +46 -0
- package/dist/feel/particles.d.ts.map +1 -0
- package/dist/feel/particles.js +61 -0
- package/dist/feel/particles.js.map +1 -0
- package/dist/feel/reducedMotion.d.ts +6 -0
- package/dist/feel/reducedMotion.d.ts.map +1 -0
- package/dist/feel/reducedMotion.js +10 -0
- package/dist/feel/reducedMotion.js.map +1 -0
- package/dist/feel/shake.d.ts +6 -0
- package/dist/feel/shake.d.ts.map +1 -0
- package/dist/feel/shake.js +17 -0
- package/dist/feel/shake.js.map +1 -0
- package/dist/feel/tween.d.ts +9 -0
- package/dist/feel/tween.d.ts.map +1 -0
- package/dist/feel/tween.js +15 -0
- package/dist/feel/tween.js.map +1 -0
- package/dist/feel/useHaptics.d.ts +12 -0
- package/dist/feel/useHaptics.d.ts.map +1 -0
- package/dist/feel/useHaptics.js +16 -0
- package/dist/feel/useHaptics.js.map +1 -0
- package/dist/feel/useParticles.d.ts +18 -0
- package/dist/feel/useParticles.d.ts.map +1 -0
- package/dist/feel/useParticles.js +79 -0
- package/dist/feel/useParticles.js.map +1 -0
- package/dist/feel/useShake.d.ts +14 -0
- package/dist/feel/useShake.d.ts.map +1 -0
- package/dist/feel/useShake.js +17 -0
- package/dist/feel/useShake.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/theme.css +93 -0
- package/dist/tokens.d.ts +112 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +106 -0
- package/dist/tokens.js.map +1 -0
- package/dist/useGameSounds.d.ts.map +1 -1
- package/dist/useGameSounds.js +37 -15
- package/dist/useGameSounds.js.map +1 -1
- package/dist/useLeaderboard.d.ts +8 -1
- package/dist/useLeaderboard.d.ts.map +1 -1
- package/dist/useLeaderboard.js +21 -11
- package/dist/useLeaderboard.js.map +1 -1
- package/package.json +23 -7
package/dist/useLeaderboard.js
CHANGED
|
@@ -3,7 +3,10 @@ import { useCallback, useEffect, useRef, useState } from 'react';
|
|
|
3
3
|
// The worker also serves the unversioned paths, so games built against older
|
|
4
4
|
// SDK releases keep working.
|
|
5
5
|
const API_BASE = 'https://leaderboard.freegamestore.online/v1';
|
|
6
|
-
|
|
6
|
+
const AUTH_BASE = 'https://auth.freegamestore.online/v1';
|
|
7
|
+
export function useLeaderboard(gameId, options = {}) {
|
|
8
|
+
const period = options.period;
|
|
9
|
+
const periodQuery = period ? `&period=${encodeURIComponent(period)}` : '';
|
|
7
10
|
const [topScores, setTopScores] = useState([]);
|
|
8
11
|
const [recentScores, setRecentScores] = useState([]);
|
|
9
12
|
const [loading, setLoading] = useState(true);
|
|
@@ -24,7 +27,9 @@ export function useLeaderboard(gameId) {
|
|
|
24
27
|
// Fire-and-forget: inner fetches each .catch() to [], so this never
|
|
25
28
|
// rejects; `void` marks the intentional non-await.
|
|
26
29
|
void Promise.all([
|
|
27
|
-
fetch(`${API_BASE}/api/leaderboard/${gameId}?limit=50`, {
|
|
30
|
+
fetch(`${API_BASE}/api/leaderboard/${gameId}?limit=50${periodQuery}`, {
|
|
31
|
+
credentials: 'include',
|
|
32
|
+
})
|
|
28
33
|
.then(async (r) => {
|
|
29
34
|
if (!r.ok)
|
|
30
35
|
return [];
|
|
@@ -32,7 +37,7 @@ export function useLeaderboard(gameId) {
|
|
|
32
37
|
return data.scores ?? [];
|
|
33
38
|
})
|
|
34
39
|
.catch(() => []),
|
|
35
|
-
fetch(`${API_BASE}/api/leaderboard/${gameId}/recent?limit=50`, {
|
|
40
|
+
fetch(`${API_BASE}/api/leaderboard/${gameId}/recent?limit=50${periodQuery}`, {
|
|
36
41
|
credentials: 'include',
|
|
37
42
|
})
|
|
38
43
|
.then(async (r) => {
|
|
@@ -50,20 +55,25 @@ export function useLeaderboard(gameId) {
|
|
|
50
55
|
setRecentScores(recent);
|
|
51
56
|
setLoading(false);
|
|
52
57
|
});
|
|
53
|
-
}, [gameId]);
|
|
58
|
+
}, [gameId, periodQuery]);
|
|
54
59
|
useEffect(() => {
|
|
55
60
|
load();
|
|
56
61
|
}, [load]);
|
|
57
62
|
const submitScore = useCallback(async (score) => {
|
|
58
63
|
try {
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
64
|
+
// Exchange the auth-origin cookie for a five-minute bearer token bound
|
|
65
|
+
// to THIS game. Untrusted game JS never receives a store-wide session,
|
|
66
|
+
// and leaderboard rejects the token for every other game id.
|
|
67
|
+
const handoffRes = await fetch(`${AUTH_BASE}/handoff/issue?target=${encodeURIComponent('https://leaderboard.freegamestore.online')}&game=${encodeURIComponent(gameId)}`, { method: 'POST', credentials: 'include' });
|
|
68
|
+
if (!handoffRes.ok)
|
|
69
|
+
return { ok: false };
|
|
70
|
+
const handoff = (await handoffRes.json());
|
|
71
|
+
if (!handoff.token)
|
|
72
|
+
return { ok: false };
|
|
62
73
|
const res = await fetch(`${API_BASE}/api/scores`, {
|
|
63
74
|
method: 'POST',
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
body: JSON.stringify({ game: gameId, score }),
|
|
75
|
+
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${handoff.token}` },
|
|
76
|
+
body: JSON.stringify(period ? { game: gameId, score, period } : { game: gameId, score }),
|
|
67
77
|
});
|
|
68
78
|
if (!res.ok)
|
|
69
79
|
return { ok: false };
|
|
@@ -78,7 +88,7 @@ export function useLeaderboard(gameId) {
|
|
|
78
88
|
catch {
|
|
79
89
|
return { ok: false };
|
|
80
90
|
}
|
|
81
|
-
}, [gameId, load]);
|
|
91
|
+
}, [gameId, period, load]);
|
|
82
92
|
return { topScores, recentScores, submitScore, loading, refresh: load };
|
|
83
93
|
}
|
|
84
94
|
//# sourceMappingURL=useLeaderboard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLeaderboard.js","sourceRoot":"","sources":["../src/useLeaderboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjE,mFAAmF;AACnF,6EAA6E;AAC7E,6BAA6B;AAC7B,MAAM,QAAQ,GAAG,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"useLeaderboard.js","sourceRoot":"","sources":["../src/useLeaderboard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@freegamestore/games",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Shared React UI primitives for games on FreeGameStore — GameShell, GameTopbar, etc. Brand-consistent, scroll-free.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -10,7 +10,12 @@
|
|
|
10
10
|
".": {
|
|
11
11
|
"types": "./dist/index.d.ts",
|
|
12
12
|
"import": "./dist/index.js"
|
|
13
|
-
}
|
|
13
|
+
},
|
|
14
|
+
"./feel": {
|
|
15
|
+
"types": "./dist/feel/index.d.ts",
|
|
16
|
+
"import": "./dist/feel/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./theme.css": "./dist/theme.css"
|
|
14
19
|
},
|
|
15
20
|
"homepage": "https://github.com/freegamestore-online/platform#readme",
|
|
16
21
|
"repository": {
|
|
@@ -31,7 +36,8 @@
|
|
|
31
36
|
],
|
|
32
37
|
"files": [
|
|
33
38
|
"dist",
|
|
34
|
-
"README.md"
|
|
39
|
+
"README.md",
|
|
40
|
+
"TOKENS.md"
|
|
35
41
|
],
|
|
36
42
|
"engines": {
|
|
37
43
|
"node": ">=22"
|
|
@@ -40,13 +46,23 @@
|
|
|
40
46
|
"react": "^19.0.0"
|
|
41
47
|
},
|
|
42
48
|
"devDependencies": {
|
|
49
|
+
"@testing-library/dom": "^10.4.1",
|
|
50
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
51
|
+
"@testing-library/react": "^16.3.0",
|
|
43
52
|
"@types/react": "^19.2.14",
|
|
44
|
-
"react": "^19.2.
|
|
45
|
-
"
|
|
53
|
+
"@types/react-dom": "^19.2.3",
|
|
54
|
+
"@vitejs/plugin-react": "^5.2.0",
|
|
55
|
+
"jsdom": "^26",
|
|
56
|
+
"react": "19.2.6",
|
|
57
|
+
"react-dom": "19.2.6",
|
|
58
|
+
"typescript": "^5.7.0",
|
|
59
|
+
"vite": "^6",
|
|
60
|
+
"vitest": "^2.1.0"
|
|
46
61
|
},
|
|
47
62
|
"sideEffects": false,
|
|
48
63
|
"scripts": {
|
|
49
|
-
"build": "tsc",
|
|
50
|
-
"typecheck": "tsc --noEmit"
|
|
64
|
+
"build": "tsc && cp src/GameTopbar.module.css src/theme.css dist/",
|
|
65
|
+
"typecheck": "tsc --noEmit",
|
|
66
|
+
"test": "vitest run"
|
|
51
67
|
}
|
|
52
68
|
}
|