@roster-lock/match-agent 0.1.0 → 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/client/dist/assets/index-DeYshswm.js +125 -0
- package/client/dist/assets/index-gxAuIfGQ.css +1 -0
- package/client/dist/index.html +13 -0
- package/client/index.html +12 -0
- package/client/node_modules/.bin/terser +17 -0
- package/client/node_modules/.bin/tsc +17 -0
- package/client/node_modules/.bin/vite +17 -0
- package/client/node_modules/.vite/deps/@rjsf_core.js +6609 -0
- package/client/node_modules/.vite/deps/@rjsf_core.js.map +7 -0
- package/client/node_modules/.vite/deps/@rjsf_validator-ajv8.js +13 -0
- package/client/node_modules/.vite/deps/@rjsf_validator-ajv8.js.map +7 -0
- package/client/node_modules/.vite/deps/@roster-lock_ts-client.js +419 -0
- package/client/node_modules/.vite/deps/@roster-lock_ts-client.js.map +7 -0
- package/client/node_modules/.vite/deps/@roster-lock_types.js +5 -0
- package/client/node_modules/.vite/deps/@roster-lock_types.js.map +7 -0
- package/client/node_modules/.vite/deps/@roster-lock_utils.js +5 -0
- package/client/node_modules/.vite/deps/@roster-lock_utils.js.map +7 -0
- package/client/node_modules/.vite/deps/_metadata.json +97 -0
- package/client/node_modules/.vite/deps/chunk-4D2L7OBZ.js +16039 -0
- package/client/node_modules/.vite/deps/chunk-4D2L7OBZ.js.map +7 -0
- package/client/node_modules/.vite/deps/chunk-5KLROPUR.js +292 -0
- package/client/node_modules/.vite/deps/chunk-5KLROPUR.js.map +7 -0
- package/client/node_modules/.vite/deps/chunk-77TXW5ZT.js +280 -0
- package/client/node_modules/.vite/deps/chunk-77TXW5ZT.js.map +7 -0
- package/client/node_modules/.vite/deps/chunk-I55GDNGV.js +1004 -0
- package/client/node_modules/.vite/deps/chunk-I55GDNGV.js.map +7 -0
- package/client/node_modules/.vite/deps/chunk-IIDO6PKU.js +2337 -0
- package/client/node_modules/.vite/deps/chunk-IIDO6PKU.js.map +7 -0
- package/client/node_modules/.vite/deps/chunk-NE7PXY4V.js +466 -0
- package/client/node_modules/.vite/deps/chunk-NE7PXY4V.js.map +7 -0
- package/client/node_modules/.vite/deps/chunk-WMTNK64S.js +52 -0
- package/client/node_modules/.vite/deps/chunk-WMTNK64S.js.map +7 -0
- package/client/node_modules/.vite/deps/package.json +3 -0
- package/client/node_modules/.vite/deps/react-dom.js +6 -0
- package/client/node_modules/.vite/deps/react-dom.js.map +7 -0
- package/client/node_modules/.vite/deps/react-dom_client.js +20217 -0
- package/client/node_modules/.vite/deps/react-dom_client.js.map +7 -0
- package/client/node_modules/.vite/deps/react-router-dom.js +14702 -0
- package/client/node_modules/.vite/deps/react-router-dom.js.map +7 -0
- package/client/node_modules/.vite/deps/react.js +5 -0
- package/client/node_modules/.vite/deps/react.js.map +7 -0
- package/client/node_modules/.vite/deps/react_jsx-dev-runtime.js +278 -0
- package/client/node_modules/.vite/deps/react_jsx-dev-runtime.js.map +7 -0
- package/client/node_modules/.vite/deps/react_jsx-runtime.js +6 -0
- package/client/node_modules/.vite/deps/react_jsx-runtime.js.map +7 -0
- package/client/node_modules/.vite/deps_temp_ab51ebe9/package.json +3 -0
- package/client/package.json +30 -0
- package/client/src/App.tsx +56 -0
- package/client/src/NavBar.tsx +13 -0
- package/client/src/api/matchAgent.ts +159 -0
- package/client/src/bridge/hostBridge.ts +149 -0
- package/client/src/components/GameLauncherSettingsForm.tsx +140 -0
- package/client/src/components/InstallGameLauncherLightbox.tsx +31 -0
- package/client/src/components/Lightbox.tsx +15 -0
- package/client/src/components/RequireConnection.tsx +9 -0
- package/client/src/components/Selection/PieceCard.tsx +36 -0
- package/client/src/components/Selection/PieceTypeSection.tsx +112 -0
- package/client/src/components/Selection/PieceTypeTabs.tsx +31 -0
- package/client/src/components/Selection/PlayerSelectionPanel.tsx +40 -0
- package/client/src/components/Selection/index.tsx +147 -0
- package/client/src/components/Selection/selectionPlan.ts +75 -0
- package/client/src/context/DownloadSessionContext.tsx +48 -0
- package/client/src/context/IdentityContext.tsx +53 -0
- package/client/src/context/JoinSettingsContext.tsx +83 -0
- package/client/src/context/MatchAgentContext.tsx +85 -0
- package/client/src/hooks/useCursorInput.ts +55 -0
- package/client/src/hooks/useGamepads.ts +31 -0
- package/client/src/main.tsx +10 -0
- package/client/src/pages/Connect/index.tsx +46 -0
- package/client/src/pages/Download/index.tsx +175 -0
- package/client/src/pages/Game/index.tsx +65 -0
- package/client/src/pages/GameLauncher/Detail.tsx +12 -0
- package/client/src/pages/GameLauncher/index.tsx +32 -0
- package/client/src/pages/JoinSettings/index.tsx +58 -0
- package/client/src/pages/MatchMaking/index.tsx +190 -0
- package/client/src/styles/global.css +355 -0
- package/client/tsconfig.json +17 -0
- package/client/tsconfig.tsbuildinfo +1 -0
- package/client/vite.config.ts +33 -0
- package/dist/config/manage.js.map +1 -1
- package/dist/handle-room/version-1/game-launcher.js +181 -0
- package/dist/handle-room/version-1/game-launcher.js.map +1 -0
- package/dist/handle-room/version-1/index.js +15 -2
- package/dist/handle-room/version-1/index.js.map +1 -1
- package/dist/handle-room/version-1/piece-sort.js +1 -0
- package/dist/handle-room/version-1/piece-sort.js.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/serve-client.js +88 -0
- package/dist/serve-client.js.map +1 -0
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/package.json +12 -6
- package/src/config/manage.ts +5 -1
- package/src/handle-room/version-1/game-launcher.ts +263 -0
- package/src/handle-room/version-1/globals/types.ts +24 -0
- package/src/handle-room/version-1/index.ts +23 -3
- package/src/handle-room/version-1/piece-sort.ts +1 -1
- package/src/index.ts +25 -5
- package/src/serve-client.ts +100 -0
- package/src/server.ts +1 -1
- package/tests/integration/game-launcher-list.test.ts +77 -0
- package/tests/integration/game-launcher-settings.test.ts +138 -0
- package/tests/integration/game-launcher-start.test.ts +81 -0
- package/tests/integration/helpers/fakePluginRuntime.ts +26 -1
- package/tests/integration/helpers/server.ts +8 -2
- package/src/index.old.ts +0 -71
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createPrecompiledValidator,
|
|
3
|
+
customizeValidator,
|
|
4
|
+
lib_default
|
|
5
|
+
} from "./chunk-4D2L7OBZ.js";
|
|
6
|
+
import "./chunk-5KLROPUR.js";
|
|
7
|
+
import "./chunk-I55GDNGV.js";
|
|
8
|
+
import "./chunk-WMTNK64S.js";
|
|
9
|
+
export {
|
|
10
|
+
createPrecompiledValidator,
|
|
11
|
+
customizeValidator,
|
|
12
|
+
lib_default as default
|
|
13
|
+
};
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
import {
|
|
2
|
+
require_dist
|
|
3
|
+
} from "./chunk-NE7PXY4V.js";
|
|
4
|
+
import {
|
|
5
|
+
require_dist as require_dist2
|
|
6
|
+
} from "./chunk-IIDO6PKU.js";
|
|
7
|
+
import {
|
|
8
|
+
__commonJS,
|
|
9
|
+
__esm,
|
|
10
|
+
__export,
|
|
11
|
+
__publicField,
|
|
12
|
+
__toCommonJS
|
|
13
|
+
} from "./chunk-WMTNK64S.js";
|
|
14
|
+
|
|
15
|
+
// ../../client/typescript/dist/constants/match-agent.js
|
|
16
|
+
var require_match_agent = __commonJS({
|
|
17
|
+
"../../client/typescript/dist/constants/match-agent.js"(exports) {
|
|
18
|
+
"use strict";
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.ROSTERLOCK_MATCH_AGENT_URL = void 0;
|
|
21
|
+
exports.ROSTERLOCK_MATCH_AGENT_URL = new URL("http://localhost:58732");
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// ../../client/typescript/dist/utils/fetch.js
|
|
26
|
+
var require_fetch = __commonJS({
|
|
27
|
+
"../../client/typescript/dist/utils/fetch.js"(exports) {
|
|
28
|
+
"use strict";
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.HTTPError = void 0;
|
|
31
|
+
exports.runFetch = runFetch;
|
|
32
|
+
var HTTPError = class extends Error {
|
|
33
|
+
constructor(url, method, response, body, message = `HTTP Error: ${response.status}`) {
|
|
34
|
+
super(message);
|
|
35
|
+
__publicField(this, "url");
|
|
36
|
+
__publicField(this, "method");
|
|
37
|
+
__publicField(this, "response");
|
|
38
|
+
__publicField(this, "body");
|
|
39
|
+
this.url = url;
|
|
40
|
+
this.method = method;
|
|
41
|
+
this.response = response;
|
|
42
|
+
this.body = body;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
exports.HTTPError = HTTPError;
|
|
46
|
+
async function runFetch(auth, url, reqInit) {
|
|
47
|
+
url = new URL(url);
|
|
48
|
+
if (!["http:", "https:"].includes(url.protocol)) {
|
|
49
|
+
throw new Error("Expecting protocol to be http or https");
|
|
50
|
+
}
|
|
51
|
+
const { body, headers } = reqInit || { method: "GET" };
|
|
52
|
+
const isJSONBody = typeof body === "undefined" ? false : body instanceof FormData ? false : body instanceof ReadableStream ? false : true;
|
|
53
|
+
const response = await fetch(url, {
|
|
54
|
+
method: (reqInit == null ? void 0 : reqInit.method) || "GET",
|
|
55
|
+
headers: {
|
|
56
|
+
...!isJSONBody ? {} : { "Content-Type": "application/json" },
|
|
57
|
+
...typeof auth === "undefined" ? {} : { "Authorization": "Bearer " + auth },
|
|
58
|
+
...headers
|
|
59
|
+
},
|
|
60
|
+
body: !isJSONBody ? body : JSON.stringify(body)
|
|
61
|
+
});
|
|
62
|
+
if (!response.ok) {
|
|
63
|
+
throw new HTTPError(url, (reqInit == null ? void 0 : reqInit.method) || "GET", response, await response.json());
|
|
64
|
+
}
|
|
65
|
+
return response;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// ../../node_modules/.pnpm/isomorphic-ws@5.0.0_ws@8.21.3_bufferutil@4.1.0_utf-8-validate@6.0.6_/node_modules/isomorphic-ws/browser.js
|
|
71
|
+
var browser_exports = {};
|
|
72
|
+
__export(browser_exports, {
|
|
73
|
+
default: () => browser_default
|
|
74
|
+
});
|
|
75
|
+
var ws, browser_default;
|
|
76
|
+
var init_browser = __esm({
|
|
77
|
+
"../../node_modules/.pnpm/isomorphic-ws@5.0.0_ws@8.21.3_bufferutil@4.1.0_utf-8-validate@6.0.6_/node_modules/isomorphic-ws/browser.js"() {
|
|
78
|
+
ws = null;
|
|
79
|
+
if (typeof WebSocket !== "undefined") {
|
|
80
|
+
ws = WebSocket;
|
|
81
|
+
} else if (typeof MozWebSocket !== "undefined") {
|
|
82
|
+
ws = MozWebSocket;
|
|
83
|
+
} else if (typeof global !== "undefined") {
|
|
84
|
+
ws = global.WebSocket || global.MozWebSocket;
|
|
85
|
+
} else if (typeof window !== "undefined") {
|
|
86
|
+
ws = window.WebSocket || window.MozWebSocket;
|
|
87
|
+
} else if (typeof self !== "undefined") {
|
|
88
|
+
ws = self.WebSocket || self.MozWebSocket;
|
|
89
|
+
}
|
|
90
|
+
browser_default = ws;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// ../../client/typescript/dist/v1/select.js
|
|
95
|
+
var require_select = __commonJS({
|
|
96
|
+
"../../client/typescript/dist/v1/select.js"(exports) {
|
|
97
|
+
"use strict";
|
|
98
|
+
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
99
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
100
|
+
};
|
|
101
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
102
|
+
exports.ensurePieceDownloaded = ensurePieceDownloaded;
|
|
103
|
+
exports.ensurePieceDownloadedOverWebSocket = ensurePieceDownloadedOverWebSocket;
|
|
104
|
+
exports.listDownloadedPiecesFromConfig = listDownloadedPiecesFromConfig;
|
|
105
|
+
exports.listDownloadedPiecesDirect = listDownloadedPiecesDirect;
|
|
106
|
+
var match_agent_1 = require_match_agent();
|
|
107
|
+
var fetch_1 = require_fetch();
|
|
108
|
+
var isomorphic_ws_1 = __importDefault((init_browser(), __toCommonJS(browser_exports)));
|
|
109
|
+
var utils_1 = require_dist2();
|
|
110
|
+
async function ensurePieceDownloaded({ version, engine, pieceType, piece }, matchAgentAuth, matchAgentUrl = match_agent_1.ROSTERLOCK_MATCH_AGENT_URL) {
|
|
111
|
+
if (version !== 1)
|
|
112
|
+
throw new Error(`Unsupported Version ${version}`);
|
|
113
|
+
const url = new URL("/v1/piece", matchAgentUrl);
|
|
114
|
+
const response = await (0, fetch_1.runFetch)(matchAgentAuth, url, {
|
|
115
|
+
method: "PUT",
|
|
116
|
+
body: {
|
|
117
|
+
engine,
|
|
118
|
+
pieceType,
|
|
119
|
+
piece
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
return await response.json();
|
|
123
|
+
}
|
|
124
|
+
async function ensurePieceDownloadedOverWebSocket({ version, engine, pieceType, piece }, matchAgentAuth, onProgress, matchAgentUrl = match_agent_1.ROSTERLOCK_MATCH_AGENT_URL) {
|
|
125
|
+
if (version !== 1)
|
|
126
|
+
throw new Error(`Unsupported Version ${version}`);
|
|
127
|
+
const url = new URL("/v1/piece/ensure", matchAgentUrl);
|
|
128
|
+
if (!["http:", "https:"].includes(url.protocol)) {
|
|
129
|
+
throw new Error("Expecting The match agent url to be http or https");
|
|
130
|
+
}
|
|
131
|
+
url.protocol = url.protocol === "https:" ? "wss:" : "ws";
|
|
132
|
+
url.searchParams.set("authorization", matchAgentAuth);
|
|
133
|
+
const ws2 = new isomorphic_ws_1.default(url.href);
|
|
134
|
+
const bridge = new utils_1.MessageBridge((message) => ws2.send(JSON.stringify(message)));
|
|
135
|
+
ws2.on("message", (message) => {
|
|
136
|
+
bridge.handleMessage(JSON.parse(message.toString()));
|
|
137
|
+
});
|
|
138
|
+
bridge.onEvent("download-progress", (update) => {
|
|
139
|
+
onProgress == null ? void 0 : onProgress(update);
|
|
140
|
+
});
|
|
141
|
+
try {
|
|
142
|
+
await (0, utils_1.waitForBridgeEvent)(bridge, "ready", 1e4);
|
|
143
|
+
return await bridge.sendRequest("ensure-piece", { engine, pieceType, piece });
|
|
144
|
+
} finally {
|
|
145
|
+
ws2.close();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async function listDownloadedPiecesFromConfig({ version, rosterConfig, pieceType }, pagination, matchAgentAuth, matchAgentUrl = match_agent_1.ROSTERLOCK_MATCH_AGENT_URL) {
|
|
149
|
+
if (version !== 1)
|
|
150
|
+
throw new Error(`Unsupported Version ${version}`);
|
|
151
|
+
const roster = rosterConfig.rosters[pieceType];
|
|
152
|
+
if (!roster)
|
|
153
|
+
throw new Error(`Invalid pieceType, missing roster: ${pieceType}`);
|
|
154
|
+
return listDownloadedPiecesDirect({
|
|
155
|
+
version,
|
|
156
|
+
engineName: rosterConfig.engine.name,
|
|
157
|
+
pieceType,
|
|
158
|
+
logicIds: roster.map((piece) => piece.version.logic)
|
|
159
|
+
}, pagination, matchAgentAuth, matchAgentUrl);
|
|
160
|
+
}
|
|
161
|
+
async function listDownloadedPiecesDirect({ version, engineName, pieceType, logicIds }, { page, limit }, matchAgentAuth, matchAgentUrl = match_agent_1.ROSTERLOCK_MATCH_AGENT_URL) {
|
|
162
|
+
if (version !== 1)
|
|
163
|
+
throw new Error(`Unsupported Version ${version}`);
|
|
164
|
+
const url = new URL(`/v1/piece/list-downloaded/direct`, matchAgentUrl);
|
|
165
|
+
url.searchParams.set("page", page.toString());
|
|
166
|
+
url.searchParams.set("limit", limit.toString());
|
|
167
|
+
const response = await (0, fetch_1.runFetch)(matchAgentAuth, url, {
|
|
168
|
+
method: "QUERY",
|
|
169
|
+
body: {
|
|
170
|
+
engineName,
|
|
171
|
+
pieceType,
|
|
172
|
+
logicIds
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
return await response.json();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// ../../client/typescript/dist/v1/sync-dl.ws.js
|
|
181
|
+
var require_sync_dl_ws = __commonJS({
|
|
182
|
+
"../../client/typescript/dist/v1/sync-dl.ws.js"(exports) {
|
|
183
|
+
"use strict";
|
|
184
|
+
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
185
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
186
|
+
};
|
|
187
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
188
|
+
exports.syncDownloadOverWebSocket = syncDownloadOverWebSocket;
|
|
189
|
+
var isomorphic_ws_1 = __importDefault((init_browser(), __toCommonJS(browser_exports)));
|
|
190
|
+
var utils_1 = require_dist2();
|
|
191
|
+
var match_agent_1 = require_match_agent();
|
|
192
|
+
async function syncDownloadOverWebSocket({ version, relay, machine, rosterConfig, playerSelections }, matchAgentAuth, progressListeners = {}, matchAgentUrl = match_agent_1.ROSTERLOCK_MATCH_AGENT_URL) {
|
|
193
|
+
if (version !== 1)
|
|
194
|
+
throw new Error(`Unsupported Version ${version}`);
|
|
195
|
+
const syncDLURL = new URL("/v1/sync-dl", matchAgentUrl);
|
|
196
|
+
if (!["http:", "https:"].includes(syncDLURL.protocol)) {
|
|
197
|
+
throw new Error("Expecting The match agent url to be http or https");
|
|
198
|
+
}
|
|
199
|
+
syncDLURL.protocol = syncDLURL.protocol === "https:" ? "wss:" : "ws";
|
|
200
|
+
syncDLURL.searchParams.set("authorization", matchAgentAuth);
|
|
201
|
+
const timestamp = Date.now();
|
|
202
|
+
const signature = await utils_1.SIGNATURE.ASYMMETRIC.createSignature(machine.keys.privateKey, {
|
|
203
|
+
service: "room-ws",
|
|
204
|
+
roomId: relay.roomId,
|
|
205
|
+
publicKey: machine.keys.publicKey,
|
|
206
|
+
timestamp
|
|
207
|
+
});
|
|
208
|
+
const ws2 = new isomorphic_ws_1.default(syncDLURL.href);
|
|
209
|
+
const bridge = new utils_1.MessageBridge((message) => ws2.send(JSON.stringify(message)));
|
|
210
|
+
ws2.addEventListener("message", (event) => {
|
|
211
|
+
bridge.handleMessage(JSON.parse(event.data.toString()));
|
|
212
|
+
});
|
|
213
|
+
bridge.onEvent("room-state", (state) => {
|
|
214
|
+
var _a;
|
|
215
|
+
(_a = progressListeners.onState) == null ? void 0 : _a.call(progressListeners, state);
|
|
216
|
+
});
|
|
217
|
+
bridge.onEvent("download-progress", (update) => {
|
|
218
|
+
var _a;
|
|
219
|
+
(_a = progressListeners.onDownloadProgress) == null ? void 0 : _a.call(progressListeners, update);
|
|
220
|
+
});
|
|
221
|
+
try {
|
|
222
|
+
await (0, utils_1.waitForBridgeEvent)(bridge, "ready", 1e4);
|
|
223
|
+
return await bridge.sendRequest("connect-to-relay", {
|
|
224
|
+
relay,
|
|
225
|
+
machine: { timestamp, publicKey: machine.keys.publicKey, signature },
|
|
226
|
+
rosterConfig,
|
|
227
|
+
playerSelections
|
|
228
|
+
});
|
|
229
|
+
} finally {
|
|
230
|
+
ws2.close();
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
// ../../client/typescript/dist/v1/sync-dl.http.js
|
|
237
|
+
var require_sync_dl_http = __commonJS({
|
|
238
|
+
"../../client/typescript/dist/v1/sync-dl.http.js"(exports) {
|
|
239
|
+
"use strict";
|
|
240
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
241
|
+
exports.syncDownloadOverHTTP = syncDownloadOverHTTP;
|
|
242
|
+
var utils_1 = require_dist2();
|
|
243
|
+
var fetch_1 = require_fetch();
|
|
244
|
+
var match_agent_1 = require_match_agent();
|
|
245
|
+
async function syncDownloadOverHTTP({ version, relay, machine, rosterConfig, playerSelections }, matchAgentAuth, matchAgentUrl = match_agent_1.ROSTERLOCK_MATCH_AGENT_URL) {
|
|
246
|
+
if (version !== 1)
|
|
247
|
+
throw new Error(`Unsupported Version ${version}`);
|
|
248
|
+
const syncDLURL = new URL("/v1/sync-dl", matchAgentUrl);
|
|
249
|
+
const timestamp = Date.now();
|
|
250
|
+
const signature = await utils_1.SIGNATURE.ASYMMETRIC.createSignature(machine.keys.privateKey, {
|
|
251
|
+
service: "room-ws",
|
|
252
|
+
roomId: relay.roomId,
|
|
253
|
+
publicKey: machine.keys.publicKey,
|
|
254
|
+
timestamp
|
|
255
|
+
});
|
|
256
|
+
const response = await (0, fetch_1.runFetch)(matchAgentAuth, syncDLURL.href, {
|
|
257
|
+
method: "POST",
|
|
258
|
+
body: {
|
|
259
|
+
relay,
|
|
260
|
+
machine: { timestamp, publicKey: machine.keys.publicKey, signature },
|
|
261
|
+
rosterConfig,
|
|
262
|
+
playerSelections
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
return await response.json();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
// ../../client/typescript/dist/v1/get-users.js
|
|
271
|
+
var require_get_users = __commonJS({
|
|
272
|
+
"../../client/typescript/dist/v1/get-users.js"(exports) {
|
|
273
|
+
"use strict";
|
|
274
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
275
|
+
exports.getMachines = getMachines;
|
|
276
|
+
var utils_1 = require_dist2();
|
|
277
|
+
async function getMachines({ machine, relay }) {
|
|
278
|
+
const timestamp = Date.now();
|
|
279
|
+
const signature = await utils_1.SIGNATURE.ASYMMETRIC.createSignature(machine.keys.privateKey, {
|
|
280
|
+
service: "room-ws",
|
|
281
|
+
roomId: relay.roomId,
|
|
282
|
+
publicKey: machine.keys.publicKey,
|
|
283
|
+
timestamp
|
|
284
|
+
});
|
|
285
|
+
return await getRoomMachines(relay.url, {
|
|
286
|
+
room: relay.roomId,
|
|
287
|
+
timestamp,
|
|
288
|
+
publicKey: machine.keys.publicKey,
|
|
289
|
+
signature
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
async function getRoomMachines(url, params) {
|
|
293
|
+
const roomURL = new URL(`/api/v1/room/${params.room}/machines`, url);
|
|
294
|
+
roomURL.searchParams.set("room", params.room);
|
|
295
|
+
roomURL.searchParams.set("t", params.timestamp.toString());
|
|
296
|
+
roomURL.searchParams.set("pk", params.publicKey);
|
|
297
|
+
roomURL.searchParams.set("sig", params.signature);
|
|
298
|
+
const response = await fetch(roomURL);
|
|
299
|
+
if (!response.ok)
|
|
300
|
+
throw new Error("Failed to get room machines");
|
|
301
|
+
return await response.json();
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
// ../../client/typescript/dist/v1/file-routes.js
|
|
307
|
+
var require_file_routes = __commonJS({
|
|
308
|
+
"../../client/typescript/dist/v1/file-routes.js"(exports) {
|
|
309
|
+
"use strict";
|
|
310
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
311
|
+
exports.getPiece = getPiece;
|
|
312
|
+
exports.getPieceAssetFiles = getPieceAssetFiles;
|
|
313
|
+
exports.getPieceFileContents = getPieceFileContents;
|
|
314
|
+
var match_agent_1 = require_match_agent();
|
|
315
|
+
var fetch_1 = require_fetch();
|
|
316
|
+
function getPiece(lock, pieceType, pieceId) {
|
|
317
|
+
const roster = lock.rosters[pieceType];
|
|
318
|
+
if (!roster)
|
|
319
|
+
throw new Error(`Missing roster ${pieceType}`);
|
|
320
|
+
const piece = roster.find(({ id }) => id === pieceId);
|
|
321
|
+
if (!piece)
|
|
322
|
+
throw new Error(`Missing piece ${pieceId}`);
|
|
323
|
+
return piece;
|
|
324
|
+
}
|
|
325
|
+
async function getPieceAssetFiles({ version, engine, pieceType, piece, assetName }, matchAgentAuth, matchAgentUrl = match_agent_1.ROSTERLOCK_MATCH_AGENT_URL) {
|
|
326
|
+
if (version !== 1)
|
|
327
|
+
throw new Error(`Unsupported Version ${version}`);
|
|
328
|
+
const url = new URL("/v1/piece/asset-files", matchAgentUrl);
|
|
329
|
+
const response = await (0, fetch_1.runFetch)(matchAgentAuth, url, {
|
|
330
|
+
method: "POST",
|
|
331
|
+
body: {
|
|
332
|
+
engine,
|
|
333
|
+
pieceType,
|
|
334
|
+
piece,
|
|
335
|
+
assetName
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
return await response.json();
|
|
339
|
+
}
|
|
340
|
+
async function getPieceFileContents({ version, engine, pieceType, piece, filePath }, matchAgentAuth, matchAgentUrl = match_agent_1.ROSTERLOCK_MATCH_AGENT_URL) {
|
|
341
|
+
if (version !== 1)
|
|
342
|
+
throw new Error(`Unsupported Version ${version}`);
|
|
343
|
+
const url = new URL("/v1/piece/file-contents", matchAgentUrl);
|
|
344
|
+
return (0, fetch_1.runFetch)(matchAgentAuth, url.href, {
|
|
345
|
+
method: "POST",
|
|
346
|
+
body: {
|
|
347
|
+
engine,
|
|
348
|
+
pieceType,
|
|
349
|
+
piece,
|
|
350
|
+
filePath
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
// ../../client/typescript/dist/utils/keys.js
|
|
358
|
+
var require_keys = __commonJS({
|
|
359
|
+
"../../client/typescript/dist/utils/keys.js"(exports) {
|
|
360
|
+
"use strict";
|
|
361
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
362
|
+
exports.generateKeyPair = generateKeyPair;
|
|
363
|
+
var utils_1 = require_dist2();
|
|
364
|
+
async function generateKeyPair() {
|
|
365
|
+
const { privateSigningKey, publicVerificationKey } = await utils_1.SIGNATURE.ASYMMETRIC.generateKeyPair();
|
|
366
|
+
return { privateKey: privateSigningKey, publicKey: publicVerificationKey };
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
// ../../client/typescript/dist/index.js
|
|
372
|
+
var require_dist3 = __commonJS({
|
|
373
|
+
"../../client/typescript/dist/index.js"(exports) {
|
|
374
|
+
var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
|
|
375
|
+
if (k2 === void 0) k2 = k;
|
|
376
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
377
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
378
|
+
desc = { enumerable: true, get: function() {
|
|
379
|
+
return m[k];
|
|
380
|
+
} };
|
|
381
|
+
}
|
|
382
|
+
Object.defineProperty(o, k2, desc);
|
|
383
|
+
}) : (function(o, m, k, k2) {
|
|
384
|
+
if (k2 === void 0) k2 = k;
|
|
385
|
+
o[k2] = m[k];
|
|
386
|
+
}));
|
|
387
|
+
var __exportStar = exports && exports.__exportStar || function(m, exports2) {
|
|
388
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p);
|
|
389
|
+
};
|
|
390
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
391
|
+
exports.HTTPError = void 0;
|
|
392
|
+
exports.validateAuthCode = validateAuthCode;
|
|
393
|
+
var match_agent_1 = require_match_agent();
|
|
394
|
+
__exportStar(require_dist(), exports);
|
|
395
|
+
__exportStar(require_select(), exports);
|
|
396
|
+
__exportStar(require_sync_dl_ws(), exports);
|
|
397
|
+
__exportStar(require_sync_dl_http(), exports);
|
|
398
|
+
__exportStar(require_get_users(), exports);
|
|
399
|
+
__exportStar(require_file_routes(), exports);
|
|
400
|
+
__exportStar(require_keys(), exports);
|
|
401
|
+
var fetch_1 = require_fetch();
|
|
402
|
+
Object.defineProperty(exports, "HTTPError", { enumerable: true, get: function() {
|
|
403
|
+
return fetch_1.HTTPError;
|
|
404
|
+
} });
|
|
405
|
+
async function validateAuthCode(matchAgentAuth, matchAgentUrl = match_agent_1.ROSTERLOCK_MATCH_AGENT_URL) {
|
|
406
|
+
const url = new URL("/validate-authcode", matchAgentUrl);
|
|
407
|
+
if (!["http:", "https:"].includes(url.protocol)) {
|
|
408
|
+
throw new Error("Expecting The match agent url to be http or https");
|
|
409
|
+
}
|
|
410
|
+
const response = await fetch(url, {
|
|
411
|
+
method: "POST",
|
|
412
|
+
body: JSON.stringify({ authCode: matchAgentAuth })
|
|
413
|
+
});
|
|
414
|
+
return response.json();
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
export default require_dist3();
|
|
419
|
+
//# sourceMappingURL=@roster-lock_ts-client.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../client/typescript/src/constants/match-agent.ts", "../../../../../../client/typescript/src/utils/fetch.ts", "../../../../../../node_modules/.pnpm/isomorphic-ws@5.0.0_ws@8.21.3_bufferutil@4.1.0_utf-8-validate@6.0.6_/node_modules/isomorphic-ws/browser.js", "../../../../../../client/typescript/src/v1/select.ts", "../../../../../../client/typescript/src/v1/sync-dl.ws.ts", "../../../../../../client/typescript/src/v1/sync-dl.http.ts", "../../../../../../client/typescript/src/v1/get-users.ts", "../../../../../../client/typescript/src/v1/file-routes.ts", "../../../../../../client/typescript/src/utils/keys.ts", "../../../../../../client/typescript/src/index.ts"],
|
|
4
|
+
"sourcesContent": ["\nexport const ROSTERLOCK_MATCH_AGENT_URL = new URL(\"http://localhost:58732\");\n", "import { JSON_Unknown } from \"@roster-lock/utils\";\n\n\nexport class HTTPError extends Error {\n constructor(\n public url: URL,\n public method: string,\n public response: Response,\n public body: any,\n message: string = `HTTP Error: ${response.status}`\n ){\n super(message);\n }\n}\n\nexport async function runFetch(\n auth: string | undefined,\n url: string | URL,\n reqInit?: {\n method: string,\n headers?: Record<string, string>,\n body: JSON_Unknown | FormData | ReadableStream\n }\n){\n url = new URL(url);\n if(![\"http:\", \"https:\"].includes(url.protocol)){\n throw new Error(\"Expecting protocol to be http or https\");\n }\n\n const { body, headers } = (reqInit || { method: \"GET\" })\n const isJSONBody = (\n typeof body === \"undefined\" ? false :\n body instanceof FormData ? false :\n body instanceof ReadableStream ? false :\n true\n )\n\n const response = await fetch(url, {\n method: reqInit?.method || \"GET\",\n headers: {\n ...(!isJSONBody ? {} : { \"Content-Type\" : \"application/json\" }),\n ...(typeof auth === \"undefined\" ? {} : { \"Authorization\": \"Bearer \" + auth }),\n ...headers,\n },\n body: !isJSONBody ? body as FormData | ReadableStream : JSON.stringify(body)\n });\n\n if(!response.ok){\n throw new HTTPError(\n url, reqInit?.method || \"GET\", response, await response.json()\n );\n }\n\n return response;\n}\n", "// https://github.com/maxogden/websocket-stream/blob/48dc3ddf943e5ada668c31ccd94e9186f02fafbd/ws-fallback.js\n\nvar ws = null\n\nif (typeof WebSocket !== 'undefined') {\n ws = WebSocket\n} else if (typeof MozWebSocket !== 'undefined') {\n ws = MozWebSocket\n} else if (typeof global !== 'undefined') {\n ws = global.WebSocket || global.MozWebSocket\n} else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket\n} else if (typeof self !== 'undefined') {\n ws = self.WebSocket || self.MozWebSocket\n}\n\nexport default ws\n", "import { DownloadResult, RosterLockPiece, RosterLockV1Config, RosterLockDownloadUpdate } from \"@roster-lock/types\";\nimport { ROSTERLOCK_MATCH_AGENT_URL } from \"../constants/match-agent\";\nimport { runFetch } from \"../utils/fetch\";\nimport WebSocket from \"isomorphic-ws\";\nimport { MessageBridge, waitForBridgeEvent } from \"@roster-lock/utils\";\n\ntype GetPieceInfo = {\n version: 1,\n engine: RosterLockV1Config[\"engine\"]\n pieceType: string\n piece: RosterLockPiece\n}\n\nexport async function ensurePieceDownloaded(\n {\n version,\n engine,\n pieceType,\n piece,\n }: GetPieceInfo,\n matchAgentAuth: string,\n matchAgentUrl: string | URL = ROSTERLOCK_MATCH_AGENT_URL,\n){\n if(version !== 1) throw new Error(`Unsupported Version ${version}`);\n const url = new URL(\"/v1/piece\", matchAgentUrl);\n const response = await runFetch(matchAgentAuth, url, {\n method: \"PUT\",\n body: {\n engine, pieceType, piece\n }\n })\n \n return await response.json() as DownloadResult;\n}\n\nexport async function ensurePieceDownloadedOverWebSocket(\n {\n version,\n engine,\n pieceType,\n piece,\n }: GetPieceInfo,\n matchAgentAuth: string,\n onProgress?: (update: RosterLockDownloadUpdate) => void,\n matchAgentUrl: string | URL = ROSTERLOCK_MATCH_AGENT_URL,\n){\n if(version !== 1) throw new Error(`Unsupported Version ${version}`);\n const url = new URL(\"/v1/piece/ensure\", matchAgentUrl);\n if(![\"http:\", \"https:\"].includes(url.protocol)){\n throw new Error(\"Expecting The match agent url to be http or https\");\n }\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws\";\n url.searchParams.set(\"authorization\", matchAgentAuth);\n\n const ws = new WebSocket(url.href);\n const bridge = new MessageBridge((message)=>ws.send(JSON.stringify(message)));\n ws.on(\"message\", (message)=>{\n bridge.handleMessage(JSON.parse(message.toString()));\n });\n\n bridge.onEvent(\"download-progress\", (update)=>{\n onProgress?.(update);\n });\n\n try {\n await waitForBridgeEvent(bridge, \"ready\", 10_000);\n\n return await bridge.sendRequest(\n \"ensure-piece\", { engine, pieceType, piece }\n ) as DownloadResult;\n\n }finally{\n ws.close();\n }\n}\n\ntype ListPiecesConfig = {\n version: 1,\n rosterConfig: RosterLockV1Config,\n pieceType: string,\n}\n\nexport async function listDownloadedPiecesFromConfig(\n {\n version, rosterConfig, pieceType\n }: ListPiecesConfig,\n pagination: { page: number, limit: number },\n matchAgentAuth: string,\n matchAgentUrl: string | URL = ROSTERLOCK_MATCH_AGENT_URL,\n){\n if(version !== 1) throw new Error(`Unsupported Version ${version}`);\n const roster = rosterConfig.rosters[pieceType];\n if(!roster) throw new Error(`Invalid pieceType, missing roster: ${pieceType}`);\n\n return listDownloadedPiecesDirect(\n {\n version,\n engineName: rosterConfig.engine.name,\n pieceType,\n logicIds: roster.map((piece)=>(piece.version.logic)),\n },\n pagination,\n matchAgentAuth,\n matchAgentUrl,\n );\n}\n\ntype ListPiecesDirect = {\n version: 1,\n engineName: string,\n pieceType: string,\n logicIds: Array<string>\n}\n\nexport async function listDownloadedPiecesDirect(\n {\n version, engineName, pieceType, logicIds\n }: ListPiecesDirect,\n { page, limit }: { page: number, limit: number },\n matchAgentAuth: string,\n matchAgentUrl: string | URL = ROSTERLOCK_MATCH_AGENT_URL,\n){\n if(version !== 1) throw new Error(`Unsupported Version ${version}`);\n const url = new URL(`/v1/piece/list-downloaded/direct`, matchAgentUrl);\n url.searchParams.set(\"page\", page.toString());\n url.searchParams.set(\"limit\", limit.toString());\n\n const response = await runFetch(matchAgentAuth, url, {\n method: \"QUERY\",\n body: {\n engineName, pieceType, logicIds\n }\n })\n \n return await response.json() as Array<Pick<RosterLockPiece, \"version\" | \"pathVariables\">>;\n}\n", "\nimport {\n RosterLockV1SyncDLRequestUserToClient,\n RosterLockV1SyncDLRequestClientToAgent,\n RosterLockV1SyncDLResult,\n RosterLockDownloadUpdate,\n} from \"@roster-lock/types\";\nimport WebSocket from \"isomorphic-ws\";\nimport { MessageBridge, SIGNATURE, waitForBridgeEvent } from \"@roster-lock/utils\";\n\ntype PrivateKey = Parameters<typeof SIGNATURE.ASYMMETRIC.createSignature>[0];\n\nimport { ROSTERLOCK_MATCH_AGENT_URL } from \"../constants/match-agent\";\n\ntype ProgressListeners = Partial<{\n onState: (state: string)=>void,\n onDownloadProgress: (update: RosterLockDownloadUpdate)=>void,\n}>\n\nexport async function syncDownloadOverWebSocket(\n {\n version,\n relay,\n machine,\n rosterConfig,\n playerSelections,\n }: RosterLockV1SyncDLRequestUserToClient,\n matchAgentAuth: string,\n progressListeners: ProgressListeners = {},\n matchAgentUrl: string | URL = ROSTERLOCK_MATCH_AGENT_URL,\n): Promise<RosterLockV1SyncDLResult>{\n if(version !== 1) throw new Error(`Unsupported Version ${version}`);\n const syncDLURL = new URL(\"/v1/sync-dl\", matchAgentUrl);\n if(![\"http:\", \"https:\"].includes(syncDLURL.protocol)){\n throw new Error(\"Expecting The match agent url to be http or https\");\n }\n syncDLURL.protocol = syncDLURL.protocol === \"https:\" ? \"wss:\" : \"ws\";\n syncDLURL.searchParams.set(\"authorization\", matchAgentAuth);\n const timestamp = Date.now();\n const signature = await SIGNATURE.ASYMMETRIC.createSignature(\n machine.keys.privateKey as PrivateKey,\n {\n service: 'room-ws',\n roomId: relay.roomId,\n publicKey: machine.keys.publicKey,\n timestamp: timestamp,\n }\n );\n\n const ws = new WebSocket(syncDLURL.href);\n const bridge = new MessageBridge((message)=>ws.send(JSON.stringify(message)));\n ws.addEventListener(\"message\", (event)=>{\n bridge.handleMessage(JSON.parse(event.data.toString()));\n });\n\n bridge.onEvent(\"room-state\", (state)=>{\n progressListeners.onState?.(state);\n });\n bridge.onEvent(\"download-progress\", (update)=>{\n progressListeners.onDownloadProgress?.(update);\n });\n\n try {\n await waitForBridgeEvent(bridge, \"ready\", 10_000);\n\n return await bridge.sendRequest(\n \"connect-to-relay\", {\n relay: relay,\n machine: { timestamp, publicKey: machine.keys.publicKey, signature },\n rosterConfig,\n playerSelections,\n } satisfies RosterLockV1SyncDLRequestClientToAgent\n ) as RosterLockV1SyncDLResult;\n\n }finally{\n ws.close();\n }\n}\n", "\nimport {\n RosterLockV1SyncDLRequestUserToClient,\n RosterLockV1SyncDLRequestClientToAgent,\n RosterLockV1SyncDLResult,\n} from \"@roster-lock/types\";\nimport { SIGNATURE } from \"@roster-lock/utils\";\nimport { runFetch } from \"../utils/fetch\";\n\nimport { ROSTERLOCK_MATCH_AGENT_URL } from \"../constants/match-agent\";\n\ntype PrivateKey = Parameters<typeof SIGNATURE.ASYMMETRIC.createSignature>[0];\n\nexport async function syncDownloadOverHTTP(\n {\n version,\n relay,\n machine,\n rosterConfig,\n playerSelections,\n }: RosterLockV1SyncDLRequestUserToClient,\n matchAgentAuth: string,\n matchAgentUrl: string | URL = ROSTERLOCK_MATCH_AGENT_URL,\n): Promise<RosterLockV1SyncDLResult>{\n if(version !== 1) throw new Error(`Unsupported Version ${version}`);\n const syncDLURL = new URL(\"/v1/sync-dl\", matchAgentUrl);\n const timestamp = Date.now();\n const signature = await SIGNATURE.ASYMMETRIC.createSignature(\n machine.keys.privateKey as PrivateKey,\n {\n service: 'room-ws',\n roomId: relay.roomId,\n publicKey: machine.keys.publicKey,\n timestamp: timestamp,\n }\n );\n\n\n const response = await runFetch(matchAgentAuth, syncDLURL.href, {\n method: \"POST\",\n body: {\n relay: relay,\n machine: { timestamp, publicKey: machine.keys.publicKey, signature },\n rosterConfig,\n playerSelections,\n } satisfies RosterLockV1SyncDLRequestClientToAgent\n });\n\n return await response.json() as RosterLockV1SyncDLResult;\n}\n\n\n", "\nimport { RosterLockV1SyncDLRequestUserToClient } from \"@roster-lock/types\";\nimport { SIGNATURE } from \"@roster-lock/utils\";\n\ntype PrivateKey = Parameters<typeof SIGNATURE.ASYMMETRIC.createSignature>[0];\n\n\ntype Machine = {\n machineId: string;\n publicKey: string;\n displayName: string;\n playerCount: number;\n connected: boolean;\n connectedAt?: string\n}\n\nexport async function getMachines(\n {\n machine, relay,\n }: Pick<RosterLockV1SyncDLRequestUserToClient, \"machine\" | \"relay\">\n){\n const timestamp = Date.now();\n const signature = await SIGNATURE.ASYMMETRIC.createSignature(\n machine.keys.privateKey as PrivateKey,\n {\n service: 'room-ws',\n roomId: relay.roomId,\n publicKey: machine.keys.publicKey,\n timestamp: timestamp,\n }\n );\n return await getRoomMachines(relay.url, {\n room: relay.roomId,\n timestamp,\n publicKey: machine.keys.publicKey,\n signature,\n });\n}\n\n\ntype ReqParams = {\n room: string,\n timestamp: number,\n publicKey: string,\n signature: string,\n}\nasync function getRoomMachines(url: string, params: ReqParams){\n const roomURL = new URL(`/api/v1/room/${params.room}/machines`, url);\n roomURL.searchParams.set(\"room\", params.room);\n roomURL.searchParams.set(\"t\", params.timestamp.toString());\n roomURL.searchParams.set(\"pk\", params.publicKey);\n roomURL.searchParams.set(\"sig\", params.signature);\n\n const response = await fetch(roomURL);\n if(!response.ok) throw new Error(\"Failed to get room machines\");\n return await response.json() as Array<Machine>;\n}\n", "\nimport { RosterLockPiece, RosterLockV1Config } from \"@roster-lock/types\";\nimport { ROSTERLOCK_MATCH_AGENT_URL } from \"../constants/match-agent\";\nimport { runFetch } from \"../utils/fetch\";\n\ntype GetPieceInfo = {\n version: 1,\n engine: RosterLockV1Config[\"engine\"]\n pieceType: string\n // These two routes only resolve a piece's on-disk folder (by content hash +\n // pathVariables) - they never need humanInfo/downloadSources/requiredPieces,\n // so callers don't have to carry a full RosterLockPiece around just to read a file.\n piece: Pick<RosterLockPiece, \"version\" | \"pathVariables\">\n}\n\nexport function getPiece(\n lock: RosterLockV1Config, pieceType: string, pieceId: string\n): RosterLockPiece{\n const roster = lock.rosters[pieceType];\n if(!roster) throw new Error(`Missing roster ${pieceType}`);\n const piece = roster.find(({ id })=>(id === pieceId));\n if(!piece) throw new Error(`Missing piece ${pieceId}`);\n return piece\n}\n\nexport async function getPieceAssetFiles(\n {\n version,\n engine,\n pieceType,\n piece,\n assetName,\n }: ( GetPieceInfo & { assetName: string }),\n matchAgentAuth: string,\n matchAgentUrl: string | URL = ROSTERLOCK_MATCH_AGENT_URL,\n){\n if(version !== 1) throw new Error(`Unsupported Version ${version}`);\n const url = new URL(\"/v1/piece/asset-files\", matchAgentUrl);\n const response = await runFetch(matchAgentAuth, url, {\n method: \"POST\",\n body: {\n engine, pieceType, piece, assetName\n }\n });\n\n return await response.json() as Array<string>;\n}\n\n\n\n// Returns the full Response (not just .body) so callers can read it however\n// they need (.text(), .json(), .blob()) while keeping the Content-Type\n// header match-agent set for the file - reading only the raw byte stream\n// and re-wrapping it in `new Response(stream)` loses that header, which\n// silently breaks anything relying on a Blob's .type (e.g. an <img src>\n// pointed at the resulting object URL).\nexport async function getPieceFileContents(\n {\n version,\n engine,\n pieceType,\n piece,\n filePath,\n }: ( GetPieceInfo & { filePath: string }),\n matchAgentAuth: string,\n matchAgentUrl: string | URL = ROSTERLOCK_MATCH_AGENT_URL,\n){\n if(version !== 1) throw new Error(`Unsupported Version ${version}`);\n const url = new URL(\"/v1/piece/file-contents\", matchAgentUrl);\n return runFetch(matchAgentAuth, url.href, {\n method: \"POST\",\n body: {\n engine, pieceType, piece, filePath\n }\n });\n}\n", "import { SIGNATURE } from \"@roster-lock/utils\";\n\nexport type UserKeyPair = {\n publicKey: string,\n privateKey: string,\n};\n\nexport async function generateKeyPair(): Promise<UserKeyPair> {\n const { privateSigningKey, publicVerificationKey } = await SIGNATURE.ASYMMETRIC.generateKeyPair();\n return { privateKey: privateSigningKey, publicKey: publicVerificationKey };\n}\n", "import { ROSTERLOCK_MATCH_AGENT_URL } from \"./constants/match-agent\";\n\nexport * from \"@roster-lock/types\";\n\n\nexport * from \"./v1/select\";\nexport * from \"./v1/sync-dl.ws\";\nexport * from \"./v1/sync-dl.http\";\nexport * from \"./v1/get-users\";\nexport * from \"./v1/file-routes\";\nexport * from \"./utils/keys\";\nexport { HTTPError } from \"./utils/fetch\";\n\nexport async function validateAuthCode(\n matchAgentAuth: string,\n matchAgentUrl: string | URL = ROSTERLOCK_MATCH_AGENT_URL,\n){\n const url = new URL(\"/validate-authcode\", matchAgentUrl);\n if(![\"http:\", \"https:\"].includes(url.protocol)){\n throw new Error(\"Expecting The match agent url to be http or https\");\n }\n\n const response = await fetch(url, {\n method: \"POST\",\n body: JSON.stringify({ authCode: matchAgentAuth })\n });\n\n return response.json();\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ws", "ws"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hash": "08a7f4e1",
|
|
3
|
+
"configHash": "e88d872d",
|
|
4
|
+
"lockfileHash": "025ce3b0",
|
|
5
|
+
"browserHash": "d7956408",
|
|
6
|
+
"optimized": {
|
|
7
|
+
"@roster-lock/ts-client": {
|
|
8
|
+
"src": "../../../../../../client/typescript/dist/index.js",
|
|
9
|
+
"file": "@roster-lock_ts-client.js",
|
|
10
|
+
"fileHash": "1fa3417a",
|
|
11
|
+
"needsInterop": true
|
|
12
|
+
},
|
|
13
|
+
"@roster-lock/types": {
|
|
14
|
+
"src": "../../../../../types/dist/index.js",
|
|
15
|
+
"file": "@roster-lock_types.js",
|
|
16
|
+
"fileHash": "7ee72bfe",
|
|
17
|
+
"needsInterop": true
|
|
18
|
+
},
|
|
19
|
+
"@roster-lock/utils": {
|
|
20
|
+
"src": "../../../../../utils/dist/index.js",
|
|
21
|
+
"file": "@roster-lock_utils.js",
|
|
22
|
+
"fileHash": "4a0b7ece",
|
|
23
|
+
"needsInterop": true
|
|
24
|
+
},
|
|
25
|
+
"react": {
|
|
26
|
+
"src": "../../../../../../node_modules/.pnpm/react@19.2.7/node_modules/react/index.js",
|
|
27
|
+
"file": "react.js",
|
|
28
|
+
"fileHash": "90bf0268",
|
|
29
|
+
"needsInterop": true
|
|
30
|
+
},
|
|
31
|
+
"react-dom": {
|
|
32
|
+
"src": "../../../../../../node_modules/.pnpm/react-dom@19.2.7_react@19.2.7/node_modules/react-dom/index.js",
|
|
33
|
+
"file": "react-dom.js",
|
|
34
|
+
"fileHash": "8c5321ec",
|
|
35
|
+
"needsInterop": true
|
|
36
|
+
},
|
|
37
|
+
"react/jsx-dev-runtime": {
|
|
38
|
+
"src": "../../../../../../node_modules/.pnpm/react@19.2.7/node_modules/react/jsx-dev-runtime.js",
|
|
39
|
+
"file": "react_jsx-dev-runtime.js",
|
|
40
|
+
"fileHash": "2cdc5b26",
|
|
41
|
+
"needsInterop": true
|
|
42
|
+
},
|
|
43
|
+
"react/jsx-runtime": {
|
|
44
|
+
"src": "../../../../../../node_modules/.pnpm/react@19.2.7/node_modules/react/jsx-runtime.js",
|
|
45
|
+
"file": "react_jsx-runtime.js",
|
|
46
|
+
"fileHash": "72a326f8",
|
|
47
|
+
"needsInterop": true
|
|
48
|
+
},
|
|
49
|
+
"@rjsf/core": {
|
|
50
|
+
"src": "../../../../../../node_modules/.pnpm/@rjsf+core@6.8.0_@rjsf+utils@6.8.0_react@19.2.7__react@19.2.7_vue@3.5.40_typescript@7.0.2_/node_modules/@rjsf/core/lib/index.js",
|
|
51
|
+
"file": "@rjsf_core.js",
|
|
52
|
+
"fileHash": "029fe7e3",
|
|
53
|
+
"needsInterop": false
|
|
54
|
+
},
|
|
55
|
+
"@rjsf/validator-ajv8": {
|
|
56
|
+
"src": "../../../../../../node_modules/.pnpm/@rjsf+validator-ajv8@6.8.0_@rjsf+utils@6.8.0_react@19.2.7_/node_modules/@rjsf/validator-ajv8/lib/index.js",
|
|
57
|
+
"file": "@rjsf_validator-ajv8.js",
|
|
58
|
+
"fileHash": "6ea123a4",
|
|
59
|
+
"needsInterop": false
|
|
60
|
+
},
|
|
61
|
+
"react-dom/client": {
|
|
62
|
+
"src": "../../../../../../node_modules/.pnpm/react-dom@19.2.7_react@19.2.7/node_modules/react-dom/client.js",
|
|
63
|
+
"file": "react-dom_client.js",
|
|
64
|
+
"fileHash": "3864da38",
|
|
65
|
+
"needsInterop": true
|
|
66
|
+
},
|
|
67
|
+
"react-router-dom": {
|
|
68
|
+
"src": "../../../../../../node_modules/.pnpm/react-router-dom@7.18.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-router-dom/dist/index.mjs",
|
|
69
|
+
"file": "react-router-dom.js",
|
|
70
|
+
"fileHash": "a6578d6b",
|
|
71
|
+
"needsInterop": false
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"chunks": {
|
|
75
|
+
"chunk-NE7PXY4V": {
|
|
76
|
+
"file": "chunk-NE7PXY4V.js"
|
|
77
|
+
},
|
|
78
|
+
"chunk-IIDO6PKU": {
|
|
79
|
+
"file": "chunk-IIDO6PKU.js"
|
|
80
|
+
},
|
|
81
|
+
"chunk-77TXW5ZT": {
|
|
82
|
+
"file": "chunk-77TXW5ZT.js"
|
|
83
|
+
},
|
|
84
|
+
"chunk-4D2L7OBZ": {
|
|
85
|
+
"file": "chunk-4D2L7OBZ.js"
|
|
86
|
+
},
|
|
87
|
+
"chunk-5KLROPUR": {
|
|
88
|
+
"file": "chunk-5KLROPUR.js"
|
|
89
|
+
},
|
|
90
|
+
"chunk-I55GDNGV": {
|
|
91
|
+
"file": "chunk-I55GDNGV.js"
|
|
92
|
+
},
|
|
93
|
+
"chunk-WMTNK64S": {
|
|
94
|
+
"file": "chunk-WMTNK64S.js"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|