@opendatalabs/personal-server-ts-lite 0.0.1-canary.00328bf
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 +58 -0
- package/dist/browser-runtime.d.ts.map +1 -0
- package/dist/browser-runtime.js +214 -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 +22 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +408 -0
- package/dist/client.js.map +1 -0
- package/dist/derivatives.d.ts +51 -0
- package/dist/derivatives.d.ts.map +1 -0
- package/dist/derivatives.js +87 -0
- package/dist/derivatives.js.map +1 -0
- package/dist/diagnostics.d.ts +166 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +265 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-store.d.ts +35 -0
- package/dist/mcp-store.d.ts.map +1 -0
- package/dist/mcp-store.js +208 -0
- package/dist/mcp-store.js.map +1 -0
- package/dist/owner-binding.d.ts +7 -0
- package/dist/owner-binding.d.ts.map +1 -0
- package/dist/owner-binding.js +18 -0
- package/dist/owner-binding.js.map +1 -0
- package/dist/persistence.d.ts +69 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/persistence.js +58 -0
- package/dist/persistence.js.map +1 -0
- package/dist/relay-tls.d.ts +61 -0
- package/dist/relay-tls.d.ts.map +1 -0
- package/dist/relay-tls.js +316 -0
- package/dist/relay-tls.js.map +1 -0
- package/dist/relay.d.ts +149 -0
- package/dist/relay.d.ts.map +1 -0
- package/dist/relay.js +646 -0
- package/dist/relay.js.map +1 -0
- package/dist/runtime.d.ts +188 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1178 -0
- package/dist/runtime.js.map +1 -0
- package/dist/state.d.ts +72 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +366 -0
- package/dist/state.js.map +1 -0
- package/dist/storage-utils.d.ts +8 -0
- package/dist/storage-utils.d.ts.map +1 -0
- package/dist/storage-utils.js +67 -0
- package/dist/storage-utils.js.map +1 -0
- package/dist/storage.d.ts +61 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +718 -0
- package/dist/storage.js.map +1 -0
- package/dist/sync.d.ts +58 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +216 -0
- package/dist/sync.js.map +1 -0
- package/package.json +40 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import { accessLogsListPath, createOwnerSignedPersonalServerRequest, createPersonalServerInfoFromHealth, createPersonalServerRegistrationRequest, dataListPath, dataReadPath, dataVersionsPath, grantRevokePath, parsePersonalServerJsonResponse, requestPath, submitPersonalServerRegistration, } from "@opendatalabs/personal-server-ts-core/client";
|
|
2
|
+
import { createGatewayClient, } from "@opendatalabs/vana-sdk/browser";
|
|
3
|
+
import { createIndexedDbPsLiteRuntime, } from "./browser-runtime.js";
|
|
4
|
+
import { createRelayDrainGatedReadFulfillmentReporter, psLiteRelayPublicUrl, startPsLiteRelayClient, } from "./relay.js";
|
|
5
|
+
import { createIndexedDbPsLiteStateStore, loadPsLiteRelayState, savePsLiteRelayState, } from "./state.js";
|
|
6
|
+
const DEFAULT_LITE_ORIGIN = "https://ps-lite.local";
|
|
7
|
+
export async function startPersonalServer(options) {
|
|
8
|
+
if (options.persistence && options.runtime) {
|
|
9
|
+
throw new Error("runtime cannot be supplied with a complete persistence bundle");
|
|
10
|
+
}
|
|
11
|
+
if (options.persistence && options.relayStateStore) {
|
|
12
|
+
throw new Error("relayStateStore cannot be supplied with a complete persistence bundle");
|
|
13
|
+
}
|
|
14
|
+
const localOrigin = options.localOrigin ?? DEFAULT_LITE_ORIGIN;
|
|
15
|
+
const relayOptions = options.relay || undefined;
|
|
16
|
+
const relayStateStore = relayOptions
|
|
17
|
+
? (options.relayStateStore ??
|
|
18
|
+
options.persistence?.state ??
|
|
19
|
+
(options.runtime
|
|
20
|
+
? undefined
|
|
21
|
+
: createIndexedDbPsLiteStateStore({
|
|
22
|
+
dbName: options.dbName ?? "personal-server-lite",
|
|
23
|
+
storeName: options.stateStoreName ?? "state",
|
|
24
|
+
})))
|
|
25
|
+
: undefined;
|
|
26
|
+
const savedRelayState = relayStateStore
|
|
27
|
+
? await loadPsLiteRelayState(relayStateStore).catch(() => null)
|
|
28
|
+
: null;
|
|
29
|
+
const resolvedRelayOptions = relayOptions
|
|
30
|
+
? {
|
|
31
|
+
...relayOptions,
|
|
32
|
+
sessionId: relayOptions.sessionId ??
|
|
33
|
+
savedRelaySessionId(savedRelayState, relayOptions) ??
|
|
34
|
+
randomSessionId(),
|
|
35
|
+
}
|
|
36
|
+
: undefined;
|
|
37
|
+
const initialPublicUrl = resolvedRelayOptions
|
|
38
|
+
? psLiteRelayPublicUrl(resolvedRelayOptions.sessionId, resolvedRelayOptions.publicSuffix)
|
|
39
|
+
: null;
|
|
40
|
+
const runtimeOrigin = initialPublicUrl ?? localOrigin;
|
|
41
|
+
// Late-bound relay handle for the drain-gated fulfillment reporter: the
|
|
42
|
+
// runtime needs the (wrapped) reporter at construction time, but the relay
|
|
43
|
+
// client only starts further down. Until it exists, reports pass through.
|
|
44
|
+
let relayClientForDrain;
|
|
45
|
+
const readFulfillmentReporter = options.readFulfillmentReporter && resolvedRelayOptions
|
|
46
|
+
? createRelayDrainGatedReadFulfillmentReporter(options.readFulfillmentReporter, () => relayClientForDrain)
|
|
47
|
+
: options.readFulfillmentReporter;
|
|
48
|
+
const runtimeBundle = options.runtime
|
|
49
|
+
? null
|
|
50
|
+
: await createIndexedDbPsLiteRuntime({
|
|
51
|
+
...options,
|
|
52
|
+
readFulfillmentReporter,
|
|
53
|
+
ownerSignature: requiredOwnerSignature(options.ownerSignature),
|
|
54
|
+
active: options.active ?? true,
|
|
55
|
+
runtimeOrigin,
|
|
56
|
+
configDefaults: configDefaultsWithOrigin(options.configDefaults, runtimeOrigin),
|
|
57
|
+
});
|
|
58
|
+
const runtime = options.runtime ?? runtimeBundle.runtime;
|
|
59
|
+
if (options.active ?? true) {
|
|
60
|
+
runtime.activate();
|
|
61
|
+
}
|
|
62
|
+
let status = "ready";
|
|
63
|
+
let relayStatus = "closed";
|
|
64
|
+
let relayClient;
|
|
65
|
+
let publicUrl = null;
|
|
66
|
+
let lastInfo = null;
|
|
67
|
+
let lastPreparedRegistration = null;
|
|
68
|
+
const gateway = options.gateway;
|
|
69
|
+
const setStatus = (nextStatus) => {
|
|
70
|
+
status = nextStatus;
|
|
71
|
+
options.onStatus?.(nextStatus);
|
|
72
|
+
};
|
|
73
|
+
if (resolvedRelayOptions) {
|
|
74
|
+
relayStatus = "connecting";
|
|
75
|
+
publicUrl = initialPublicUrl;
|
|
76
|
+
relayClient = startPsLiteRelayClient({
|
|
77
|
+
...resolvedRelayOptions,
|
|
78
|
+
runtime,
|
|
79
|
+
origin: runtimeOrigin,
|
|
80
|
+
tlsIdentityStore: options.persistence?.relayTlsIdentity ??
|
|
81
|
+
resolvedRelayOptions.tlsIdentityStore,
|
|
82
|
+
onStatus(nextRelayStatus, detail) {
|
|
83
|
+
relayStatus = nextRelayStatus;
|
|
84
|
+
if (nextRelayStatus === "error")
|
|
85
|
+
setStatus("error");
|
|
86
|
+
resolvedRelayOptions.onStatus?.(nextRelayStatus, detail);
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
relayClientForDrain = relayClient;
|
|
90
|
+
}
|
|
91
|
+
async function info() {
|
|
92
|
+
if (status === "stopped" && lastInfo) {
|
|
93
|
+
return { ...lastInfo, status: "stopped" };
|
|
94
|
+
}
|
|
95
|
+
const response = await runtime.fetch(new Request(`${localOrigin}/health`));
|
|
96
|
+
const body = await response.json();
|
|
97
|
+
lastInfo = createPersonalServerInfoFromHealth({
|
|
98
|
+
kind: "lite",
|
|
99
|
+
status,
|
|
100
|
+
health: {
|
|
101
|
+
...body,
|
|
102
|
+
relay: { status: relayStatus, publicUrl },
|
|
103
|
+
},
|
|
104
|
+
localUrl: localOrigin,
|
|
105
|
+
publicUrl,
|
|
106
|
+
});
|
|
107
|
+
return lastInfo;
|
|
108
|
+
}
|
|
109
|
+
async function prepareRegistration(prepareOptions = {}) {
|
|
110
|
+
const current = await info();
|
|
111
|
+
const serverUrl = prepareOptions.serverUrl ?? current.urls.registration;
|
|
112
|
+
if (!current.ownerAddress || !current.server || !serverUrl) {
|
|
113
|
+
throw new Error("Personal Server identity and URL are required");
|
|
114
|
+
}
|
|
115
|
+
if (!current.gatewayConfig) {
|
|
116
|
+
throw new Error("Personal Server gateway config is required");
|
|
117
|
+
}
|
|
118
|
+
const request = createPersonalServerRegistrationRequest({
|
|
119
|
+
gatewayConfig: current.gatewayConfig,
|
|
120
|
+
ownerAddress: current.ownerAddress,
|
|
121
|
+
serverAddress: current.server.address,
|
|
122
|
+
publicKey: current.server.publicKey,
|
|
123
|
+
serverUrl,
|
|
124
|
+
});
|
|
125
|
+
lastPreparedRegistration = request;
|
|
126
|
+
return request;
|
|
127
|
+
}
|
|
128
|
+
async function submitRegistration(submitOptions) {
|
|
129
|
+
const request = submitOptions.request ??
|
|
130
|
+
(submitOptions.serverUrl
|
|
131
|
+
? await prepareRegistration({ serverUrl: submitOptions.serverUrl })
|
|
132
|
+
: (lastPreparedRegistration ?? (await prepareRegistration())));
|
|
133
|
+
const gatewayClient = gateway ?? createGatewayClient(requiredGatewayUrl(await info()));
|
|
134
|
+
return submitPersonalServerRegistration({
|
|
135
|
+
gateway: gatewayClient,
|
|
136
|
+
request,
|
|
137
|
+
signature: submitOptions.signature,
|
|
138
|
+
}).then(async (result) => {
|
|
139
|
+
await rememberRegisteredRelay(request.candidate.serverUrl);
|
|
140
|
+
return result;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
async function callFetch(input, init) {
|
|
144
|
+
const origin = (await info()).urls.apiOrigin ?? localOrigin;
|
|
145
|
+
return runtime.fetch(await toRuntimeRequest(input, origin, init));
|
|
146
|
+
}
|
|
147
|
+
async function postData(scope, body, postOptions) {
|
|
148
|
+
const current = await info();
|
|
149
|
+
const origin = requiredApiOrigin(current);
|
|
150
|
+
const path = `/v1/data/${encodeURIComponent(scope)}`;
|
|
151
|
+
const request = await createOwnerRequest({
|
|
152
|
+
origin,
|
|
153
|
+
path,
|
|
154
|
+
method: "POST",
|
|
155
|
+
body,
|
|
156
|
+
authOptions: postOptions,
|
|
157
|
+
headers: {
|
|
158
|
+
"Content-Type": "application/json",
|
|
159
|
+
...postOptions.headers,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "data write");
|
|
163
|
+
}
|
|
164
|
+
async function listData(listOptions = {}) {
|
|
165
|
+
const current = await info();
|
|
166
|
+
const request = await createOwnerRequest({
|
|
167
|
+
origin: requiredApiOrigin(current),
|
|
168
|
+
path: dataListPath(listOptions),
|
|
169
|
+
method: "GET",
|
|
170
|
+
authOptions: listOptions,
|
|
171
|
+
headers: listOptions.headers,
|
|
172
|
+
});
|
|
173
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "data list");
|
|
174
|
+
}
|
|
175
|
+
async function listAccessLogs(accessLogOptions = {}) {
|
|
176
|
+
const current = await info();
|
|
177
|
+
const request = await createOwnerRequest({
|
|
178
|
+
origin: requiredApiOrigin(current),
|
|
179
|
+
path: accessLogsListPath(accessLogOptions),
|
|
180
|
+
method: "GET",
|
|
181
|
+
authOptions: accessLogOptions,
|
|
182
|
+
headers: accessLogOptions.headers,
|
|
183
|
+
});
|
|
184
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "access logs list");
|
|
185
|
+
}
|
|
186
|
+
async function listVersions(scope, versionOptions = {}) {
|
|
187
|
+
const current = await info();
|
|
188
|
+
const request = await createOwnerRequest({
|
|
189
|
+
origin: requiredApiOrigin(current),
|
|
190
|
+
path: dataVersionsPath(scope, versionOptions),
|
|
191
|
+
method: "GET",
|
|
192
|
+
authOptions: versionOptions,
|
|
193
|
+
headers: versionOptions.headers,
|
|
194
|
+
});
|
|
195
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "data versions list");
|
|
196
|
+
}
|
|
197
|
+
async function readData(scope, readOptions = {}) {
|
|
198
|
+
const current = await info();
|
|
199
|
+
const request = await createOwnerRequest({
|
|
200
|
+
origin: requiredApiOrigin(current),
|
|
201
|
+
path: dataReadPath(scope, readOptions),
|
|
202
|
+
method: "GET",
|
|
203
|
+
authOptions: readOptions,
|
|
204
|
+
headers: readOptions.headers,
|
|
205
|
+
});
|
|
206
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "data read");
|
|
207
|
+
}
|
|
208
|
+
async function syncStatus(syncOptions = {}) {
|
|
209
|
+
const current = await info();
|
|
210
|
+
const request = await createOwnerRequest({
|
|
211
|
+
origin: requiredApiOrigin(current),
|
|
212
|
+
path: "/v1/sync/status",
|
|
213
|
+
method: "GET",
|
|
214
|
+
authOptions: syncOptions,
|
|
215
|
+
headers: syncOptions.headers,
|
|
216
|
+
});
|
|
217
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "sync status");
|
|
218
|
+
}
|
|
219
|
+
async function createGrant(grantOptions) {
|
|
220
|
+
const current = await info();
|
|
221
|
+
const request = await createOwnerRequest({
|
|
222
|
+
origin: requiredApiOrigin(current),
|
|
223
|
+
path: "/v1/grants",
|
|
224
|
+
method: "POST",
|
|
225
|
+
body: {
|
|
226
|
+
granteeAddress: grantOptions.granteeAddress,
|
|
227
|
+
scopes: grantOptions.scopes,
|
|
228
|
+
...(grantOptions.expiresAt === undefined
|
|
229
|
+
? {}
|
|
230
|
+
: { expiresAt: grantOptions.expiresAt }),
|
|
231
|
+
...(grantOptions.grantVersion === undefined
|
|
232
|
+
? {}
|
|
233
|
+
: { grantVersion: grantOptions.grantVersion }),
|
|
234
|
+
},
|
|
235
|
+
authOptions: grantOptions,
|
|
236
|
+
headers: {
|
|
237
|
+
"Content-Type": "application/json",
|
|
238
|
+
...grantOptions.headers,
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "grant create");
|
|
242
|
+
}
|
|
243
|
+
async function listGrants(grantOptions = {}) {
|
|
244
|
+
const current = await info();
|
|
245
|
+
const request = await createOwnerRequest({
|
|
246
|
+
origin: requiredApiOrigin(current),
|
|
247
|
+
path: "/v1/grants",
|
|
248
|
+
method: "GET",
|
|
249
|
+
authOptions: grantOptions,
|
|
250
|
+
headers: grantOptions.headers,
|
|
251
|
+
});
|
|
252
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "grant list");
|
|
253
|
+
}
|
|
254
|
+
async function revokeGrant(grantId, grantOptions = {}) {
|
|
255
|
+
const current = await info();
|
|
256
|
+
const request = await createOwnerRequest({
|
|
257
|
+
origin: requiredApiOrigin(current),
|
|
258
|
+
path: grantRevokePath(grantId),
|
|
259
|
+
method: "DELETE",
|
|
260
|
+
authOptions: grantOptions,
|
|
261
|
+
headers: grantOptions.headers,
|
|
262
|
+
});
|
|
263
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "grant revoke");
|
|
264
|
+
}
|
|
265
|
+
async function syncNow(syncOptions = {}) {
|
|
266
|
+
const current = await info();
|
|
267
|
+
const request = await createOwnerRequest({
|
|
268
|
+
origin: requiredApiOrigin(current),
|
|
269
|
+
path: "/v1/sync/trigger",
|
|
270
|
+
method: "POST",
|
|
271
|
+
authOptions: syncOptions,
|
|
272
|
+
headers: syncOptions.headers,
|
|
273
|
+
});
|
|
274
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "sync trigger");
|
|
275
|
+
}
|
|
276
|
+
async function rememberRegisteredRelay(serverUrl) {
|
|
277
|
+
if (!resolvedRelayOptions || !relayStateStore)
|
|
278
|
+
return;
|
|
279
|
+
await savePsLiteRelayState(relayStateStore, {
|
|
280
|
+
sessionId: resolvedRelayOptions.sessionId,
|
|
281
|
+
controlUrl: resolvedRelayOptions.controlUrl,
|
|
282
|
+
publicSuffix: resolvedRelayOptions.publicSuffix,
|
|
283
|
+
publicUrl: serverUrl,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
async function createOwnerRequest(params) {
|
|
287
|
+
const encoded = params.body === undefined
|
|
288
|
+
? undefined
|
|
289
|
+
: new TextEncoder().encode(JSON.stringify(params.body));
|
|
290
|
+
const auth = authFromOptions(params.authOptions);
|
|
291
|
+
if (auth) {
|
|
292
|
+
return createOwnerSignedPersonalServerRequest({
|
|
293
|
+
origin: params.origin,
|
|
294
|
+
path: params.path,
|
|
295
|
+
method: params.method,
|
|
296
|
+
body: encoded,
|
|
297
|
+
auth,
|
|
298
|
+
headers: params.headers,
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
return new Request(`${params.origin}${params.path}`, {
|
|
302
|
+
method: params.method,
|
|
303
|
+
body: encoded,
|
|
304
|
+
headers: params.headers,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
async function stop() {
|
|
308
|
+
if (status === "stopped")
|
|
309
|
+
return;
|
|
310
|
+
relayClient?.close("personal-server-stop");
|
|
311
|
+
relayClient = undefined;
|
|
312
|
+
runtime.deactivate();
|
|
313
|
+
await runtimeBundle?.syncManager?.stop?.();
|
|
314
|
+
setStatus("stopped");
|
|
315
|
+
}
|
|
316
|
+
return {
|
|
317
|
+
kind: "lite",
|
|
318
|
+
ready: (_options) => info(),
|
|
319
|
+
info,
|
|
320
|
+
prepareRegistration,
|
|
321
|
+
submitRegistration,
|
|
322
|
+
fetch: callFetch,
|
|
323
|
+
postData,
|
|
324
|
+
listData,
|
|
325
|
+
listAccessLogs,
|
|
326
|
+
listVersions,
|
|
327
|
+
readData,
|
|
328
|
+
createGrant,
|
|
329
|
+
listGrants,
|
|
330
|
+
revokeGrant,
|
|
331
|
+
syncStatus,
|
|
332
|
+
syncNow,
|
|
333
|
+
stop,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
function savedRelaySessionId(state, options) {
|
|
337
|
+
if (!state?.sessionId)
|
|
338
|
+
return null;
|
|
339
|
+
if (options.controlUrl && state.controlUrl !== options.controlUrl)
|
|
340
|
+
return null;
|
|
341
|
+
if (options.publicSuffix && state.publicSuffix !== options.publicSuffix) {
|
|
342
|
+
return null;
|
|
343
|
+
}
|
|
344
|
+
return state.sessionId;
|
|
345
|
+
}
|
|
346
|
+
function randomSessionId() {
|
|
347
|
+
const bytes = crypto.getRandomValues(new Uint8Array(12));
|
|
348
|
+
return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
349
|
+
}
|
|
350
|
+
function authFromOptions(options) {
|
|
351
|
+
if ("auth" in options && options.auth)
|
|
352
|
+
return options.auth;
|
|
353
|
+
if ("signMessage" in options)
|
|
354
|
+
return { signMessage: options.signMessage };
|
|
355
|
+
if ("bearerToken" in options)
|
|
356
|
+
return { bearerToken: options.bearerToken };
|
|
357
|
+
return undefined;
|
|
358
|
+
}
|
|
359
|
+
function requiredOwnerSignature(ownerSignature) {
|
|
360
|
+
if (!ownerSignature) {
|
|
361
|
+
throw new Error("ownerSignature is required to start PS Lite");
|
|
362
|
+
}
|
|
363
|
+
return ownerSignature;
|
|
364
|
+
}
|
|
365
|
+
function configDefaultsWithOrigin(defaults, origin) {
|
|
366
|
+
return {
|
|
367
|
+
...defaults,
|
|
368
|
+
server: {
|
|
369
|
+
...defaults?.server,
|
|
370
|
+
origin,
|
|
371
|
+
},
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
function requiredGatewayUrl(info) {
|
|
375
|
+
if (!info.gatewayUrl) {
|
|
376
|
+
throw new Error("Personal Server gateway URL is required");
|
|
377
|
+
}
|
|
378
|
+
return info.gatewayUrl;
|
|
379
|
+
}
|
|
380
|
+
function requiredApiOrigin(info) {
|
|
381
|
+
if (!info.urls.apiOrigin) {
|
|
382
|
+
throw new Error("Personal Server API origin is required");
|
|
383
|
+
}
|
|
384
|
+
return info.urls.apiOrigin;
|
|
385
|
+
}
|
|
386
|
+
async function toRuntimeRequest(input, origin, init) {
|
|
387
|
+
const url = `${origin}${requestPath(input)}`;
|
|
388
|
+
if (input instanceof Request) {
|
|
389
|
+
// Rebuild onto the runtime origin with an explicitly buffered body.
|
|
390
|
+
// `new Request(url, request)` treats the request as an init bag and reads
|
|
391
|
+
// its body via the `Request.prototype.body` getter, which Firefox does
|
|
392
|
+
// not implement (no fetch upload streaming) - the body silently drops and
|
|
393
|
+
// every POST reaches the runtime empty ("Request body must be valid
|
|
394
|
+
// JSON"). Buffering via arrayBuffer() works in every engine.
|
|
395
|
+
const buffered = input.method === "GET" || input.method === "HEAD"
|
|
396
|
+
? undefined
|
|
397
|
+
: await input.clone().arrayBuffer();
|
|
398
|
+
const base = new Request(url, {
|
|
399
|
+
method: input.method,
|
|
400
|
+
headers: input.headers,
|
|
401
|
+
body: buffered && buffered.byteLength > 0 ? buffered : undefined,
|
|
402
|
+
signal: input.signal,
|
|
403
|
+
});
|
|
404
|
+
return init ? new Request(base, init) : base;
|
|
405
|
+
}
|
|
406
|
+
return new Request(url, init);
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PS-Lite wiring for the derivative compute layer: a question store that
|
|
3
|
+
* persists through the runtime's state store, and the compute + scheduler
|
|
4
|
+
* built on the browser-safe core pieces (fetch-based inference provider).
|
|
5
|
+
*/
|
|
6
|
+
import type { ServerConfig } from "@opendatalabs/personal-server-ts-core/schemas";
|
|
7
|
+
import type { DataStoragePort, RuntimeAvailabilityPort } from "@opendatalabs/personal-server-ts-core/ports";
|
|
8
|
+
import type { ScopeDeletionTracker } from "@opendatalabs/personal-server-ts-core/sync";
|
|
9
|
+
import type { DataWritePolicyPorts } from "@opendatalabs/personal-server-ts-core/policy";
|
|
10
|
+
import { type ComputeSyncNotifier, type InferenceProvider, type QuestionStore, type RecomputeScheduler } from "@opendatalabs/personal-server-ts-core/derivatives";
|
|
11
|
+
import type { Logger } from "@opendatalabs/personal-server-ts-core/logger";
|
|
12
|
+
import type { RequestSigner } from "@opendatalabs/personal-server-ts-core/signing";
|
|
13
|
+
import type { PsLiteStateStore } from "./state.js";
|
|
14
|
+
/** A question store persisted as one JSON value in the PS-Lite state store. */
|
|
15
|
+
export declare function createPsLiteQuestionStore(stateStore: PsLiteStateStore): Promise<QuestionStore>;
|
|
16
|
+
/**
|
|
17
|
+
* The browser build must not call a provider directly with no key: the
|
|
18
|
+
* default base URL is a direct provider, so the compute layer only comes up
|
|
19
|
+
* when `inference.baseUrl` names a relay (or a provider is injected).
|
|
20
|
+
*/
|
|
21
|
+
export declare function psLiteInferenceConfigured(config: ServerConfig): boolean;
|
|
22
|
+
export interface PsLiteDerivativeComputeOptions {
|
|
23
|
+
config: ServerConfig;
|
|
24
|
+
storage: DataStoragePort;
|
|
25
|
+
store: QuestionStore;
|
|
26
|
+
serverOwner: `0x${string}` | undefined;
|
|
27
|
+
/** Resolved per compute so a sync manager created later is still seen. */
|
|
28
|
+
syncManager?: () => ComputeSyncNotifier | null | undefined;
|
|
29
|
+
/** Same: the tracker is built together with the sync manager. */
|
|
30
|
+
scopeDeletions?: () => ScopeDeletionTracker | undefined;
|
|
31
|
+
writePolicyPorts?: DataWritePolicyPorts;
|
|
32
|
+
/** Computes are skipped (status untouched) while the runtime is inactive. */
|
|
33
|
+
runtimeAvailability?: RuntimeAvailabilityPort;
|
|
34
|
+
/** Defaults to the OpenAI-compatible client on `config.inference`. */
|
|
35
|
+
provider?: InferenceProvider;
|
|
36
|
+
/**
|
|
37
|
+
* Signs the relay calls (chat completion and attested-key fetch) as this
|
|
38
|
+
* personal server: the same signer the gateway registration and the
|
|
39
|
+
* lineage reads use in the browser. Without it the relay answers 401.
|
|
40
|
+
*/
|
|
41
|
+
requestSigner?: RequestSigner;
|
|
42
|
+
logger?: Logger;
|
|
43
|
+
now?: () => Date;
|
|
44
|
+
}
|
|
45
|
+
export interface PsLiteDerivativeCompute {
|
|
46
|
+
store: QuestionStore;
|
|
47
|
+
scheduler: RecomputeScheduler;
|
|
48
|
+
provider: InferenceProvider;
|
|
49
|
+
}
|
|
50
|
+
export declare function createPsLiteDerivativeCompute(options: PsLiteDerivativeComputeOptions): PsLiteDerivativeCompute;
|
|
51
|
+
//# sourceMappingURL=derivatives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivatives.d.ts","sourceRoot":"","sources":["../src/derivatives.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8CAA8C,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAmBnD,+EAA+E;AAC/E,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAoBxB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAKvE;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;IACvC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,mBAAmB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,oBAAoB,GAAG,SAAS,CAAC;IACxD,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C,sEAAsE;IACtE,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,8BAA8B,GACtC,uBAAuB,CAuDzB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PS-Lite wiring for the derivative compute layer: a question store that
|
|
3
|
+
* persists through the runtime's state store, and the compute + scheduler
|
|
4
|
+
* built on the browser-safe core pieces (fetch-based inference provider).
|
|
5
|
+
*/
|
|
6
|
+
import { computeQuestion, createInMemoryQuestionStore, createOpenAiCompatibleInferenceProvider, createPhalaE2eeEncryption, createRecomputeScheduler, DEFAULT_INFERENCE_BASE_URL, } from "@opendatalabs/personal-server-ts-core/derivatives";
|
|
7
|
+
const QUESTIONS_KEY = "derivative-questions-v1";
|
|
8
|
+
/** A question store persisted as one JSON value in the PS-Lite state store. */
|
|
9
|
+
export async function createPsLiteQuestionStore(stateStore) {
|
|
10
|
+
const saved = await stateStore.get(QUESTIONS_KEY);
|
|
11
|
+
// Registrations saved before the recompute policy existed keep the old
|
|
12
|
+
// follow-every-change behavior, and ones saved before answer shapes keep
|
|
13
|
+
// the free-text answer.
|
|
14
|
+
const initial = (saved?.version === 1 ? saved.questions : []).map((question) => ({
|
|
15
|
+
...question,
|
|
16
|
+
recompute: question.recompute ?? "on-change",
|
|
17
|
+
answerShape: question.answerShape ?? null,
|
|
18
|
+
}));
|
|
19
|
+
return createInMemoryQuestionStore({
|
|
20
|
+
initial,
|
|
21
|
+
onChange: (questions) => stateStore.set(QUESTIONS_KEY, {
|
|
22
|
+
version: 1,
|
|
23
|
+
questions,
|
|
24
|
+
}),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The browser build must not call a provider directly with no key: the
|
|
29
|
+
* default base URL is a direct provider, so the compute layer only comes up
|
|
30
|
+
* when `inference.baseUrl` names a relay (or a provider is injected).
|
|
31
|
+
*/
|
|
32
|
+
export function psLiteInferenceConfigured(config) {
|
|
33
|
+
return (config.inference.baseUrl.replace(/\/+$/, "") !==
|
|
34
|
+
DEFAULT_INFERENCE_BASE_URL.replace(/\/+$/, ""));
|
|
35
|
+
}
|
|
36
|
+
export function createPsLiteDerivativeCompute(options) {
|
|
37
|
+
const logger = options.logger
|
|
38
|
+
? {
|
|
39
|
+
info: (payload, message) => options.logger?.info(payload, message),
|
|
40
|
+
warn: (payload, message) => options.logger?.warn(payload, message),
|
|
41
|
+
}
|
|
42
|
+
: undefined;
|
|
43
|
+
const provider = options.provider ??
|
|
44
|
+
createOpenAiCompatibleInferenceProvider({
|
|
45
|
+
baseUrl: options.config.inference.baseUrl,
|
|
46
|
+
model: options.config.inference.model,
|
|
47
|
+
// PS-Lite holds no provider key: it always talks to the Vana relay,
|
|
48
|
+
// which forwards only requests signed as the owner's server.
|
|
49
|
+
requestSigner: options.requestSigner,
|
|
50
|
+
// E2EE v2 to the Phala gateway (WebCrypto only, so it runs in the
|
|
51
|
+
// browser): the relay sees ciphertext. `inference.e2ee: false` turns
|
|
52
|
+
// it off for local development against a provider without ACI.
|
|
53
|
+
encryption: options.config.inference.e2ee
|
|
54
|
+
? createPhalaE2eeEncryption({
|
|
55
|
+
baseUrl: options.config.inference.baseUrl,
|
|
56
|
+
requestSigner: options.requestSigner,
|
|
57
|
+
logger,
|
|
58
|
+
})
|
|
59
|
+
: undefined,
|
|
60
|
+
});
|
|
61
|
+
const scheduler = createRecomputeScheduler({
|
|
62
|
+
store: options.store,
|
|
63
|
+
debounceMs: options.config.inference.recomputeDebounceMs,
|
|
64
|
+
serverOwner: options.serverOwner,
|
|
65
|
+
now: options.now,
|
|
66
|
+
logger,
|
|
67
|
+
compute: (questionId) => computeQuestion(questionId, {
|
|
68
|
+
// A -> B -> C: a question reading this derived scope goes stale.
|
|
69
|
+
onDerivedWritten: (event) => scheduler.markSourceChanged(event.scope, {
|
|
70
|
+
lineageSources: event.lineageSources,
|
|
71
|
+
}),
|
|
72
|
+
runtimeAvailability: options.runtimeAvailability,
|
|
73
|
+
storage: options.storage,
|
|
74
|
+
store: options.store,
|
|
75
|
+
provider,
|
|
76
|
+
serverOwner: options.serverOwner,
|
|
77
|
+
maxSourceItems: options.config.inference.maxSourceItems,
|
|
78
|
+
syncManager: options.syncManager?.() ?? null,
|
|
79
|
+
scopeDeletions: options.scopeDeletions?.(),
|
|
80
|
+
writePolicyPorts: options.writePolicyPorts,
|
|
81
|
+
now: options.now,
|
|
82
|
+
logger,
|
|
83
|
+
}),
|
|
84
|
+
});
|
|
85
|
+
return { store: options.store, scheduler, provider };
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=derivatives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivatives.js","sourceRoot":"","sources":["../src/derivatives.ts"],"names":[],"mappings":"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"}
|