@mnbroatch/boardgame.io 0.0.1
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/LICENSE +21 -0
- package/README.md +102 -0
- package/ai/package.json +7 -0
- package/client/package.json +7 -0
- package/core/package.json +7 -0
- package/debug/package.json +7 -0
- package/dist/boardgameio.es.js +14238 -0
- package/dist/boardgameio.js +14277 -0
- package/dist/boardgameio.min.js +16 -0
- package/dist/cjs/Debug-9d141c06.js +9586 -0
- package/dist/cjs/ai-e0e8a768.js +377 -0
- package/dist/cjs/ai.js +20 -0
- package/dist/cjs/client-76dec77b.js +258 -0
- package/dist/cjs/client-a22d7500.js +524 -0
- package/dist/cjs/client.js +26 -0
- package/dist/cjs/core.js +52 -0
- package/dist/cjs/debug.js +18 -0
- package/dist/cjs/filter-player-view-bb02e2f6.js +89 -0
- package/dist/cjs/initialize-267fcd69.js +61 -0
- package/dist/cjs/internal.js +25 -0
- package/dist/cjs/master-2904879d.js +320 -0
- package/dist/cjs/master.js +18 -0
- package/dist/cjs/multiplayer.js +23 -0
- package/dist/cjs/plugin-random-7425844d.js +229 -0
- package/dist/cjs/plugins.js +59 -0
- package/dist/cjs/react-native.js +182 -0
- package/dist/cjs/react.js +727 -0
- package/dist/cjs/reducer-16eec232.js +1203 -0
- package/dist/cjs/server.js +4087 -0
- package/dist/cjs/socketio-7a0837eb.js +478 -0
- package/dist/cjs/testing.js +30 -0
- package/dist/cjs/transport-b1874dfa.js +37 -0
- package/dist/cjs/turn-order-b2ff8740.js +1136 -0
- package/dist/cjs/util-fcfd8fb8.js +140 -0
- package/dist/esm/Debug-0141fe2d.js +9577 -0
- package/dist/esm/ai-5c06e761.js +371 -0
- package/dist/esm/ai.js +8 -0
- package/dist/esm/client-2e653027.js +522 -0
- package/dist/esm/client-5f57c3f2.js +255 -0
- package/dist/esm/client.js +16 -0
- package/dist/esm/core.js +40 -0
- package/dist/esm/debug.js +10 -0
- package/dist/esm/filter-player-view-2c6cc96f.js +87 -0
- package/dist/esm/initialize-11d626ca.js +59 -0
- package/dist/esm/internal.js +10 -0
- package/dist/esm/master-fa8f2e43.js +318 -0
- package/dist/esm/master.js +10 -0
- package/dist/esm/multiplayer.js +14 -0
- package/dist/esm/plugin-random-087f861e.js +226 -0
- package/dist/esm/plugins.js +55 -0
- package/dist/esm/react-native.js +173 -0
- package/dist/esm/react.js +716 -0
- package/dist/esm/reducer-c46da7e5.js +1198 -0
- package/dist/esm/socketio-c22ffa65.js +455 -0
- package/dist/esm/testing.js +26 -0
- package/dist/esm/transport-ce07b771.js +35 -0
- package/dist/esm/turn-order-376d315e.js +1091 -0
- package/dist/esm/util-b6147cef.js +135 -0
- package/dist/types/packages/ai.d.ts +5 -0
- package/dist/types/packages/client.d.ts +3 -0
- package/dist/types/packages/core.d.ts +5 -0
- package/dist/types/packages/debug.d.ts +2 -0
- package/dist/types/packages/internal.d.ts +8 -0
- package/dist/types/packages/master.d.ts +2 -0
- package/dist/types/packages/multiplayer.d.ts +3 -0
- package/dist/types/packages/plugins.d.ts +3 -0
- package/dist/types/packages/react-native.d.ts +2 -0
- package/dist/types/packages/react.d.ts +3 -0
- package/dist/types/packages/server.d.ts +6 -0
- package/dist/types/packages/testing.d.ts +1 -0
- package/dist/types/src/ai/ai.d.ts +53 -0
- package/dist/types/src/ai/ai.test.d.ts +1 -0
- package/dist/types/src/ai/bot.d.ts +40 -0
- package/dist/types/src/ai/mcts-bot.d.ts +60 -0
- package/dist/types/src/ai/random-bot.d.ts +27 -0
- package/dist/types/src/client/client.d.ts +104 -0
- package/dist/types/src/client/client.test.d.ts +1 -0
- package/dist/types/src/client/debug/tests/debug.test.d.ts +1 -0
- package/dist/types/src/client/manager.d.ts +61 -0
- package/dist/types/src/client/react.d.ts +75 -0
- package/dist/types/src/client/react.ssr.test.d.ts +4 -0
- package/dist/types/src/client/react.test.d.ts +1 -0
- package/dist/types/src/client/transport/dummy.d.ts +18 -0
- package/dist/types/src/client/transport/local.d.ts +59 -0
- package/dist/types/src/client/transport/local.test.d.ts +1 -0
- package/dist/types/src/client/transport/socketio.d.ts +45 -0
- package/dist/types/src/client/transport/socketio.test.d.ts +1 -0
- package/dist/types/src/client/transport/transport.d.ts +50 -0
- package/dist/types/src/client/transport/transport.test.d.ts +1 -0
- package/dist/types/src/core/action-creators.d.ts +144 -0
- package/dist/types/src/core/action-types.d.ts +10 -0
- package/dist/types/src/core/backwards-compatibility.d.ts +12 -0
- package/dist/types/src/core/constants.d.ts +6 -0
- package/dist/types/src/core/errors.d.ts +15 -0
- package/dist/types/src/core/flow.d.ts +28 -0
- package/dist/types/src/core/flow.test.d.ts +1 -0
- package/dist/types/src/core/game-methods.d.ts +9 -0
- package/dist/types/src/core/game.d.ts +26 -0
- package/dist/types/src/core/game.test.d.ts +1 -0
- package/dist/types/src/core/initialize.d.ts +9 -0
- package/dist/types/src/core/logger.d.ts +2 -0
- package/dist/types/src/core/player-view.d.ts +7 -0
- package/dist/types/src/core/player-view.test.d.ts +1 -0
- package/dist/types/src/core/reducer.d.ts +155 -0
- package/dist/types/src/core/reducer.test.d.ts +1 -0
- package/dist/types/src/core/turn-order.d.ts +179 -0
- package/dist/types/src/core/turn-order.test.d.ts +8 -0
- package/dist/types/src/lobby/client.d.ts +194 -0
- package/dist/types/src/lobby/client.test.d.ts +1 -0
- package/dist/types/src/lobby/connection.d.ts +44 -0
- package/dist/types/src/lobby/connection.test.d.ts +1 -0
- package/dist/types/src/lobby/create-match-form.d.ts +26 -0
- package/dist/types/src/lobby/login-form.d.ts +23 -0
- package/dist/types/src/lobby/match-instance.d.ts +31 -0
- package/dist/types/src/lobby/react.d.ts +113 -0
- package/dist/types/src/lobby/react.ssr.test.d.ts +4 -0
- package/dist/types/src/lobby/react.test.d.ts +1 -0
- package/dist/types/src/master/filter-player-view.d.ts +96 -0
- package/dist/types/src/master/filter-player-view.test.d.ts +1 -0
- package/dist/types/src/master/master.d.ts +94 -0
- package/dist/types/src/master/master.test.d.ts +1 -0
- package/dist/types/src/plugins/events/events.d.ts +54 -0
- package/dist/types/src/plugins/events/events.test.d.ts +1 -0
- package/dist/types/src/plugins/main.d.ts +75 -0
- package/dist/types/src/plugins/main.test.d.ts +1 -0
- package/dist/types/src/plugins/plugin-events.d.ts +5 -0
- package/dist/types/src/plugins/plugin-immer.d.ts +7 -0
- package/dist/types/src/plugins/plugin-immer.test.d.ts +1 -0
- package/dist/types/src/plugins/plugin-log.d.ts +14 -0
- package/dist/types/src/plugins/plugin-log.test.d.ts +1 -0
- package/dist/types/src/plugins/plugin-player.d.ts +29 -0
- package/dist/types/src/plugins/plugin-player.test.d.ts +1 -0
- package/dist/types/src/plugins/plugin-random.d.ts +4 -0
- package/dist/types/src/plugins/plugin-serializable.d.ts +7 -0
- package/dist/types/src/plugins/plugin-serializable.test.d.ts +1 -0
- package/dist/types/src/plugins/random/random.alea.d.ts +19 -0
- package/dist/types/src/plugins/random/random.d.ts +54 -0
- package/dist/types/src/plugins/random/random.test.d.ts +1 -0
- package/dist/types/src/server/api.d.ts +13 -0
- package/dist/types/src/server/api.test.d.ts +1 -0
- package/dist/types/src/server/auth.d.ts +38 -0
- package/dist/types/src/server/auth.test.d.ts +1 -0
- package/dist/types/src/server/cors.d.ts +4 -0
- package/dist/types/src/server/cors.test.d.ts +1 -0
- package/dist/types/src/server/db/base.d.ts +192 -0
- package/dist/types/src/server/db/flatfile.d.ts +44 -0
- package/dist/types/src/server/db/flatfile.test.d.ts +1 -0
- package/dist/types/src/server/db/index.d.ts +4 -0
- package/dist/types/src/server/db/index.test.d.ts +1 -0
- package/dist/types/src/server/db/inmemory.d.ts +43 -0
- package/dist/types/src/server/db/inmemory.test.d.ts +1 -0
- package/dist/types/src/server/db/localstorage.d.ts +7 -0
- package/dist/types/src/server/db/localstorage.test.d.ts +1 -0
- package/dist/types/src/server/index.d.ts +68 -0
- package/dist/types/src/server/index.test.d.ts +1 -0
- package/dist/types/src/server/transport/pubsub/generic-pub-sub.d.ts +6 -0
- package/dist/types/src/server/transport/pubsub/in-memory-pub-sub.d.ts +7 -0
- package/dist/types/src/server/transport/pubsub/in-memory-pub-sub.test.d.ts +1 -0
- package/dist/types/src/server/transport/socketio-simultaneous.test.d.ts +1 -0
- package/dist/types/src/server/transport/socketio.d.ts +65 -0
- package/dist/types/src/server/transport/socketio.test.d.ts +1 -0
- package/dist/types/src/server/util.d.ts +35 -0
- package/dist/types/src/testing/mock-random.d.ts +15 -0
- package/dist/types/src/testing/mock-random.test.d.ts +1 -0
- package/dist/types/src/types.d.ts +387 -0
- package/internal/package.json +7 -0
- package/master/package.json +7 -0
- package/multiplayer/package.json +7 -0
- package/package.json +211 -0
- package/plugins/package.json +7 -0
- package/react/package.json +7 -0
- package/react-native/package.json +7 -0
- package/server/package.json +6 -0
- package/src/ai/ai.test.ts +433 -0
- package/src/ai/ai.ts +84 -0
- package/src/ai/bot.ts +122 -0
- package/src/ai/mcts-bot.ts +331 -0
- package/src/ai/random-bot.ts +20 -0
- package/src/client/client.test.ts +993 -0
- package/src/client/client.ts +588 -0
- package/src/client/debug/Debug.svelte +239 -0
- package/src/client/debug/Menu.svelte +65 -0
- package/src/client/debug/ai/AI.svelte +215 -0
- package/src/client/debug/ai/Options.svelte +48 -0
- package/src/client/debug/info/Info.svelte +22 -0
- package/src/client/debug/info/Item.svelte +24 -0
- package/src/client/debug/log/Log.svelte +157 -0
- package/src/client/debug/log/LogEvent.svelte +149 -0
- package/src/client/debug/log/LogMetadata.svelte +7 -0
- package/src/client/debug/log/PhaseMarker.svelte +27 -0
- package/src/client/debug/log/TurnMarker.svelte +23 -0
- package/src/client/debug/main/ClientSwitcher.svelte +59 -0
- package/src/client/debug/main/Controls.svelte +58 -0
- package/src/client/debug/main/Hotkey.svelte +84 -0
- package/src/client/debug/main/InteractiveFunction.svelte +85 -0
- package/src/client/debug/main/Main.svelte +121 -0
- package/src/client/debug/main/Move.svelte +68 -0
- package/src/client/debug/main/PlayerInfo.svelte +70 -0
- package/src/client/debug/mcts/Action.svelte +22 -0
- package/src/client/debug/mcts/MCTS.svelte +78 -0
- package/src/client/debug/mcts/Table.svelte +98 -0
- package/src/client/debug/tests/JSONTree.mock.svelte +3 -0
- package/src/client/debug/tests/debug.test.ts +183 -0
- package/src/client/debug/utils/shortcuts.js +50 -0
- package/src/client/debug/utils/shortcuts.test.js +49 -0
- package/src/client/manager.ts +177 -0
- package/src/client/react-native.js +136 -0
- package/src/client/react-native.test.js +229 -0
- package/src/client/react.ssr.test.tsx +24 -0
- package/src/client/react.test.tsx +213 -0
- package/src/client/react.tsx +192 -0
- package/src/client/transport/dummy.ts +19 -0
- package/src/client/transport/local.test.ts +353 -0
- package/src/client/transport/local.ts +230 -0
- package/src/client/transport/socketio.test.ts +328 -0
- package/src/client/transport/socketio.ts +210 -0
- package/src/client/transport/transport.test.ts +27 -0
- package/src/client/transport/transport.ts +95 -0
- package/src/core/action-creators.ts +159 -0
- package/src/core/action-types.ts +18 -0
- package/src/core/backwards-compatibility.ts +23 -0
- package/src/core/constants.ts +6 -0
- package/src/core/errors.ts +35 -0
- package/src/core/flow.test.ts +2433 -0
- package/src/core/flow.ts +897 -0
- package/src/core/game-methods.ts +9 -0
- package/src/core/game.test.ts +286 -0
- package/src/core/game.ts +114 -0
- package/src/core/initialize.ts +77 -0
- package/src/core/logger.test.js +90 -0
- package/src/core/logger.ts +18 -0
- package/src/core/player-view.test.ts +50 -0
- package/src/core/player-view.ts +39 -0
- package/src/core/reducer.test.ts +991 -0
- package/src/core/reducer.ts +532 -0
- package/src/core/turn-order.test.ts +1123 -0
- package/src/core/turn-order.ts +473 -0
- package/src/lobby/client.test.ts +385 -0
- package/src/lobby/client.ts +358 -0
- package/src/lobby/connection.test.ts +207 -0
- package/src/lobby/connection.ts +162 -0
- package/src/lobby/create-match-form.tsx +122 -0
- package/src/lobby/login-form.tsx +75 -0
- package/src/lobby/match-instance.tsx +135 -0
- package/src/lobby/react.ssr.test.tsx +22 -0
- package/src/lobby/react.test.tsx +594 -0
- package/src/lobby/react.tsx +402 -0
- package/src/master/filter-player-view.test.ts +381 -0
- package/src/master/filter-player-view.ts +102 -0
- package/src/master/master.test.ts +1068 -0
- package/src/master/master.ts +492 -0
- package/src/plugins/events/events.test.ts +108 -0
- package/src/plugins/events/events.ts +209 -0
- package/src/plugins/main.test.ts +411 -0
- package/src/plugins/main.ts +314 -0
- package/src/plugins/plugin-events.ts +40 -0
- package/src/plugins/plugin-immer.test.ts +86 -0
- package/src/plugins/plugin-immer.ts +37 -0
- package/src/plugins/plugin-log.test.ts +37 -0
- package/src/plugins/plugin-log.ts +40 -0
- package/src/plugins/plugin-player.test.ts +172 -0
- package/src/plugins/plugin-player.ts +100 -0
- package/src/plugins/plugin-random.ts +40 -0
- package/src/plugins/plugin-serializable.test.ts +40 -0
- package/src/plugins/plugin-serializable.ts +55 -0
- package/src/plugins/random/random.alea.ts +109 -0
- package/src/plugins/random/random.test.ts +167 -0
- package/src/plugins/random/random.ts +198 -0
- package/src/server/api.test.ts +1699 -0
- package/src/server/api.ts +527 -0
- package/src/server/auth.test.ts +275 -0
- package/src/server/auth.ts +89 -0
- package/src/server/cors.test.ts +121 -0
- package/src/server/cors.ts +7 -0
- package/src/server/db/base.ts +296 -0
- package/src/server/db/flatfile.test.ts +221 -0
- package/src/server/db/flatfile.ts +228 -0
- package/src/server/db/index.test.ts +8 -0
- package/src/server/db/index.ts +12 -0
- package/src/server/db/inmemory.test.ts +143 -0
- package/src/server/db/inmemory.ts +143 -0
- package/src/server/db/localstorage.test.ts +73 -0
- package/src/server/db/localstorage.ts +44 -0
- package/src/server/index.test.ts +265 -0
- package/src/server/index.ts +175 -0
- package/src/server/transport/pubsub/generic-pub-sub.ts +11 -0
- package/src/server/transport/pubsub/in-memory-pub-sub.test.ts +47 -0
- package/src/server/transport/pubsub/in-memory-pub-sub.ts +28 -0
- package/src/server/transport/socketio-simultaneous.test.ts +603 -0
- package/src/server/transport/socketio.test.ts +303 -0
- package/src/server/transport/socketio.ts +279 -0
- package/src/server/util.ts +85 -0
- package/src/testing/mock-random.test.ts +45 -0
- package/src/testing/mock-random.ts +27 -0
- package/src/types.ts +511 -0
- package/testing/package.json +7 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { Game, LogEntry, PlayerID } from '../types';
|
|
2
|
+
import type { TransportData, IntermediateTransportData } from './master';
|
|
3
|
+
/** Gets a function that filters the TransportData for a given player and game. */
|
|
4
|
+
export declare const getFilterPlayerView: (game: Game) => (playerID: string | null, payload: IntermediateTransportData) => TransportData;
|
|
5
|
+
/**
|
|
6
|
+
* Redact the log.
|
|
7
|
+
*
|
|
8
|
+
* @param {Array} log - The game log (or deltalog).
|
|
9
|
+
* @param {String} playerID - The playerID that this log is
|
|
10
|
+
* to be sent to.
|
|
11
|
+
*/
|
|
12
|
+
export declare function redactLog(log: LogEntry[], playerID: PlayerID | null): {
|
|
13
|
+
action: {
|
|
14
|
+
payload: {
|
|
15
|
+
args: any;
|
|
16
|
+
type: string;
|
|
17
|
+
playerID: string;
|
|
18
|
+
} | {
|
|
19
|
+
args: any;
|
|
20
|
+
type: string;
|
|
21
|
+
playerID: string;
|
|
22
|
+
} | {
|
|
23
|
+
args: any;
|
|
24
|
+
type: any;
|
|
25
|
+
playerID: string;
|
|
26
|
+
} | {
|
|
27
|
+
args: any;
|
|
28
|
+
type: any;
|
|
29
|
+
playerID: string;
|
|
30
|
+
};
|
|
31
|
+
type: "MAKE_MOVE";
|
|
32
|
+
} | {
|
|
33
|
+
payload: {
|
|
34
|
+
args: any;
|
|
35
|
+
type: string;
|
|
36
|
+
playerID: string;
|
|
37
|
+
} | {
|
|
38
|
+
args: any;
|
|
39
|
+
type: string;
|
|
40
|
+
playerID: string;
|
|
41
|
+
} | {
|
|
42
|
+
args: any;
|
|
43
|
+
type: any;
|
|
44
|
+
playerID: string;
|
|
45
|
+
} | {
|
|
46
|
+
args: any;
|
|
47
|
+
type: any;
|
|
48
|
+
playerID: string;
|
|
49
|
+
};
|
|
50
|
+
type: "GAME_EVENT";
|
|
51
|
+
} | {
|
|
52
|
+
payload: {
|
|
53
|
+
args: any;
|
|
54
|
+
type: string;
|
|
55
|
+
playerID: string;
|
|
56
|
+
} | {
|
|
57
|
+
args: any;
|
|
58
|
+
type: string;
|
|
59
|
+
playerID: string;
|
|
60
|
+
} | {
|
|
61
|
+
args: any;
|
|
62
|
+
type: any;
|
|
63
|
+
playerID: string;
|
|
64
|
+
} | {
|
|
65
|
+
args: any;
|
|
66
|
+
type: any;
|
|
67
|
+
playerID: string;
|
|
68
|
+
};
|
|
69
|
+
type: "UNDO";
|
|
70
|
+
} | {
|
|
71
|
+
payload: {
|
|
72
|
+
args: any;
|
|
73
|
+
type: string;
|
|
74
|
+
playerID: string;
|
|
75
|
+
} | {
|
|
76
|
+
args: any;
|
|
77
|
+
type: string;
|
|
78
|
+
playerID: string;
|
|
79
|
+
} | {
|
|
80
|
+
args: any;
|
|
81
|
+
type: any;
|
|
82
|
+
playerID: string;
|
|
83
|
+
} | {
|
|
84
|
+
args: any;
|
|
85
|
+
type: any;
|
|
86
|
+
playerID: string;
|
|
87
|
+
};
|
|
88
|
+
type: "REDO";
|
|
89
|
+
};
|
|
90
|
+
_stateID: number;
|
|
91
|
+
turn: number;
|
|
92
|
+
phase: string;
|
|
93
|
+
automatic?: boolean;
|
|
94
|
+
metadata?: any;
|
|
95
|
+
patch?: import("rfc6902").Operation[];
|
|
96
|
+
}[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { ProcessGameConfig } from '../core/game';
|
|
2
|
+
import type { SyncInfo, FilteredMetadata, Game, State, ActionShape, CredentialedActionShape, LogEntry, PlayerID, ChatMessage } from '../types';
|
|
3
|
+
import type { Auth } from '../server/auth';
|
|
4
|
+
import * as StorageAPI from '../server/db/base';
|
|
5
|
+
import type { Operation } from 'rfc6902';
|
|
6
|
+
declare type CallbackFn = (arg: {
|
|
7
|
+
state: State;
|
|
8
|
+
matchID: string;
|
|
9
|
+
action?: ActionShape.Any | CredentialedActionShape.Any;
|
|
10
|
+
}) => void;
|
|
11
|
+
/**
|
|
12
|
+
* Data types that are shared across `TransportData` and `IntermediateTransportData`.
|
|
13
|
+
*/
|
|
14
|
+
declare type CommonTransportData = {
|
|
15
|
+
type: 'sync';
|
|
16
|
+
args: [string, SyncInfo];
|
|
17
|
+
} | {
|
|
18
|
+
type: 'matchData';
|
|
19
|
+
args: [string, FilteredMetadata];
|
|
20
|
+
} | {
|
|
21
|
+
type: 'chat';
|
|
22
|
+
args: [string, ChatMessage];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Final shape of data sent by the transport API
|
|
26
|
+
* to be received by clients/client transports.
|
|
27
|
+
*/
|
|
28
|
+
export declare type TransportData = {
|
|
29
|
+
type: 'update';
|
|
30
|
+
args: [string, State, LogEntry[]];
|
|
31
|
+
} | {
|
|
32
|
+
type: 'patch';
|
|
33
|
+
args: [string, number, number, Operation[], LogEntry[]];
|
|
34
|
+
} | CommonTransportData;
|
|
35
|
+
/**
|
|
36
|
+
* Data type sent by a master to its transport API. The transport then transforms
|
|
37
|
+
* this into `TransportData` for each individual player it forwards it to.
|
|
38
|
+
*/
|
|
39
|
+
export declare type IntermediateTransportData = {
|
|
40
|
+
type: 'update';
|
|
41
|
+
args: [string, State];
|
|
42
|
+
} | {
|
|
43
|
+
type: 'patch';
|
|
44
|
+
args: [string, number, State, State];
|
|
45
|
+
} | CommonTransportData;
|
|
46
|
+
/** API used by a master to emit data to any connected clients/client transports. */
|
|
47
|
+
export interface TransportAPI {
|
|
48
|
+
send: (playerData: {
|
|
49
|
+
playerID: PlayerID;
|
|
50
|
+
} & IntermediateTransportData) => void;
|
|
51
|
+
sendAll: (payload: IntermediateTransportData) => void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Master
|
|
55
|
+
*
|
|
56
|
+
* Class that runs the game and maintains the authoritative state.
|
|
57
|
+
* It uses the transportAPI to communicate with clients and the
|
|
58
|
+
* storageAPI to communicate with the database.
|
|
59
|
+
*/
|
|
60
|
+
export declare class Master {
|
|
61
|
+
game: ReturnType<typeof ProcessGameConfig>;
|
|
62
|
+
storageAPI: StorageAPI.Sync | StorageAPI.Async;
|
|
63
|
+
transportAPI: TransportAPI;
|
|
64
|
+
subscribeCallback: CallbackFn;
|
|
65
|
+
auth?: Auth;
|
|
66
|
+
constructor(game: Game, storageAPI: StorageAPI.Sync | StorageAPI.Async, transportAPI: TransportAPI, auth?: Auth);
|
|
67
|
+
subscribe(fn: CallbackFn): void;
|
|
68
|
+
/**
|
|
69
|
+
* Called on each move / event made by the client.
|
|
70
|
+
* Computes the new value of the game state and returns it
|
|
71
|
+
* along with a deltalog.
|
|
72
|
+
*/
|
|
73
|
+
onUpdate(credAction: CredentialedActionShape.Any, stateID: number, matchID: string, playerID: string): Promise<void | {
|
|
74
|
+
error: string;
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* Called when the client connects / reconnects.
|
|
78
|
+
* Returns the latest game state and the entire log.
|
|
79
|
+
*/
|
|
80
|
+
onSync(matchID: string, playerID: string | null | undefined, credentials?: string, numPlayers?: number): Promise<void | {
|
|
81
|
+
error: string;
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Called when a client connects or disconnects.
|
|
85
|
+
* Updates and sends out metadata to reflect the player’s connection status.
|
|
86
|
+
*/
|
|
87
|
+
onConnectionChange(matchID: string, playerID: string | null | undefined, credentials: string | undefined, connected: boolean): Promise<void | {
|
|
88
|
+
error: string;
|
|
89
|
+
}>;
|
|
90
|
+
onChatMessage(matchID: string, chatMessage: ChatMessage, credentials: string | undefined): Promise<void | {
|
|
91
|
+
error: string;
|
|
92
|
+
}>;
|
|
93
|
+
}
|
|
94
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { State, Ctx, PlayerID, Game, ActivePlayersArg } from '../../types';
|
|
2
|
+
import { GameMethod } from '../../core/game-methods';
|
|
3
|
+
export interface EventsAPI {
|
|
4
|
+
endGame(gameover?: any): void;
|
|
5
|
+
endPhase(): void;
|
|
6
|
+
endStage(): void;
|
|
7
|
+
endTurn(arg?: {
|
|
8
|
+
next: PlayerID;
|
|
9
|
+
}): void;
|
|
10
|
+
pass(arg?: {
|
|
11
|
+
remove: true;
|
|
12
|
+
}): void;
|
|
13
|
+
setActivePlayers(arg: ActivePlayersArg): void;
|
|
14
|
+
setPhase(newPhase: string): void;
|
|
15
|
+
setStage(newStage: string): void;
|
|
16
|
+
}
|
|
17
|
+
export interface PrivateEventsAPI {
|
|
18
|
+
_private: {
|
|
19
|
+
isUsed(): boolean;
|
|
20
|
+
updateTurnContext(ctx: Ctx, methodType: GameMethod | undefined): void;
|
|
21
|
+
unsetCurrentMethod(): void;
|
|
22
|
+
update(state: State): State;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Events
|
|
27
|
+
*/
|
|
28
|
+
export declare class Events {
|
|
29
|
+
flow: Game['flow'];
|
|
30
|
+
playerID: PlayerID | undefined;
|
|
31
|
+
dispatch: Array<{
|
|
32
|
+
type: string;
|
|
33
|
+
args: any[];
|
|
34
|
+
phase: string;
|
|
35
|
+
turn: number;
|
|
36
|
+
calledFrom: GameMethod | undefined;
|
|
37
|
+
error: Error;
|
|
38
|
+
}>;
|
|
39
|
+
maxEndedTurnsPerAction: number;
|
|
40
|
+
initialTurn: number;
|
|
41
|
+
currentPhase: string;
|
|
42
|
+
currentTurn: number;
|
|
43
|
+
currentMethod?: GameMethod;
|
|
44
|
+
constructor(flow: Game['flow'], ctx: Ctx, playerID?: PlayerID);
|
|
45
|
+
api(): EventsAPI & PrivateEventsAPI;
|
|
46
|
+
isUsed(): boolean;
|
|
47
|
+
updateTurnContext(ctx: Ctx, methodType: GameMethod | undefined): void;
|
|
48
|
+
unsetCurrentMethod(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Updates ctx with the triggered events.
|
|
51
|
+
* @param {object} state - The state object { G, ctx }.
|
|
52
|
+
*/
|
|
53
|
+
update(state: State): State;
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { AnyFn, DefaultPluginAPIs, PartialGameState, State, Game, Plugin, ActionShape, PlayerID } from '../types';
|
|
2
|
+
import type { GameMethod } from '../core/game-methods';
|
|
3
|
+
interface PluginOpts {
|
|
4
|
+
game: Game;
|
|
5
|
+
isClient?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Allow plugins to intercept actions and process them.
|
|
9
|
+
*/
|
|
10
|
+
export declare const ProcessAction: (state: State, action: ActionShape.Plugin, opts: PluginOpts) => State;
|
|
11
|
+
/**
|
|
12
|
+
* The APIs created by various plugins are stored in the plugins
|
|
13
|
+
* section of the state object:
|
|
14
|
+
*
|
|
15
|
+
* {
|
|
16
|
+
* G: {},
|
|
17
|
+
* ctx: {},
|
|
18
|
+
* plugins: {
|
|
19
|
+
* plugin-a: {
|
|
20
|
+
* data: {}, // this is generated by the plugin at Setup / Flush.
|
|
21
|
+
* api: {}, // this is ephemeral and generated by Enhance.
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* This function retrieves plugin APIs and returns them as an object
|
|
27
|
+
* for consumption as used by move contexts.
|
|
28
|
+
*/
|
|
29
|
+
export declare const GetAPIs: ({ plugins }: PartialGameState) => DefaultPluginAPIs;
|
|
30
|
+
/**
|
|
31
|
+
* Applies the provided plugins to the given move / flow function.
|
|
32
|
+
*
|
|
33
|
+
* @param methodToWrap - The move function or hook to apply the plugins to.
|
|
34
|
+
* @param methodType - The type of the move or hook being wrapped.
|
|
35
|
+
* @param plugins - The list of plugins.
|
|
36
|
+
*/
|
|
37
|
+
export declare const FnWrap: (methodToWrap: AnyFn, methodType: GameMethod, plugins: Plugin[]) => (context: import("../types").FnContext<any, Record<string, unknown>>, ...args: any[]) => any;
|
|
38
|
+
/**
|
|
39
|
+
* Allows the plugin to generate its initial state.
|
|
40
|
+
*/
|
|
41
|
+
export declare const Setup: (state: PartialGameState, opts: PluginOpts) => PartialGameState;
|
|
42
|
+
/**
|
|
43
|
+
* Invokes the plugin before a move or event.
|
|
44
|
+
* The API that the plugin generates is stored inside
|
|
45
|
+
* the `plugins` section of the state (which is subsequently
|
|
46
|
+
* merged into ctx).
|
|
47
|
+
*/
|
|
48
|
+
export declare const Enhance: <S extends State<any> | Pick<State<any>, "G" | "ctx" | "plugins">>(state: S, opts: PluginOpts & {
|
|
49
|
+
playerID: PlayerID;
|
|
50
|
+
}) => S;
|
|
51
|
+
/**
|
|
52
|
+
* Allows plugins to indicate if they should not be materialized on the client.
|
|
53
|
+
* This will cause the client to discard the state update and wait for the
|
|
54
|
+
* master instead.
|
|
55
|
+
*/
|
|
56
|
+
export declare const NoClient: (state: State, opts: PluginOpts) => boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Update plugin state after move/event & check if plugins consider the update to be valid.
|
|
59
|
+
* @returns Tuple of `[updatedState]` or `[originalState, invalidError]`.
|
|
60
|
+
*/
|
|
61
|
+
export declare const FlushAndValidate: (state: State, opts: PluginOpts) => readonly [State<any>] | readonly [State<any>, {
|
|
62
|
+
plugin: string;
|
|
63
|
+
message: string;
|
|
64
|
+
}];
|
|
65
|
+
/**
|
|
66
|
+
* Allows plugins to customize their data for specific players.
|
|
67
|
+
* For example, a plugin may want to share no data with the client, or
|
|
68
|
+
* want to keep some player data secret from opponents.
|
|
69
|
+
*/
|
|
70
|
+
export declare const PlayerView: ({ G, ctx, plugins }: State, { game, playerID }: PluginOpts & {
|
|
71
|
+
playerID: PlayerID;
|
|
72
|
+
}) => {
|
|
73
|
+
[pluginName: string]: import("../types").PluginState;
|
|
74
|
+
};
|
|
75
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Plugin } from '../types';
|
|
2
|
+
interface LogData {
|
|
3
|
+
metadata?: any;
|
|
4
|
+
}
|
|
5
|
+
export interface LogAPI {
|
|
6
|
+
setMetadata(metadata: any): void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Plugin that makes it possible to add metadata to log entries.
|
|
10
|
+
* During a move, you can set metadata using ctx.log.setMetadata and it will be
|
|
11
|
+
* available on the log entry for that move.
|
|
12
|
+
*/
|
|
13
|
+
declare const LogPlugin: Plugin<LogAPI, LogData>;
|
|
14
|
+
export default LogPlugin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Plugin, PlayerID } from '../types';
|
|
2
|
+
interface PlayerData<PlayerState extends any = any> {
|
|
3
|
+
players: Record<PlayerID, PlayerState>;
|
|
4
|
+
}
|
|
5
|
+
export interface PlayerAPI<PlayerState extends any = any> {
|
|
6
|
+
state: Record<PlayerID, PlayerState>;
|
|
7
|
+
get(): PlayerState;
|
|
8
|
+
set(value: PlayerState): PlayerState;
|
|
9
|
+
opponent?: {
|
|
10
|
+
get(): PlayerState;
|
|
11
|
+
set(value: PlayerState): PlayerState;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
interface PluginPlayerOpts<PlayerState extends any = any> {
|
|
15
|
+
setup?: (playerID: string) => PlayerState;
|
|
16
|
+
playerView?: (players: Record<PlayerID, PlayerState>, playerID?: string | null) => any;
|
|
17
|
+
}
|
|
18
|
+
export interface PlayerPlugin<PlayerState extends any = any> {
|
|
19
|
+
player: PlayerAPI<PlayerState>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Plugin that maintains state for each player in G.players.
|
|
23
|
+
* During a turn, G.player will contain the object for the current player.
|
|
24
|
+
* In two player games, G.opponent will contain the object for the other player.
|
|
25
|
+
*
|
|
26
|
+
* @param {function} initPlayerState - Function of type (playerID) => playerState.
|
|
27
|
+
*/
|
|
28
|
+
declare const PlayerPlugin: <PlayerState extends unknown = any>({ setup, playerView, }?: PluginPlayerOpts<PlayerState>) => Plugin<PlayerAPI<PlayerState>, PlayerData<PlayerState>, any>;
|
|
29
|
+
export default PlayerPlugin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface AleaState {
|
|
2
|
+
c: number;
|
|
3
|
+
s0: number;
|
|
4
|
+
s1: number;
|
|
5
|
+
s2: number;
|
|
6
|
+
}
|
|
7
|
+
declare class Alea {
|
|
8
|
+
c: number;
|
|
9
|
+
s0: number;
|
|
10
|
+
s1: number;
|
|
11
|
+
s2: number;
|
|
12
|
+
constructor(seed: string | number);
|
|
13
|
+
next(): number;
|
|
14
|
+
}
|
|
15
|
+
declare type PRNG = Alea['next'] & {
|
|
16
|
+
state?: () => AleaState;
|
|
17
|
+
};
|
|
18
|
+
export declare function alea(seed: string | number, state?: AleaState): PRNG;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { AleaState } from './random.alea';
|
|
2
|
+
export interface RandomState {
|
|
3
|
+
seed: string | number;
|
|
4
|
+
prngstate?: AleaState;
|
|
5
|
+
}
|
|
6
|
+
export interface RandomAPI {
|
|
7
|
+
D4(): number;
|
|
8
|
+
D4(diceCount: number): number[];
|
|
9
|
+
D6(): number;
|
|
10
|
+
D6(diceCount: number): number[];
|
|
11
|
+
D10(): number;
|
|
12
|
+
D10(diceCount: number): number[];
|
|
13
|
+
D12(): number;
|
|
14
|
+
D12(diceCount: number): number[];
|
|
15
|
+
D20(): number;
|
|
16
|
+
D20(diceCount: number): number[];
|
|
17
|
+
Die(spotvalue?: number): number;
|
|
18
|
+
Die(spotvalue: number, diceCount: number): number[];
|
|
19
|
+
Number(): number;
|
|
20
|
+
Shuffle<T>(deck: T[]): T[];
|
|
21
|
+
}
|
|
22
|
+
export interface PrivateRandomAPI {
|
|
23
|
+
_private: {
|
|
24
|
+
isUsed(): boolean;
|
|
25
|
+
getState(): RandomState;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Random
|
|
30
|
+
*
|
|
31
|
+
* Calls that require a pseudorandom number generator.
|
|
32
|
+
* Uses a seed from ctx, and also persists the PRNG
|
|
33
|
+
* state in ctx so that moves can stay pure.
|
|
34
|
+
*/
|
|
35
|
+
export declare class Random {
|
|
36
|
+
state: RandomState;
|
|
37
|
+
used: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Generates a new seed from the current date / time.
|
|
40
|
+
*/
|
|
41
|
+
static seed(): string;
|
|
42
|
+
/**
|
|
43
|
+
* constructor
|
|
44
|
+
* @param {object} ctx - The ctx object to initialize from.
|
|
45
|
+
*/
|
|
46
|
+
constructor(state?: RandomState);
|
|
47
|
+
isUsed(): boolean;
|
|
48
|
+
getState(): RandomState;
|
|
49
|
+
/**
|
|
50
|
+
* Generate a random number.
|
|
51
|
+
*/
|
|
52
|
+
_random(): number;
|
|
53
|
+
api(): RandomAPI & PrivateRandomAPI;
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="koa__router" />
|
|
2
|
+
import type { CorsOptions } from 'cors';
|
|
3
|
+
import type Router from '@koa/router';
|
|
4
|
+
import type { Auth } from './auth';
|
|
5
|
+
import type { Server, Game, StorageAPI } from '../types';
|
|
6
|
+
export declare const configureRouter: ({ router, db, auth, games, uuid, }: {
|
|
7
|
+
router: Router<any, Server.AppCtx>;
|
|
8
|
+
auth: Auth;
|
|
9
|
+
games: Game[];
|
|
10
|
+
uuid?: () => string;
|
|
11
|
+
db: StorageAPI.Sync | StorageAPI.Async;
|
|
12
|
+
}) => Router<any, Server.AppCtx>;
|
|
13
|
+
export declare const configureApp: (app: Server.App, router: Router<any, Server.AppCtx>, origins: CorsOptions['origin']) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Server, PlayerID } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Verifies that a match has metadata and is using credentials.
|
|
4
|
+
*/
|
|
5
|
+
export declare const doesMatchRequireAuthentication: (matchData?: Server.MatchData) => boolean;
|
|
6
|
+
/**
|
|
7
|
+
* The default `authenticateCredentials` method.
|
|
8
|
+
* Verifies that the provided credentials match the player’s metadata.
|
|
9
|
+
*/
|
|
10
|
+
export declare const areCredentialsAuthentic: Server.AuthenticateCredentials;
|
|
11
|
+
/**
|
|
12
|
+
* Extracts a player’s metadata from the match data object.
|
|
13
|
+
*/
|
|
14
|
+
export declare const extractPlayerMetadata: (matchData: Server.MatchData, playerID: PlayerID) => Server.PlayerMetadata;
|
|
15
|
+
/**
|
|
16
|
+
* Class that provides authentication methods to the lobby server & transport.
|
|
17
|
+
*/
|
|
18
|
+
export declare class Auth {
|
|
19
|
+
private readonly shouldAuthenticate;
|
|
20
|
+
private readonly authenticate;
|
|
21
|
+
/**
|
|
22
|
+
* Generate credentials string from the Koa context.
|
|
23
|
+
*/
|
|
24
|
+
readonly generateCredentials: Server.GenerateCredentials;
|
|
25
|
+
constructor(opts?: {
|
|
26
|
+
authenticateCredentials?: Server.AuthenticateCredentials;
|
|
27
|
+
generateCredentials?: Server.GenerateCredentials;
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Resolves to true if the provided credentials are valid for the given
|
|
31
|
+
* metadata and player IDs, or if the match does not require authentication.
|
|
32
|
+
*/
|
|
33
|
+
authenticateCredentials({ playerID, credentials, metadata, }: {
|
|
34
|
+
playerID: string;
|
|
35
|
+
credentials: string | undefined;
|
|
36
|
+
metadata: Server.MatchData;
|
|
37
|
+
}): boolean | Promise<boolean>;
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|