@freegamestore/games 0.4.0 → 0.6.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/dist/GameAuth.d.ts +10 -0
- package/dist/GameAuth.d.ts.map +1 -0
- package/dist/GameAuth.js +108 -0
- package/dist/GameAuth.js.map +1 -0
- package/dist/GameShell.d.ts.map +1 -1
- package/dist/GameShell.js +16 -1
- package/dist/GameShell.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/useAuth.d.ts +12 -0
- package/dist/useAuth.d.ts.map +1 -0
- package/dist/useAuth.js +46 -0
- package/dist/useAuth.js.map +1 -0
- package/dist/useLeaderboard.d.ts +18 -0
- package/dist/useLeaderboard.d.ts.map +1 -0
- package/dist/useLeaderboard.js +49 -0
- package/dist/useLeaderboard.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Sign-in / avatar widget for the GameTopbar `actions` slot.
|
|
4
|
+
*
|
|
5
|
+
* When not signed in: shows a small "Sign in" text button.
|
|
6
|
+
* When signed in: shows the user's avatar + first name, with a
|
|
7
|
+
* dropdown containing "Sign out".
|
|
8
|
+
*/
|
|
9
|
+
export declare function GameAuth(): React.JSX.Element;
|
|
10
|
+
//# sourceMappingURL=GameAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameAuth.d.ts","sourceRoot":"","sources":["../src/GameAuth.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAIpC;;;;;;GAMG;AACH,wBAAgB,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CA2I5C"}
|
package/dist/GameAuth.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useRef, useEffect } from 'react';
|
|
3
|
+
import { useAuth } from './useAuth.js';
|
|
4
|
+
/**
|
|
5
|
+
* Sign-in / avatar widget for the GameTopbar `actions` slot.
|
|
6
|
+
*
|
|
7
|
+
* When not signed in: shows a small "Sign in" text button.
|
|
8
|
+
* When signed in: shows the user's avatar + first name, with a
|
|
9
|
+
* dropdown containing "Sign out".
|
|
10
|
+
*/
|
|
11
|
+
export function GameAuth() {
|
|
12
|
+
const { user, loading, signIn, signOut } = useAuth();
|
|
13
|
+
const [open, setOpen] = useState(false);
|
|
14
|
+
const ref = useRef(null);
|
|
15
|
+
// Close dropdown when clicking outside
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (!open)
|
|
18
|
+
return;
|
|
19
|
+
const handler = (e) => {
|
|
20
|
+
if (ref.current && !ref.current.contains(e.target)) {
|
|
21
|
+
setOpen(false);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
document.addEventListener('pointerdown', handler, true);
|
|
25
|
+
return () => document.removeEventListener('pointerdown', handler, true);
|
|
26
|
+
}, [open]);
|
|
27
|
+
if (loading)
|
|
28
|
+
return _jsx("div", {});
|
|
29
|
+
if (user === null) {
|
|
30
|
+
return (_jsx("button", { onClick: signIn, style: {
|
|
31
|
+
background: 'none',
|
|
32
|
+
border: 'none',
|
|
33
|
+
cursor: 'pointer',
|
|
34
|
+
fontFamily: '"Manrope", system-ui, sans-serif',
|
|
35
|
+
fontSize: '0.7rem',
|
|
36
|
+
fontWeight: 600,
|
|
37
|
+
color: 'var(--muted, #6b7280)',
|
|
38
|
+
padding: 0,
|
|
39
|
+
margin: 0,
|
|
40
|
+
// 44px minimum touch target
|
|
41
|
+
minWidth: '44px',
|
|
42
|
+
minHeight: '44px',
|
|
43
|
+
display: 'inline-flex',
|
|
44
|
+
alignItems: 'center',
|
|
45
|
+
justifyContent: 'center',
|
|
46
|
+
WebkitTapHighlightColor: 'transparent',
|
|
47
|
+
touchAction: 'manipulation',
|
|
48
|
+
}, children: "Sign in" }));
|
|
49
|
+
}
|
|
50
|
+
const firstName = user.name.split(' ')[0] ?? user.name;
|
|
51
|
+
return (_jsxs("div", { ref: ref, style: { position: 'relative' }, children: [_jsxs("button", { onClick: () => setOpen((v) => !v), style: {
|
|
52
|
+
background: 'none',
|
|
53
|
+
border: 'none',
|
|
54
|
+
cursor: 'pointer',
|
|
55
|
+
display: 'inline-flex',
|
|
56
|
+
alignItems: 'center',
|
|
57
|
+
gap: '0.35rem',
|
|
58
|
+
padding: 0,
|
|
59
|
+
margin: 0,
|
|
60
|
+
minWidth: '44px',
|
|
61
|
+
minHeight: '44px',
|
|
62
|
+
justifyContent: 'center',
|
|
63
|
+
WebkitTapHighlightColor: 'transparent',
|
|
64
|
+
touchAction: 'manipulation',
|
|
65
|
+
}, children: [_jsx("img", { src: user.avatar, alt: "", width: 24, height: 24, style: {
|
|
66
|
+
width: '24px',
|
|
67
|
+
height: '24px',
|
|
68
|
+
borderRadius: '50%',
|
|
69
|
+
objectFit: 'cover',
|
|
70
|
+
flexShrink: 0,
|
|
71
|
+
} }), _jsx("span", { style: {
|
|
72
|
+
fontFamily: '"Manrope", system-ui, sans-serif',
|
|
73
|
+
fontSize: '0.7rem',
|
|
74
|
+
fontWeight: 600,
|
|
75
|
+
color: 'var(--ink, #1a1a1a)',
|
|
76
|
+
whiteSpace: 'nowrap',
|
|
77
|
+
}, children: firstName })] }), open && (_jsx("div", { style: {
|
|
78
|
+
position: 'absolute',
|
|
79
|
+
top: '100%',
|
|
80
|
+
right: 0,
|
|
81
|
+
marginTop: '0.25rem',
|
|
82
|
+
background: 'var(--panel, #fff)',
|
|
83
|
+
border: '1px solid var(--line, #e5e5e5)',
|
|
84
|
+
borderRadius: '0.5rem',
|
|
85
|
+
boxShadow: '0 4px 12px rgba(0,0,0,0.1)',
|
|
86
|
+
zIndex: 100,
|
|
87
|
+
minWidth: '7rem',
|
|
88
|
+
}, children: _jsx("button", { onClick: () => {
|
|
89
|
+
setOpen(false);
|
|
90
|
+
signOut();
|
|
91
|
+
}, style: {
|
|
92
|
+
display: 'flex',
|
|
93
|
+
alignItems: 'center',
|
|
94
|
+
width: '100%',
|
|
95
|
+
background: 'none',
|
|
96
|
+
border: 'none',
|
|
97
|
+
cursor: 'pointer',
|
|
98
|
+
fontFamily: '"Manrope", system-ui, sans-serif',
|
|
99
|
+
fontSize: '0.7rem',
|
|
100
|
+
fontWeight: 600,
|
|
101
|
+
color: 'var(--ink, #1a1a1a)',
|
|
102
|
+
padding: '0.5rem 0.75rem',
|
|
103
|
+
minHeight: '44px',
|
|
104
|
+
WebkitTapHighlightColor: 'transparent',
|
|
105
|
+
touchAction: 'manipulation',
|
|
106
|
+
}, children: "Sign out" }) }))] }));
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=GameAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameAuth.js","sourceRoot":"","sources":["../src/GameAuth.tsx"],"names":[],"mappings":"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"}
|
package/dist/GameShell.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GameShell.d.ts","sourceRoot":"","sources":["../src/GameShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"GameShell.d.ts","sourceRoot":"","sources":["../src/GameShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA6EjF"}
|
package/dist/GameShell.js
CHANGED
|
@@ -40,6 +40,21 @@ export function GameShell({ topbar, children }) {
|
|
|
40
40
|
minWidth: 0,
|
|
41
41
|
position: 'relative',
|
|
42
42
|
overflow: 'hidden',
|
|
43
|
-
}, children: children })
|
|
43
|
+
}, children: children }), _jsx("div", { style: {
|
|
44
|
+
flexShrink: 0,
|
|
45
|
+
paddingBottom: 'env(safe-area-inset-bottom, 0px)',
|
|
46
|
+
background: 'var(--panel, var(--paper))',
|
|
47
|
+
borderTop: '1px solid var(--line, #e5e5e5)',
|
|
48
|
+
textAlign: 'center',
|
|
49
|
+
}, children: _jsx("a", { href: "https://freegamestore.online", target: "_blank", rel: "noopener noreferrer", style: {
|
|
50
|
+
display: 'block',
|
|
51
|
+
padding: '0.15rem 0',
|
|
52
|
+
fontSize: '0.55rem',
|
|
53
|
+
fontFamily: '"Manrope", system-ui, sans-serif',
|
|
54
|
+
fontWeight: 600,
|
|
55
|
+
color: 'var(--muted, #999)',
|
|
56
|
+
textDecoration: 'none',
|
|
57
|
+
letterSpacing: '0.03em',
|
|
58
|
+
}, children: "freegamestore.online" }) })] }));
|
|
44
59
|
}
|
|
45
60
|
//# sourceMappingURL=GameShell.js.map
|
package/dist/GameShell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GameShell.js","sourceRoot":"","sources":["../src/GameShell.tsx"],"names":[],"mappings":";AAaA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAkB;IAC5D,OAAO,CACL,eACE,KAAK,EAAE;YACL,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,cAAc;YAC1B,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,QAAQ;YAClB,uDAAuD;YACvD,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,OAAO;YACd,oEAAoE;YACpE,0DAA0D;YAC1D,gBAAgB,EAAE,MAAM;YACxB,UAAU,EAAE,MAAM;YAClB,kBAAkB,EAAE,MAAM;YAC1B,WAAW,EAAE,cAAc;SAC5B,aAEA,MAAM,KAAK,SAAS,IAAI,CACvB,cACE,KAAK,EAAE;oBACL,UAAU,EAAE,CAAC;oBACb,YAAY,EAAE,gCAAgC;oBAC9C,UAAU,EAAE,4BAA4B;iBACzC,YAEA,MAAM,GACH,CACP,EACD,cACE,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC;oBACP,SAAS,EAAE,CAAC;oBACZ,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE,QAAQ;iBACnB,YAEA,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"GameShell.js","sourceRoot":"","sources":["../src/GameShell.tsx"],"names":[],"mappings":";AAaA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAkB;IAC5D,OAAO,CACL,eACE,KAAK,EAAE;YACL,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,cAAc;YAC1B,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,QAAQ;YAClB,uDAAuD;YACvD,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,OAAO;YACd,oEAAoE;YACpE,0DAA0D;YAC1D,gBAAgB,EAAE,MAAM;YACxB,UAAU,EAAE,MAAM;YAClB,kBAAkB,EAAE,MAAM;YAC1B,WAAW,EAAE,cAAc;SAC5B,aAEA,MAAM,KAAK,SAAS,IAAI,CACvB,cACE,KAAK,EAAE;oBACL,UAAU,EAAE,CAAC;oBACb,YAAY,EAAE,gCAAgC;oBAC9C,UAAU,EAAE,4BAA4B;iBACzC,YAEA,MAAM,GACH,CACP,EACD,cACE,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC;oBACP,SAAS,EAAE,CAAC;oBACZ,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE,QAAQ;iBACnB,YAEA,QAAQ,GACL,EAKN,cACE,KAAK,EAAE;oBACL,UAAU,EAAE,CAAC;oBACb,aAAa,EAAE,kCAAkC;oBACjD,UAAU,EAAE,4BAA4B;oBACxC,SAAS,EAAE,gCAAgC;oBAC3C,SAAS,EAAE,QAAQ;iBACpB,YAED,YACE,IAAI,EAAC,8BAA8B,EACnC,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,KAAK,EAAE;wBACL,OAAO,EAAE,OAAO;wBAChB,OAAO,EAAE,WAAW;wBACpB,QAAQ,EAAE,SAAS;wBACnB,UAAU,EAAE,kCAAkC;wBAC9C,UAAU,EAAE,GAAG;wBACf,KAAK,EAAE,oBAAoB;wBAC3B,cAAc,EAAE,MAAM;wBACtB,aAAa,EAAE,QAAQ;qBACxB,qCAGC,GACA,IACF,CACP,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,4 +15,7 @@
|
|
|
15
15
|
export { GameShell, type GameShellProps } from './GameShell.js';
|
|
16
16
|
export { GameTopbar, type GameTopbarProps, type GameTopbarStat, } from './GameTopbar.js';
|
|
17
17
|
export { GameButton, type GameButtonProps, type GameButtonVariant, type GameButtonSize, } from './GameButton.js';
|
|
18
|
+
export { GameAuth } from './GameAuth.js';
|
|
19
|
+
export { useAuth, type User } from './useAuth.js';
|
|
20
|
+
export { useLeaderboard, type LeaderboardEntry, } from './useLeaderboard.js';
|
|
18
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,4 +15,7 @@
|
|
|
15
15
|
export { GameShell } from './GameShell.js';
|
|
16
16
|
export { GameTopbar, } from './GameTopbar.js';
|
|
17
17
|
export { GameButton, } from './GameButton.js';
|
|
18
|
+
export { GameAuth } from './GameAuth.js';
|
|
19
|
+
export { useAuth } from './useAuth.js';
|
|
20
|
+
export { useLeaderboard, } from './useLeaderboard.js';
|
|
18
21
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACL,UAAU,GAGX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,UAAU,GAIX,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACL,UAAU,GAGX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,UAAU,GAIX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAa,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,cAAc,GAEf,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../src/useAuth.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,OAAO,IAAI;IACzB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CA4CA"}
|
package/dist/useAuth.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
export function useAuth() {
|
|
3
|
+
const [user, setUser] = useState(null);
|
|
4
|
+
const [loading, setLoading] = useState(true);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
let cancelled = false;
|
|
7
|
+
fetch('https://auth.freegamestore.online/me', { credentials: 'include' })
|
|
8
|
+
.then((res) => {
|
|
9
|
+
if (!cancelled && res.ok)
|
|
10
|
+
return res.json();
|
|
11
|
+
return null;
|
|
12
|
+
})
|
|
13
|
+
.then((data) => {
|
|
14
|
+
if (!cancelled)
|
|
15
|
+
setUser(data);
|
|
16
|
+
})
|
|
17
|
+
.catch(() => {
|
|
18
|
+
// 401 or network error — user is not signed in
|
|
19
|
+
})
|
|
20
|
+
.finally(() => {
|
|
21
|
+
if (!cancelled)
|
|
22
|
+
setLoading(false);
|
|
23
|
+
});
|
|
24
|
+
return () => {
|
|
25
|
+
cancelled = true;
|
|
26
|
+
};
|
|
27
|
+
}, []);
|
|
28
|
+
const signIn = useCallback(() => {
|
|
29
|
+
window.location.href = `https://auth.freegamestore.online/login?redirect=${encodeURIComponent(window.location.href)}`;
|
|
30
|
+
}, []);
|
|
31
|
+
const signOut = useCallback(() => {
|
|
32
|
+
fetch('https://auth.freegamestore.online/logout', {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
credentials: 'include',
|
|
35
|
+
})
|
|
36
|
+
.catch(() => {
|
|
37
|
+
// best-effort
|
|
38
|
+
})
|
|
39
|
+
.finally(() => {
|
|
40
|
+
setUser(null);
|
|
41
|
+
window.location.reload();
|
|
42
|
+
});
|
|
43
|
+
}, []);
|
|
44
|
+
return { user, loading, signIn, signOut };
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=useAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../src/useAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAQzD,MAAM,UAAU,OAAO;IAMrB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAc,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,CAAC,sCAAsC,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;aACtE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,EAAE;gBAAE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,IAAiB,EAAE,EAAE;YAC1B,IAAI,CAAC,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,+CAA+C;QACjD,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,SAAS;gBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,oDAAoD,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACxH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,KAAK,CAAC,0CAA0C,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,SAAS;SACvB,CAAC;aACC,KAAK,CAAC,GAAG,EAAE;YACV,cAAc;QAChB,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface LeaderboardEntry {
|
|
2
|
+
player_name: string;
|
|
3
|
+
score: number;
|
|
4
|
+
user_id?: string;
|
|
5
|
+
avatar_url?: string;
|
|
6
|
+
created_at: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function useLeaderboard(gameId: string): {
|
|
9
|
+
topScores: LeaderboardEntry[];
|
|
10
|
+
recentScores: LeaderboardEntry[];
|
|
11
|
+
submitScore: (score: number) => Promise<{
|
|
12
|
+
ok: boolean;
|
|
13
|
+
rank?: number;
|
|
14
|
+
}>;
|
|
15
|
+
loading: boolean;
|
|
16
|
+
refresh: () => void;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=useLeaderboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLeaderboard.d.ts","sourceRoot":"","sources":["../src/useLeaderboard.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAC9C,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAiDA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
const API_BASE = 'https://freegamestore-leaderboard.serge-the-dev.workers.dev';
|
|
3
|
+
export function useLeaderboard(gameId) {
|
|
4
|
+
const [topScores, setTopScores] = useState([]);
|
|
5
|
+
const [recentScores, setRecentScores] = useState([]);
|
|
6
|
+
const [loading, setLoading] = useState(true);
|
|
7
|
+
const load = useCallback(() => {
|
|
8
|
+
setLoading(true);
|
|
9
|
+
Promise.all([
|
|
10
|
+
fetch(`${API_BASE}/scores/${gameId}?sort=top`, { credentials: 'include' })
|
|
11
|
+
.then((r) => (r.ok ? r.json() : []))
|
|
12
|
+
.catch(() => []),
|
|
13
|
+
fetch(`${API_BASE}/scores/${gameId}?sort=recent`, { credentials: 'include' })
|
|
14
|
+
.then((r) => (r.ok ? r.json() : []))
|
|
15
|
+
.catch(() => []),
|
|
16
|
+
]).then(([top, recent]) => {
|
|
17
|
+
setTopScores(top);
|
|
18
|
+
setRecentScores(recent);
|
|
19
|
+
setLoading(false);
|
|
20
|
+
});
|
|
21
|
+
}, [gameId]);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
load();
|
|
24
|
+
}, [load]);
|
|
25
|
+
const submitScore = useCallback(async (score) => {
|
|
26
|
+
try {
|
|
27
|
+
const res = await fetch(`${API_BASE}/scores/${gameId}`, {
|
|
28
|
+
method: 'POST',
|
|
29
|
+
credentials: 'include',
|
|
30
|
+
headers: { 'Content-Type': 'application/json' },
|
|
31
|
+
body: JSON.stringify({ score }),
|
|
32
|
+
});
|
|
33
|
+
if (!res.ok)
|
|
34
|
+
return { ok: false };
|
|
35
|
+
const data = (await res.json());
|
|
36
|
+
// Refresh scores after submission
|
|
37
|
+
load();
|
|
38
|
+
const result = { ok: true };
|
|
39
|
+
if (data.rank !== undefined)
|
|
40
|
+
result.rank = data.rank;
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return { ok: false };
|
|
45
|
+
}
|
|
46
|
+
}, [gameId, load]);
|
|
47
|
+
return { topScores, recentScores, submitScore, loading, refresh: load };
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=useLeaderboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLeaderboard.js","sourceRoot":"","sources":["../src/useLeaderboard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED