@opendatalabs/personal-server-ts-lite 0.0.1-canary.9ce2194
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 +29 -0
- package/dist/browser-runtime.d.ts.map +1 -0
- package/dist/browser-runtime.js +81 -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/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -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 +76 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +543 -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,543 @@
|
|
|
1
|
+
import { ExpiredTokenError as SdkExpiredTokenError, InvalidSignatureError as SdkInvalidSignatureError, MissingAuthError as SdkMissingAuthError, verifyWeb3Signed as sdkVerifyWeb3Signed, } from "@opendatalabs/vana-sdk/browser";
|
|
2
|
+
import { ExpiredTokenError, GrantRequiredError, InvalidSignatureError, MissingAuthError, NotOwnerError, ProtocolError, PsUnavailableError, UnregisteredBuilderError, } from "@opendatalabs/personal-server-ts-core/errors";
|
|
3
|
+
import { approveDeviceSessionContract, createGrantContract, createMemoryDeviceSessionStore, initiateDeviceSessionContract, listGrantsContract, oauthTokenContract, parseJsonObjectBody, pollDeviceSessionContract, provisionDeviceTokenContract, revokeDeviceTokenContract, validateServerConfigContract, verifyGrantContract, } from "@opendatalabs/personal-server-ts-core/contracts";
|
|
4
|
+
import { handlePersonalServerAccessLogsRequest, handlePersonalServerDataRequest, 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
|
+
function resolveOrigin(origin) {
|
|
80
|
+
return typeof origin === "function" ? origin() : origin;
|
|
81
|
+
}
|
|
82
|
+
async function verifyWeb3SignedRequest(request, options) {
|
|
83
|
+
const url = new URL(request.url);
|
|
84
|
+
try {
|
|
85
|
+
return await sdkVerifyWeb3Signed({
|
|
86
|
+
headerValue: request.headers.get("authorization") ?? undefined,
|
|
87
|
+
expectedOrigin: resolveOrigin(options.origin),
|
|
88
|
+
expectedMethod: request.method,
|
|
89
|
+
expectedPath: url.pathname,
|
|
90
|
+
now: options.now?.(),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err instanceof SdkMissingAuthError) {
|
|
95
|
+
throw new MissingAuthError(getErrorDetails(err));
|
|
96
|
+
}
|
|
97
|
+
if (err instanceof SdkInvalidSignatureError) {
|
|
98
|
+
throw new InvalidSignatureError(getErrorDetails(err));
|
|
99
|
+
}
|
|
100
|
+
if (err instanceof SdkExpiredTokenError) {
|
|
101
|
+
throw new ExpiredTokenError(getErrorDetails(err));
|
|
102
|
+
}
|
|
103
|
+
throw err;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function getErrorDetails(err) {
|
|
107
|
+
if (err && typeof err === "object" && "details" in err) {
|
|
108
|
+
const details = err.details;
|
|
109
|
+
if (details && typeof details === "object" && !Array.isArray(details)) {
|
|
110
|
+
return details;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
export function createWeb3SignedPsLiteAuth(options) {
|
|
116
|
+
return {
|
|
117
|
+
async authorizeOwner(request) {
|
|
118
|
+
const verified = await verifyWeb3SignedRequest(request, options);
|
|
119
|
+
if (verified.signer.toLowerCase() !== options.ownerAddress.toLowerCase()) {
|
|
120
|
+
throw new NotOwnerError({
|
|
121
|
+
expected: options.ownerAddress,
|
|
122
|
+
actual: verified.signer,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
async authorizeBuilderList(request) {
|
|
127
|
+
const verified = await verifyWeb3SignedRequest(request, options);
|
|
128
|
+
if (verified.signer.toLowerCase() === options.ownerAddress.toLowerCase()) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const builder = await options.dataReadPolicyPorts?.authSessionVerifier.getBuilder(verified.signer);
|
|
132
|
+
if (options.dataReadPolicyPorts && !builder) {
|
|
133
|
+
throw new UnregisteredBuilderError();
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
async authorizeBuilderRead(input) {
|
|
137
|
+
const verified = await verifyWeb3SignedRequest(input.request, options);
|
|
138
|
+
if (!options.dataReadPolicyPorts) {
|
|
139
|
+
throw new ProtocolError(500, "SERVER_NOT_CONFIGURED", "Server is not configured", {
|
|
140
|
+
reason: "PS Lite read policy ports are not configured",
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
const grant = await verifyDataReadPolicy({
|
|
144
|
+
signer: verified.signer,
|
|
145
|
+
grantId: verified.payload.grantId ?? input.grantId,
|
|
146
|
+
requestedScope: input.scope,
|
|
147
|
+
fileId: input.fileId,
|
|
148
|
+
}, options.dataReadPolicyPorts);
|
|
149
|
+
return { builder: verified.signer, grantId: grant.id };
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function toDataStoragePort(storage) {
|
|
154
|
+
if ("listScopes" in storage) {
|
|
155
|
+
return storage;
|
|
156
|
+
}
|
|
157
|
+
throw new Error("PS Lite runtime requires a persistent DataStoragePort. Use createIndexedDbPsLiteRuntime() or createPersistentPsLiteStorage().");
|
|
158
|
+
}
|
|
159
|
+
function indexedDbAvailable() {
|
|
160
|
+
return typeof indexedDB !== "undefined";
|
|
161
|
+
}
|
|
162
|
+
function createDefaultAccessLogStore() {
|
|
163
|
+
if (!indexedDbAvailable()) {
|
|
164
|
+
throw new Error("IndexedDB is required for default PS Lite access log persistence.");
|
|
165
|
+
}
|
|
166
|
+
return createIndexedDbPsLiteAccessLogStore();
|
|
167
|
+
}
|
|
168
|
+
function createLogId() {
|
|
169
|
+
return globalThis.crypto?.randomUUID?.() ?? `log-${Date.now()}`;
|
|
170
|
+
}
|
|
171
|
+
function randomHex(byteLength) {
|
|
172
|
+
const bytes = new Uint8Array(byteLength);
|
|
173
|
+
globalThis.crypto.getRandomValues(bytes);
|
|
174
|
+
return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
175
|
+
}
|
|
176
|
+
function createDefaultTokenStore() {
|
|
177
|
+
if (!indexedDbAvailable()) {
|
|
178
|
+
throw new Error("IndexedDB is required for default PS Lite token storage.");
|
|
179
|
+
}
|
|
180
|
+
return createIndexedDbPsLiteTokenStore();
|
|
181
|
+
}
|
|
182
|
+
function createDefaultSaveConfig() {
|
|
183
|
+
if (!indexedDbAvailable()) {
|
|
184
|
+
throw new Error("IndexedDB is required for default PS Lite config persistence.");
|
|
185
|
+
}
|
|
186
|
+
const stateStore = createIndexedDbPsLiteStateStore();
|
|
187
|
+
return async (nextConfig) => {
|
|
188
|
+
await savePsLiteConfig(stateStore, nextConfig);
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
function bearerToken(request) {
|
|
192
|
+
const authorization = request.headers.get("authorization");
|
|
193
|
+
if (!authorization?.startsWith("Bearer "))
|
|
194
|
+
return null;
|
|
195
|
+
return authorization.slice(7);
|
|
196
|
+
}
|
|
197
|
+
async function readForm(request) {
|
|
198
|
+
return new URLSearchParams(await request.text());
|
|
199
|
+
}
|
|
200
|
+
export function createPsLiteRuntime(options) {
|
|
201
|
+
let active = options.active ?? false;
|
|
202
|
+
const now = options.now ?? (() => new Date());
|
|
203
|
+
const auth = options.auth ?? createMissingAuthAdapter();
|
|
204
|
+
const dataStorage = toDataStoragePort(options.storage);
|
|
205
|
+
let accessLogReader = options.accessLogReader;
|
|
206
|
+
let accessLogWriter = options.accessLogWriter;
|
|
207
|
+
if (!accessLogReader || !accessLogWriter) {
|
|
208
|
+
const accessLogStore = createDefaultAccessLogStore();
|
|
209
|
+
accessLogReader ??= accessLogStore;
|
|
210
|
+
accessLogWriter ??= accessLogStore;
|
|
211
|
+
}
|
|
212
|
+
const tokenStore = options.tokenStore ?? createDefaultTokenStore();
|
|
213
|
+
const saveConfig = options.saveConfig ?? createDefaultSaveConfig();
|
|
214
|
+
const deviceSessions = createMemoryDeviceSessionStore();
|
|
215
|
+
async function withProtocolErrors(handler) {
|
|
216
|
+
try {
|
|
217
|
+
return await handler();
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
if (err instanceof ProtocolError) {
|
|
221
|
+
return protocolErrorResponse(err);
|
|
222
|
+
}
|
|
223
|
+
return errorResponse(500, "INTERNAL_ERROR", "Internal server error");
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function sendContractResult(result) {
|
|
227
|
+
return jsonResponse(result.body, { status: result.status });
|
|
228
|
+
}
|
|
229
|
+
function gatewayRequiredResponse() {
|
|
230
|
+
return errorResponse(500, "SERVER_NOT_CONFIGURED", "Gateway is not configured");
|
|
231
|
+
}
|
|
232
|
+
function ownerAddress() {
|
|
233
|
+
return options.serverOwner ?? options.identity?.address;
|
|
234
|
+
}
|
|
235
|
+
async function handleAuthDevice(request, url) {
|
|
236
|
+
if (url.pathname === "/auth/device") {
|
|
237
|
+
if (request.method !== "POST") {
|
|
238
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
239
|
+
}
|
|
240
|
+
return sendContractResult(initiateDeviceSessionContract({
|
|
241
|
+
sessionStore: deviceSessions,
|
|
242
|
+
serverOwner: ownerAddress(),
|
|
243
|
+
requestOrigin: url.origin,
|
|
244
|
+
approvalOrigin: url.origin,
|
|
245
|
+
sessionId: randomHex(32),
|
|
246
|
+
pollToken: randomHex(32),
|
|
247
|
+
now: now().getTime(),
|
|
248
|
+
}));
|
|
249
|
+
}
|
|
250
|
+
if (url.pathname === "/auth/device/poll") {
|
|
251
|
+
if (request.method !== "GET") {
|
|
252
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
253
|
+
}
|
|
254
|
+
return sendContractResult(pollDeviceSessionContract({
|
|
255
|
+
sessionStore: deviceSessions,
|
|
256
|
+
pollToken: url.searchParams.get("token"),
|
|
257
|
+
serverOwner: ownerAddress(),
|
|
258
|
+
now: now().getTime(),
|
|
259
|
+
}));
|
|
260
|
+
}
|
|
261
|
+
if (url.pathname === "/auth/device/approve") {
|
|
262
|
+
const sessionId = url.searchParams.get("session");
|
|
263
|
+
if (!sessionId) {
|
|
264
|
+
return request.method === "GET"
|
|
265
|
+
? new Response("Missing session parameter", { status: 400 })
|
|
266
|
+
: jsonResponse({ error: { code: 400, message: "Missing session parameter" } }, { status: 400 });
|
|
267
|
+
}
|
|
268
|
+
const session = deviceSessions.get(sessionId);
|
|
269
|
+
if (!session) {
|
|
270
|
+
return request.method === "GET"
|
|
271
|
+
? new Response("Session expired or invalid", { status: 404 })
|
|
272
|
+
: jsonResponse({ error: { code: 404, message: "Session expired or invalid" } }, { status: 404 });
|
|
273
|
+
}
|
|
274
|
+
if (request.method === "GET") {
|
|
275
|
+
return new Response("Device authorization pending", {
|
|
276
|
+
headers: { "Content-Type": "text/html; charset=utf-8" },
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
if (request.method !== "POST") {
|
|
280
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
281
|
+
}
|
|
282
|
+
if (session.status === "approved") {
|
|
283
|
+
return jsonResponse({ status: "already_approved" });
|
|
284
|
+
}
|
|
285
|
+
await auth.authorizeOwner(request);
|
|
286
|
+
return sendContractResult(await approveDeviceSessionContract({
|
|
287
|
+
sessionStore: deviceSessions,
|
|
288
|
+
tokenStore,
|
|
289
|
+
sessionId,
|
|
290
|
+
serverOwner: ownerAddress(),
|
|
291
|
+
accessToken: `vana_ps_${randomHex(32)}`,
|
|
292
|
+
now: now().getTime(),
|
|
293
|
+
}));
|
|
294
|
+
}
|
|
295
|
+
if (url.pathname === "/auth/device/token") {
|
|
296
|
+
if (request.method === "DELETE") {
|
|
297
|
+
const token = bearerToken(request);
|
|
298
|
+
if (!token) {
|
|
299
|
+
return jsonResponse({ error: { code: 401, message: "Missing Bearer token" } }, { status: 401 });
|
|
300
|
+
}
|
|
301
|
+
return sendContractResult(await revokeDeviceTokenContract({
|
|
302
|
+
tokenStore,
|
|
303
|
+
bearerToken: token,
|
|
304
|
+
}));
|
|
305
|
+
}
|
|
306
|
+
if (request.method !== "POST") {
|
|
307
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
308
|
+
}
|
|
309
|
+
const token = bearerToken(request);
|
|
310
|
+
if (!options.accessToken || token !== options.accessToken) {
|
|
311
|
+
return jsonResponse({
|
|
312
|
+
error: {
|
|
313
|
+
code: 403,
|
|
314
|
+
message: "Only control-plane tokens can provision Personal Server session tokens",
|
|
315
|
+
},
|
|
316
|
+
}, { status: 403 });
|
|
317
|
+
}
|
|
318
|
+
let body;
|
|
319
|
+
try {
|
|
320
|
+
body = (await request.json());
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
return jsonResponse({ error: { code: 400, message: "Request body must be valid JSON" } }, { status: 400 });
|
|
324
|
+
}
|
|
325
|
+
if (!body.token || typeof body.token !== "string") {
|
|
326
|
+
return jsonResponse({ error: { code: 400, message: "Missing token" } }, { status: 400 });
|
|
327
|
+
}
|
|
328
|
+
return sendContractResult(await provisionDeviceTokenContract({
|
|
329
|
+
tokenStore,
|
|
330
|
+
body,
|
|
331
|
+
now: now().getTime(),
|
|
332
|
+
}));
|
|
333
|
+
}
|
|
334
|
+
return undefined;
|
|
335
|
+
}
|
|
336
|
+
async function handleOauthToken(request) {
|
|
337
|
+
if (request.method !== "POST") {
|
|
338
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
339
|
+
}
|
|
340
|
+
const contentType = request.headers.get("content-type") ?? "";
|
|
341
|
+
if (!contentType.includes("application/x-www-form-urlencoded")) {
|
|
342
|
+
return jsonResponse({
|
|
343
|
+
error: "invalid_request",
|
|
344
|
+
error_description: "Content-Type must be application/x-www-form-urlencoded",
|
|
345
|
+
}, { status: 400 });
|
|
346
|
+
}
|
|
347
|
+
const form = await readForm(request);
|
|
348
|
+
const result = await oauthTokenContract({
|
|
349
|
+
body: form,
|
|
350
|
+
authorizationHeader: request.headers.get("authorization"),
|
|
351
|
+
tokenStore,
|
|
352
|
+
controlPlaneSecret: options.accessToken,
|
|
353
|
+
randomToken: () => `vana_ps_${randomHex(32)}`,
|
|
354
|
+
now,
|
|
355
|
+
deviceSessions: {
|
|
356
|
+
findByDeviceCode(deviceCode) {
|
|
357
|
+
const session = deviceSessions.findByPollToken(deviceCode);
|
|
358
|
+
if (!session)
|
|
359
|
+
return null;
|
|
360
|
+
return {
|
|
361
|
+
status: session.status,
|
|
362
|
+
accessToken: session.accessToken,
|
|
363
|
+
accessTokenExpiresAt: session.accessTokenExpiresAt,
|
|
364
|
+
sessionId: session.sessionId,
|
|
365
|
+
};
|
|
366
|
+
},
|
|
367
|
+
consume(sessionId) {
|
|
368
|
+
deviceSessions.delete(sessionId);
|
|
369
|
+
},
|
|
370
|
+
},
|
|
371
|
+
});
|
|
372
|
+
return jsonResponse(result.body, {
|
|
373
|
+
status: result.status,
|
|
374
|
+
headers: result.headers,
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
return {
|
|
378
|
+
kind: "ps-lite",
|
|
379
|
+
storage: options.storage,
|
|
380
|
+
activate() {
|
|
381
|
+
active = true;
|
|
382
|
+
},
|
|
383
|
+
deactivate() {
|
|
384
|
+
active = false;
|
|
385
|
+
},
|
|
386
|
+
isAvailable() {
|
|
387
|
+
return active;
|
|
388
|
+
},
|
|
389
|
+
async fetch(request) {
|
|
390
|
+
return withProtocolErrors(async () => {
|
|
391
|
+
const url = new URL(request.url);
|
|
392
|
+
if (url.pathname === "/health") {
|
|
393
|
+
const apiOrigin = url.origin;
|
|
394
|
+
const identity = options.identity ?? null;
|
|
395
|
+
let serverId = null;
|
|
396
|
+
if (identity && options.gateway) {
|
|
397
|
+
try {
|
|
398
|
+
const server = await options.gateway.getServer(identity.address);
|
|
399
|
+
serverId = server?.id ?? null;
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
serverId = null;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
const registration = options.serverOwner && identity
|
|
406
|
+
? {
|
|
407
|
+
ownerAddress: options.serverOwner,
|
|
408
|
+
serverAddress: identity.address,
|
|
409
|
+
publicKey: identity.publicKey,
|
|
410
|
+
serverUrl: apiOrigin,
|
|
411
|
+
serverId,
|
|
412
|
+
registered: Boolean(serverId),
|
|
413
|
+
}
|
|
414
|
+
: null;
|
|
415
|
+
const capabilities = dataStorage.capabilities;
|
|
416
|
+
const stateCapabilities = {
|
|
417
|
+
tokens: tokenStore
|
|
418
|
+
.capabilities?.tokens ?? "custom",
|
|
419
|
+
accessLogs: accessLogReader.capabilities?.accessLogs ?? "custom",
|
|
420
|
+
config: options.stateCapabilities?.config ??
|
|
421
|
+
(options.saveConfig ? "custom" : "indexeddb"),
|
|
422
|
+
};
|
|
423
|
+
return jsonResponse({
|
|
424
|
+
status: active ? "healthy" : "unavailable",
|
|
425
|
+
runtime: "ps-lite",
|
|
426
|
+
storage: options.storage.kind,
|
|
427
|
+
capabilities: capabilities ?? null,
|
|
428
|
+
stateCapabilities,
|
|
429
|
+
owner: options.serverOwner ?? null,
|
|
430
|
+
apiOrigin,
|
|
431
|
+
gatewayUrl: options.config?.gateway?.url ?? null,
|
|
432
|
+
gatewayConfig: options.config?.gateway ?? null,
|
|
433
|
+
identity,
|
|
434
|
+
registration,
|
|
435
|
+
active,
|
|
436
|
+
checkedAt: now().toISOString(),
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
if (!active) {
|
|
440
|
+
return unavailableResponse();
|
|
441
|
+
}
|
|
442
|
+
const dataPrefix = "/v1/data";
|
|
443
|
+
if (url.pathname === dataPrefix ||
|
|
444
|
+
url.pathname.startsWith(`${dataPrefix}/`)) {
|
|
445
|
+
return handlePersonalServerDataRequest(request, {
|
|
446
|
+
storage: dataStorage,
|
|
447
|
+
auth,
|
|
448
|
+
schemaResolver: options.gateway,
|
|
449
|
+
accessLogWriter,
|
|
450
|
+
syncManager: options.syncManager ?? null,
|
|
451
|
+
now,
|
|
452
|
+
createLogId,
|
|
453
|
+
}, { basePath: dataPrefix });
|
|
454
|
+
}
|
|
455
|
+
if (url.pathname.startsWith("/auth/device")) {
|
|
456
|
+
const response = await handleAuthDevice(request, url);
|
|
457
|
+
if (response)
|
|
458
|
+
return response;
|
|
459
|
+
}
|
|
460
|
+
if (url.pathname === "/oauth/token") {
|
|
461
|
+
return handleOauthToken(request);
|
|
462
|
+
}
|
|
463
|
+
const grantsPrefix = "/v1/grants";
|
|
464
|
+
if (url.pathname === grantsPrefix ||
|
|
465
|
+
url.pathname === `${grantsPrefix}/`) {
|
|
466
|
+
if (request.method === "GET") {
|
|
467
|
+
await auth.authorizeOwner(request);
|
|
468
|
+
if (!options.gateway)
|
|
469
|
+
return gatewayRequiredResponse();
|
|
470
|
+
return sendContractResult(await listGrantsContract({
|
|
471
|
+
gateway: options.gateway,
|
|
472
|
+
serverOwner: options.serverOwner ?? options.identity?.address,
|
|
473
|
+
}));
|
|
474
|
+
}
|
|
475
|
+
if (request.method === "POST") {
|
|
476
|
+
await auth.authorizeOwner(request);
|
|
477
|
+
if (!options.gateway)
|
|
478
|
+
return gatewayRequiredResponse();
|
|
479
|
+
let body;
|
|
480
|
+
try {
|
|
481
|
+
body = await request.json();
|
|
482
|
+
}
|
|
483
|
+
catch {
|
|
484
|
+
return errorResponse(400, "INVALID_BODY", "Invalid JSON body");
|
|
485
|
+
}
|
|
486
|
+
return sendContractResult(await createGrantContract({
|
|
487
|
+
gateway: options.gateway,
|
|
488
|
+
serverOwner: options.serverOwner ?? options.identity?.address,
|
|
489
|
+
serverSigner: options.serverSigner,
|
|
490
|
+
body,
|
|
491
|
+
now: () => now().getTime(),
|
|
492
|
+
}));
|
|
493
|
+
}
|
|
494
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
495
|
+
}
|
|
496
|
+
if (url.pathname === `${grantsPrefix}/verify`) {
|
|
497
|
+
if (request.method !== "POST") {
|
|
498
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
499
|
+
}
|
|
500
|
+
let body;
|
|
501
|
+
try {
|
|
502
|
+
body = await request.json();
|
|
503
|
+
}
|
|
504
|
+
catch {
|
|
505
|
+
return errorResponse(400, "INVALID_BODY", "Invalid JSON body");
|
|
506
|
+
}
|
|
507
|
+
return sendContractResult(await verifyGrantContract(body));
|
|
508
|
+
}
|
|
509
|
+
const accessLogsPrefix = "/v1/access-logs";
|
|
510
|
+
if (url.pathname === accessLogsPrefix ||
|
|
511
|
+
url.pathname === `${accessLogsPrefix}/`) {
|
|
512
|
+
return handlePersonalServerAccessLogsRequest(request, { auth, accessLogReader }, { basePath: accessLogsPrefix });
|
|
513
|
+
}
|
|
514
|
+
const syncPrefix = "/v1/sync";
|
|
515
|
+
if (url.pathname === `${syncPrefix}/trigger` ||
|
|
516
|
+
url.pathname === `${syncPrefix}/status` ||
|
|
517
|
+
url.pathname.startsWith(`${syncPrefix}/file/`)) {
|
|
518
|
+
return handlePersonalServerSyncRequest(request, { auth, syncManager: options.syncManager ?? null }, { basePath: syncPrefix });
|
|
519
|
+
}
|
|
520
|
+
if (url.pathname === "/ui/api/config") {
|
|
521
|
+
if (request.method === "GET") {
|
|
522
|
+
await auth.authorizeOwner(request);
|
|
523
|
+
return jsonResponse(options.config ?? {});
|
|
524
|
+
}
|
|
525
|
+
if (request.method === "PUT") {
|
|
526
|
+
await auth.authorizeOwner(request);
|
|
527
|
+
const parsed = await parseJsonObjectBody(request);
|
|
528
|
+
if (!parsed.ok)
|
|
529
|
+
return sendContractResult(parsed.result);
|
|
530
|
+
const result = validateServerConfigContract(parsed.body);
|
|
531
|
+
if (!result.ok)
|
|
532
|
+
return sendContractResult(result);
|
|
533
|
+
await saveConfig?.(result.body.config);
|
|
534
|
+
return sendContractResult(result);
|
|
535
|
+
}
|
|
536
|
+
return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
|
|
537
|
+
}
|
|
538
|
+
return errorResponse(404, "NOT_FOUND", "Not found");
|
|
539
|
+
});
|
|
540
|
+
},
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
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"}
|