@opendatalabs/personal-server-ts-lite 0.0.1-canary.64b5ce8
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/dist/bridge.d.ts +23 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/bridge.js +53 -0
- package/dist/bridge.js.map +1 -0
- package/dist/browser-runtime.d.ts +30 -0
- package/dist/browser-runtime.d.ts.map +1 -0
- package/dist/browser-runtime.js +98 -0
- package/dist/browser-runtime.js.map +1 -0
- package/dist/browser-tls-rustls/browser_tls_rustls.d.ts +49 -0
- package/dist/browser-tls-rustls/browser_tls_rustls.js +401 -0
- package/dist/browser-tls-rustls/browser_tls_rustls_bg.wasm +0 -0
- package/dist/client.d.ts +19 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +181 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/relay-tls.d.ts +19 -0
- package/dist/relay-tls.d.ts.map +1 -0
- package/dist/relay-tls.js +226 -0
- package/dist/relay-tls.js.map +1 -0
- package/dist/relay.d.ts +68 -0
- package/dist/relay.d.ts.map +1 -0
- package/dist/relay.js +361 -0
- package/dist/relay.js.map +1 -0
- package/dist/runtime.d.ts +79 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +465 -0
- package/dist/runtime.js.map +1 -0
- package/dist/state.d.ts +58 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +281 -0
- package/dist/state.js.map +1 -0
- package/dist/storage-utils.d.ts +7 -0
- package/dist/storage-utils.d.ts.map +1 -0
- package/dist/storage-utils.js +66 -0
- package/dist/storage-utils.js.map +1 -0
- package/dist/storage.d.ts +37 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +282 -0
- package/dist/storage.js.map +1 -0
- package/dist/sync.d.ts +25 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +62 -0
- package/dist/sync.js.map +1 -0
- package/package.json +40 -0
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import { GrantRequiredError, InvalidSignatureError, MissingAuthError, NotOwnerError, ProtocolError, PsUnavailableError, UnregisteredBuilderError, } from "@opendatalabs/personal-server-ts-core/errors";
|
|
2
|
+
import { authenticateRequest, } from "@opendatalabs/personal-server-ts-core/auth";
|
|
3
|
+
import { approveDeviceSessionContract, createMemoryDeviceSessionStore, initiateDeviceSessionContract, pollDeviceSessionContract, provisionDeviceTokenContract, revokeDeviceTokenContract, } from "@opendatalabs/personal-server-ts-core/contracts";
|
|
4
|
+
import { handlePersonalServerAccessLogsRequest, handlePersonalServerConfigRequest, handlePersonalServerDataRequest, handlePersonalServerGrantsRequest, handlePersonalServerOauthTokenRequest, handlePersonalServerSyncRequest, } from "@opendatalabs/personal-server-ts-core/api";
|
|
5
|
+
import { verifyDataReadPolicy, } from "@opendatalabs/personal-server-ts-core/policy";
|
|
6
|
+
import { createIndexedDbPsLiteAccessLogStore, createIndexedDbPsLiteStateStore, createIndexedDbPsLiteTokenStore, savePsLiteConfig, } from "./state.js";
|
|
7
|
+
function jsonResponse(body, init) {
|
|
8
|
+
const headers = new Headers(init?.headers);
|
|
9
|
+
headers.set("Content-Type", "application/json");
|
|
10
|
+
return new Response(JSON.stringify(body), { ...init, headers });
|
|
11
|
+
}
|
|
12
|
+
function protocolErrorResponse(err) {
|
|
13
|
+
return jsonResponse(err.toJSON(), { status: err.code });
|
|
14
|
+
}
|
|
15
|
+
function errorResponse(status, errorCode, message) {
|
|
16
|
+
return jsonResponse({
|
|
17
|
+
error: {
|
|
18
|
+
code: status,
|
|
19
|
+
errorCode,
|
|
20
|
+
message,
|
|
21
|
+
},
|
|
22
|
+
}, { status });
|
|
23
|
+
}
|
|
24
|
+
function unavailableResponse() {
|
|
25
|
+
const err = new PsUnavailableError({
|
|
26
|
+
runtime: "ps-lite",
|
|
27
|
+
reason: "Browser runtime is inactive",
|
|
28
|
+
});
|
|
29
|
+
return protocolErrorResponse(err);
|
|
30
|
+
}
|
|
31
|
+
function parseBearerToken(request) {
|
|
32
|
+
const authorization = request.headers.get("authorization");
|
|
33
|
+
if (!authorization)
|
|
34
|
+
return null;
|
|
35
|
+
const match = /^Bearer\s+(.+)$/i.exec(authorization);
|
|
36
|
+
return match?.[1] ?? null;
|
|
37
|
+
}
|
|
38
|
+
function assertBearerToken(request, expectedToken, ownerOnly = false) {
|
|
39
|
+
const token = parseBearerToken(request);
|
|
40
|
+
if (!token) {
|
|
41
|
+
throw new MissingAuthError();
|
|
42
|
+
}
|
|
43
|
+
if (token !== expectedToken) {
|
|
44
|
+
throw ownerOnly ? new NotOwnerError() : new InvalidSignatureError();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function createMissingAuthAdapter() {
|
|
48
|
+
return {
|
|
49
|
+
async authorizeOwner() {
|
|
50
|
+
throw new MissingAuthError();
|
|
51
|
+
},
|
|
52
|
+
async authorizeBuilderList() {
|
|
53
|
+
throw new MissingAuthError();
|
|
54
|
+
},
|
|
55
|
+
async authorizeBuilderRead() {
|
|
56
|
+
throw new MissingAuthError();
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export function createBearerTokenPsLiteAuth(options) {
|
|
61
|
+
return {
|
|
62
|
+
async authorizeOwner(request) {
|
|
63
|
+
assertBearerToken(request, options.ownerToken, true);
|
|
64
|
+
},
|
|
65
|
+
async authorizeBuilderList(request) {
|
|
66
|
+
assertBearerToken(request, options.builderToken);
|
|
67
|
+
},
|
|
68
|
+
async authorizeBuilderRead(input) {
|
|
69
|
+
assertBearerToken(input.request, options.builderToken);
|
|
70
|
+
if (!input.grantId) {
|
|
71
|
+
throw new GrantRequiredError({
|
|
72
|
+
reason: "No grantId in request",
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return { grantId: input.grantId };
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
async function authenticatePsLiteRequest(request, options) {
|
|
80
|
+
return authenticateRequest({
|
|
81
|
+
request,
|
|
82
|
+
serverOrigin: options.origin,
|
|
83
|
+
serverOwner: options.ownerAddress,
|
|
84
|
+
accessToken: options.accessToken,
|
|
85
|
+
sessionTokenVerifier: options.tokenStore,
|
|
86
|
+
now: options.now,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function isOwnerSigner(auth, ownerAddress) {
|
|
90
|
+
return auth.auth.signer.toLowerCase() === ownerAddress.toLowerCase();
|
|
91
|
+
}
|
|
92
|
+
function dataReadPolicyPortsRequired() {
|
|
93
|
+
return new ProtocolError(500, "SERVER_NOT_CONFIGURED", "Server is not configured", {
|
|
94
|
+
reason: "PS Lite read policy ports are not configured",
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
export function createWeb3SignedPsLiteAuth(options) {
|
|
98
|
+
return {
|
|
99
|
+
async authorizeOwner(request) {
|
|
100
|
+
const auth = await authenticatePsLiteRequest(request, options);
|
|
101
|
+
if (!isOwnerSigner(auth, options.ownerAddress)) {
|
|
102
|
+
throw new NotOwnerError({
|
|
103
|
+
expected: options.ownerAddress,
|
|
104
|
+
actual: auth.auth.signer,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
async authorizeBuilderList(request) {
|
|
109
|
+
const auth = await authenticatePsLiteRequest(request, options);
|
|
110
|
+
if (auth.isPolicyBypass || isOwnerSigner(auth, options.ownerAddress)) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (!options.dataReadPolicyPorts) {
|
|
114
|
+
throw dataReadPolicyPortsRequired();
|
|
115
|
+
}
|
|
116
|
+
const builder = await options.dataReadPolicyPorts.authSessionVerifier.getBuilder(auth.auth.signer);
|
|
117
|
+
if (!builder) {
|
|
118
|
+
throw new UnregisteredBuilderError();
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
async authorizeBuilderRead(input) {
|
|
122
|
+
const auth = await authenticatePsLiteRequest(input.request, options);
|
|
123
|
+
if (auth.isPolicyBypass) {
|
|
124
|
+
return { builder: auth.auth.signer, grantId: "policy-bypass" };
|
|
125
|
+
}
|
|
126
|
+
if (!options.dataReadPolicyPorts) {
|
|
127
|
+
throw dataReadPolicyPortsRequired();
|
|
128
|
+
}
|
|
129
|
+
const grant = await verifyDataReadPolicy({
|
|
130
|
+
signer: auth.auth.signer,
|
|
131
|
+
grantId: auth.auth.payload.grantId ?? input.grantId,
|
|
132
|
+
requestedScope: input.scope,
|
|
133
|
+
fileId: input.fileId,
|
|
134
|
+
}, options.dataReadPolicyPorts);
|
|
135
|
+
return { builder: auth.auth.signer, grantId: grant.id };
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function toDataStoragePort(storage) {
|
|
140
|
+
if ("listScopes" in storage) {
|
|
141
|
+
return storage;
|
|
142
|
+
}
|
|
143
|
+
throw new Error("PS Lite runtime requires a persistent DataStoragePort. Use createIndexedDbPsLiteRuntime() or createPersistentPsLiteStorage().");
|
|
144
|
+
}
|
|
145
|
+
function indexedDbAvailable() {
|
|
146
|
+
return typeof indexedDB !== "undefined";
|
|
147
|
+
}
|
|
148
|
+
function createDefaultAccessLogStore() {
|
|
149
|
+
if (!indexedDbAvailable()) {
|
|
150
|
+
throw new Error("IndexedDB is required for default PS Lite access log persistence.");
|
|
151
|
+
}
|
|
152
|
+
return createIndexedDbPsLiteAccessLogStore();
|
|
153
|
+
}
|
|
154
|
+
function createLogId() {
|
|
155
|
+
return globalThis.crypto?.randomUUID?.() ?? `log-${Date.now()}`;
|
|
156
|
+
}
|
|
157
|
+
function randomHex(byteLength) {
|
|
158
|
+
const bytes = new Uint8Array(byteLength);
|
|
159
|
+
globalThis.crypto.getRandomValues(bytes);
|
|
160
|
+
return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
161
|
+
}
|
|
162
|
+
function createDefaultTokenStore() {
|
|
163
|
+
if (!indexedDbAvailable()) {
|
|
164
|
+
throw new Error("IndexedDB is required for default PS Lite token storage.");
|
|
165
|
+
}
|
|
166
|
+
return createIndexedDbPsLiteTokenStore();
|
|
167
|
+
}
|
|
168
|
+
function createDefaultSaveConfig() {
|
|
169
|
+
if (!indexedDbAvailable()) {
|
|
170
|
+
throw new Error("IndexedDB is required for default PS Lite config persistence.");
|
|
171
|
+
}
|
|
172
|
+
const stateStore = createIndexedDbPsLiteStateStore();
|
|
173
|
+
return async (nextConfig) => {
|
|
174
|
+
await savePsLiteConfig(stateStore, nextConfig);
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function bearerToken(request) {
|
|
178
|
+
const authorization = request.headers.get("authorization");
|
|
179
|
+
if (!authorization?.startsWith("Bearer "))
|
|
180
|
+
return null;
|
|
181
|
+
return authorization.slice(7);
|
|
182
|
+
}
|
|
183
|
+
export function createPsLiteRuntime(options) {
|
|
184
|
+
let active = options.active ?? false;
|
|
185
|
+
const now = options.now ?? (() => new Date());
|
|
186
|
+
const auth = options.auth ?? createMissingAuthAdapter();
|
|
187
|
+
const dataStorage = toDataStoragePort(options.storage);
|
|
188
|
+
let accessLogReader = options.accessLogReader;
|
|
189
|
+
let accessLogWriter = options.accessLogWriter;
|
|
190
|
+
if (!accessLogReader || !accessLogWriter) {
|
|
191
|
+
const accessLogStore = createDefaultAccessLogStore();
|
|
192
|
+
accessLogReader ??= accessLogStore;
|
|
193
|
+
accessLogWriter ??= accessLogStore;
|
|
194
|
+
}
|
|
195
|
+
const tokenStore = options.tokenStore ?? createDefaultTokenStore();
|
|
196
|
+
const saveConfig = options.saveConfig ?? createDefaultSaveConfig();
|
|
197
|
+
const deviceSessions = createMemoryDeviceSessionStore();
|
|
198
|
+
async function withProtocolErrors(handler) {
|
|
199
|
+
try {
|
|
200
|
+
return await handler();
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
if (err instanceof ProtocolError) {
|
|
204
|
+
return protocolErrorResponse(err);
|
|
205
|
+
}
|
|
206
|
+
return errorResponse(500, "INTERNAL_ERROR", "Internal server error");
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function sendContractResult(result) {
|
|
210
|
+
return jsonResponse(result.body, { status: result.status });
|
|
211
|
+
}
|
|
212
|
+
function ownerAddress() {
|
|
213
|
+
return options.serverOwner ?? options.identity?.address;
|
|
214
|
+
}
|
|
215
|
+
async function handleAuthDevice(request, url) {
|
|
216
|
+
if (url.pathname === "/auth/device") {
|
|
217
|
+
if (request.method !== "POST") {
|
|
218
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
219
|
+
}
|
|
220
|
+
return sendContractResult(initiateDeviceSessionContract({
|
|
221
|
+
sessionStore: deviceSessions,
|
|
222
|
+
serverOwner: ownerAddress(),
|
|
223
|
+
requestOrigin: url.origin,
|
|
224
|
+
approvalOrigin: url.origin,
|
|
225
|
+
sessionId: randomHex(32),
|
|
226
|
+
pollToken: randomHex(32),
|
|
227
|
+
now: now().getTime(),
|
|
228
|
+
}));
|
|
229
|
+
}
|
|
230
|
+
if (url.pathname === "/auth/device/poll") {
|
|
231
|
+
if (request.method !== "GET") {
|
|
232
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
233
|
+
}
|
|
234
|
+
return sendContractResult(pollDeviceSessionContract({
|
|
235
|
+
sessionStore: deviceSessions,
|
|
236
|
+
pollToken: url.searchParams.get("token"),
|
|
237
|
+
serverOwner: ownerAddress(),
|
|
238
|
+
now: now().getTime(),
|
|
239
|
+
}));
|
|
240
|
+
}
|
|
241
|
+
if (url.pathname === "/auth/device/approve") {
|
|
242
|
+
const sessionId = url.searchParams.get("session");
|
|
243
|
+
if (!sessionId) {
|
|
244
|
+
return request.method === "GET"
|
|
245
|
+
? new Response("Missing session parameter", { status: 400 })
|
|
246
|
+
: jsonResponse({ error: { code: 400, message: "Missing session parameter" } }, { status: 400 });
|
|
247
|
+
}
|
|
248
|
+
const session = deviceSessions.get(sessionId);
|
|
249
|
+
if (!session) {
|
|
250
|
+
return request.method === "GET"
|
|
251
|
+
? new Response("Session expired or invalid", { status: 404 })
|
|
252
|
+
: jsonResponse({ error: { code: 404, message: "Session expired or invalid" } }, { status: 404 });
|
|
253
|
+
}
|
|
254
|
+
if (request.method === "GET") {
|
|
255
|
+
return new Response("Device authorization pending", {
|
|
256
|
+
headers: { "Content-Type": "text/html; charset=utf-8" },
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
if (request.method !== "POST") {
|
|
260
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
261
|
+
}
|
|
262
|
+
if (session.status === "approved") {
|
|
263
|
+
return jsonResponse({ status: "already_approved" });
|
|
264
|
+
}
|
|
265
|
+
await auth.authorizeOwner(request);
|
|
266
|
+
return sendContractResult(await approveDeviceSessionContract({
|
|
267
|
+
sessionStore: deviceSessions,
|
|
268
|
+
tokenStore,
|
|
269
|
+
sessionId,
|
|
270
|
+
serverOwner: ownerAddress(),
|
|
271
|
+
accessToken: `vana_ps_${randomHex(32)}`,
|
|
272
|
+
now: now().getTime(),
|
|
273
|
+
}));
|
|
274
|
+
}
|
|
275
|
+
if (url.pathname === "/auth/device/token") {
|
|
276
|
+
if (request.method === "DELETE") {
|
|
277
|
+
const token = bearerToken(request);
|
|
278
|
+
if (!token) {
|
|
279
|
+
return jsonResponse({ error: { code: 401, message: "Missing Bearer token" } }, { status: 401 });
|
|
280
|
+
}
|
|
281
|
+
return sendContractResult(await revokeDeviceTokenContract({
|
|
282
|
+
tokenStore,
|
|
283
|
+
bearerToken: token,
|
|
284
|
+
}));
|
|
285
|
+
}
|
|
286
|
+
if (request.method !== "POST") {
|
|
287
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
288
|
+
}
|
|
289
|
+
const token = bearerToken(request);
|
|
290
|
+
if (!options.accessToken || token !== options.accessToken) {
|
|
291
|
+
return jsonResponse({
|
|
292
|
+
error: {
|
|
293
|
+
code: 403,
|
|
294
|
+
message: "Only control-plane tokens can provision Personal Server session tokens",
|
|
295
|
+
},
|
|
296
|
+
}, { status: 403 });
|
|
297
|
+
}
|
|
298
|
+
let body;
|
|
299
|
+
try {
|
|
300
|
+
body = (await request.json());
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
return jsonResponse({ error: { code: 400, message: "Request body must be valid JSON" } }, { status: 400 });
|
|
304
|
+
}
|
|
305
|
+
if (!body.token || typeof body.token !== "string") {
|
|
306
|
+
return jsonResponse({ error: { code: 400, message: "Missing token" } }, { status: 400 });
|
|
307
|
+
}
|
|
308
|
+
return sendContractResult(await provisionDeviceTokenContract({
|
|
309
|
+
tokenStore,
|
|
310
|
+
body,
|
|
311
|
+
now: now().getTime(),
|
|
312
|
+
}));
|
|
313
|
+
}
|
|
314
|
+
return undefined;
|
|
315
|
+
}
|
|
316
|
+
return {
|
|
317
|
+
kind: "ps-lite",
|
|
318
|
+
storage: options.storage,
|
|
319
|
+
activate() {
|
|
320
|
+
active = true;
|
|
321
|
+
options.syncManager?.start?.();
|
|
322
|
+
},
|
|
323
|
+
deactivate() {
|
|
324
|
+
active = false;
|
|
325
|
+
void options.syncManager?.stop?.();
|
|
326
|
+
},
|
|
327
|
+
isAvailable() {
|
|
328
|
+
return active;
|
|
329
|
+
},
|
|
330
|
+
async fetch(request) {
|
|
331
|
+
return withProtocolErrors(async () => {
|
|
332
|
+
const url = new URL(request.url);
|
|
333
|
+
if (url.pathname === "/health") {
|
|
334
|
+
const apiOrigin = url.origin;
|
|
335
|
+
const identity = options.identity ?? null;
|
|
336
|
+
let serverId = null;
|
|
337
|
+
if (identity && options.gateway) {
|
|
338
|
+
try {
|
|
339
|
+
const server = await options.gateway.getServer(identity.address);
|
|
340
|
+
serverId = server?.id ?? null;
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
serverId = null;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
const registration = options.serverOwner && identity
|
|
347
|
+
? {
|
|
348
|
+
ownerAddress: options.serverOwner,
|
|
349
|
+
serverAddress: identity.address,
|
|
350
|
+
publicKey: identity.publicKey,
|
|
351
|
+
serverUrl: apiOrigin,
|
|
352
|
+
serverId,
|
|
353
|
+
registered: Boolean(serverId),
|
|
354
|
+
}
|
|
355
|
+
: null;
|
|
356
|
+
const capabilities = dataStorage.capabilities;
|
|
357
|
+
const stateCapabilities = {
|
|
358
|
+
tokens: tokenStore
|
|
359
|
+
.capabilities?.tokens ?? "custom",
|
|
360
|
+
accessLogs: accessLogReader.capabilities?.accessLogs ?? "custom",
|
|
361
|
+
config: options.stateCapabilities?.config ??
|
|
362
|
+
(options.saveConfig ? "custom" : "indexeddb"),
|
|
363
|
+
};
|
|
364
|
+
return jsonResponse({
|
|
365
|
+
status: active ? "healthy" : "unavailable",
|
|
366
|
+
runtime: "ps-lite",
|
|
367
|
+
storage: options.storage.kind,
|
|
368
|
+
capabilities: capabilities ?? null,
|
|
369
|
+
stateCapabilities,
|
|
370
|
+
owner: options.serverOwner ?? null,
|
|
371
|
+
apiOrigin,
|
|
372
|
+
gatewayUrl: options.config?.gateway?.url ?? null,
|
|
373
|
+
gatewayConfig: options.config?.gateway ?? null,
|
|
374
|
+
identity,
|
|
375
|
+
registration,
|
|
376
|
+
active,
|
|
377
|
+
checkedAt: now().toISOString(),
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
if (!active) {
|
|
381
|
+
return unavailableResponse();
|
|
382
|
+
}
|
|
383
|
+
const dataPrefix = "/v1/data";
|
|
384
|
+
if (url.pathname === dataPrefix ||
|
|
385
|
+
url.pathname.startsWith(`${dataPrefix}/`)) {
|
|
386
|
+
return handlePersonalServerDataRequest(request, {
|
|
387
|
+
storage: dataStorage,
|
|
388
|
+
auth,
|
|
389
|
+
schemaResolver: options.gateway,
|
|
390
|
+
accessLogWriter,
|
|
391
|
+
syncManager: options.syncManager ?? null,
|
|
392
|
+
now,
|
|
393
|
+
createLogId,
|
|
394
|
+
}, { basePath: dataPrefix });
|
|
395
|
+
}
|
|
396
|
+
if (url.pathname.startsWith("/auth/device")) {
|
|
397
|
+
const response = await handleAuthDevice(request, url);
|
|
398
|
+
if (response)
|
|
399
|
+
return response;
|
|
400
|
+
}
|
|
401
|
+
if (url.pathname === "/oauth/token") {
|
|
402
|
+
return handlePersonalServerOauthTokenRequest(request, {
|
|
403
|
+
tokenStore,
|
|
404
|
+
controlPlaneSecret: options.accessToken,
|
|
405
|
+
randomToken: () => `vana_ps_${randomHex(32)}`,
|
|
406
|
+
now,
|
|
407
|
+
deviceSessions: {
|
|
408
|
+
findByDeviceCode(deviceCode) {
|
|
409
|
+
const session = deviceSessions.findByPollToken(deviceCode);
|
|
410
|
+
if (!session)
|
|
411
|
+
return null;
|
|
412
|
+
return {
|
|
413
|
+
status: session.status,
|
|
414
|
+
accessToken: session.accessToken,
|
|
415
|
+
accessTokenExpiresAt: session.accessTokenExpiresAt,
|
|
416
|
+
sessionId: session.sessionId,
|
|
417
|
+
};
|
|
418
|
+
},
|
|
419
|
+
consume(sessionId) {
|
|
420
|
+
deviceSessions.delete(sessionId);
|
|
421
|
+
},
|
|
422
|
+
},
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
const grantsPrefix = "/v1/grants";
|
|
426
|
+
if (url.pathname === grantsPrefix ||
|
|
427
|
+
url.pathname === `${grantsPrefix}/` ||
|
|
428
|
+
url.pathname === `${grantsPrefix}/verify`) {
|
|
429
|
+
return handlePersonalServerGrantsRequest(request, {
|
|
430
|
+
auth,
|
|
431
|
+
gateway: options.gateway,
|
|
432
|
+
gatewayConfig: options.config?.gateway,
|
|
433
|
+
serverOwner: options.serverOwner ?? options.identity?.address,
|
|
434
|
+
serverSigner: options.serverSigner,
|
|
435
|
+
now,
|
|
436
|
+
}, { basePath: grantsPrefix });
|
|
437
|
+
}
|
|
438
|
+
const accessLogsPrefix = "/v1/access-logs";
|
|
439
|
+
if (url.pathname === accessLogsPrefix ||
|
|
440
|
+
url.pathname === `${accessLogsPrefix}/`) {
|
|
441
|
+
return handlePersonalServerAccessLogsRequest(request, { auth, accessLogReader }, { basePath: accessLogsPrefix });
|
|
442
|
+
}
|
|
443
|
+
const syncPrefix = "/v1/sync";
|
|
444
|
+
if (url.pathname === `${syncPrefix}/trigger` ||
|
|
445
|
+
url.pathname === `${syncPrefix}/status` ||
|
|
446
|
+
url.pathname.startsWith(`${syncPrefix}/file/`)) {
|
|
447
|
+
return handlePersonalServerSyncRequest(request, { auth, syncManager: options.syncManager ?? null }, { basePath: syncPrefix });
|
|
448
|
+
}
|
|
449
|
+
if (url.pathname === "/ui/api/config") {
|
|
450
|
+
return handlePersonalServerConfigRequest(request, {
|
|
451
|
+
auth,
|
|
452
|
+
async readConfig() {
|
|
453
|
+
return options.config ?? {};
|
|
454
|
+
},
|
|
455
|
+
async writeConfig(config) {
|
|
456
|
+
await saveConfig(config);
|
|
457
|
+
},
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
return errorResponse(404, "NOT_FOUND", "Not found");
|
|
461
|
+
});
|
|
462
|
+
},
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,mBAAmB,GAGpB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,GAE1B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,qCAAqC,EACrC,iCAAiC,EACjC,+BAA+B,EAC/B,iCAAiC,EACjC,qCAAqC,EACrC,+BAA+B,GAIhC,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,oBAAoB,GAErB,MAAM,8CAA8C,CAAC;AActD,OAAO,EACL,mCAAmC,EACnC,+BAA+B,EAC/B,+BAA+B,EAC/B,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAmFpB,SAAS,YAAY,CAAC,IAAa,EAAE,IAAmB;IACtD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAChD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAkB;IAC/C,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,aAAa,CACpB,MAAkB,EAClB,SAAiB,EACjB,OAAe;IAEf,OAAO,YAAY,CACjB;QACE,KAAK,EAAE;YACL,IAAI,EAAE,MAAM;YACZ,SAAS;YACT,OAAO;SACR;KACF,EACD,EAAE,MAAM,EAAE,CACX,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,IAAI,kBAAkB,CAAC;QACjC,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,6BAA6B;KACtC,CAAC,CAAC;IACH,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgB;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3D,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,SAAS,iBAAiB,CACxB,OAAgB,EAChB,aAAqB,EACrB,SAAS,GAAG,KAAK;IAEjB,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,gBAAgB,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,MAAM,SAAS,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,qBAAqB,EAAE,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB;IAC/B,OAAO;QACL,KAAK,CAAC,cAAc;YAClB,MAAM,IAAI,gBAAgB,EAAE,CAAC;QAC/B,CAAC;QACD,KAAK,CAAC,oBAAoB;YACxB,MAAM,IAAI,gBAAgB,EAAE,CAAC;QAC/B,CAAC;QACD,KAAK,CAAC,oBAAoB;YACxB,MAAM,IAAI,gBAAgB,EAAE,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAAqC;IAErC,OAAO;QACL,KAAK,CAAC,cAAc,CAAC,OAAO;YAC1B,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,CAAC,oBAAoB,CAAC,OAAO;YAChC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,CAAC,oBAAoB,CAAC,KAAK;YAC9B,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,IAAI,kBAAkB,CAAC;oBAC3B,MAAM,EAAE,uBAAuB;iBAChC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,OAAgB,EAChB,OAAoC;IAEpC,OAAO,mBAAmB,CAAC;QACzB,OAAO;QACP,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,WAAW,EAAE,OAAO,CAAC,YAAY;QACjC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,oBAAoB,EAAE,OAAO,CAAC,UAAU;QACxC,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CACpB,IAA0B,EAC1B,YAAoB;IAEpB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,2BAA2B;IAClC,OAAO,IAAI,aAAa,CACtB,GAAG,EACH,uBAAuB,EACvB,0BAA0B,EAC1B;QACE,MAAM,EAAE,8CAA8C;KACvD,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAoC;IAEpC,OAAO;QACL,KAAK,CAAC,cAAc,CAAC,OAAO;YAC1B,MAAM,IAAI,GAAG,MAAM,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,aAAa,CAAC;oBACtB,QAAQ,EAAE,OAAO,CAAC,YAAY;oBAC9B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;iBACzB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,KAAK,CAAC,oBAAoB,CAAC,OAAO;YAChC,MAAM,IAAI,GAAG,MAAM,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/D,IAAI,IAAI,CAAC,cAAc,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrE,OAAO;YACT,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBACjC,MAAM,2BAA2B,EAAE,CAAC;YACtC,CAAC;YACD,MAAM,OAAO,GACX,MAAM,OAAO,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,CAC9D,IAAI,CAAC,IAAI,CAAC,MAAM,CACjB,CAAC;YACJ,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,wBAAwB,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,oBAAoB,CAAC,KAAK;YAC9B,MAAM,IAAI,GAAG,MAAM,yBAAyB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;YACjE,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBACjC,MAAM,2BAA2B,EAAE,CAAC;YACtC,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,oBAAoB,CACtC;gBACE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;gBACxB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;gBACnD,cAAc,EAAE,KAAK,CAAC,KAAK;gBAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,OAAO,CAAC,mBAAmB,CAC5B,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,OAA+C;IAE/C,IAAI,YAAY,IAAI,OAAO,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,KAAK,CACb,+HAA+H,CAChI,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,OAAO,SAAS,KAAK,WAAW,CAAC;AAC1C,CAAC;AAED,SAAS,2BAA2B;IAClC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,mCAAmC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,SAAS,CAAC,UAAkB;IACnC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IACzC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CACzE,EAAE,CACH,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB;IAC9B,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,+BAA+B,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,uBAAuB;IAC9B,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,+BAA+B,EAAE,CAAC;IACrD,OAAO,KAAK,EAAE,UAAmB,EAAE,EAAE;QACnC,MAAM,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3D,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAA6B;IAE7B,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,wBAAwB,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAC9C,IAAI,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAC9C,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,cAAc,GAAG,2BAA2B,EAAE,CAAC;QACrD,eAAe,KAAK,cAAc,CAAC;QACnC,eAAe,KAAK,cAAc,CAAC;IACrC,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,uBAAuB,EAAE,CAAC;IACnE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,uBAAuB,EAAE,CAAC;IACnE,MAAM,cAAc,GAAuB,8BAA8B,EAAE,CAAC;IAE5E,KAAK,UAAU,kBAAkB,CAC/B,OAA2C;QAE3C,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACjC,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,SAAS,kBAAkB,CAAC,MAG3B;QACC,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,YAAY;QACnB,OAAO,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC1D,CAAC;IAED,KAAK,UAAU,gBAAgB,CAAC,OAAgB,EAAE,GAAQ;QACxD,IAAI,GAAG,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,aAAa,CAAC,GAAG,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,kBAAkB,CACvB,6BAA6B,CAAC;gBAC5B,YAAY,EAAE,cAAc;gBAC5B,WAAW,EAAE,YAAY,EAAE;gBAC3B,aAAa,EAAE,GAAG,CAAC,MAAM;gBACzB,cAAc,EAAE,GAAG,CAAC,MAAM;gBAC1B,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;gBACxB,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;gBACxB,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;aACrB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC7B,OAAO,aAAa,CAAC,GAAG,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,kBAAkB,CACvB,yBAAyB,CAAC;gBACxB,YAAY,EAAE,cAAc;gBAC5B,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;gBACxC,WAAW,EAAE,YAAY,EAAE;gBAC3B,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;aACrB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,KAAK,sBAAsB,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,OAAO,CAAC,MAAM,KAAK,KAAK;oBAC7B,CAAC,CAAC,IAAI,QAAQ,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;oBAC5D,CAAC,CAAC,YAAY,CACV,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,2BAA2B,EAAE,EAAE,EAC9D,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;YACR,CAAC;YACD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,OAAO,CAAC,MAAM,KAAK,KAAK;oBAC7B,CAAC,CAAC,IAAI,QAAQ,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;oBAC7D,CAAC,CAAC,YAAY,CACV,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,4BAA4B,EAAE,EAAE,EAC/D,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;YACR,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC7B,OAAO,IAAI,QAAQ,CAAC,8BAA8B,EAAE;oBAClD,OAAO,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE;iBACxD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,aAAa,CAAC,GAAG,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClC,OAAO,YAAY,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,kBAAkB,CACvB,MAAM,4BAA4B,CAAC;gBACjC,YAAY,EAAE,cAAc;gBAC5B,UAAU;gBACV,SAAS;gBACT,WAAW,EAAE,YAAY,EAAE;gBAC3B,WAAW,EAAE,WAAW,SAAS,CAAC,EAAE,CAAC,EAAE;gBACvC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;aACrB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,KAAK,oBAAoB,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,EACzD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;gBACJ,CAAC;gBACD,OAAO,kBAAkB,CACvB,MAAM,yBAAyB,CAAC;oBAC9B,UAAU;oBACV,WAAW,EAAE,KAAK;iBACnB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,aAAa,CAAC,GAAG,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,KAAK,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC1D,OAAO,YAAY,CACjB;oBACE,KAAK,EAAE;wBACL,IAAI,EAAE,GAAG;wBACT,OAAO,EACL,wEAAwE;qBAC3E;iBACF,EACD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;YACJ,CAAC;YACD,IAAI,IAAoD,CAAC;YACzD,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAG3B,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,iCAAiC,EAAE,EAAE,EACpE,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAClD,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAClD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;YACJ,CAAC;YACD,OAAO,kBAAkB,CACvB,MAAM,4BAA4B,CAAC;gBACjC,UAAU;gBACV,IAAI;gBACJ,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;aACrB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ;YACN,MAAM,GAAG,IAAI,CAAC;YACd,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC;QACjC,CAAC;QACD,UAAU;YACR,MAAM,GAAG,KAAK,CAAC;YACf,KAAK,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QACrC,CAAC;QACD,WAAW;YACT,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,OAAgB;YAC1B,OAAO,kBAAkB,CAAC,KAAK,IAAI,EAAE;gBACnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAEjC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;oBAC1C,IAAI,QAAQ,GAAkB,IAAI,CAAC;oBACnC,IAAI,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBAChC,IAAI,CAAC;4BACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;4BACjE,QAAQ,GAAG,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC;wBAChC,CAAC;wBAAC,MAAM,CAAC;4BACP,QAAQ,GAAG,IAAI,CAAC;wBAClB,CAAC;oBACH,CAAC;oBACD,MAAM,YAAY,GAChB,OAAO,CAAC,WAAW,IAAI,QAAQ;wBAC7B,CAAC,CAAC;4BACE,YAAY,EAAE,OAAO,CAAC,WAAW;4BACjC,aAAa,EAAE,QAAQ,CAAC,OAAO;4BAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;4BAC7B,SAAS,EAAE,SAAS;4BACpB,QAAQ;4BACR,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC;yBAC9B;wBACH,CAAC,CAAC,IAAI,CAAC;oBACX,MAAM,YAAY,GAChB,WAGD,CAAC,YAAY,CAAC;oBACf,MAAM,iBAAiB,GAAmC;wBACxD,MAAM,EACH,UAAgE;6BAC9D,YAAY,EAAE,MAAM,IAAI,QAAQ;wBACrC,UAAU,EAEN,eAED,CAAC,YAAY,EAAE,UAAU,IAAI,QAAQ;wBACxC,MAAM,EACJ,OAAO,CAAC,iBAAiB,EAAE,MAAM;4BACjC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;qBAChD,CAAC;oBACF,OAAO,YAAY,CAAC;wBAClB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;wBAC1C,OAAO,EAAE,SAAS;wBAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;wBAC7B,YAAY,EAAE,YAAY,IAAI,IAAI;wBAClC,iBAAiB;wBACjB,KAAK,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;wBAClC,SAAS;wBACT,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI;wBAChD,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI;wBAC9C,QAAQ;wBACR,YAAY;wBACZ,MAAM;wBACN,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;qBAC/B,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,mBAAmB,EAAE,CAAC;gBAC/B,CAAC;gBAED,MAAM,UAAU,GAAG,UAAU,CAAC;gBAC9B,IACE,GAAG,CAAC,QAAQ,KAAK,UAAU;oBAC3B,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,EACzC,CAAC;oBACD,OAAO,+BAA+B,CACpC,OAAO,EACP;wBACE,OAAO,EAAE,WAAW;wBACpB,IAAI;wBACJ,cAAc,EAAE,OAAO,CAAC,OAAO;wBAC/B,eAAe;wBACf,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;wBACxC,GAAG;wBACH,WAAW;qBACZ,EACD,EAAE,QAAQ,EAAE,UAAU,EAAE,CACzB,CAAC;gBACJ,CAAC;gBAED,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC5C,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACtD,IAAI,QAAQ;wBAAE,OAAO,QAAQ,CAAC;gBAChC,CAAC;gBAED,IAAI,GAAG,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;oBACpC,OAAO,qCAAqC,CAAC,OAAO,EAAE;wBACpD,UAAU;wBACV,kBAAkB,EAAE,OAAO,CAAC,WAAW;wBACvC,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,SAAS,CAAC,EAAE,CAAC,EAAE;wBAC7C,GAAG;wBACH,cAAc,EAAE;4BACd,gBAAgB,CAAC,UAAU;gCACzB,MAAM,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;gCAC3D,IAAI,CAAC,OAAO;oCAAE,OAAO,IAAI,CAAC;gCAC1B,OAAO;oCACL,MAAM,EAAE,OAAO,CAAC,MAAM;oCACtB,WAAW,EAAE,OAAO,CAAC,WAAW;oCAChC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;oCAClD,SAAS,EAAE,OAAO,CAAC,SAAS;iCAC7B,CAAC;4BACJ,CAAC;4BACD,OAAO,CAAC,SAAS;gCACf,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;4BACnC,CAAC;yBACF;qBACF,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,YAAY,GAAG,YAAY,CAAC;gBAClC,IACE,GAAG,CAAC,QAAQ,KAAK,YAAY;oBAC7B,GAAG,CAAC,QAAQ,KAAK,GAAG,YAAY,GAAG;oBACnC,GAAG,CAAC,QAAQ,KAAK,GAAG,YAAY,SAAS,EACzC,CAAC;oBACD,OAAO,iCAAiC,CACtC,OAAO,EACP;wBACE,IAAI;wBACJ,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,OAElB;wBACb,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO;wBAC7D,YAAY,EAAE,OAAO,CAAC,YAAY;wBAClC,GAAG;qBACJ,EACD,EAAE,QAAQ,EAAE,YAAY,EAAE,CAC3B,CAAC;gBACJ,CAAC;gBAED,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;gBAC3C,IACE,GAAG,CAAC,QAAQ,KAAK,gBAAgB;oBACjC,GAAG,CAAC,QAAQ,KAAK,GAAG,gBAAgB,GAAG,EACvC,CAAC;oBACD,OAAO,qCAAqC,CAC1C,OAAO,EACP,EAAE,IAAI,EAAE,eAAe,EAAE,EACzB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAC/B,CAAC;gBACJ,CAAC;gBAED,MAAM,UAAU,GAAG,UAAU,CAAC;gBAC9B,IACE,GAAG,CAAC,QAAQ,KAAK,GAAG,UAAU,UAAU;oBACxC,GAAG,CAAC,QAAQ,KAAK,GAAG,UAAU,SAAS;oBACvC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,QAAQ,CAAC,EAC9C,CAAC;oBACD,OAAO,+BAA+B,CACpC,OAAO,EACP,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE,EAClD,EAAE,QAAQ,EAAE,UAAU,EAAE,CACzB,CAAC;gBACJ,CAAC;gBAED,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;oBACtC,OAAO,iCAAiC,CAAC,OAAO,EAAE;wBAChD,IAAI;wBACJ,KAAK,CAAC,UAAU;4BACd,OAAO,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;wBAC9B,CAAC;wBACD,KAAK,CAAC,WAAW,CAAC,MAAM;4BACtB,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;wBAC3B,CAAC;qBACF,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { ServerConfig } from "@opendatalabs/personal-server-ts-core/schemas";
|
|
2
|
+
import type { ServerAccount } from "@opendatalabs/personal-server-ts-core/keys";
|
|
3
|
+
import type { AccessLogWriter } from "@opendatalabs/personal-server-ts-core/logging/access-log";
|
|
4
|
+
import type { AccessLogReader } from "@opendatalabs/personal-server-ts-core/logging/access-reader";
|
|
5
|
+
import type { PsLiteTokenStore } from "./runtime.js";
|
|
6
|
+
export type PsLiteStateKey = "config-v1" | "server-identity-v1" | "relay-v1" | "sync-cursor-v1";
|
|
7
|
+
export interface PsLiteStateStore {
|
|
8
|
+
get<T>(key: PsLiteStateKey): Promise<T | null>;
|
|
9
|
+
set<T>(key: PsLiteStateKey, value: T): Promise<void>;
|
|
10
|
+
delete(key: PsLiteStateKey): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export interface IndexedDbPsLiteStateStoreOptions {
|
|
13
|
+
dbName?: string;
|
|
14
|
+
storeName?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface IndexedDbPsLiteTokenStoreOptions {
|
|
17
|
+
dbName?: string;
|
|
18
|
+
storeName?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface IndexedDbPsLiteAccessLogStoreOptions {
|
|
21
|
+
dbName?: string;
|
|
22
|
+
storeName?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface PsLiteEncryptedPrivateKey {
|
|
25
|
+
algorithm: "AES-GCM";
|
|
26
|
+
iv: string;
|
|
27
|
+
ciphertext: string;
|
|
28
|
+
}
|
|
29
|
+
export interface PsLiteEncryptedServerIdentity {
|
|
30
|
+
version: 1;
|
|
31
|
+
address: `0x${string}`;
|
|
32
|
+
publicKey: `0x${string}`;
|
|
33
|
+
encryptedPrivateKey: PsLiteEncryptedPrivateKey;
|
|
34
|
+
createdAt: string;
|
|
35
|
+
updatedAt: string;
|
|
36
|
+
}
|
|
37
|
+
export interface PsLiteUnlockedServerIdentity {
|
|
38
|
+
persisted: PsLiteEncryptedServerIdentity;
|
|
39
|
+
account: ServerAccount;
|
|
40
|
+
}
|
|
41
|
+
export interface PsLiteRelayState {
|
|
42
|
+
sessionId?: string;
|
|
43
|
+
controlUrl?: string;
|
|
44
|
+
publicSuffix?: string;
|
|
45
|
+
publicUrl?: string;
|
|
46
|
+
updatedAt: string;
|
|
47
|
+
}
|
|
48
|
+
export declare function createIndexedDbPsLiteStateStore(options?: IndexedDbPsLiteStateStoreOptions): PsLiteStateStore;
|
|
49
|
+
export declare function createIndexedDbPsLiteTokenStore(options?: IndexedDbPsLiteTokenStoreOptions): PsLiteTokenStore;
|
|
50
|
+
export declare function createIndexedDbPsLiteAccessLogStore(options?: IndexedDbPsLiteAccessLogStoreOptions): AccessLogReader & AccessLogWriter;
|
|
51
|
+
export declare function loadOrCreatePsLiteConfig(store: PsLiteStateStore, defaults?: Partial<ServerConfig>): Promise<ServerConfig>;
|
|
52
|
+
export declare function savePsLiteConfig(store: PsLiteStateStore, value: unknown): Promise<ServerConfig>;
|
|
53
|
+
export declare function loadOrCreatePsLiteServerIdentity(params: {
|
|
54
|
+
store: PsLiteStateStore;
|
|
55
|
+
ownerSignature: `0x${string}`;
|
|
56
|
+
now?: () => Date;
|
|
57
|
+
}): Promise<PsLiteUnlockedServerIdentity>;
|
|
58
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAMlF,OAAO,KAAK,EACV,aAAa,EAEd,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAEV,eAAe,EAChB,MAAM,0DAA0D,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AACnG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,oBAAoB,GACpB,UAAU,GACV,gBAAgB,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,gCAAgC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gCAAgC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oCAAoC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,SAAS,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;IACzB,mBAAmB,EAAE,yBAAyB,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,6BAA6B,CAAC;IACzC,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AA8PD,wBAAgB,+BAA+B,CAC7C,OAAO,GAAE,gCAAqC,GAC7C,gBAAgB,CAyBlB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,GAAE,gCAAqC,GAC7C,gBAAgB,CA+ClB;AAED,wBAAgB,mCAAmC,CACjD,OAAO,GAAE,oCAAyC,GACjD,eAAe,GAAG,eAAe,CAmCnC;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,gBAAgB,EACvB,QAAQ,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC/B,OAAO,CAAC,YAAY,CAAC,CAOvB;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,YAAY,CAAC,CAIvB;AAED,wBAAsB,gCAAgC,CAAC,MAAM,EAAE;IAC7D,KAAK,EAAE,gBAAgB,CAAC;IACxB,cAAc,EAAE,KAAK,MAAM,EAAE,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAgCxC"}
|