@volorio/games-web 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/dist/src/index.d.ts +39 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +133 -0
- package/dist/src/index.js.map +1 -0
- package/package.json +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# @volorio/games-web
|
|
2
|
+
|
|
3
|
+
Browser Volorio Games SDK.
|
|
4
|
+
|
|
5
|
+
This package connects to the Game Gateway with a short-lived game token created by your backend through `@volorio/games-node`. It never accepts or sends a Volorio server API key.
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { VolorioGamesWebClient } from "@volorio/games-web";
|
|
9
|
+
|
|
10
|
+
const client = new VolorioGamesWebClient({
|
|
11
|
+
gatewayUrl: "wss://games.volor.io",
|
|
12
|
+
token: gameTokenFromYourBackend,
|
|
13
|
+
gameInstanceId: "game_123",
|
|
14
|
+
playerId: "user_123",
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
await client.connect();
|
|
18
|
+
await client.sendAction("ROLL_DICE", {});
|
|
19
|
+
```
|
|
20
|
+
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { parseGameActionEnvelope, type CreateVolorioGameActionEnvelopeInput, type VolorioGameActionEnvelope, type VolorioGameEventEnvelope, type VolorioGameProtocolError, type VolorioGameSnapshot } from "@volorio/games-core";
|
|
2
|
+
export type VolorioGamesWebEventName = "connected" | "disconnected" | "event" | "snapshot" | "error" | "raw";
|
|
3
|
+
export type VolorioGamesWebHandler = (payload: unknown) => void;
|
|
4
|
+
export interface VolorioGamesWebClientOptions {
|
|
5
|
+
gatewayUrl: string;
|
|
6
|
+
token: string;
|
|
7
|
+
gameInstanceId: string;
|
|
8
|
+
playerId: string;
|
|
9
|
+
websocketFactory?: (url: string) => VolorioGameWebSocketLike;
|
|
10
|
+
now?: () => number;
|
|
11
|
+
}
|
|
12
|
+
export interface VolorioGameWebSocketLike {
|
|
13
|
+
readyState: number;
|
|
14
|
+
send(data: string): void;
|
|
15
|
+
close(code?: number, reason?: string): void;
|
|
16
|
+
addEventListener(event: "open" | "close" | "message" | "error", handler: (event: unknown) => void): void;
|
|
17
|
+
}
|
|
18
|
+
export declare class VolorioGamesWebClient {
|
|
19
|
+
private readonly options;
|
|
20
|
+
private readonly handlers;
|
|
21
|
+
private readonly websocketFactory;
|
|
22
|
+
private readonly now;
|
|
23
|
+
private socket?;
|
|
24
|
+
private sequence;
|
|
25
|
+
private latestStateVersion;
|
|
26
|
+
constructor(options: VolorioGamesWebClientOptions);
|
|
27
|
+
connect(lastKnownStateVersion?: number): Promise<void>;
|
|
28
|
+
disconnect(reason?: string): void;
|
|
29
|
+
reconnect(): Promise<void>;
|
|
30
|
+
sendAction<TPayload>(type: string, payload: TPayload, options?: Partial<Pick<CreateVolorioGameActionEnvelopeInput<TPayload>, "actionId" | "expectedVersion">>): VolorioGameActionEnvelope<TPayload>;
|
|
31
|
+
on(event: VolorioGamesWebEventName, handler: VolorioGamesWebHandler): () => void;
|
|
32
|
+
getLatestStateVersion(): number;
|
|
33
|
+
private handleMessage;
|
|
34
|
+
private requireOpenSocket;
|
|
35
|
+
private emit;
|
|
36
|
+
}
|
|
37
|
+
export { parseGameActionEnvelope };
|
|
38
|
+
export type { VolorioGameEventEnvelope, VolorioGameProtocolError, VolorioGameSnapshot };
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,uBAAuB,EACvB,KAAK,oCAAoC,EACzC,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC;AAC7G,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAEhE,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,wBAAwB,CAAC;IAC7D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CAC1G;AAED,qBAAa,qBAAqB;IAQpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiE;IAC1F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4C;IAC7E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,MAAM,CAAC,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,kBAAkB,CAAK;gBAEF,OAAO,EAAE,4BAA4B;IASlE,OAAO,CAAC,qBAAqB,SAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvE,UAAU,CAAC,MAAM,SAAsB,GAAG,IAAI;IAK9C,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1B,UAAU,CAAC,QAAQ,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,EACjB,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,iBAAiB,CAAC,CAAM,GAC1G,yBAAyB,CAAC,QAAQ,CAAC;IAetC,EAAE,CAAC,KAAK,EAAE,wBAAwB,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,IAAI;IAShF,qBAAqB,IAAI,MAAM;IAI/B,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,IAAI;CAKb;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACnC,YAAY,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { createGameActionEnvelope, parseGameActionEnvelope, } from "@volorio/games-core";
|
|
2
|
+
export class VolorioGamesWebClient {
|
|
3
|
+
options;
|
|
4
|
+
handlers = new Map();
|
|
5
|
+
websocketFactory;
|
|
6
|
+
now;
|
|
7
|
+
socket;
|
|
8
|
+
sequence = 0;
|
|
9
|
+
latestStateVersion = 0;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.options = options;
|
|
12
|
+
assertNonEmpty(options.gatewayUrl, "gatewayUrl");
|
|
13
|
+
assertNonEmpty(options.token, "token");
|
|
14
|
+
assertNonEmpty(options.gameInstanceId, "gameInstanceId");
|
|
15
|
+
assertNonEmpty(options.playerId, "playerId");
|
|
16
|
+
this.websocketFactory = options.websocketFactory ?? ((url) => new WebSocket(url));
|
|
17
|
+
this.now = options.now ?? (() => Date.now());
|
|
18
|
+
}
|
|
19
|
+
connect(lastKnownStateVersion = this.latestStateVersion) {
|
|
20
|
+
const url = appendGameGatewayParams(this.options.gatewayUrl, this.options.token, lastKnownStateVersion);
|
|
21
|
+
const socket = this.websocketFactory(url);
|
|
22
|
+
this.socket = socket;
|
|
23
|
+
socket.addEventListener("close", () => this.emit("disconnected", { gameInstanceId: this.options.gameInstanceId }));
|
|
24
|
+
socket.addEventListener("error", (event) => this.emit("error", event));
|
|
25
|
+
socket.addEventListener("message", (event) => this.handleMessage(event));
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
const off = this.on("connected", () => {
|
|
28
|
+
off();
|
|
29
|
+
resolve();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
disconnect(reason = "client_disconnect") {
|
|
34
|
+
this.socket?.close(1000, reason);
|
|
35
|
+
this.socket = undefined;
|
|
36
|
+
}
|
|
37
|
+
reconnect() {
|
|
38
|
+
this.disconnect("client_reconnect");
|
|
39
|
+
return this.connect(this.latestStateVersion);
|
|
40
|
+
}
|
|
41
|
+
sendAction(type, payload, options = {}) {
|
|
42
|
+
const socket = this.requireOpenSocket();
|
|
43
|
+
const action = createGameActionEnvelope({
|
|
44
|
+
actionId: options.actionId ?? `act_${this.now()}_${this.sequence + 1}`,
|
|
45
|
+
gameInstanceId: this.options.gameInstanceId,
|
|
46
|
+
playerId: this.options.playerId,
|
|
47
|
+
type,
|
|
48
|
+
expectedVersion: options.expectedVersion ?? this.latestStateVersion,
|
|
49
|
+
sequence: ++this.sequence,
|
|
50
|
+
payload,
|
|
51
|
+
});
|
|
52
|
+
socket.send(JSON.stringify(action));
|
|
53
|
+
return action;
|
|
54
|
+
}
|
|
55
|
+
on(event, handler) {
|
|
56
|
+
const handlers = this.handlers.get(event) ?? [];
|
|
57
|
+
handlers.push(handler);
|
|
58
|
+
this.handlers.set(event, handlers);
|
|
59
|
+
return () => {
|
|
60
|
+
this.handlers.set(event, (this.handlers.get(event) ?? []).filter((candidate) => candidate !== handler));
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
getLatestStateVersion() {
|
|
64
|
+
return this.latestStateVersion;
|
|
65
|
+
}
|
|
66
|
+
handleMessage(event) {
|
|
67
|
+
const data = readMessageData(event);
|
|
68
|
+
const parsed = typeof data === "string" ? JSON.parse(data) : data;
|
|
69
|
+
this.emit("raw", parsed);
|
|
70
|
+
if (isGatewayConnected(parsed)) {
|
|
71
|
+
this.emit("connected", parsed);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (isEventEnvelope(parsed)) {
|
|
75
|
+
this.latestStateVersion = Math.max(this.latestStateVersion, parsed.stateVersion);
|
|
76
|
+
this.emit("event", parsed);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (isSnapshot(parsed)) {
|
|
80
|
+
this.latestStateVersion = Math.max(this.latestStateVersion, parsed.stateVersion);
|
|
81
|
+
this.emit("snapshot", parsed);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (isProtocolError(parsed)) {
|
|
85
|
+
this.emit("error", parsed);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
requireOpenSocket() {
|
|
89
|
+
if (this.socket === undefined || this.socket.readyState !== 1) {
|
|
90
|
+
throw new Error("volorio_game_socket_not_connected");
|
|
91
|
+
}
|
|
92
|
+
return this.socket;
|
|
93
|
+
}
|
|
94
|
+
emit(event, payload) {
|
|
95
|
+
for (const handler of this.handlers.get(event) ?? []) {
|
|
96
|
+
handler(payload);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export { parseGameActionEnvelope };
|
|
101
|
+
function appendGameGatewayParams(gatewayUrl, token, lastKnownStateVersion) {
|
|
102
|
+
const url = new URL(gatewayUrl);
|
|
103
|
+
url.searchParams.set("token", token);
|
|
104
|
+
url.searchParams.set("lastKnownStateVersion", String(lastKnownStateVersion));
|
|
105
|
+
return url.toString();
|
|
106
|
+
}
|
|
107
|
+
function readMessageData(event) {
|
|
108
|
+
return typeof event === "object" && event !== null && "data" in event ? event.data : event;
|
|
109
|
+
}
|
|
110
|
+
function isEventEnvelope(value) {
|
|
111
|
+
return isRecord(value) && typeof value.type === "string" && typeof value.stateVersion === "number" && typeof value.eventId === "string";
|
|
112
|
+
}
|
|
113
|
+
function isSnapshot(value) {
|
|
114
|
+
return isRecord(value) && typeof value.stateVersion === "number" && "state" in value && typeof value.createdAt === "string";
|
|
115
|
+
}
|
|
116
|
+
function isProtocolError(value) {
|
|
117
|
+
return isRecord(value) && typeof value.code === "string" && typeof value.message === "string" && typeof value.retryable === "boolean";
|
|
118
|
+
}
|
|
119
|
+
function isGatewayConnected(value) {
|
|
120
|
+
return isRecord(value)
|
|
121
|
+
&& value.type === "gateway.connected"
|
|
122
|
+
&& typeof value.connectionId === "string"
|
|
123
|
+
&& typeof value.gameInstanceId === "string";
|
|
124
|
+
}
|
|
125
|
+
function isRecord(value) {
|
|
126
|
+
return typeof value === "object" && value !== null;
|
|
127
|
+
}
|
|
128
|
+
function assertNonEmpty(value, field) {
|
|
129
|
+
if (value.trim().length === 0) {
|
|
130
|
+
throw new Error(`${field}_required`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@volorio/games-web",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "Browser Volorio Games client for short-lived token WebSocket gameplay connections.",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
7
|
+
"types": "dist/src/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/src/index.d.ts",
|
|
11
|
+
"default": "./dist/src/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist/src",
|
|
16
|
+
"README.md"
|
|
17
|
+
],
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public",
|
|
20
|
+
"registry": "https://registry.npmjs.org/"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
24
|
+
"test": "pnpm build && rm -rf dist-test && tsc -p tsconfig.json --outDir dist-test && node --test dist-test/test/*.js",
|
|
25
|
+
"pack:local": "pnpm build && npm pack --pack-destination dist"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@volorio/games-core": "^0.2.0"
|
|
29
|
+
}
|
|
30
|
+
}
|