@colyseus/sdk 0.17.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/LICENSE +22 -0
- package/README.md +27 -0
- package/build/cjs/3rd_party/discord.js +56 -0
- package/build/cjs/3rd_party/discord.js.map +1 -0
- package/build/cjs/Auth.js +156 -0
- package/build/cjs/Auth.js.map +1 -0
- package/build/cjs/Client.js +282 -0
- package/build/cjs/Client.js.map +1 -0
- package/build/cjs/Connection.js +48 -0
- package/build/cjs/Connection.js.map +1 -0
- package/build/cjs/HTTP.js +156 -0
- package/build/cjs/HTTP.js.map +1 -0
- package/build/cjs/Protocol.js +34 -0
- package/build/cjs/Protocol.js.map +1 -0
- package/build/cjs/Room.js +357 -0
- package/build/cjs/Room.js.map +1 -0
- package/build/cjs/Storage.js +98 -0
- package/build/cjs/Storage.js.map +1 -0
- package/build/cjs/core/nanoevents.js +50 -0
- package/build/cjs/core/nanoevents.js.map +1 -0
- package/build/cjs/core/signal.js +53 -0
- package/build/cjs/core/signal.js.map +1 -0
- package/build/cjs/core/utils.js +14 -0
- package/build/cjs/core/utils.js.map +1 -0
- package/build/cjs/errors/Errors.js +29 -0
- package/build/cjs/errors/Errors.js.map +1 -0
- package/build/cjs/index.js +43 -0
- package/build/cjs/index.js.map +1 -0
- package/build/cjs/legacy.js +34 -0
- package/build/cjs/legacy.js.map +1 -0
- package/build/cjs/serializer/NoneSerializer.js +18 -0
- package/build/cjs/serializer/NoneSerializer.js.map +1 -0
- package/build/cjs/serializer/SchemaSerializer.js +61 -0
- package/build/cjs/serializer/SchemaSerializer.js.map +1 -0
- package/build/cjs/serializer/Serializer.js +23 -0
- package/build/cjs/serializer/Serializer.js.map +1 -0
- package/build/cjs/transport/H3Transport.js +171 -0
- package/build/cjs/transport/H3Transport.js.map +1 -0
- package/build/cjs/transport/WebSocketTransport.js +50 -0
- package/build/cjs/transport/WebSocketTransport.js.map +1 -0
- package/build/esm/3rd_party/discord.mjs +53 -0
- package/build/esm/3rd_party/discord.mjs.map +1 -0
- package/build/esm/Auth.mjs +137 -0
- package/build/esm/Auth.mjs.map +1 -0
- package/build/esm/Client.mjs +272 -0
- package/build/esm/Client.mjs.map +1 -0
- package/build/esm/Connection.mjs +49 -0
- package/build/esm/Connection.mjs.map +1 -0
- package/build/esm/HTTP.mjs +159 -0
- package/build/esm/HTTP.mjs.map +1 -0
- package/build/esm/Protocol.mjs +34 -0
- package/build/esm/Protocol.mjs.map +1 -0
- package/build/esm/Room.mjs +355 -0
- package/build/esm/Room.mjs.map +1 -0
- package/build/esm/Storage.mjs +86 -0
- package/build/esm/Storage.mjs.map +1 -0
- package/build/esm/core/nanoevents.mjs +46 -0
- package/build/esm/core/nanoevents.mjs.map +1 -0
- package/build/esm/core/signal.mjs +48 -0
- package/build/esm/core/signal.mjs.map +1 -0
- package/build/esm/core/utils.mjs +12 -0
- package/build/esm/core/utils.mjs.map +1 -0
- package/build/esm/errors/Errors.mjs +28 -0
- package/build/esm/errors/Errors.mjs.map +1 -0
- package/build/esm/index.mjs +22 -0
- package/build/esm/index.mjs.map +1 -0
- package/build/esm/legacy.mjs +32 -0
- package/build/esm/legacy.mjs.map +1 -0
- package/build/esm/serializer/NoneSerializer.mjs +16 -0
- package/build/esm/serializer/NoneSerializer.mjs.map +1 -0
- package/build/esm/serializer/SchemaSerializer.mjs +60 -0
- package/build/esm/serializer/SchemaSerializer.mjs.map +1 -0
- package/build/esm/serializer/Serializer.mjs +20 -0
- package/build/esm/serializer/Serializer.mjs.map +1 -0
- package/build/esm/transport/H3Transport.mjs +170 -0
- package/build/esm/transport/H3Transport.mjs.map +1 -0
- package/build/esm/transport/WebSocketTransport.mjs +51 -0
- package/build/esm/transport/WebSocketTransport.mjs.map +1 -0
- package/dist/colyseus-cocos-creator.js +9538 -0
- package/dist/colyseus-cocos-creator.js.map +1 -0
- package/dist/colyseus.js +9537 -0
- package/dist/colyseus.js.map +1 -0
- package/dist/debug.js +2460 -0
- package/dist/debug.js.map +1 -0
- package/lib/3rd_party/discord.d.ts +33 -0
- package/lib/Auth.d.ts +31 -0
- package/lib/Client.d.ts +92 -0
- package/lib/Connection.d.ts +17 -0
- package/lib/HTTP.d.ts +113 -0
- package/lib/HTTP_bkp.d.ts +18 -0
- package/lib/Protocol.d.ts +21 -0
- package/lib/Room.d.ts +140 -0
- package/lib/Storage.d.ts +3 -0
- package/lib/core/http_bkp.d.ts +319 -0
- package/lib/core/nanoevents.d.ts +27 -0
- package/lib/core/signal.d.ts +17 -0
- package/lib/core/utils.d.ts +1 -0
- package/lib/debug.d.ts +1 -0
- package/lib/errors/Errors.d.ts +17 -0
- package/lib/index.d.ts +9 -0
- package/lib/legacy.d.ts +0 -0
- package/lib/serializer/FossilDeltaSerializer.d.ts +0 -0
- package/lib/serializer/NoneSerializer.d.ts +8 -0
- package/lib/serializer/SchemaSerializer.d.ts +14 -0
- package/lib/serializer/Serializer.d.ts +10 -0
- package/lib/src/3rd_party/discord.d.ts +33 -0
- package/lib/src/Auth.d.ts +31 -0
- package/lib/src/Client.d.ts +62 -0
- package/lib/src/Connection.d.ts +17 -0
- package/lib/src/HTTP.d.ts +113 -0
- package/lib/src/HTTP_bkp.d.ts +18 -0
- package/lib/src/Protocol.d.ts +28 -0
- package/lib/src/Room.d.ts +132 -0
- package/lib/src/Storage.d.ts +3 -0
- package/lib/src/core/http_bkp.d.ts +319 -0
- package/lib/src/core/nanoevents.d.ts +27 -0
- package/lib/src/core/signal.d.ts +17 -0
- package/lib/src/debug.d.ts +1 -0
- package/lib/src/errors/Errors.d.ts +15 -0
- package/lib/src/index.d.ts +9 -0
- package/lib/src/legacy.d.ts +0 -0
- package/lib/src/serializer/FossilDeltaSerializer.d.ts +0 -0
- package/lib/src/serializer/NoneSerializer.d.ts +8 -0
- package/lib/src/serializer/SchemaSerializer.d.ts +14 -0
- package/lib/src/serializer/Serializer.d.ts +11 -0
- package/lib/src/transport/H3Transport.d.ts +20 -0
- package/lib/src/transport/ITransport.d.ts +16 -0
- package/lib/src/transport/WebSocketTransport.d.ts +17 -0
- package/lib/transport/H3Transport.d.ts +20 -0
- package/lib/transport/ITransport.d.ts +16 -0
- package/lib/transport/WebSocketTransport.d.ts +17 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Copyright (c) 2026 Endel Dreyer.
|
|
2
|
+
//
|
|
3
|
+
// This software is released under the MIT License.
|
|
4
|
+
// https://opensource.org/license/MIT
|
|
5
|
+
//
|
|
6
|
+
// colyseus.js@0.17.0
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
var H3Transport = require('./transport/H3Transport.js');
|
|
10
|
+
var WebSocketTransport = require('./transport/WebSocketTransport.js');
|
|
11
|
+
|
|
12
|
+
class Connection {
|
|
13
|
+
constructor(protocol) {
|
|
14
|
+
this.events = {};
|
|
15
|
+
switch (protocol) {
|
|
16
|
+
case "h3":
|
|
17
|
+
this.transport = new H3Transport.H3TransportTransport(this.events);
|
|
18
|
+
break;
|
|
19
|
+
default:
|
|
20
|
+
this.transport = new WebSocketTransport.WebSocketTransport(this.events);
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
connect(url, options) {
|
|
25
|
+
this.url = url;
|
|
26
|
+
this.options = options;
|
|
27
|
+
this.transport.connect(url, options);
|
|
28
|
+
}
|
|
29
|
+
send(data) {
|
|
30
|
+
this.transport.send(data);
|
|
31
|
+
}
|
|
32
|
+
sendUnreliable(data) {
|
|
33
|
+
this.transport.sendUnreliable(data);
|
|
34
|
+
}
|
|
35
|
+
reconnect(queryParams) {
|
|
36
|
+
const queryString = new URLSearchParams(queryParams).toString();
|
|
37
|
+
this.transport.connect(`${this.url}&${queryString}`, this.options);
|
|
38
|
+
}
|
|
39
|
+
close(code, reason) {
|
|
40
|
+
this.transport.close(code, reason);
|
|
41
|
+
}
|
|
42
|
+
get isOpen() {
|
|
43
|
+
return this.transport.isOpen;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
exports.Connection = Connection;
|
|
48
|
+
//# sourceMappingURL=Connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connection.js","sources":["../../src/Connection.ts"],"sourcesContent":["import type { ITransport, ITransportEventMap } from \"./transport/ITransport.ts\";\nimport { H3TransportTransport } from \"./transport/H3Transport.ts\";\nimport { WebSocketTransport } from \"./transport/WebSocketTransport.ts\";\n\nexport class Connection implements ITransport {\n transport: ITransport;\n events: ITransportEventMap = {};\n\n url?: string;\n options?: any;\n\n constructor(protocol?: string) {\n switch (protocol) {\n case \"h3\":\n this.transport = new H3TransportTransport(this.events);\n break;\n\n default:\n this.transport = new WebSocketTransport(this.events);\n break;\n }\n }\n\n connect(url: string, options?: any): void {\n this.url = url;\n this.options = options;\n this.transport.connect(url, options);\n }\n\n send(data: Buffer | Uint8Array): void {\n this.transport.send(data);\n }\n\n sendUnreliable(data: Buffer | Uint8Array): void {\n this.transport.sendUnreliable(data);\n }\n\n reconnect(queryParams: { reconnectionToken: string, skipHandshake?: boolean }): void {\n const queryString = new URLSearchParams(queryParams as unknown as Record<string, string>).toString();\n this.transport.connect(`${this.url}&${queryString}`, this.options);\n }\n\n close(code?: number, reason?: string): void {\n this.transport.close(code, reason);\n }\n\n get isOpen() {\n return this.transport.isOpen;\n }\n\n}\n"],"names":["H3TransportTransport","WebSocketTransport"],"mappings":";;;;;;;;;;;MAIa,UAAU,CAAA;AAOnB,IAAA,WAAA,CAAY,QAAiB,EAAA;QAL7B,IAAA,CAAA,MAAM,GAAuB,EAAE;QAM3B,QAAQ,QAAQ;AACZ,YAAA,KAAK,IAAI;gBACL,IAAI,CAAC,SAAS,GAAG,IAAIA,gCAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtD;AAEJ,YAAA;gBACI,IAAI,CAAC,SAAS,GAAG,IAAIC,qCAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpD;;IAEZ;IAEA,OAAO,CAAC,GAAW,EAAE,OAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;IACxC;AAEA,IAAA,IAAI,CAAC,IAAyB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,cAAc,CAAC,IAAyB,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC;IACvC;AAEA,IAAA,SAAS,CAAC,WAAmE,EAAA;QACzE,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,WAAgD,CAAC,CAAC,QAAQ,EAAE;AACpG,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,EAAE,IAAI,CAAC,OAAO,CAAC;IACtE;IAEA,KAAK,CAAC,IAAa,EAAE,MAAe,EAAA;QAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;IACtC;AAEA,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM;IAChC;AAEH;;;;"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// Copyright (c) 2026 Endel Dreyer.
|
|
2
|
+
//
|
|
3
|
+
// This software is released under the MIT License.
|
|
4
|
+
// https://opensource.org/license/MIT
|
|
5
|
+
//
|
|
6
|
+
// colyseus.js@0.17.0
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
var tslib = require('tslib');
|
|
10
|
+
|
|
11
|
+
function isJSONSerializable(value) {
|
|
12
|
+
if (value === undefined) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const t = typeof value;
|
|
16
|
+
if (t === "string" || t === "number" || t === "boolean" || t === null) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
if (t !== "object") {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
if (Array.isArray(value)) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (value.buffer) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
return ((value.constructor && value.constructor.name === "Object") ||
|
|
29
|
+
typeof value.toJSON === "function");
|
|
30
|
+
}
|
|
31
|
+
function getURLWithQueryParams(url, option) {
|
|
32
|
+
const { params, query } = option || {};
|
|
33
|
+
// Parse the URL and extract existing query parameters
|
|
34
|
+
const [urlPath, urlQuery] = url.split("?");
|
|
35
|
+
let path = urlPath;
|
|
36
|
+
// Handle params substitution
|
|
37
|
+
if (params) {
|
|
38
|
+
if (Array.isArray(params)) {
|
|
39
|
+
const paramPaths = path.split("/").filter((p) => p.startsWith(":"));
|
|
40
|
+
for (const [index, key] of paramPaths.entries()) {
|
|
41
|
+
const value = params[index];
|
|
42
|
+
path = path.replace(key, value);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
for (const [key, value] of Object.entries(params)) {
|
|
47
|
+
path = path.replace(`:${key}`, String(value));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Merge query parameters from URL and options
|
|
52
|
+
const queryParams = new URLSearchParams(urlQuery);
|
|
53
|
+
if (query) {
|
|
54
|
+
for (const [key, value] of Object.entries(query)) {
|
|
55
|
+
if (value == null)
|
|
56
|
+
continue;
|
|
57
|
+
queryParams.set(key, String(value));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Build final URL
|
|
61
|
+
let queryParamString = queryParams.toString();
|
|
62
|
+
queryParamString = queryParamString.length > 0 ? `?${queryParamString}`.replace(/\+/g, "%20") : "";
|
|
63
|
+
return `${path}${queryParamString}`;
|
|
64
|
+
}
|
|
65
|
+
class HTTP {
|
|
66
|
+
constructor(sdk, baseOptions) {
|
|
67
|
+
this.sdk = sdk;
|
|
68
|
+
this.options = baseOptions;
|
|
69
|
+
}
|
|
70
|
+
request(method, path, options) {
|
|
71
|
+
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
72
|
+
return this.executeRequest(method, path, options);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
get(path, options) {
|
|
76
|
+
return this.request("GET", path, options);
|
|
77
|
+
}
|
|
78
|
+
post(path, options) {
|
|
79
|
+
return this.request("POST", path, options);
|
|
80
|
+
}
|
|
81
|
+
delete(path, options) {
|
|
82
|
+
return this.request("DELETE", path, options);
|
|
83
|
+
}
|
|
84
|
+
patch(path, options) {
|
|
85
|
+
return this.request("PATCH", path, options);
|
|
86
|
+
}
|
|
87
|
+
put(path, options) {
|
|
88
|
+
return this.request("PUT", path, options);
|
|
89
|
+
}
|
|
90
|
+
executeRequest(method, path, requestOptions) {
|
|
91
|
+
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
//
|
|
93
|
+
// FIXME: if FormData is provided, merging "baseOptions.body" with
|
|
94
|
+
// "options.body" will not work as intended
|
|
95
|
+
//
|
|
96
|
+
let body = (this.options.body)
|
|
97
|
+
? Object.assign(Object.assign({}, this.options.body), ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.body) || {})) : requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.body;
|
|
98
|
+
const query = (this.options.query)
|
|
99
|
+
? Object.assign(Object.assign({}, this.options.query), ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.query) || {})) : requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.query;
|
|
100
|
+
const params = (this.options.params)
|
|
101
|
+
? Object.assign(Object.assign({}, this.options.params), ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.params) || {})) : requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.params;
|
|
102
|
+
const headers = new Headers((this.options.headers)
|
|
103
|
+
? Object.assign(Object.assign({}, this.options.headers), ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers) || {})) : requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
|
|
104
|
+
// Stringify JSON-serializable objects for fetch() body
|
|
105
|
+
if (isJSONSerializable(body) && typeof body === 'object' && body !== null) {
|
|
106
|
+
if (!headers.has("content-type")) {
|
|
107
|
+
headers.set("content-type", "application/json");
|
|
108
|
+
}
|
|
109
|
+
for (const [key, value] of Object.entries(body)) {
|
|
110
|
+
if (value instanceof Date) {
|
|
111
|
+
body[key] = value.toISOString();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
body = JSON.stringify(body);
|
|
115
|
+
}
|
|
116
|
+
const mergedOptions = Object.assign(Object.assign(Object.assign({ credentials: (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.credentials) || "include" }, this.options), requestOptions), { query,
|
|
117
|
+
params,
|
|
118
|
+
headers,
|
|
119
|
+
body,
|
|
120
|
+
method });
|
|
121
|
+
const url = getURLWithQueryParams(this.sdk['getHttpEndpoint'](path.toString()), mergedOptions);
|
|
122
|
+
const response = yield fetch(url, mergedOptions);
|
|
123
|
+
const contentType = response.headers.get("content-type");
|
|
124
|
+
let data;
|
|
125
|
+
let error = null;
|
|
126
|
+
// TODO: improve content-type detection here!
|
|
127
|
+
if (contentType === null || contentType === void 0 ? void 0 : contentType.indexOf("json")) {
|
|
128
|
+
data = yield response.json();
|
|
129
|
+
}
|
|
130
|
+
else if (contentType === null || contentType === void 0 ? void 0 : contentType.indexOf("text")) {
|
|
131
|
+
data = yield response.text();
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
data = yield response.blob();
|
|
135
|
+
}
|
|
136
|
+
if (!response.ok) {
|
|
137
|
+
// TODO: throw error here?!
|
|
138
|
+
error = data;
|
|
139
|
+
data = null;
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
ok: response.ok,
|
|
143
|
+
headers: response.headers,
|
|
144
|
+
data,
|
|
145
|
+
error,
|
|
146
|
+
status: response.status,
|
|
147
|
+
statusText: response.statusText,
|
|
148
|
+
response,
|
|
149
|
+
};
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
exports.HTTP = HTTP;
|
|
155
|
+
exports.isJSONSerializable = isJSONSerializable;
|
|
156
|
+
//# sourceMappingURL=HTTP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HTTP.js","sources":["../../src/HTTP.ts"],"sourcesContent":["import type { Router, HasRequiredKeys, Prettify, UnionToIntersection, Endpoint, HTTPMethod } from \"@colyseus/better-call\";\nimport { ColyseusSDK } from \"./Client.ts\";\n\n// Helper to check if a type is 'any'\ntype IsAny<T> = 0 extends 1 & T ? true : false;\n\n// Helper to check if a type resolves to any after indexed access\n// When T is any, T[K] is also any, but IsAny<T[K]> may not detect it due to deferred evaluation\n// We check multiple characteristics of 'any':\n// 1. Direct any check: IsAny<T>\n// 2. Accepts all string keys: string extends keyof T\n// 3. Accepts all number and symbol keys: for complete 'any' detection\ntype IsAnyOrAnyIndexed<T> = IsAny<T> extends true\n ? true\n : (string extends keyof T\n ? true\n : (number extends keyof T\n ? (symbol extends keyof T ? true : false)\n : false));\n\ntype HasRequired<\n T extends {\n body?: any;\n query?: any;\n params?: any;\n },\n> = T[\"body\"] extends object\n ? HasRequiredKeys<T[\"body\"]> extends true\n ? true\n : T[\"query\"] extends object\n ? HasRequiredKeys<T[\"query\"]> extends true\n ? true\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"query\"] extends object\n ? HasRequiredKeys<T[\"query\"]> extends true\n ? true\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false;\n\ntype InferContext<T> = T extends (ctx: infer Ctx) => any\n ? Ctx extends object\n ? Ctx\n : never\n : never;\n\n// WithRequired - makes specific keys required\n// This works by spreading T and then overriding the specified keys to be non-nullable\ntype WithRequired<T, K extends keyof any> = Prettify<T & {\n [P in K & keyof T]-?: NonNullable<T[P]>\n}>;\n\ntype WithoutServerOnly<T extends Record<string, Endpoint>> = {\n [K in keyof T]: T[K] extends Endpoint<any, infer O>\n ? O extends { metadata: { SERVER_ONLY: true } }\n ? never\n : T[K]\n : T[K];\n};\n\n// Method-specific options type\ntype MethodOptions<API, M extends HTTPMethod> = API extends { [key: string]: infer T; }\n ? T extends Endpoint<any, infer O>\n ? O[\"method\"] extends M\n ? { [key in T[\"path\"]]: T; }\n : O[\"method\"] extends M[]\n ? M extends O[\"method\"][number]\n ? { [key in T[\"path\"]]: T; }\n : {}\n : O[\"method\"] extends \"*\"\n ? { [key in T[\"path\"]]: T; }\n : {}\n : {}\n : {};\n\nexport type RequiredOptionKeys<\n C extends {\n body?: any;\n query?: any;\n params?: any;\n },\n> = (C[\"body\"] extends object\n ? HasRequiredKeys<C[\"body\"]> extends true\n ? { body: true }\n : {}\n : {}) &\n (C[\"query\"] extends object\n ? HasRequiredKeys<C[\"query\"]> extends true\n ? { query: true }\n : {}\n : {}) &\n (C[\"params\"] extends object\n ? HasRequiredKeys<C[\"params\"]> extends true\n ? { params: true }\n : {}\n : {});\n\n\ntype CommonHeaders = {\n accept: \"application/json\" | \"text/plain\" | \"application/octet-stream\";\n \"content-type\": \"application/json\" | \"text/plain\" | \"application/x-www-form-urlencoded\" | \"multipart/form-data\" | \"application/octet-stream\";\n authorization: \"Bearer\" | \"Basic\";\n};\n\ntype FetchRequestOptions<\n Body = any,\n Query extends Record<string, any> = any,\n Params extends Record<string, any> | Array<string> | undefined = any, Res = any,\n ExtraOptions extends Record<string, any> = {}\n> = Prettify<ExtraOptions & Omit<RequestInit, \"body\"> & {\n// baseURL?: string;\n\n /**\n * Headers\n */\n headers?: CommonHeaders | Headers | HeadersInit;\n\n /**\n * Body\n */\n body?: Body;\n\n /**\n * Query parameters (key-value pairs)\n */\n query?: Query;\n\n /**\n * Dynamic parameters.\n *\n * If url is defined as /path/:id, params will be { id: string }\n */\n params?: Params;\n}>\n\ntype ResponseData<T> = {\n ok: true;\n data: T;\n error: null,\n response: Response;\n headers: Headers;\n status: number;\n statusText: string;\n};\n\ntype ResponseError<E> = {\n ok: false,\n data: null,\n error: Prettify<(E extends Record<string, any> ? E : {\n message?: string;\n }) & {\n code?: string;\n }>;\n response: Response;\n headers: Headers;\n status: number;\n statusText: string;\n};\n\ntype FetchResponse<T, E extends Record<string, unknown> | unknown = unknown, Throw extends boolean = false> =\n Throw extends true\n ? T\n : ResponseData<T> | ResponseError<E>;\n\nexport function isJSONSerializable(value: any) {\n\tif (value === undefined) {\n\t\treturn false;\n\t}\n\tconst t = typeof value;\n\tif (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n\t\treturn true;\n\t}\n\tif (t !== \"object\") {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn true;\n\t}\n\tif (value.buffer) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(value.constructor && value.constructor.name === \"Object\") ||\n\t\ttypeof value.toJSON === \"function\"\n\t);\n}\n\nconst JSON_RE = /^application\\/(?:[\\w!#$%&*.^`~-]*\\+)?json(;.+)?$/i;\n\nexport type ResponseType = \"json\" | \"text\" | \"blob\";\nexport function detectResponseType(request: Response): ResponseType {\n\tconst _contentType = request.headers.get(\"content-type\");\n\tconst textTypes = new Set([\n\t\t\"image/svg\",\n\t\t\"application/xml\",\n\t\t\"application/xhtml\",\n\t\t\"application/html\",\n\t]);\n\tif (!_contentType) {\n\t\treturn \"json\";\n\t}\n\tconst contentType = _contentType.split(\";\").shift() || \"\";\n\tif (JSON_RE.test(contentType)) {\n\t\treturn \"json\";\n\t}\n\tif (textTypes.has(contentType) || contentType.startsWith(\"text/\")) {\n\t\treturn \"text\";\n\t}\n\treturn \"blob\";\n}\n\nfunction getURLWithQueryParams(url: string, option?: FetchRequestOptions) {\n\tconst { params, query } = option || {};\n\n\t// Parse the URL and extract existing query parameters\n\tconst [urlPath, urlQuery] = url.split(\"?\");\n\tlet path = urlPath;\n\n\t// Handle params substitution\n\tif (params) {\n\t\tif (Array.isArray(params)) {\n\t\t\tconst paramPaths = path.split(\"/\").filter((p) => p.startsWith(\":\"));\n\t\t\tfor (const [index, key] of paramPaths.entries()) {\n\t\t\t\tconst value = params[index];\n\t\t\t\tpath = path.replace(key, value);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tpath = path.replace(`:${key}`, String(value));\n\t\t\t}\n\t\t}\n\t}\n\n\t// Merge query parameters from URL and options\n\tconst queryParams = new URLSearchParams(urlQuery);\n\tif (query) {\n\t\tfor (const [key, value] of Object.entries(query)) {\n\t\t\tif (value == null) continue;\n\t\t\tqueryParams.set(key, String(value));\n\t\t}\n\t}\n\n\t// Build final URL\n\tlet queryParamString = queryParams.toString();\n\tqueryParamString = queryParamString.length > 0 ? `?${queryParamString}`.replace(/\\+/g, \"%20\") : \"\";\n\n\treturn `${path}${queryParamString}`;\n}\n\ntype InferredAPI<R> = R extends { endpoints: Record<string, Endpoint> }\n ? WithoutServerOnly<R[\"endpoints\"]>\n : WithoutServerOnly<R & Record<string, Endpoint>>;\n\nexport class HTTP<R extends Router | Router[\"endpoints\"]> {\n public authToken: string | undefined;\n public options: FetchRequestOptions;\n\n private sdk: ColyseusSDK;\n\n constructor(sdk: ColyseusSDK, baseOptions: FetchRequestOptions) {\n this.sdk = sdk;\n this.options = baseOptions;\n }\n\n private async request<\n M extends HTTPMethod,\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, M>>> = Prettify<UnionToIntersection<MethodOptions<API, M>>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n method: M,\n path: K,\n options?: FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n > {\n return this.executeRequest(method, path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n get<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n get<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n get(path: any, options?: any): Promise<any> {\n return this.request(\"GET\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n post<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: (IsAnyOrAnyIndexed<R> extends true ? string : never) | (IsAny<API> extends true ? string : never) | (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true ? FetchRequestOptions<any, any, any> : (IsAny<API> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>)\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n post<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: (IsAnyOrAnyIndexed<R> extends true ? string : never) | (IsAny<API> extends true ? string : never) | (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true ? FetchRequestOptions<any, any, any> : (IsAny<API> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>)\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n post(path: any, options?: any): Promise<any> {\n return this.request(\"POST\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n delete<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n delete<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n delete(path: any, options?: any): Promise<any> {\n return this.request(\"DELETE\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n patch<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n patch<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n patch(path: any, options?: any): Promise<any> {\n return this.request(\"PATCH\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n put<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n put<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n put(path: any, options?: any): Promise<any> {\n return this.request(\"PUT\", path, options);\n }\n\n protected async executeRequest<M extends HTTPMethod>(\n method: M,\n path: any,\n requestOptions?: any\n ): Promise<any> {\n //\n // FIXME: if FormData is provided, merging \"baseOptions.body\" with\n // \"options.body\" will not work as intended\n //\n let body = (this.options.body)\n ? { ...this.options.body, ...(requestOptions?.body as object || {}) }\n : requestOptions?.body;\n\n const query = (this.options.query)\n ? { ...this.options.query, ...(requestOptions?.query as object || {}) }\n : requestOptions?.query;\n\n const params = (this.options.params)\n ? { ...this.options.params, ...(requestOptions?.params as object || {}) }\n : requestOptions?.params;\n\n const headers = new Headers(\n (this.options.headers)\n ? { ...this.options.headers, ...(requestOptions?.headers || {}) }\n : requestOptions?.headers\n );\n\n // Stringify JSON-serializable objects for fetch() body\n if (isJSONSerializable(body) && typeof body === 'object' && body !== null) {\n if (!headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json\");\n }\n for (const [key, value] of Object.entries(body)) {\n if (value instanceof Date) {\n body[key] = value.toISOString();\n }\n }\n body = JSON.stringify(body);\n }\n\n const mergedOptions = {\n credentials: requestOptions?.credentials || \"include\",\n ...this.options,\n ...requestOptions,\n query,\n params,\n headers,\n body,\n method,\n };\n\n const url = getURLWithQueryParams(this.sdk['getHttpEndpoint'](path.toString()), mergedOptions);\n\n const response = await fetch(url, mergedOptions);\n const contentType = response.headers.get(\"content-type\");\n\n let data: any;\n let error = null;\n\n // TODO: improve content-type detection here!\n if (contentType?.indexOf(\"json\")) {\n data = await response.json();\n\n } else if (contentType?.indexOf(\"text\")) {\n data = await response.text();\n\n } else {\n data = await response.blob();\n }\n\n if (!response.ok) {\n // TODO: throw error here?!\n error = data;\n data = null;\n }\n\n return {\n ok: response.ok,\n headers: response.headers,\n data,\n error,\n status: response.status,\n statusText: response.statusText,\n response,\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Copyright (c) 2026 Endel Dreyer.
|
|
2
|
+
//
|
|
3
|
+
// This software is released under the MIT License.
|
|
4
|
+
// https://opensource.org/license/MIT
|
|
5
|
+
//
|
|
6
|
+
// colyseus.js@0.17.0
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
// Use codes between 0~127 for lesser throughput (1 byte)
|
|
10
|
+
exports.Protocol = void 0;
|
|
11
|
+
(function (Protocol) {
|
|
12
|
+
// Room-related (10~19)
|
|
13
|
+
Protocol[Protocol["HANDSHAKE"] = 9] = "HANDSHAKE";
|
|
14
|
+
Protocol[Protocol["JOIN_ROOM"] = 10] = "JOIN_ROOM";
|
|
15
|
+
Protocol[Protocol["ERROR"] = 11] = "ERROR";
|
|
16
|
+
Protocol[Protocol["LEAVE_ROOM"] = 12] = "LEAVE_ROOM";
|
|
17
|
+
Protocol[Protocol["ROOM_DATA"] = 13] = "ROOM_DATA";
|
|
18
|
+
Protocol[Protocol["ROOM_STATE"] = 14] = "ROOM_STATE";
|
|
19
|
+
Protocol[Protocol["ROOM_STATE_PATCH"] = 15] = "ROOM_STATE_PATCH";
|
|
20
|
+
Protocol[Protocol["ROOM_DATA_SCHEMA"] = 16] = "ROOM_DATA_SCHEMA";
|
|
21
|
+
Protocol[Protocol["ROOM_DATA_BYTES"] = 17] = "ROOM_DATA_BYTES";
|
|
22
|
+
Protocol[Protocol["PING"] = 18] = "PING";
|
|
23
|
+
})(exports.Protocol || (exports.Protocol = {}));
|
|
24
|
+
exports.ErrorCode = void 0;
|
|
25
|
+
(function (ErrorCode) {
|
|
26
|
+
ErrorCode[ErrorCode["MATCHMAKE_NO_HANDLER"] = 520] = "MATCHMAKE_NO_HANDLER";
|
|
27
|
+
ErrorCode[ErrorCode["MATCHMAKE_INVALID_CRITERIA"] = 521] = "MATCHMAKE_INVALID_CRITERIA";
|
|
28
|
+
ErrorCode[ErrorCode["MATCHMAKE_INVALID_ROOM_ID"] = 522] = "MATCHMAKE_INVALID_ROOM_ID";
|
|
29
|
+
ErrorCode[ErrorCode["MATCHMAKE_UNHANDLED"] = 523] = "MATCHMAKE_UNHANDLED";
|
|
30
|
+
ErrorCode[ErrorCode["MATCHMAKE_EXPIRED"] = 524] = "MATCHMAKE_EXPIRED";
|
|
31
|
+
ErrorCode[ErrorCode["AUTH_FAILED"] = 525] = "AUTH_FAILED";
|
|
32
|
+
ErrorCode[ErrorCode["APPLICATION_ERROR"] = 526] = "APPLICATION_ERROR";
|
|
33
|
+
})(exports.ErrorCode || (exports.ErrorCode = {}));
|
|
34
|
+
//# sourceMappingURL=Protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Protocol.js","sources":["../../src/Protocol.ts"],"sourcesContent":["// Use codes between 0~127 for lesser throughput (1 byte)\nexport enum Protocol {\n // Room-related (10~19)\n HANDSHAKE = 9,\n JOIN_ROOM = 10,\n ERROR = 11,\n LEAVE_ROOM = 12,\n ROOM_DATA = 13,\n ROOM_STATE = 14,\n ROOM_STATE_PATCH = 15,\n ROOM_DATA_SCHEMA = 16,\n ROOM_DATA_BYTES = 17,\n PING = 18,\n}\n\nexport enum ErrorCode {\n MATCHMAKE_NO_HANDLER = 520,\n MATCHMAKE_INVALID_CRITERIA = 521,\n MATCHMAKE_INVALID_ROOM_ID = 522,\n MATCHMAKE_UNHANDLED = 523,\n MATCHMAKE_EXPIRED = 524,\n\n AUTH_FAILED = 525,\n APPLICATION_ERROR = 526,\n}\n"],"names":["Protocol","ErrorCode"],"mappings":";;;;;;;;AAAA;AACYA;AAAZ,CAAA,UAAY,QAAQ,EAAA;;AAEhB,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa;AACb,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAc;AACd,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,EAAA,CAAA,GAAA,OAAU;AACV,IAAA,QAAA,CAAA,QAAA,CAAA,YAAA,CAAA,GAAA,EAAA,CAAA,GAAA,YAAe;AACf,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAc;AACd,IAAA,QAAA,CAAA,QAAA,CAAA,YAAA,CAAA,GAAA,EAAA,CAAA,GAAA,YAAe;AACf,IAAA,QAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,kBAAqB;AACrB,IAAA,QAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,kBAAqB;AACrB,IAAA,QAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,iBAAoB;AACpB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAS;AACb,CAAC,EAZWA,gBAAQ,KAARA,gBAAQ,GAAA,EAAA,CAAA,CAAA;AAcRC;AAAZ,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,sBAAA,CAAA,GAAA,GAAA,CAAA,GAAA,sBAA0B;AAC1B,IAAA,SAAA,CAAA,SAAA,CAAA,4BAAA,CAAA,GAAA,GAAA,CAAA,GAAA,4BAAgC;AAChC,IAAA,SAAA,CAAA,SAAA,CAAA,2BAAA,CAAA,GAAA,GAAA,CAAA,GAAA,2BAA+B;AAC/B,IAAA,SAAA,CAAA,SAAA,CAAA,qBAAA,CAAA,GAAA,GAAA,CAAA,GAAA,qBAAyB;AACzB,IAAA,SAAA,CAAA,SAAA,CAAA,mBAAA,CAAA,GAAA,GAAA,CAAA,GAAA,mBAAuB;AAEvB,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,GAAA,CAAA,GAAA,aAAiB;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,mBAAA,CAAA,GAAA,GAAA,CAAA,GAAA,mBAAuB;AAC3B,CAAC,EATWA,iBAAS,KAATA,iBAAS,GAAA,EAAA,CAAA,CAAA;;"}
|