@lokiplay/sdk 0.1.0 → 0.1.2
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 +16 -2
- package/dist/index.d.ts +86 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +398 -19
- package/dist/index.js.map +1 -1
- package/package.json +12 -3
package/README.md
CHANGED
|
@@ -7,5 +7,19 @@ rooms, sending actions and events, and subscribing to server messages.
|
|
|
7
7
|
npm install @lokiplay/sdk
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
Use `FirstPartyTransport` for production. It defaults to
|
|
11
|
+
`https://api.lokiplay.cc` and the managed Loki multiplayer endpoint; explicit
|
|
12
|
+
endpoint overrides are available for local and staging environments. The
|
|
13
|
+
public API exposes Loki protocol values only—Nakama objects are never returned.
|
|
14
|
+
|
|
15
|
+
Hosted sandbox games receive a `MessagePort` in the `loki:init` message. Pass
|
|
16
|
+
that port and nonce to `hostedGameSessionProvider` so session exchange occurs
|
|
17
|
+
through the approved parent bridge without adding Loki infrastructure to the
|
|
18
|
+
game manifest allowlist.
|
|
19
|
+
|
|
20
|
+
`LokiClient` supports rooms, invite resolution, matchmaking, actions, events,
|
|
21
|
+
host state, snapshots, presence, chat, private scores, token refresh, reconnect,
|
|
22
|
+
and host-migration messages. Loki creates every room and issues the shareable
|
|
23
|
+
invite code. Games call `createRoom()` and `joinRoom({ inviteCode })` and must
|
|
24
|
+
not invent room keys. Host authority is suitable for casual/unranked games, not
|
|
25
|
+
ranked anti-cheat.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,36 @@
|
|
|
1
1
|
import { type ClientEnvelope, type ServerEnvelope } from "@lokiplay/protocol";
|
|
2
|
+
export declare const LOKI_API_ORIGIN = "https://api.lokiplay.cc";
|
|
3
|
+
export type JoinedRoom = {
|
|
4
|
+
roomId: string;
|
|
5
|
+
inviteCode: string;
|
|
6
|
+
snapshot: ServerEnvelope;
|
|
7
|
+
};
|
|
8
|
+
export declare function lokiErrorFromUnknown(error: unknown): Promise<Error>;
|
|
2
9
|
export interface LokiTransport {
|
|
3
10
|
authenticate(token: string): Promise<{
|
|
4
11
|
playerId: string;
|
|
5
12
|
}>;
|
|
13
|
+
createRoom(input: {
|
|
14
|
+
projectId: string;
|
|
15
|
+
}): Promise<JoinedRoom>;
|
|
6
16
|
joinRoom(input: {
|
|
7
17
|
projectId: string;
|
|
8
|
-
|
|
9
|
-
}): Promise<
|
|
10
|
-
roomId: string;
|
|
11
|
-
snapshot: ServerEnvelope;
|
|
12
|
-
}>;
|
|
18
|
+
inviteCode: string;
|
|
19
|
+
}): Promise<JoinedRoom>;
|
|
13
20
|
send(message: ClientEnvelope): Promise<void>;
|
|
14
21
|
subscribe(listener: (message: unknown) => void): () => void;
|
|
22
|
+
resolveInvite?(inviteCode: string): Promise<{
|
|
23
|
+
roomId: string;
|
|
24
|
+
inviteCode: string;
|
|
25
|
+
}>;
|
|
26
|
+
matchmake?(input: {
|
|
27
|
+
minPlayers: number;
|
|
28
|
+
maxPlayers: number;
|
|
29
|
+
teamSize?: number;
|
|
30
|
+
}): Promise<JoinedRoom>;
|
|
31
|
+
leaveRoom?(roomId: string): Promise<void>;
|
|
32
|
+
reconnect?(): Promise<void>;
|
|
33
|
+
refresh?(): Promise<void>;
|
|
15
34
|
close(): Promise<void>;
|
|
16
35
|
}
|
|
17
36
|
export interface LokiClientOptions {
|
|
@@ -25,11 +44,72 @@ export declare class LokiClient {
|
|
|
25
44
|
authenticate(token: string): Promise<{
|
|
26
45
|
playerId: string;
|
|
27
46
|
}>;
|
|
28
|
-
|
|
47
|
+
createRoom(): Promise<JoinedRoom>;
|
|
48
|
+
joinRoom(input: {
|
|
49
|
+
inviteCode: string;
|
|
50
|
+
}): Promise<JoinedRoom>;
|
|
29
51
|
sendAction(payload: unknown): Promise<void>;
|
|
30
52
|
sendEvent(payload: unknown, reliable?: boolean): Promise<void>;
|
|
31
53
|
sendHostState(expectedVersion: number, state: unknown): Promise<void>;
|
|
54
|
+
requestSnapshot(): Promise<void>;
|
|
55
|
+
sendChat(text: string, channel?: "lobby" | "match"): Promise<void>;
|
|
56
|
+
submitScore(leaderboardId: string, score: number, subscore?: number): Promise<void>;
|
|
57
|
+
resolveInvite(inviteCode: string): Promise<{
|
|
58
|
+
roomId: string;
|
|
59
|
+
inviteCode: string;
|
|
60
|
+
}>;
|
|
61
|
+
matchmake(input: {
|
|
62
|
+
minPlayers: number;
|
|
63
|
+
maxPlayers: number;
|
|
64
|
+
teamSize?: number;
|
|
65
|
+
}): Promise<JoinedRoom>;
|
|
66
|
+
leaveRoom(): Promise<void>;
|
|
67
|
+
reconnect(): Promise<void>;
|
|
68
|
+
refresh(): Promise<void>;
|
|
32
69
|
onMessage(listener: (message: ServerEnvelope) => void): () => void;
|
|
33
70
|
close(): Promise<void>;
|
|
34
71
|
}
|
|
72
|
+
export interface FirstPartyTransportOptions {
|
|
73
|
+
apiOrigin?: string;
|
|
74
|
+
nakamaHost?: string;
|
|
75
|
+
nakamaPort?: string;
|
|
76
|
+
nakamaServerKey?: string;
|
|
77
|
+
secure?: boolean;
|
|
78
|
+
fetch?: typeof globalThis.fetch;
|
|
79
|
+
sessionProvider?(token: string): Promise<{
|
|
80
|
+
token: string;
|
|
81
|
+
refreshToken?: string;
|
|
82
|
+
playerId: string;
|
|
83
|
+
}>;
|
|
84
|
+
}
|
|
85
|
+
export declare class FirstPartyTransport implements LokiTransport {
|
|
86
|
+
#private;
|
|
87
|
+
constructor(options?: FirstPartyTransportOptions);
|
|
88
|
+
authenticate(token: string): Promise<{
|
|
89
|
+
playerId: string;
|
|
90
|
+
}>;
|
|
91
|
+
createRoom(_input: {
|
|
92
|
+
projectId: string;
|
|
93
|
+
}): Promise<JoinedRoom>;
|
|
94
|
+
joinRoom(input: {
|
|
95
|
+
projectId: string;
|
|
96
|
+
inviteCode: string;
|
|
97
|
+
}): Promise<JoinedRoom>;
|
|
98
|
+
resolveInvite(inviteCode: string): Promise<{
|
|
99
|
+
roomId: string;
|
|
100
|
+
inviteCode: string;
|
|
101
|
+
}>;
|
|
102
|
+
matchmake(input: {
|
|
103
|
+
minPlayers: number;
|
|
104
|
+
maxPlayers: number;
|
|
105
|
+
teamSize?: number;
|
|
106
|
+
}): Promise<JoinedRoom>;
|
|
107
|
+
send(message: ClientEnvelope): Promise<void>;
|
|
108
|
+
subscribe(listener: (message: unknown) => void): () => void;
|
|
109
|
+
leaveRoom(roomId: string): Promise<void>;
|
|
110
|
+
refresh(): Promise<void>;
|
|
111
|
+
reconnect(): Promise<void>;
|
|
112
|
+
close(): Promise<void>;
|
|
113
|
+
}
|
|
114
|
+
export declare function hostedGameSessionProvider(port: MessagePort, nonce: string, timeoutMs?: number): FirstPartyTransportOptions["sessionProvider"];
|
|
35
115
|
//# 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,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,59 @@
|
|
|
1
|
-
import { ClientEnvelopeSchema, ServerEnvelopeSchema, } from "@lokiplay/protocol";
|
|
1
|
+
import { ClientEnvelopeSchema, ServerEnvelopeSchema, PROTOCOL_VERSION, } from "@lokiplay/protocol";
|
|
2
|
+
import { Client, Session } from "@heroiclabs/nakama-js";
|
|
3
|
+
export const LOKI_API_ORIGIN = "https://api.lokiplay.cc";
|
|
4
|
+
const textDecoder = new TextDecoder();
|
|
5
|
+
const payload = (response) => response.payload;
|
|
6
|
+
export async function lokiErrorFromUnknown(error) {
|
|
7
|
+
if (typeof Response !== "undefined" && error instanceof Response) {
|
|
8
|
+
const status = error.status;
|
|
9
|
+
let detail = "";
|
|
10
|
+
try {
|
|
11
|
+
const text = await error.clone().text();
|
|
12
|
+
if (text) {
|
|
13
|
+
try {
|
|
14
|
+
const parsed = JSON.parse(text);
|
|
15
|
+
detail = parsed.message || parsed.error || text;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
detail = text;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// The body may already have been consumed by the transport.
|
|
24
|
+
}
|
|
25
|
+
return new Error(detail
|
|
26
|
+
? `Loki request failed (${status}): ${detail}`
|
|
27
|
+
: `Loki request failed (${status})`);
|
|
28
|
+
}
|
|
29
|
+
if (error instanceof Error) {
|
|
30
|
+
if (error.message === "[object Response]") {
|
|
31
|
+
return new Error("Loki request failed");
|
|
32
|
+
}
|
|
33
|
+
return error;
|
|
34
|
+
}
|
|
35
|
+
if (error && typeof error === "object" && "status" in error) {
|
|
36
|
+
const status = Number(error.status);
|
|
37
|
+
return new Error(Number.isFinite(status) ? `Loki request failed (${status})` : "Loki request failed");
|
|
38
|
+
}
|
|
39
|
+
return new Error("Loki request failed");
|
|
40
|
+
}
|
|
41
|
+
const wrapLokiCall = async (operation) => {
|
|
42
|
+
try {
|
|
43
|
+
return await operation();
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
throw await lokiErrorFromUnknown(error);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const normalizeInviteCode = (value) => value.trim().toUpperCase();
|
|
50
|
+
const requireInviteCode = (value) => {
|
|
51
|
+
const inviteCode = normalizeInviteCode(value);
|
|
52
|
+
if (!/^[A-F0-9]{16}$/.test(inviteCode)) {
|
|
53
|
+
throw new Error("INVITE_INVALID: invite codes are 16 letters or digits issued by Loki");
|
|
54
|
+
}
|
|
55
|
+
return inviteCode;
|
|
56
|
+
};
|
|
2
57
|
export class LokiClient {
|
|
3
58
|
#transport;
|
|
4
59
|
#projectId;
|
|
@@ -6,7 +61,10 @@ export class LokiClient {
|
|
|
6
61
|
#unsubscribe;
|
|
7
62
|
#playerId;
|
|
8
63
|
#roomId;
|
|
9
|
-
#
|
|
64
|
+
#joining = false;
|
|
65
|
+
#joinBuffer = [];
|
|
66
|
+
#sendSequence = 0;
|
|
67
|
+
#receiveSequence = 0;
|
|
10
68
|
constructor(options) {
|
|
11
69
|
if (!/^[0-9a-f-]{36}$/i.test(options.projectId)) {
|
|
12
70
|
throw new Error("invalid project id");
|
|
@@ -19,11 +77,11 @@ export class LokiClient {
|
|
|
19
77
|
return;
|
|
20
78
|
this.#unsubscribe = this.#transport.subscribe((raw) => {
|
|
21
79
|
const message = ServerEnvelopeSchema.parse(raw);
|
|
22
|
-
if (
|
|
80
|
+
if (this.#joining) {
|
|
81
|
+
this.#joinBuffer.push(message);
|
|
23
82
|
return;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
listener(message);
|
|
83
|
+
}
|
|
84
|
+
this.#dispatch(message);
|
|
27
85
|
});
|
|
28
86
|
}
|
|
29
87
|
async authenticate(token) {
|
|
@@ -33,20 +91,54 @@ export class LokiClient {
|
|
|
33
91
|
this.#playerId = session.playerId;
|
|
34
92
|
return session;
|
|
35
93
|
}
|
|
36
|
-
async
|
|
94
|
+
async createRoom() {
|
|
95
|
+
if (!this.#playerId)
|
|
96
|
+
throw new Error("authenticate before creating a room");
|
|
97
|
+
return this.#enterRoom(() => this.#transport.createRoom({ projectId: this.#projectId }));
|
|
98
|
+
}
|
|
99
|
+
async joinRoom(input) {
|
|
37
100
|
if (!this.#playerId)
|
|
38
101
|
throw new Error("authenticate before joining a room");
|
|
39
|
-
|
|
102
|
+
return this.#enterRoom(() => this.#transport.joinRoom({
|
|
40
103
|
projectId: this.#projectId,
|
|
41
|
-
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
104
|
+
inviteCode: requireInviteCode(input.inviteCode),
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
async #enterRoom(join) {
|
|
108
|
+
this.#joining = true;
|
|
109
|
+
this.#joinBuffer = [];
|
|
110
|
+
try {
|
|
111
|
+
const joined = await join();
|
|
112
|
+
const snapshot = ServerEnvelopeSchema.parse(joined.snapshot);
|
|
113
|
+
if (snapshot.roomId !== joined.roomId || snapshot.type !== "snapshot") {
|
|
114
|
+
throw new Error("invalid join snapshot");
|
|
115
|
+
}
|
|
116
|
+
this.#roomId = joined.roomId;
|
|
117
|
+
this.#sendSequence = 0;
|
|
118
|
+
this.#receiveSequence = snapshot.sequence;
|
|
119
|
+
const buffered = this.#joinBuffer;
|
|
120
|
+
this.#joinBuffer = [];
|
|
121
|
+
this.#joining = false;
|
|
122
|
+
for (const message of buffered)
|
|
123
|
+
this.#dispatch(message);
|
|
124
|
+
return {
|
|
125
|
+
roomId: joined.roomId,
|
|
126
|
+
inviteCode: joined.inviteCode,
|
|
127
|
+
snapshot,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
this.#joining = false;
|
|
132
|
+
this.#joinBuffer = [];
|
|
46
133
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
134
|
+
}
|
|
135
|
+
#dispatch(message) {
|
|
136
|
+
if (message.roomId !== this.#roomId ||
|
|
137
|
+
message.sequence < this.#receiveSequence)
|
|
138
|
+
return;
|
|
139
|
+
this.#receiveSequence = message.sequence;
|
|
140
|
+
for (const listener of this.#listeners)
|
|
141
|
+
listener(message);
|
|
50
142
|
}
|
|
51
143
|
async sendAction(payload) {
|
|
52
144
|
if (!this.#roomId)
|
|
@@ -54,7 +146,7 @@ export class LokiClient {
|
|
|
54
146
|
const message = ClientEnvelopeSchema.parse({
|
|
55
147
|
protocolVersion: 1,
|
|
56
148
|
roomId: this.#roomId,
|
|
57
|
-
sequence: ++this.#
|
|
149
|
+
sequence: ++this.#sendSequence,
|
|
58
150
|
type: "action",
|
|
59
151
|
payload,
|
|
60
152
|
});
|
|
@@ -66,7 +158,7 @@ export class LokiClient {
|
|
|
66
158
|
const message = ClientEnvelopeSchema.parse({
|
|
67
159
|
protocolVersion: 1,
|
|
68
160
|
roomId: this.#roomId,
|
|
69
|
-
sequence: ++this.#
|
|
161
|
+
sequence: ++this.#sendSequence,
|
|
70
162
|
type: "event",
|
|
71
163
|
reliable,
|
|
72
164
|
payload,
|
|
@@ -79,17 +171,73 @@ export class LokiClient {
|
|
|
79
171
|
const message = ClientEnvelopeSchema.parse({
|
|
80
172
|
protocolVersion: 1,
|
|
81
173
|
roomId: this.#roomId,
|
|
82
|
-
sequence: ++this.#
|
|
174
|
+
sequence: ++this.#sendSequence,
|
|
83
175
|
type: "host_state",
|
|
84
176
|
expectedVersion,
|
|
85
177
|
state,
|
|
86
178
|
});
|
|
87
179
|
await this.#transport.send(message);
|
|
88
180
|
}
|
|
181
|
+
async requestSnapshot() {
|
|
182
|
+
await this.#sendRoomMessage({ type: "snapshot_request" });
|
|
183
|
+
}
|
|
184
|
+
async sendChat(text, channel = "match") {
|
|
185
|
+
await this.#sendRoomMessage({ type: "chat", channel, text });
|
|
186
|
+
}
|
|
187
|
+
async submitScore(leaderboardId, score, subscore = 0) {
|
|
188
|
+
await this.#sendRoomMessage({
|
|
189
|
+
type: "score_submit",
|
|
190
|
+
leaderboardId,
|
|
191
|
+
score,
|
|
192
|
+
subscore,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
async resolveInvite(inviteCode) {
|
|
196
|
+
if (!this.#transport.resolveInvite)
|
|
197
|
+
throw new Error("invites are unsupported");
|
|
198
|
+
return this.#transport.resolveInvite(requireInviteCode(inviteCode));
|
|
199
|
+
}
|
|
200
|
+
async matchmake(input) {
|
|
201
|
+
if (!this.#playerId)
|
|
202
|
+
throw new Error("authenticate before matchmaking");
|
|
203
|
+
if (!this.#transport.matchmake)
|
|
204
|
+
throw new Error("matchmaking is unsupported");
|
|
205
|
+
return this.#enterRoom(() => this.#transport.matchmake(input));
|
|
206
|
+
}
|
|
207
|
+
async leaveRoom() {
|
|
208
|
+
if (!this.#roomId)
|
|
209
|
+
return;
|
|
210
|
+
await this.#transport.leaveRoom?.(this.#roomId);
|
|
211
|
+
this.#roomId = undefined;
|
|
212
|
+
this.#sendSequence = 0;
|
|
213
|
+
this.#receiveSequence = 0;
|
|
214
|
+
}
|
|
215
|
+
async reconnect() {
|
|
216
|
+
if (!this.#transport.reconnect)
|
|
217
|
+
throw new Error("reconnect is unsupported");
|
|
218
|
+
await this.#transport.reconnect();
|
|
219
|
+
await this.requestSnapshot();
|
|
220
|
+
}
|
|
221
|
+
async refresh() {
|
|
222
|
+
if (!this.#transport.refresh)
|
|
223
|
+
throw new Error("refresh is unsupported");
|
|
224
|
+
await this.#transport.refresh();
|
|
225
|
+
}
|
|
89
226
|
onMessage(listener) {
|
|
90
227
|
this.#listeners.add(listener);
|
|
91
228
|
return () => this.#listeners.delete(listener);
|
|
92
229
|
}
|
|
230
|
+
async #sendRoomMessage(body) {
|
|
231
|
+
if (!this.#roomId)
|
|
232
|
+
throw new Error("join a room before sending messages");
|
|
233
|
+
const message = ClientEnvelopeSchema.parse({
|
|
234
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
235
|
+
roomId: this.#roomId,
|
|
236
|
+
sequence: ++this.#sendSequence,
|
|
237
|
+
...body,
|
|
238
|
+
});
|
|
239
|
+
await this.#transport.send(message);
|
|
240
|
+
}
|
|
93
241
|
async close() {
|
|
94
242
|
this.#unsubscribe?.();
|
|
95
243
|
this.#unsubscribe = undefined;
|
|
@@ -97,4 +245,235 @@ export class LokiClient {
|
|
|
97
245
|
await this.#transport.close();
|
|
98
246
|
}
|
|
99
247
|
}
|
|
248
|
+
export class FirstPartyTransport {
|
|
249
|
+
#apiOrigin;
|
|
250
|
+
#client;
|
|
251
|
+
#secure;
|
|
252
|
+
#fetch;
|
|
253
|
+
#sessionProvider;
|
|
254
|
+
#listeners = new Set();
|
|
255
|
+
#session;
|
|
256
|
+
#socket;
|
|
257
|
+
#playerId;
|
|
258
|
+
#roomId;
|
|
259
|
+
#roomKey;
|
|
260
|
+
#closed = false;
|
|
261
|
+
constructor(options = {}) {
|
|
262
|
+
this.#apiOrigin = (options.apiOrigin ?? LOKI_API_ORIGIN).replace(/\/+$/, "");
|
|
263
|
+
this.#secure = options.secure ?? true;
|
|
264
|
+
this.#fetch = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
265
|
+
this.#sessionProvider = options.sessionProvider;
|
|
266
|
+
this.#client = new Client(options.nakamaServerKey ?? "lokiplay", options.nakamaHost ?? "multiplayer.lokiplay.cc", options.nakamaPort ?? (this.#secure ? "443" : "7350"), this.#secure, 10_000, false);
|
|
267
|
+
}
|
|
268
|
+
async authenticate(token) {
|
|
269
|
+
const value = this.#sessionProvider
|
|
270
|
+
? await this.#sessionProvider(token)
|
|
271
|
+
: await wrapLokiCall(async () => {
|
|
272
|
+
const response = await this.#fetch(`${this.#apiOrigin}/v1/nakama-session`, {
|
|
273
|
+
method: "POST",
|
|
274
|
+
headers: { authorization: `Bearer ${token}` },
|
|
275
|
+
});
|
|
276
|
+
if (!response.ok) {
|
|
277
|
+
throw await lokiErrorFromUnknown(response);
|
|
278
|
+
}
|
|
279
|
+
return (await response.json());
|
|
280
|
+
});
|
|
281
|
+
const checked = value;
|
|
282
|
+
if (!checked.token || !checked.playerId)
|
|
283
|
+
throw new Error("invalid Loki session response");
|
|
284
|
+
this.#session = Session.restore(checked.token, checked.refreshToken ?? "");
|
|
285
|
+
this.#playerId = checked.playerId;
|
|
286
|
+
await this.#connectSocket();
|
|
287
|
+
return { playerId: checked.playerId };
|
|
288
|
+
}
|
|
289
|
+
async createRoom(_input) {
|
|
290
|
+
const session = this.#requireSession();
|
|
291
|
+
const socket = await this.#connectSocket();
|
|
292
|
+
const created = payload(await wrapLokiCall(() => this.#client.rpc(session, "loki_create_room", {})));
|
|
293
|
+
if (!created.matchId || !created.inviteCode) {
|
|
294
|
+
throw new Error("Loki did not return a room invite");
|
|
295
|
+
}
|
|
296
|
+
await socket.joinMatch(created.matchId);
|
|
297
|
+
this.#roomId = created.matchId;
|
|
298
|
+
this.#roomKey = created.roomKey;
|
|
299
|
+
return {
|
|
300
|
+
roomId: created.matchId,
|
|
301
|
+
inviteCode: created.inviteCode,
|
|
302
|
+
snapshot: await this.#snapshot(created.matchId),
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
async joinRoom(input) {
|
|
306
|
+
const session = this.#requireSession();
|
|
307
|
+
const socket = await this.#connectSocket();
|
|
308
|
+
const inviteCode = requireInviteCode(input.inviteCode);
|
|
309
|
+
const joined = payload(await wrapLokiCall(() => this.#client.rpc(session, "loki_join_room", { inviteCode })));
|
|
310
|
+
if (!joined.matchId)
|
|
311
|
+
throw new Error("Loki did not return a room");
|
|
312
|
+
await socket.joinMatch(joined.matchId);
|
|
313
|
+
this.#roomId = joined.matchId;
|
|
314
|
+
return {
|
|
315
|
+
roomId: joined.matchId,
|
|
316
|
+
inviteCode: joined.inviteCode ?? inviteCode,
|
|
317
|
+
snapshot: await this.#snapshot(joined.matchId),
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
async resolveInvite(inviteCode) {
|
|
321
|
+
const normalized = requireInviteCode(inviteCode);
|
|
322
|
+
const resolved = payload(await wrapLokiCall(() => this.#client.rpc(this.#requireSession(), "loki_resolve_invite", {
|
|
323
|
+
inviteCode: normalized,
|
|
324
|
+
})));
|
|
325
|
+
if (!resolved.matchId)
|
|
326
|
+
throw new Error("Loki did not return a room");
|
|
327
|
+
return {
|
|
328
|
+
roomId: resolved.matchId,
|
|
329
|
+
inviteCode: resolved.inviteCode ?? normalized,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
async matchmake(input) {
|
|
333
|
+
const socket = await this.#connectSocket();
|
|
334
|
+
const matched = new Promise((resolve, reject) => {
|
|
335
|
+
const timer = setTimeout(() => reject(new Error("matchmaking timed out")), 30_000);
|
|
336
|
+
socket.onmatchmakermatched = (value) => {
|
|
337
|
+
clearTimeout(timer);
|
|
338
|
+
resolve(value);
|
|
339
|
+
};
|
|
340
|
+
});
|
|
341
|
+
await socket.addMatchmaker("*", input.minPlayers, input.maxPlayers, undefined, {
|
|
342
|
+
teamSize: input.teamSize ?? 0,
|
|
343
|
+
});
|
|
344
|
+
const result = await matched;
|
|
345
|
+
const joined = await socket.joinMatch(result.match_id, result.token);
|
|
346
|
+
this.#roomId = joined.match_id;
|
|
347
|
+
this.#roomKey = `match-${joined.match_id.slice(0, 12).toLowerCase()}`;
|
|
348
|
+
return {
|
|
349
|
+
roomId: joined.match_id,
|
|
350
|
+
inviteCode: "",
|
|
351
|
+
snapshot: await this.#snapshot(joined.match_id),
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
async send(message) {
|
|
355
|
+
const socket = await this.#connectSocket();
|
|
356
|
+
const opCode = message.type === "action"
|
|
357
|
+
? 10
|
|
358
|
+
: message.type === "event"
|
|
359
|
+
? 11
|
|
360
|
+
: message.type === "host_state"
|
|
361
|
+
? 12
|
|
362
|
+
: message.type === "snapshot_request"
|
|
363
|
+
? 13
|
|
364
|
+
: message.type === "chat"
|
|
365
|
+
? 14
|
|
366
|
+
: 15;
|
|
367
|
+
await socket.sendMatchState(message.roomId, opCode, JSON.stringify(message));
|
|
368
|
+
}
|
|
369
|
+
subscribe(listener) {
|
|
370
|
+
this.#listeners.add(listener);
|
|
371
|
+
return () => this.#listeners.delete(listener);
|
|
372
|
+
}
|
|
373
|
+
async leaveRoom(roomId) {
|
|
374
|
+
await this.#socket?.leaveMatch(roomId);
|
|
375
|
+
if (this.#roomId === roomId) {
|
|
376
|
+
this.#roomId = undefined;
|
|
377
|
+
this.#roomKey = undefined;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
async refresh() {
|
|
381
|
+
this.#session = await this.#client.sessionRefresh(this.#requireSession());
|
|
382
|
+
}
|
|
383
|
+
async reconnect() {
|
|
384
|
+
if (this.#closed)
|
|
385
|
+
throw new Error("transport is closed");
|
|
386
|
+
this.#socket?.disconnect(false);
|
|
387
|
+
this.#socket = undefined;
|
|
388
|
+
if (this.#session?.isexpired(Math.floor(Date.now() / 1_000)))
|
|
389
|
+
await this.refresh();
|
|
390
|
+
const socket = await this.#connectSocket();
|
|
391
|
+
if (this.#roomId)
|
|
392
|
+
await socket.joinMatch(this.#roomId);
|
|
393
|
+
}
|
|
394
|
+
async close() {
|
|
395
|
+
this.#closed = true;
|
|
396
|
+
this.#socket?.disconnect(false);
|
|
397
|
+
this.#socket = undefined;
|
|
398
|
+
this.#listeners.clear();
|
|
399
|
+
}
|
|
400
|
+
async #connectSocket() {
|
|
401
|
+
if (this.#closed)
|
|
402
|
+
throw new Error("transport is closed");
|
|
403
|
+
if (this.#socket)
|
|
404
|
+
return this.#socket;
|
|
405
|
+
const socket = this.#client.createSocket(this.#secure, false);
|
|
406
|
+
socket.onmatchdata = (message) => {
|
|
407
|
+
if (message.match_id !== this.#roomId)
|
|
408
|
+
return;
|
|
409
|
+
try {
|
|
410
|
+
const decoded = JSON.parse(textDecoder.decode(message.data));
|
|
411
|
+
for (const listener of this.#listeners)
|
|
412
|
+
listener(decoded);
|
|
413
|
+
}
|
|
414
|
+
catch {
|
|
415
|
+
// Invalid server data is ignored and cannot reach game listeners.
|
|
416
|
+
}
|
|
417
|
+
};
|
|
418
|
+
socket.ondisconnect = () => {
|
|
419
|
+
if (!this.#closed)
|
|
420
|
+
void this.reconnect().catch(() => undefined);
|
|
421
|
+
};
|
|
422
|
+
await socket.connect(this.#requireSession(), true);
|
|
423
|
+
this.#socket = socket;
|
|
424
|
+
return socket;
|
|
425
|
+
}
|
|
426
|
+
async #snapshot(roomId) {
|
|
427
|
+
const state = payload(await wrapLokiCall(() => this.#client.rpc(this.#requireSession(), "loki_room_snapshot", {
|
|
428
|
+
matchId: roomId,
|
|
429
|
+
})));
|
|
430
|
+
if (!state.ok)
|
|
431
|
+
throw new Error("room snapshot failed");
|
|
432
|
+
return ServerEnvelopeSchema.parse({
|
|
433
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
434
|
+
roomId,
|
|
435
|
+
sequence: state.version,
|
|
436
|
+
type: "snapshot",
|
|
437
|
+
hostId: state.hostId,
|
|
438
|
+
state: state.state,
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
#requireSession() {
|
|
442
|
+
if (!this.#session || !this.#playerId)
|
|
443
|
+
throw new Error("authenticate first");
|
|
444
|
+
return this.#session;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
export function hostedGameSessionProvider(port, nonce, timeoutMs = 10_000) {
|
|
448
|
+
return async () => {
|
|
449
|
+
const requestId = crypto.randomUUID();
|
|
450
|
+
return new Promise((resolve, reject) => {
|
|
451
|
+
const timer = setTimeout(() => {
|
|
452
|
+
port.removeEventListener("message", onMessage);
|
|
453
|
+
reject(new Error("hosted-game session bridge timed out"));
|
|
454
|
+
}, timeoutMs);
|
|
455
|
+
const onMessage = (event) => {
|
|
456
|
+
const value = event.data;
|
|
457
|
+
if (value.nonce !== nonce || value.requestId !== requestId)
|
|
458
|
+
return;
|
|
459
|
+
clearTimeout(timer);
|
|
460
|
+
port.removeEventListener("message", onMessage);
|
|
461
|
+
if (value.type !== "loki:session" ||
|
|
462
|
+
!value.session?.token ||
|
|
463
|
+
!value.session.playerId) {
|
|
464
|
+
reject(new Error(value.message ?? "hosted-game session bridge failed"));
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
resolve({
|
|
468
|
+
token: value.session.token,
|
|
469
|
+
refreshToken: value.session.refreshToken,
|
|
470
|
+
playerId: value.session.playerId,
|
|
471
|
+
});
|
|
472
|
+
};
|
|
473
|
+
port.addEventListener("message", onMessage);
|
|
474
|
+
port.start();
|
|
475
|
+
port.postMessage({ type: "loki:session", nonce, requestId });
|
|
476
|
+
});
|
|
477
|
+
};
|
|
478
|
+
}
|
|
100
479
|
//# 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":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lokiplay/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "JavaScript client SDK for Loki multiplayer games.",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/sanbornli/loki.git",
|
|
9
|
+
"directory": "packages/sdk-js"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/sanbornli/loki#readme",
|
|
12
|
+
"bugs": "https://github.com/sanbornli/loki/issues",
|
|
6
13
|
"type": "module",
|
|
7
14
|
"files": [
|
|
8
15
|
"dist",
|
|
9
|
-
"README.md"
|
|
16
|
+
"README.md",
|
|
17
|
+
"LICENSE"
|
|
10
18
|
],
|
|
11
19
|
"main": "./dist/index.js",
|
|
12
20
|
"types": "./dist/index.d.ts",
|
|
@@ -28,6 +36,7 @@
|
|
|
28
36
|
"access": "public"
|
|
29
37
|
},
|
|
30
38
|
"dependencies": {
|
|
31
|
-
"@
|
|
39
|
+
"@heroiclabs/nakama-js": "^2.8.0",
|
|
40
|
+
"@lokiplay/protocol": "0.1.2"
|
|
32
41
|
}
|
|
33
42
|
}
|