@multitapio/multitap 0.0.17 → 0.0.19
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/channel.d.ts +6 -6
- package/dist/channel.d.ts.map +1 -1
- package/dist/crypto.d.ts +12 -0
- package/dist/crypto.d.ts.map +1 -1
- package/dist/input-graph.d.ts +2 -0
- package/dist/input-graph.d.ts.map +1 -1
- package/dist/lib.js +268 -118
- package/dist/react/components/SyncLoadingScreen.d.ts +27 -0
- package/dist/react/components/SyncLoadingScreen.d.ts.map +1 -0
- package/dist/react/components/SyncStatusIndicator.d.ts +15 -0
- package/dist/react/components/SyncStatusIndicator.d.ts.map +1 -0
- package/dist/react/components/index.d.ts +3 -0
- package/dist/react/components/index.d.ts.map +1 -0
- package/dist/react/hooks/usePlayers.d.ts +2 -0
- package/dist/react/hooks/usePlayers.d.ts.map +1 -1
- package/dist/react/hooks/useSyncStatus.d.ts +18 -0
- package/dist/react/hooks/useSyncStatus.d.ts.map +1 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/providers/ParticipantProvider.d.ts +51 -0
- package/dist/react/providers/ParticipantProvider.d.ts.map +1 -0
- package/dist/react/providers/SessionProvider.d.ts.map +1 -1
- package/dist/react/providers/index.d.ts +2 -0
- package/dist/react/providers/index.d.ts.map +1 -1
- package/dist/react/stores/syncStatusStore.d.ts +6 -0
- package/dist/react/stores/syncStatusStore.d.ts.map +1 -0
- package/dist/react/types/session.d.ts +4 -7
- package/dist/react/types/session.d.ts.map +1 -1
- package/dist/session.d.ts +24 -7
- package/dist/session.d.ts.map +1 -1
- package/dist/types/channel.d.ts +6 -6
- package/dist/types/channel.d.ts.map +1 -1
- package/dist/types/crypto.d.ts +12 -0
- package/dist/types/crypto.d.ts.map +1 -1
- package/dist/types/input-graph.d.ts +2 -0
- package/dist/types/input-graph.d.ts.map +1 -1
- package/dist/types/react/components/SyncLoadingScreen.d.ts +27 -0
- package/dist/types/react/components/SyncLoadingScreen.d.ts.map +1 -0
- package/dist/types/react/components/SyncStatusIndicator.d.ts +15 -0
- package/dist/types/react/components/SyncStatusIndicator.d.ts.map +1 -0
- package/dist/types/react/components/index.d.ts +3 -0
- package/dist/types/react/components/index.d.ts.map +1 -0
- package/dist/types/react/hooks/usePlayers.d.ts +2 -0
- package/dist/types/react/hooks/usePlayers.d.ts.map +1 -1
- package/dist/types/react/hooks/useSyncStatus.d.ts +18 -0
- package/dist/types/react/hooks/useSyncStatus.d.ts.map +1 -0
- package/dist/types/react/index.d.ts +2 -0
- package/dist/types/react/index.d.ts.map +1 -1
- package/dist/types/react/providers/ParticipantProvider.d.ts +51 -0
- package/dist/types/react/providers/ParticipantProvider.d.ts.map +1 -0
- package/dist/types/react/providers/SessionProvider.d.ts.map +1 -1
- package/dist/types/react/providers/index.d.ts +2 -0
- package/dist/types/react/providers/index.d.ts.map +1 -1
- package/dist/types/react/stores/syncStatusStore.d.ts +6 -0
- package/dist/types/react/stores/syncStatusStore.d.ts.map +1 -0
- package/dist/types/react/types/session.d.ts +4 -7
- package/dist/types/react/types/session.d.ts.map +1 -1
- package/dist/types/session.d.ts +24 -7
- package/dist/types/session.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
interface SyncLoadingScreenProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* SyncLoadingScreen wraps game content and shows a loading overlay during initial sync
|
|
7
|
+
*
|
|
8
|
+
* Blocks children from rendering until the first sync is complete. This prevents
|
|
9
|
+
* the scene from rendering before state is ready.
|
|
10
|
+
*
|
|
11
|
+
* After initial sync, children render normally. Subsequent catch-ups (reconnects)
|
|
12
|
+
* should use SyncStatusIndicator in the HUD instead of blocking the scene.
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <SessionProvider config={config}>
|
|
17
|
+
* <SyncLoadingScreen>
|
|
18
|
+
* <Arena />
|
|
19
|
+
* <Players />
|
|
20
|
+
* <HUD />
|
|
21
|
+
* </SyncLoadingScreen>
|
|
22
|
+
* </SessionProvider>
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function SyncLoadingScreen({ children }: SyncLoadingScreenProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=SyncLoadingScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncLoadingScreen.d.ts","sourceRoot":"","sources":["../../../../src/react/components/SyncLoadingScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CA2DrE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SyncStatusIndicator displays the current sync status as a simple text indicator
|
|
3
|
+
*
|
|
4
|
+
* Shows "IN SYNC" (green) when caught up, "SYNCING (-N)" (orange) when behind.
|
|
5
|
+
* Does not render during first sync (loading screen handles that).
|
|
6
|
+
*
|
|
7
|
+
* Usage in HUD:
|
|
8
|
+
* ```tsx
|
|
9
|
+
* <div style={{ position: 'absolute', top: 10, left: 10 }}>
|
|
10
|
+
* <SyncStatusIndicator />
|
|
11
|
+
* </div>
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare function SyncStatusIndicator(): import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
+
//# sourceMappingURL=SyncStatusIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncStatusIndicator.d.ts","sourceRoot":"","sources":["../../../../src/react/components/SyncStatusIndicator.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,mDAiBlC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -18,6 +18,8 @@ export declare function usePlayers(): Player[];
|
|
|
18
18
|
* this, since that is guaranteed to be in sync with the state snapshot - this hook is not.
|
|
19
19
|
* This hook is however useful for things like HUDs etc where sync is not critical.
|
|
20
20
|
*
|
|
21
|
+
* Must be used within a ParticipantProvider.
|
|
22
|
+
*
|
|
21
23
|
* @returns Current player or null if not in session
|
|
22
24
|
*/
|
|
23
25
|
export declare function useCurrentPlayer(): Player | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePlayers.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/usePlayers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usePlayers.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/usePlayers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9C;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAGrC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAIhD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SyncStatus } from '../types/session';
|
|
2
|
+
/**
|
|
3
|
+
* useSyncStatus returns the current synchronization status of the session
|
|
4
|
+
*
|
|
5
|
+
* Use this to display loading progress or network status indicators:
|
|
6
|
+
* - `phase`: 'connecting' | 'syncing' | 'sync'
|
|
7
|
+
* - `latestTick`: Server's authoritative tick (sync head)
|
|
8
|
+
* - `computedTick`: Highest tick with computed state (excludes predictions)
|
|
9
|
+
* - `lastSyncTime`: Timestamp when first sync completed (null if never synced)
|
|
10
|
+
*
|
|
11
|
+
* Example usage for loading screen vs HUD indicator:
|
|
12
|
+
* - `lastSyncTime === null && phase !== 'sync'` -> Show full loading screen (first sync)
|
|
13
|
+
* - `lastSyncTime !== null && phase === 'syncing'` -> Show HUD network indicator (catching up)
|
|
14
|
+
*
|
|
15
|
+
* @returns SyncStatus object (returns default status if not in SessionProvider)
|
|
16
|
+
*/
|
|
17
|
+
export declare function useSyncStatus(): SyncStatus;
|
|
18
|
+
//# sourceMappingURL=useSyncStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSyncStatus.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/useSyncStatus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAUnD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAe1C"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* React components for Multitap games
|
|
3
3
|
*/
|
|
4
4
|
export { SessionProvider, SessionContext, useSessionContext } from './providers';
|
|
5
|
+
export { ParticipantProvider, useParticipantContext, useCurrentPlayerId, useSendInput } from './providers';
|
|
6
|
+
export type { ParticipantContextValue, ParticipantProviderProps } from './providers';
|
|
5
7
|
export { useSession, useFrame, useQuery, useQueryMask, usePlayers, useCurrentPlayer, useEvent } from './hooks';
|
|
6
8
|
export type { CapturedEvent, UseEventOptions } from './hooks';
|
|
7
9
|
export type { Player, PlayerStore, EntityStore, SessionContextValue, SessionProviderProps, ReactSessionInterface, ReactCreateSession, UseSessionRenderCallback, QuerySelector, QuerySelectorContext, } from './types/session';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1G,YAAY,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAGpF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC9G,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAG7D,YAAY,EACV,MAAM,EACN,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,EACb,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAQxB,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAG7E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAC5C,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGpF,OAAO,EACL,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAA;AAChB,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { JoinOptions } from '../../session';
|
|
2
|
+
/**
|
|
3
|
+
* Context value provided by ParticipantProvider
|
|
4
|
+
*/
|
|
5
|
+
export interface ParticipantContextValue {
|
|
6
|
+
/** Send input to the session */
|
|
7
|
+
sendInput: (input: Uint8Array) => void;
|
|
8
|
+
/** Current player's public key as hex string */
|
|
9
|
+
currentPlayerId: string;
|
|
10
|
+
/** Whether the player has successfully joined the session */
|
|
11
|
+
isJoined: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Props for ParticipantProvider component
|
|
15
|
+
*/
|
|
16
|
+
export interface ParticipantProviderProps {
|
|
17
|
+
/** Player's private key for signing inputs */
|
|
18
|
+
playerKey: Uint8Array;
|
|
19
|
+
/** Options for joining (e.g., enableP2P) */
|
|
20
|
+
joinOptions?: JoinOptions;
|
|
21
|
+
children: React.ReactNode;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* ParticipantProvider - manages joining a session and sending inputs
|
|
25
|
+
*
|
|
26
|
+
* Must be a child of SessionProvider. Takes a player key and auto-joins the session,
|
|
27
|
+
* providing sendInput and currentPlayerId to child components.
|
|
28
|
+
*
|
|
29
|
+
* Usage:
|
|
30
|
+
* ```tsx
|
|
31
|
+
* <SessionProvider config={}>
|
|
32
|
+
* <ParticipantProvider playerKey={myPrivateKey}>
|
|
33
|
+
* <Game />
|
|
34
|
+
* </ParticipantProvider>
|
|
35
|
+
* </SessionProvider>
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function ParticipantProvider({ playerKey, joinOptions, children }: ParticipantProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
/**
|
|
40
|
+
* Hook to access participant context
|
|
41
|
+
*/
|
|
42
|
+
export declare function useParticipantContext(): ParticipantContextValue;
|
|
43
|
+
/**
|
|
44
|
+
* Hook to get the current player ID (convenience wrapper)
|
|
45
|
+
*/
|
|
46
|
+
export declare function useCurrentPlayerId(): string;
|
|
47
|
+
/**
|
|
48
|
+
* Hook to get the sendInput function (convenience wrapper)
|
|
49
|
+
*/
|
|
50
|
+
export declare function useSendInput(): (input: Uint8Array) => void;
|
|
51
|
+
//# sourceMappingURL=ParticipantProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParticipantProvider.d.ts","sourceRoot":"","sources":["../../../../src/react/providers/ParticipantProvider.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwB,WAAW,EAAE,MAAM,eAAe,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,gCAAgC;IAChC,SAAS,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,SAAS,EAAE,UAAU,CAAC;IACtB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,wBAAwB,2CA0DjG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,uBAAuB,CAM/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAE1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionProvider.d.ts","sourceRoot":"","sources":["../../../../src/react/providers/SessionProvider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SessionProvider.d.ts","sourceRoot":"","sources":["../../../../src/react/providers/SessionProvider.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EAKrB,MAAM,kBAAkB,CAAC;AAQ1B,eAAO,MAAM,cAAc,qDAAkD,CAAC;AA6D9E;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CA4GzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,CAMvD"}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { SessionProvider, SessionContext, useSessionContext } from './SessionProvider';
|
|
2
|
+
export { ParticipantProvider, useParticipantContext, useCurrentPlayerId, useSendInput } from './ParticipantProvider';
|
|
3
|
+
export type { ParticipantContextValue, ParticipantProviderProps } from './ParticipantProvider';
|
|
2
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACtF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpH,YAAY,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncStatusStore.d.ts","sourceRoot":"","sources":["../../../../src/react/stores/syncStatusStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,eAAe,EAAE,MAAM,kBAAkB,CAAC;AASpE;;GAEG;AACH,wBAAgB,qBAAqB,gDAQpC"}
|
|
@@ -2,7 +2,7 @@ import type { RefObject } from 'react';
|
|
|
2
2
|
import type { RootState } from '@react-three/fiber';
|
|
3
3
|
import type { StoreApi as ZustandStoreApi } from 'zustand';
|
|
4
4
|
import type { SessionConfig } from '../../session-config';
|
|
5
|
-
import type { SessionStats, SessionOptions, SessionInterface } from '../../session';
|
|
5
|
+
import type { SessionStats, SessionOptions, SessionInterface, InputSenderInterface, JoinOptions } from '../../session';
|
|
6
6
|
import type { Participant } from '../../input-graph';
|
|
7
7
|
import type { EntityRef, CompiledSchema } from '../../state';
|
|
8
8
|
import type { InputCodec } from '../../input-codec';
|
|
@@ -50,8 +50,6 @@ export interface SessionContextValue {
|
|
|
50
50
|
isReady: boolean;
|
|
51
51
|
/** Error during session initialization */
|
|
52
52
|
error: Error | null;
|
|
53
|
-
/** Send input to the session */
|
|
54
|
-
sendInput: (input: Uint8Array) => void;
|
|
55
53
|
/** Compiled input bindings */
|
|
56
54
|
inputBindings: InputCodec;
|
|
57
55
|
/** Session has ended */
|
|
@@ -62,8 +60,8 @@ export interface SessionContextValue {
|
|
|
62
60
|
schema: CompiledSchema;
|
|
63
61
|
/** Get session stats */
|
|
64
62
|
getStats: () => SessionStats;
|
|
65
|
-
/**
|
|
66
|
-
|
|
63
|
+
/** Join the session as a participant, returns an InputSender */
|
|
64
|
+
join: (playerKey: Uint8Array, options?: JoinOptions) => Promise<InputSenderInterface>;
|
|
67
65
|
}
|
|
68
66
|
/**
|
|
69
67
|
* Props for SessionProvider component
|
|
@@ -78,12 +76,11 @@ export interface SessionProviderProps {
|
|
|
78
76
|
export interface ReactSessionInterface {
|
|
79
77
|
getConfig: SessionInterface['getConfig'];
|
|
80
78
|
getInputBindings: SessionInterface['getInputBindings'];
|
|
81
|
-
sendInput: SessionInterface['sendInput'];
|
|
82
79
|
getState: SessionInterface['getState'];
|
|
83
80
|
getStats: SessionInterface['getStats'];
|
|
84
81
|
close: SessionInterface['close'];
|
|
85
82
|
getParticipants: SessionInterface['getParticipants'];
|
|
86
|
-
|
|
83
|
+
join: (playerKey: Uint8Array, options?: JoinOptions) => Promise<InputSenderInterface>;
|
|
87
84
|
}
|
|
88
85
|
/**
|
|
89
86
|
* Factory function type for creating sessions (allows test mocking)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/react/types/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/react/types/session.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { type CompiledSchema, type StateBuffer, type StateSchema, type StoreApi
|
|
|
4
4
|
import type { CompiledInitDataSchema } from './schema';
|
|
5
5
|
import { type Rollback as RollbackClass } from './rollback';
|
|
6
6
|
import { SessionConfig } from './session-config';
|
|
7
|
+
import { PeerMesh } from './peer-mesh';
|
|
7
8
|
import type { Participant } from './input-graph';
|
|
8
9
|
export * from './input-graph';
|
|
9
10
|
export declare const OPTIMISTIC_NONE: "NONE";
|
|
@@ -41,7 +42,6 @@ export interface MultitapConfig {
|
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
44
|
export interface SessionOptions {
|
|
44
|
-
playerKey: Uint8Array;
|
|
45
45
|
authority?: string;
|
|
46
46
|
appID: string;
|
|
47
47
|
path: string[] | string;
|
|
@@ -56,6 +56,7 @@ export interface SessionOptions {
|
|
|
56
56
|
maxTicksPerBatch?: number;
|
|
57
57
|
tickLag?: number;
|
|
58
58
|
connectionTimeoutMs?: number;
|
|
59
|
+
joinTimeoutMs?: number;
|
|
59
60
|
plugins: MultitapPlugin[];
|
|
60
61
|
schema: {
|
|
61
62
|
state: StateSchema | CompiledSchema;
|
|
@@ -66,9 +67,27 @@ export interface SessionOptions {
|
|
|
66
67
|
renderer: Renderer;
|
|
67
68
|
logSyncTicks?: boolean;
|
|
68
69
|
enableStatsCollection?: boolean;
|
|
69
|
-
enableP2P?: boolean;
|
|
70
70
|
optimisticStrategy: OptimisticStrategy;
|
|
71
71
|
predictedHeadMax?: number | 'auto';
|
|
72
|
+
manifestURL?: string | undefined;
|
|
73
|
+
}
|
|
74
|
+
export interface InputSenderInterface {
|
|
75
|
+
sendInput(input: Uint8Array): void;
|
|
76
|
+
readonly currentPlayerId: string;
|
|
77
|
+
getPublicKey(): Uint8Array;
|
|
78
|
+
}
|
|
79
|
+
export interface JoinOptions {
|
|
80
|
+
enableP2P?: boolean;
|
|
81
|
+
}
|
|
82
|
+
export declare class InputSender implements InputSenderInterface {
|
|
83
|
+
private channel;
|
|
84
|
+
private privateKey;
|
|
85
|
+
private publicKey;
|
|
86
|
+
private peerMesh;
|
|
87
|
+
constructor(channel: Channel, privateKey: Uint8Array, peerMesh: PeerMesh | null);
|
|
88
|
+
sendInput(input: Uint8Array): void;
|
|
89
|
+
get currentPlayerId(): string;
|
|
90
|
+
getPublicKey(): Uint8Array;
|
|
72
91
|
}
|
|
73
92
|
declare class Session {
|
|
74
93
|
private channel;
|
|
@@ -76,7 +95,6 @@ declare class Session {
|
|
|
76
95
|
private config;
|
|
77
96
|
private initializing;
|
|
78
97
|
private initialized;
|
|
79
|
-
private playerKey;
|
|
80
98
|
private compiledStateSchema;
|
|
81
99
|
private rollbackWorkerUrl;
|
|
82
100
|
private rollbackWorker;
|
|
@@ -86,6 +104,7 @@ declare class Session {
|
|
|
86
104
|
readonly debug: boolean | undefined;
|
|
87
105
|
private autoConnect;
|
|
88
106
|
private connectionTimeoutMs;
|
|
107
|
+
private joinTimeoutMs;
|
|
89
108
|
private tickLag;
|
|
90
109
|
private logSyncTicks;
|
|
91
110
|
private schema;
|
|
@@ -103,20 +122,18 @@ declare class Session {
|
|
|
103
122
|
private participantsById;
|
|
104
123
|
private participantsSorted;
|
|
105
124
|
private peerMesh;
|
|
106
|
-
private enableP2P;
|
|
107
125
|
private optimisticStrategy;
|
|
108
126
|
private predictedHeadMax;
|
|
127
|
+
private manifestURL;
|
|
109
128
|
constructor(options: SessionOptions);
|
|
110
129
|
init(): Promise<void>;
|
|
111
|
-
getCurrentPlayerId(): string;
|
|
112
130
|
getParticipants(): readonly Participant[];
|
|
113
131
|
private onParticipantJoined;
|
|
114
132
|
getConfig(): SessionConfig;
|
|
115
133
|
getStateBindings(): StoreApi;
|
|
116
134
|
getInputBindings(): InputCodec;
|
|
117
|
-
|
|
135
|
+
join(privateKey: Uint8Array, options?: JoinOptions): Promise<InputSender>;
|
|
118
136
|
getState(): StateBuffer;
|
|
119
|
-
private onInputSendError;
|
|
120
137
|
private onStateUpdate;
|
|
121
138
|
getStats(): SessionStats;
|
|
122
139
|
close(): Promise<void>;
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAqB,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGvD,OAAO,EAAE,KAAK,QAAQ,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC;AAM5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/types/channel.d.ts
CHANGED
|
@@ -19,7 +19,6 @@ export interface ChannelConfig {
|
|
|
19
19
|
/** multitap:// connection URL (will be base64-encoded for transport) */
|
|
20
20
|
connectionURL: string;
|
|
21
21
|
serverCertHash: string | null | undefined;
|
|
22
|
-
privateKey?: Uint8Array;
|
|
23
22
|
relayPubKey?: Uint8Array | undefined | null;
|
|
24
23
|
inputPayloadPredictor?: PayloadPredictor | null;
|
|
25
24
|
debug?: boolean | undefined;
|
|
@@ -29,14 +28,13 @@ export interface ChannelConfig {
|
|
|
29
28
|
iceServers?: ICEServerConfig[] | undefined;
|
|
30
29
|
optimisticStrategy: OptimisticStrategy;
|
|
31
30
|
predictedHeadMax?: number | 'auto' | undefined;
|
|
31
|
+
manifestURL?: string | undefined;
|
|
32
32
|
}
|
|
33
33
|
export declare const MAX_PREDICTION_WINDOW = 10;
|
|
34
34
|
export declare class Channel implements AsyncTickLog {
|
|
35
35
|
readonly connectionURL: string;
|
|
36
36
|
readonly serverCertHash: string | null | undefined;
|
|
37
37
|
readonly connectionTimeoutMs: number;
|
|
38
|
-
private privateKey;
|
|
39
|
-
private publicKey;
|
|
40
38
|
private genesisHash;
|
|
41
39
|
private sessionConfig;
|
|
42
40
|
private peerConnection;
|
|
@@ -60,12 +58,13 @@ export declare class Channel implements AsyncTickLog {
|
|
|
60
58
|
private lastSentTick;
|
|
61
59
|
private optimisticStrategy;
|
|
62
60
|
private autoPredictedHeadMax;
|
|
61
|
+
private manifestURL;
|
|
63
62
|
private smoothedRttMs;
|
|
64
63
|
private lastPingId;
|
|
64
|
+
private replayEnd;
|
|
65
65
|
private stats;
|
|
66
66
|
constructor(config: ChannelConfig);
|
|
67
67
|
connect(): Promise<void>;
|
|
68
|
-
getPublicKey(): Promise<Uint8Array<ArrayBufferLike>>;
|
|
69
68
|
getGenesisHash(): Promise<Uint8Array<ArrayBufferLike>>;
|
|
70
69
|
onStateChange(fn: StateListener): UnsubscribeFn;
|
|
71
70
|
getStats(): {
|
|
@@ -80,6 +79,7 @@ export declare class Channel implements AsyncTickLog {
|
|
|
80
79
|
getTickRate(): Promise<number>;
|
|
81
80
|
getParticipantSlots(tick: number): Promise<Participant[]>;
|
|
82
81
|
getSyncHead(): Promise<TickNode>;
|
|
82
|
+
isCaughtUp(): Promise<boolean>;
|
|
83
83
|
getPredictedHead(): Promise<TickNode>;
|
|
84
84
|
addSyncTick(msg: TickMessage): Promise<void>;
|
|
85
85
|
addOptimisticInput(input: InputData, preVerifiedSigner?: Uint8Array): Promise<void>;
|
|
@@ -93,8 +93,8 @@ export declare class Channel implements AsyncTickLog {
|
|
|
93
93
|
close(): Promise<void>;
|
|
94
94
|
private _setConnected;
|
|
95
95
|
private _send;
|
|
96
|
-
|
|
97
|
-
sendSignedInput(payload: Uint8Array): Promise<Uint8Array | null>;
|
|
96
|
+
sendJoinMessage(privateKey: Uint8Array): Promise<void>;
|
|
97
|
+
sendSignedInput(payload: Uint8Array, privateKey: Uint8Array): Promise<Uint8Array | null>;
|
|
98
98
|
private _nextChannel;
|
|
99
99
|
private _connectLoop;
|
|
100
100
|
private _handleDataChannel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAe,WAAW,EAAE,MAAM,YAAY,CAAC;AAGtE,OAAO,EACL,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
|
package/dist/types/crypto.d.ts
CHANGED
|
@@ -11,6 +11,18 @@ export declare const GENESIS_HASH_SIZE = 16;
|
|
|
11
11
|
* @returns 32-byte private key
|
|
12
12
|
*/
|
|
13
13
|
export declare function generateKeyPair(): Uint8Array;
|
|
14
|
+
/**
|
|
15
|
+
* Derive a child private key from a base key and index.
|
|
16
|
+
* Uses SHA256(baseKey || "multitap:bot:" || index_le_u32) for deterministic derivation.
|
|
17
|
+
* The same base key + index always produces the same child key.
|
|
18
|
+
*
|
|
19
|
+
* This matches the Go implementation in protocol/crypto.go DeriveKey().
|
|
20
|
+
*
|
|
21
|
+
* @param baseKey 32-byte base private key
|
|
22
|
+
* @param index Player index (uint32, 0-4294967295)
|
|
23
|
+
* @returns 32-byte derived private key
|
|
24
|
+
*/
|
|
25
|
+
export declare function deriveKey(baseKey: Uint8Array, index: number): Uint8Array;
|
|
14
26
|
/**
|
|
15
27
|
* Derive the compressed public key from a private key.
|
|
16
28
|
* @param privateKey 32-byte private key
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,GAAG,UAAU,CAehF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,UAAU,CAkBxF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAO3G;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAGrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAIpD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAc7G;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,UAAU,EACvB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,UAAU,GACtB,UAAU,CAiBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAkC1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,CAkC/D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAkBxF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAU7D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAI5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMtD"}
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAsBxE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,GAAG,UAAU,CAehF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,UAAU,CAkBxF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAO3G;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAGrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAIpD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAc7G;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,UAAU,EACvB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,UAAU,GACtB,UAAU,CAiBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAkC1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,CAkC/D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAkBxF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAU7D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAI5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMtD"}
|
|
@@ -30,6 +30,7 @@ export interface AsyncTickLog {
|
|
|
30
30
|
getTicksAfter(nodeId: string | null, options?: GetTicksAfterOptions): Promise<TickPrimitive[]>;
|
|
31
31
|
getPredictionCount(): Promise<number>;
|
|
32
32
|
setOnParticipantJoined(fn: (participant: Participant) => void): Promise<void>;
|
|
33
|
+
isCaughtUp(): Promise<boolean>;
|
|
33
34
|
}
|
|
34
35
|
export interface TickPrimitive {
|
|
35
36
|
id: string;
|
|
@@ -117,5 +118,6 @@ export declare class AsyncInputGraph implements AsyncTickLog {
|
|
|
117
118
|
getParticipantSlots(tick: number): Promise<(Participant | undefined)[]>;
|
|
118
119
|
getPredictionCount(): Promise<number>;
|
|
119
120
|
setOnParticipantJoined(fn: (participant: Participant) => void): Promise<void>;
|
|
121
|
+
isCaughtUp(): Promise<boolean>;
|
|
120
122
|
}
|
|
121
123
|
//# sourceMappingURL=input-graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-graph.d.ts","sourceRoot":"","sources":["../../src/input-graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAM9E,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC;AAEzC,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,OAAO;IACtB,WAAW,IAAI,QAAQ,CAAC;IACxB,gBAAgB,IAAI,QAAQ,CAAC;IAC7B,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3E,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,IAAI,MAAM,CAAC;IACzB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;IAC/D,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,EAAE,CAAC;IACtF,kBAAkB,IAAI,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,gBAAgB,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtC,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC/F,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,sBAAsB,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"input-graph.d.ts","sourceRoot":"","sources":["../../src/input-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
interface SyncLoadingScreenProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* SyncLoadingScreen wraps game content and shows a loading overlay during initial sync
|
|
7
|
+
*
|
|
8
|
+
* Blocks children from rendering until the first sync is complete. This prevents
|
|
9
|
+
* the scene from rendering before state is ready.
|
|
10
|
+
*
|
|
11
|
+
* After initial sync, children render normally. Subsequent catch-ups (reconnects)
|
|
12
|
+
* should use SyncStatusIndicator in the HUD instead of blocking the scene.
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <SessionProvider config={config}>
|
|
17
|
+
* <SyncLoadingScreen>
|
|
18
|
+
* <Arena />
|
|
19
|
+
* <Players />
|
|
20
|
+
* <HUD />
|
|
21
|
+
* </SyncLoadingScreen>
|
|
22
|
+
* </SessionProvider>
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function SyncLoadingScreen({ children }: SyncLoadingScreenProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=SyncLoadingScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncLoadingScreen.d.ts","sourceRoot":"","sources":["../../../../src/react/components/SyncLoadingScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CA2DrE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SyncStatusIndicator displays the current sync status as a simple text indicator
|
|
3
|
+
*
|
|
4
|
+
* Shows "IN SYNC" (green) when caught up, "SYNCING (-N)" (orange) when behind.
|
|
5
|
+
* Does not render during first sync (loading screen handles that).
|
|
6
|
+
*
|
|
7
|
+
* Usage in HUD:
|
|
8
|
+
* ```tsx
|
|
9
|
+
* <div style={{ position: 'absolute', top: 10, left: 10 }}>
|
|
10
|
+
* <SyncStatusIndicator />
|
|
11
|
+
* </div>
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare function SyncStatusIndicator(): import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
+
//# sourceMappingURL=SyncStatusIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncStatusIndicator.d.ts","sourceRoot":"","sources":["../../../../src/react/components/SyncStatusIndicator.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,mDAiBlC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -18,6 +18,8 @@ export declare function usePlayers(): Player[];
|
|
|
18
18
|
* this, since that is guaranteed to be in sync with the state snapshot - this hook is not.
|
|
19
19
|
* This hook is however useful for things like HUDs etc where sync is not critical.
|
|
20
20
|
*
|
|
21
|
+
* Must be used within a ParticipantProvider.
|
|
22
|
+
*
|
|
21
23
|
* @returns Current player or null if not in session
|
|
22
24
|
*/
|
|
23
25
|
export declare function useCurrentPlayer(): Player | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePlayers.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/usePlayers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usePlayers.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/usePlayers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9C;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAGrC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAIhD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SyncStatus } from '../types/session';
|
|
2
|
+
/**
|
|
3
|
+
* useSyncStatus returns the current synchronization status of the session
|
|
4
|
+
*
|
|
5
|
+
* Use this to display loading progress or network status indicators:
|
|
6
|
+
* - `phase`: 'connecting' | 'syncing' | 'sync'
|
|
7
|
+
* - `latestTick`: Server's authoritative tick (sync head)
|
|
8
|
+
* - `computedTick`: Highest tick with computed state (excludes predictions)
|
|
9
|
+
* - `lastSyncTime`: Timestamp when first sync completed (null if never synced)
|
|
10
|
+
*
|
|
11
|
+
* Example usage for loading screen vs HUD indicator:
|
|
12
|
+
* - `lastSyncTime === null && phase !== 'sync'` -> Show full loading screen (first sync)
|
|
13
|
+
* - `lastSyncTime !== null && phase === 'syncing'` -> Show HUD network indicator (catching up)
|
|
14
|
+
*
|
|
15
|
+
* @returns SyncStatus object (returns default status if not in SessionProvider)
|
|
16
|
+
*/
|
|
17
|
+
export declare function useSyncStatus(): SyncStatus;
|
|
18
|
+
//# sourceMappingURL=useSyncStatus.d.ts.map
|