@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.
Files changed (68) hide show
  1. package/dist/bridge.d.ts +23 -0
  2. package/dist/bridge.d.ts.map +1 -0
  3. package/dist/bridge.js +53 -0
  4. package/dist/bridge.js.map +1 -0
  5. package/dist/browser-runtime.d.ts +58 -0
  6. package/dist/browser-runtime.d.ts.map +1 -0
  7. package/dist/browser-runtime.js +214 -0
  8. package/dist/browser-runtime.js.map +1 -0
  9. package/dist/browser-tls-rustls/browser_tls_rustls.d.ts +49 -0
  10. package/dist/browser-tls-rustls/browser_tls_rustls.js +401 -0
  11. package/dist/browser-tls-rustls/browser_tls_rustls_bg.wasm +0 -0
  12. package/dist/client.d.ts +22 -0
  13. package/dist/client.d.ts.map +1 -0
  14. package/dist/client.js +408 -0
  15. package/dist/client.js.map +1 -0
  16. package/dist/derivatives.d.ts +51 -0
  17. package/dist/derivatives.d.ts.map +1 -0
  18. package/dist/derivatives.js +87 -0
  19. package/dist/derivatives.js.map +1 -0
  20. package/dist/diagnostics.d.ts +166 -0
  21. package/dist/diagnostics.d.ts.map +1 -0
  22. package/dist/diagnostics.js +265 -0
  23. package/dist/diagnostics.js.map +1 -0
  24. package/dist/index.d.ts +18 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +19 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/mcp-store.d.ts +35 -0
  29. package/dist/mcp-store.d.ts.map +1 -0
  30. package/dist/mcp-store.js +208 -0
  31. package/dist/mcp-store.js.map +1 -0
  32. package/dist/owner-binding.d.ts +7 -0
  33. package/dist/owner-binding.d.ts.map +1 -0
  34. package/dist/owner-binding.js +18 -0
  35. package/dist/owner-binding.js.map +1 -0
  36. package/dist/persistence.d.ts +69 -0
  37. package/dist/persistence.d.ts.map +1 -0
  38. package/dist/persistence.js +58 -0
  39. package/dist/persistence.js.map +1 -0
  40. package/dist/relay-tls.d.ts +61 -0
  41. package/dist/relay-tls.d.ts.map +1 -0
  42. package/dist/relay-tls.js +316 -0
  43. package/dist/relay-tls.js.map +1 -0
  44. package/dist/relay.d.ts +149 -0
  45. package/dist/relay.d.ts.map +1 -0
  46. package/dist/relay.js +646 -0
  47. package/dist/relay.js.map +1 -0
  48. package/dist/runtime.d.ts +188 -0
  49. package/dist/runtime.d.ts.map +1 -0
  50. package/dist/runtime.js +1178 -0
  51. package/dist/runtime.js.map +1 -0
  52. package/dist/state.d.ts +72 -0
  53. package/dist/state.d.ts.map +1 -0
  54. package/dist/state.js +366 -0
  55. package/dist/state.js.map +1 -0
  56. package/dist/storage-utils.d.ts +8 -0
  57. package/dist/storage-utils.d.ts.map +1 -0
  58. package/dist/storage-utils.js +67 -0
  59. package/dist/storage-utils.js.map +1 -0
  60. package/dist/storage.d.ts +61 -0
  61. package/dist/storage.d.ts.map +1 -0
  62. package/dist/storage.js +718 -0
  63. package/dist/storage.js.map +1 -0
  64. package/dist/sync.d.ts +58 -0
  65. package/dist/sync.d.ts.map +1 -0
  66. package/dist/sync.js +216 -0
  67. package/dist/sync.js.map +1 -0
  68. 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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"}