@opendatalabs/personal-server-ts-server 1.9.0 → 1.10.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,2CAA2C,CAAC;AAEvG,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAMnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAKhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAMlF,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAMrF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAGpE,OAAO,EAIL,KAAK,iBAAiB,EAEvB,MAAM,mDAAmD,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,OAAO,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACjD,sBAAsB,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,uBAAuB,CAAC,EAAE,qCAAqC,CAAC;IAChE;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CAC/C;AA0BD,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,CAmmBxB"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,2CAA2C,CAAC;AAEvG,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAMnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAKhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAMlF,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAMrF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAGpE,OAAO,EAKL,KAAK,iBAAiB,EAEvB,MAAM,mDAAmD,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,OAAO,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACjD,sBAAsB,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,uBAAuB,CAAC,EAAE,qCAAqC,CAAC;IAChE;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CAC/C;AA0BD,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,CAooBxB"}
package/dist/bootstrap.js CHANGED
@@ -27,7 +27,7 @@ import { createTokenStore } from "./token-store.js";
27
27
  import { TunnelManager, ensureFrpcBinary } from "./tunnel/index.js";
28
28
  import { createNodeDataStorage } from "./storage/node-data-storage.js";
29
29
  import { createSqliteQuestionStore } from "./storage/question-store.js";
30
- import { computeQuestion, createOpenAiCompatibleInferenceProvider, createRecomputeScheduler, } from "@opendatalabs/personal-server-ts-core/derivatives";
30
+ import { computeQuestion, createOpenAiCompatibleInferenceProvider, createPhalaE2eeEncryption, createRecomputeScheduler, } from "@opendatalabs/personal-server-ts-core/derivatives";
31
31
  const DEFAULT_LOCAL_APPROVAL_PORT = 34127;
32
32
  function resolveLocalApprovalPort(serverPort) {
33
33
  const raw = process.env.LOCAL_AUTH_PORT;
@@ -160,10 +160,15 @@ export async function createServer(config, options) {
160
160
  // Derivative data: the gateway lineage client signs lineage reads with the
161
161
  // server key (the gateway treats a registered server as the owner's) and
162
162
  // registers derivatives with their lineage. Needs the server account.
163
- const lineageGateway = serverAccount
163
+ // The one server-key request signer: lineage reads, and the inference
164
+ // relay calls below, authenticate to the gateway with the same scheme.
165
+ const requestSigner = serverAccount
166
+ ? createRequestSigner(serverAccount)
167
+ : undefined;
168
+ const lineageGateway = requestSigner
164
169
  ? createGatewayLineageClient({
165
170
  gatewayUrl: config.gateway.url,
166
- requestSigner: createRequestSigner(serverAccount),
171
+ requestSigner,
167
172
  })
168
173
  : undefined;
169
174
  // --- Sync engine setup ---
@@ -183,13 +188,36 @@ export async function createServer(config, options) {
183
188
  // The scheduler exists before the sync manager so downloads can mark
184
189
  // questions stale; it reaches the sync manager lazily to upload results.
185
190
  const questionStore = createSqliteQuestionStore(db);
191
+ const inferenceBaseUrl = process.env.INFERENCE_BASE_URL ?? config.inference.baseUrl;
192
+ // E2EE to the Phala gateway is on unless config or INFERENCE_E2EE=false
193
+ // turns it off (local development against a provider without ACI).
194
+ const inferenceE2ee = process.env.INFERENCE_E2EE !== undefined
195
+ ? process.env.INFERENCE_E2EE !== "false"
196
+ : config.inference.e2ee;
197
+ // Local development only: production relays hold the provider key. A key
198
+ // means the base URL is a provider, not the relay, so nothing is signed.
199
+ const inferenceApiKey = process.env.INFERENCE_API_KEY;
200
+ // The Vana inference relay only forwards requests signed by the owner or
201
+ // by one of the owner's active registered servers; this is the same
202
+ // server-key signer the lineage reads use.
203
+ const inferenceSigner = inferenceApiKey ? undefined : requestSigner;
186
204
  const inferenceProvider = options?.inferenceProvider ??
187
205
  createOpenAiCompatibleInferenceProvider({
188
- baseUrl: process.env.INFERENCE_BASE_URL ?? config.inference.baseUrl,
206
+ baseUrl: inferenceBaseUrl,
189
207
  model: process.env.INFERENCE_MODEL ?? config.inference.model,
190
- // Local development only: production relays hold the provider key.
191
- apiKey: process.env.INFERENCE_API_KEY,
208
+ apiKey: inferenceApiKey,
209
+ requestSigner: inferenceSigner,
210
+ encryption: inferenceE2ee
211
+ ? createPhalaE2eeEncryption({
212
+ baseUrl: inferenceBaseUrl,
213
+ requestSigner: inferenceSigner,
214
+ logger,
215
+ })
216
+ : undefined,
192
217
  });
218
+ if (!inferenceE2ee) {
219
+ logger.warn({ baseUrl: inferenceBaseUrl }, "Inference E2EE is disabled: prompts and answers travel as plaintext over TLS");
220
+ }
193
221
  const derivativeScheduler = createRecomputeScheduler({
194
222
  store: questionStore,
195
223
  debounceMs: config.inference.recomputeDebounceMs,
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -4404,7 +4404,7 @@ function weierstrass(curveDef) {
4404
4404
  function prepSig(msgHash, privateKey, opts = defaultSigOpts) {
4405
4405
  if (["recovered", "canonical"].some((k10) => k10 in opts))
4406
4406
  throw new Error("sign() legacy options not supported");
4407
- const { hash: hash2, randomBytes: randomBytes4 } = CURVE4;
4407
+ const { hash: hash2, randomBytes: randomBytes5 } = CURVE4;
4408
4408
  let { lowS, prehash, extraEntropy: ent } = opts;
4409
4409
  if (lowS == null)
4410
4410
  lowS = true;
@@ -4416,7 +4416,7 @@ function weierstrass(curveDef) {
4416
4416
  const d10 = normPrivateKeyToScalar(privateKey);
4417
4417
  const seedArgs = [int2octets(d10), int2octets(h1int)];
4418
4418
  if (ent != null && ent !== false) {
4419
- const e10 = ent === true ? randomBytes4(Fp2.BYTES) : ent;
4419
+ const e10 = ent === true ? randomBytes5(Fp2.BYTES) : ent;
4420
4420
  seedArgs.push(ensureBytes("extraEntropy", e10));
4421
4421
  }
4422
4422
  const seed = concatBytes3(...seedArgs);
@@ -109756,6 +109756,10 @@ var DEFAULTS = {
109756
109756
  // provider key) or straight at a provider for local development.
109757
109757
  baseUrl: "https://inference.phala.com/v1",
109758
109758
  model: "z-ai/glm-5.2",
109759
+ // End to end encryption of prompt and answer to the Phala gateway
109760
+ // (E2EE v2): the relay only sees ciphertext. Set false only for local
109761
+ // development against a provider without ACI attestation.
109762
+ e2ee: true,
109759
109763
  // Newest-first items kept per source scope when a prompt is assembled.
109760
109764
  maxSourceItems: 50,
109761
109765
  // Quiet period after a source scope changes before a recompute starts.
@@ -109817,6 +109821,7 @@ var ServerConfigSchema = external_exports.object({
109817
109821
  inference: external_exports.object({
109818
109822
  baseUrl: external_exports.url().default(DEFAULTS.inference.baseUrl),
109819
109823
  model: external_exports.string().min(1).default(DEFAULTS.inference.model),
109824
+ e2ee: external_exports.boolean().default(DEFAULTS.inference.e2ee),
109820
109825
  maxSourceItems: external_exports.number().int().min(1).max(1e4).default(DEFAULTS.inference.maxSourceItems),
109821
109826
  recomputeDebounceMs: external_exports.number().int().min(0).max(36e5).default(DEFAULTS.inference.recomputeDebounceMs)
109822
109827
  }).default(DEFAULTS.inference)
@@ -113910,10 +113915,19 @@ var DEFAULT_INFERENCE_REQUEST_FIELDS = {
113910
113915
  };
113911
113916
  var InferenceRequestError = class extends Error {
113912
113917
  status;
113913
- constructor(message, status2) {
113918
+ /** OpenAI-style `error.type` of the rejection, when the body had one. */
113919
+ errorType;
113920
+ /**
113921
+ * Explicit retry hint. When undefined the compute layer falls back to the
113922
+ * status: no response, 429 or 5xx are retried.
113923
+ */
113924
+ retryable;
113925
+ constructor(message, status2, options = {}) {
113914
113926
  super(message);
113915
113927
  this.status = status2;
113916
113928
  this.name = "InferenceRequestError";
113929
+ this.errorType = options.errorType ?? null;
113930
+ this.retryable = options.retryable;
113917
113931
  }
113918
113932
  };
113919
113933
  function isRecord6(value) {
@@ -113936,80 +113950,147 @@ function readContent(body) {
113936
113950
  const first = body.choices[0];
113937
113951
  if (!isRecord6(first) || !isRecord6(first.message))
113938
113952
  return null;
113953
+ const index = typeof first.index === "number" ? first.index : 0;
113954
+ const field = `choices.${index}.message.content`;
113955
+ const id2 = typeof body.id === "string" ? body.id : "";
113939
113956
  const content = first.message.content;
113940
113957
  if (typeof content === "string")
113941
- return content;
113958
+ return { content, field, id: id2 };
113942
113959
  if (Array.isArray(content)) {
113943
113960
  const text = content.map((part) => isRecord6(part) && typeof part.text === "string" ? part.text : "").join("");
113944
- return text;
113961
+ return { content: text, field, id: id2 };
113945
113962
  }
113946
113963
  return null;
113947
113964
  }
113965
+ async function readErrorType(response) {
113966
+ try {
113967
+ const body = await response.json();
113968
+ if (isRecord6(body) && isRecord6(body.error)) {
113969
+ return typeof body.error.type === "string" ? body.error.type : null;
113970
+ }
113971
+ } catch {
113972
+ }
113973
+ return null;
113974
+ }
113975
+ async function signOrThrow(signer, params) {
113976
+ try {
113977
+ return await signer.signRequest(params);
113978
+ } catch (err2) {
113979
+ const name = err2 instanceof Error ? err2.name : "Error";
113980
+ throw new InferenceRequestError(`inference request could not be signed (${name})`, null, { errorType: "relay_signing_failed", retryable: false });
113981
+ }
113982
+ }
113948
113983
  function createOpenAiCompatibleInferenceProvider(options = {}) {
113949
113984
  const base = (options.baseUrl ?? DEFAULT_INFERENCE_BASE_URL).replace(/\/+$/, "");
113950
113985
  const defaultModel = options.model ?? DEFAULT_INFERENCE_MODEL;
113951
113986
  const timeoutMs = options.timeoutMs ?? DEFAULT_INFERENCE_TIMEOUT_MS;
113952
113987
  const doFetch = options.fetch ?? fetch;
113953
113988
  const requestFields = options.requestFields ?? DEFAULT_INFERENCE_REQUEST_FIELDS;
113954
- return {
113955
- defaultModel,
113956
- async chat(input) {
113957
- const headers = new Headers({ "Content-Type": "application/json" });
113958
- if (options.apiKey) {
113959
- headers.set("Authorization", `Bearer ${options.apiKey}`);
113960
- }
113961
- let messages = input.messages;
113962
- if (options.encryption) {
113963
- ({ messages } = await options.encryption.encryptRequest({
113964
- messages,
113965
- headers
113966
- }));
113967
- }
113968
- const body = {
113969
- ...requestFields,
113970
- model: input.model || defaultModel,
113989
+ const encryption = options.encryption;
113990
+ const requestSigner = options.apiKey ? void 0 : options.requestSigner;
113991
+ const chatUrl = new URL(`${base}/chat/completions`);
113992
+ async function send(input) {
113993
+ const headers = new Headers({ "Content-Type": "application/json" });
113994
+ if (options.apiKey) {
113995
+ headers.set("Authorization", `Bearer ${options.apiKey}`);
113996
+ }
113997
+ const model = input.model || defaultModel;
113998
+ let messages = input.messages;
113999
+ let encrypted = null;
114000
+ if (encryption) {
114001
+ encrypted = await encryption.encryptRequest({
114002
+ model,
113971
114003
  messages,
113972
- max_tokens: input.maxTokens ?? DEFAULT_INFERENCE_MAX_TOKENS
113973
- };
113974
- let response;
113975
- try {
113976
- response = await doFetch(`${base}/chat/completions`, {
113977
- method: "POST",
113978
- headers,
113979
- body: JSON.stringify(body),
113980
- signal: AbortSignal.timeout(timeoutMs)
113981
- });
113982
- } catch (err2) {
113983
- const name = err2 instanceof Error ? err2.name : "Error";
113984
- throw new InferenceRequestError(`inference request failed before a response (${name})`, null);
113985
- }
113986
- if (!response.ok) {
113987
- throw new InferenceRequestError(`inference request failed with status ${response.status}`, response.status);
113988
- }
113989
- let parsed;
113990
- try {
113991
- parsed = await response.json();
113992
- } catch {
113993
- throw new InferenceRequestError("inference response was not JSON", response.status);
113994
- }
113995
- let content = readContent(parsed);
113996
- if (content === null || content.trim() === "") {
113997
- throw new InferenceRequestError("inference response carried no assistant content", response.status);
113998
- }
113999
- if (options.encryption) {
114000
- content = await options.encryption.decryptResponse({
114001
- content,
114002
- headers: response.headers
114003
- });
114004
- }
114005
- const receiptId = response.headers.get("x-receipt-id") ?? void 0;
114006
- const aciIdentity = response.headers.get("x-aci-identity") ?? void 0;
114004
+ headers
114005
+ });
114006
+ messages = encrypted.messages;
114007
+ }
114008
+ const body = {
114009
+ ...requestFields,
114010
+ model,
114011
+ messages,
114012
+ max_tokens: input.maxTokens ?? DEFAULT_INFERENCE_MAX_TOKENS
114013
+ };
114014
+ const payload = JSON.stringify(body);
114015
+ if (requestSigner) {
114016
+ headers.set("Authorization", await signOrThrow(requestSigner, {
114017
+ aud: chatUrl.origin,
114018
+ method: "POST",
114019
+ uri: `${chatUrl.pathname}${chatUrl.search}`,
114020
+ body: new TextEncoder().encode(payload)
114021
+ }));
114022
+ }
114023
+ let response;
114024
+ try {
114025
+ response = await doFetch(chatUrl.toString(), {
114026
+ method: "POST",
114027
+ headers,
114028
+ body: payload,
114029
+ signal: AbortSignal.timeout(timeoutMs)
114030
+ });
114031
+ } catch (err2) {
114032
+ const name = err2 instanceof Error ? err2.name : "Error";
114033
+ throw new InferenceRequestError(`inference request failed before a response (${name})`, null);
114034
+ }
114035
+ if (!response.ok) {
114036
+ const errorType = await readErrorType(response);
114037
+ const retry = await encryption?.onRejected?.({
114038
+ status: response.status,
114039
+ errorType,
114040
+ headers: response.headers
114041
+ }) === true;
114007
114042
  return {
114043
+ ok: false,
114044
+ retry,
114045
+ error: new InferenceRequestError(`inference request failed with status ${response.status}${errorType ? ` (${errorType})` : ""}`, response.status, { errorType })
114046
+ };
114047
+ }
114048
+ let parsed;
114049
+ try {
114050
+ parsed = await response.json();
114051
+ } catch {
114052
+ throw new InferenceRequestError("inference response was not JSON", response.status);
114053
+ }
114054
+ const choice = readContent(parsed);
114055
+ if (choice === null) {
114056
+ throw new InferenceRequestError("inference response carried no assistant content", response.status);
114057
+ }
114058
+ let content = choice.content;
114059
+ if (encrypted) {
114060
+ content = await encrypted.decryptResponse({
114061
+ content,
114062
+ field: choice.field,
114063
+ id: choice.id,
114064
+ headers: response.headers
114065
+ });
114066
+ }
114067
+ if (content.trim() === "") {
114068
+ throw new InferenceRequestError("inference response carried no assistant content", response.status);
114069
+ }
114070
+ const receiptId = response.headers.get("x-receipt-id") ?? void 0;
114071
+ const aciIdentity = response.headers.get("x-aci-identity") ?? void 0;
114072
+ return {
114073
+ ok: true,
114074
+ result: {
114008
114075
  content,
114009
114076
  usage: readUsage(isRecord6(parsed) ? parsed.usage : void 0),
114010
114077
  ...receiptId ? { receiptId } : {},
114011
114078
  ...aciIdentity ? { aciIdentity } : {}
114012
- };
114079
+ }
114080
+ };
114081
+ }
114082
+ return {
114083
+ defaultModel,
114084
+ async chat(input) {
114085
+ const first = await send(input);
114086
+ if (first.ok)
114087
+ return first.result;
114088
+ if (!first.retry)
114089
+ throw first.error;
114090
+ const second = await send(input);
114091
+ if (second.ok)
114092
+ return second.result;
114093
+ throw second.error;
114013
114094
  }
114014
114095
  };
114015
114096
  }
@@ -114017,7 +114098,11 @@ function createOpenAiCompatibleInferenceProvider(options = {}) {
114017
114098
  // ../core/dist/derivatives/compute.js
114018
114099
  var DEFAULT_RETRY_DELAYS_MS = [1e3, 4e3];
114019
114100
  function isRetryableInferenceError(err2) {
114020
- return err2 instanceof InferenceRequestError && (err2.status === null || err2.status === 429 || err2.status >= 500);
114101
+ if (!(err2 instanceof InferenceRequestError))
114102
+ return false;
114103
+ if (err2.retryable !== void 0)
114104
+ return err2.retryable;
114105
+ return err2.status === null || err2.status === 429 || err2.status >= 500;
114021
114106
  }
114022
114107
  async function withRetries(deps, attempt, retryable) {
114023
114108
  const delays = deps.retryDelaysMs ?? DEFAULT_RETRY_DELAYS_MS;
@@ -114616,6 +114701,515 @@ async function handlePersonalServerDerivativesRequest(request2, deps, options =
114616
114701
  }
114617
114702
  }
114618
114703
 
114704
+ // ../core/dist/derivatives/e2ee/jcs.js
114705
+ function canonicalizeJson(value) {
114706
+ if (value === null)
114707
+ return "null";
114708
+ switch (typeof value) {
114709
+ case "boolean":
114710
+ return value ? "true" : "false";
114711
+ case "number":
114712
+ if (!Number.isFinite(value)) {
114713
+ throw new TypeError("JCS: non-finite number");
114714
+ }
114715
+ return JSON.stringify(value);
114716
+ case "string":
114717
+ return JSON.stringify(value);
114718
+ case "object": {
114719
+ if (Array.isArray(value)) {
114720
+ return `[${value.map((item) => canonicalizeJson(item)).join(",")}]`;
114721
+ }
114722
+ const record2 = value;
114723
+ const keys = Object.keys(record2).sort();
114724
+ const members = [];
114725
+ for (const key of keys) {
114726
+ const member = record2[key];
114727
+ if (member === void 0) {
114728
+ throw new TypeError(`JCS: undefined member "${key}"`);
114729
+ }
114730
+ members.push(`${JSON.stringify(key)}:${canonicalizeJson(member)}`);
114731
+ }
114732
+ return `{${members.join(",")}}`;
114733
+ }
114734
+ default:
114735
+ throw new TypeError(`JCS: unsupported value of type ${typeof value}`);
114736
+ }
114737
+ }
114738
+ var encoder3 = new TextEncoder();
114739
+ function canonicalJsonBytes(value) {
114740
+ return encoder3.encode(canonicalizeJson(value));
114741
+ }
114742
+
114743
+ // ../core/dist/derivatives/e2ee/aad.js
114744
+ var E2EE_REQUEST_AAD_PURPOSE = "aci.e2ee.request.v2";
114745
+ var E2EE_RESPONSE_AAD_PURPOSE = "aci.e2ee.response.v2";
114746
+ function requestFieldAad(context, field) {
114747
+ return canonicalJsonBytes({
114748
+ purpose: E2EE_REQUEST_AAD_PURPOSE,
114749
+ algo: context.algo,
114750
+ model: context.model,
114751
+ field,
114752
+ nonce: context.nonce,
114753
+ ts: context.ts
114754
+ });
114755
+ }
114756
+ function responseFieldAad(context, field, id2) {
114757
+ return canonicalJsonBytes({
114758
+ purpose: E2EE_RESPONSE_AAD_PURPOSE,
114759
+ algo: context.algo,
114760
+ model: context.model,
114761
+ id: id2,
114762
+ field,
114763
+ nonce: context.nonce,
114764
+ ts: context.ts
114765
+ });
114766
+ }
114767
+
114768
+ // ../core/dist/derivatives/e2ee/suite.js
114769
+ var E2EE_ALGO_X25519 = "x25519-aes-256-gcm-hkdf-sha256";
114770
+ var E2EE_HKDF_INFO_X25519 = "aci.e2ee.v2.x25519";
114771
+ var X25519_PUBLIC_KEY_BYTES = 32;
114772
+ var AES_GCM_NONCE_BYTES = 12;
114773
+ var AES_GCM_TAG_BYTES = 16;
114774
+ var E2eeCipherError = class extends Error {
114775
+ constructor(message) {
114776
+ super(message);
114777
+ this.name = "E2eeCipherError";
114778
+ }
114779
+ };
114780
+ function subtle() {
114781
+ const api = globalThis.crypto?.subtle;
114782
+ if (!api)
114783
+ throw new E2eeCipherError("WebCrypto is not available");
114784
+ return api;
114785
+ }
114786
+ function randomBytes4(length) {
114787
+ const bytes2 = new Uint8Array(length);
114788
+ globalThis.crypto.getRandomValues(bytes2);
114789
+ return bytes2;
114790
+ }
114791
+ function bytesToHex6(bytes2) {
114792
+ let out = "";
114793
+ for (const byte of bytes2)
114794
+ out += byte.toString(16).padStart(2, "0");
114795
+ return out;
114796
+ }
114797
+ function hexToBytes4(hex3) {
114798
+ const clean2 = hex3.startsWith("0x") || hex3.startsWith("0X") ? hex3.slice(2) : hex3;
114799
+ if (clean2.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(clean2)) {
114800
+ throw new E2eeCipherError("malformed hex");
114801
+ }
114802
+ const out = new Uint8Array(clean2.length / 2);
114803
+ for (let i10 = 0; i10 < out.length; i10 += 1) {
114804
+ out[i10] = parseInt(clean2.slice(i10 * 2, i10 * 2 + 2), 16);
114805
+ }
114806
+ return out;
114807
+ }
114808
+ function parseX25519PublicKey(hex3) {
114809
+ const bytes2 = hexToBytes4(hex3);
114810
+ if (bytes2.length !== X25519_PUBLIC_KEY_BYTES) {
114811
+ throw new E2eeCipherError("X25519 public key must be 32 bytes");
114812
+ }
114813
+ return bytes2;
114814
+ }
114815
+ function concat2(...parts) {
114816
+ const total = parts.reduce((sum, part) => sum + part.length, 0);
114817
+ const out = new Uint8Array(total);
114818
+ let offset = 0;
114819
+ for (const part of parts) {
114820
+ out.set(part, offset);
114821
+ offset += part.length;
114822
+ }
114823
+ return out;
114824
+ }
114825
+ function toBuffer(bytes2) {
114826
+ const out = new ArrayBuffer(bytes2.byteLength);
114827
+ new Uint8Array(out).set(bytes2);
114828
+ return out;
114829
+ }
114830
+ async function generateX25519KeyPair() {
114831
+ const pair = await subtle().generateKey({ name: "X25519" }, false, [
114832
+ "deriveBits"
114833
+ ]);
114834
+ const raw = await subtle().exportKey("raw", pair.publicKey);
114835
+ return { privateKey: pair.privateKey, publicKey: new Uint8Array(raw) };
114836
+ }
114837
+ async function deriveFieldKey(privateKey, peerPublicKey, usage) {
114838
+ const api = subtle();
114839
+ const peer = await api.importKey("raw", toBuffer(peerPublicKey), { name: "X25519" }, false, []);
114840
+ const shared = await api.deriveBits({ name: "X25519", public: peer }, privateKey, X25519_PUBLIC_KEY_BYTES * 8);
114841
+ const ikm = await api.importKey("raw", shared, "HKDF", false, ["deriveKey"]);
114842
+ return api.deriveKey({
114843
+ name: "HKDF",
114844
+ hash: "SHA-256",
114845
+ salt: new Uint8Array(0),
114846
+ info: new TextEncoder().encode(E2EE_HKDF_INFO_X25519)
114847
+ }, ikm, { name: "AES-GCM", length: 256 }, false, [usage]);
114848
+ }
114849
+ async function encryptField(input) {
114850
+ const ephemeral = input.ephemeral ?? await generateX25519KeyPair();
114851
+ const nonce = input.nonce ?? randomBytes4(AES_GCM_NONCE_BYTES);
114852
+ if (nonce.length !== AES_GCM_NONCE_BYTES) {
114853
+ throw new E2eeCipherError("AES-GCM nonce must be 12 bytes");
114854
+ }
114855
+ const key = await deriveFieldKey(ephemeral.privateKey, input.recipientPublicKey, "encrypt");
114856
+ const sealed = await subtle().encrypt({
114857
+ name: "AES-GCM",
114858
+ iv: toBuffer(nonce),
114859
+ additionalData: toBuffer(input.aad),
114860
+ tagLength: AES_GCM_TAG_BYTES * 8
114861
+ }, key, new TextEncoder().encode(input.plaintext));
114862
+ return bytesToHex6(concat2(ephemeral.publicKey, nonce, new Uint8Array(sealed)));
114863
+ }
114864
+ async function decryptField(input) {
114865
+ let bytes2;
114866
+ try {
114867
+ bytes2 = hexToBytes4(input.wire);
114868
+ } catch {
114869
+ throw new E2eeCipherError("ciphertext is not hex");
114870
+ }
114871
+ const minimum = X25519_PUBLIC_KEY_BYTES + AES_GCM_NONCE_BYTES + AES_GCM_TAG_BYTES;
114872
+ if (bytes2.length < minimum) {
114873
+ throw new E2eeCipherError("ciphertext is too short");
114874
+ }
114875
+ const ephemeralPublicKey = bytes2.subarray(0, X25519_PUBLIC_KEY_BYTES);
114876
+ const nonce = bytes2.subarray(X25519_PUBLIC_KEY_BYTES, X25519_PUBLIC_KEY_BYTES + AES_GCM_NONCE_BYTES);
114877
+ const sealed = bytes2.subarray(X25519_PUBLIC_KEY_BYTES + AES_GCM_NONCE_BYTES);
114878
+ let key;
114879
+ try {
114880
+ key = await deriveFieldKey(input.privateKey, ephemeralPublicKey, "decrypt");
114881
+ } catch {
114882
+ throw new E2eeCipherError("key agreement failed");
114883
+ }
114884
+ let opened;
114885
+ try {
114886
+ opened = await subtle().decrypt({
114887
+ name: "AES-GCM",
114888
+ iv: toBuffer(nonce),
114889
+ additionalData: toBuffer(input.aad),
114890
+ tagLength: AES_GCM_TAG_BYTES * 8
114891
+ }, key, toBuffer(sealed));
114892
+ } catch {
114893
+ throw new E2eeCipherError("authentication failed");
114894
+ }
114895
+ return new TextDecoder().decode(opened);
114896
+ }
114897
+
114898
+ // ../core/dist/derivatives/e2ee/attestation.js
114899
+ var ACI_API_VERSION = "aci/1";
114900
+ var ACI_REPORT_DATA_PURPOSE = "aci.report_data.v1";
114901
+ var E2EE_VERSION = "2";
114902
+ var PHALA_GATEWAY_BASE_URL = "https://inference.phala.com/v1";
114903
+ var MAX_KEYSET_LIFETIME_S = 400 * 24 * 3600;
114904
+ var DEFAULT_FETCH_TIMEOUT_MS = 15e3;
114905
+ var E2eeAttestationError = class extends Error {
114906
+ code;
114907
+ constructor(code, message) {
114908
+ super(message);
114909
+ this.code = code;
114910
+ this.name = "E2eeAttestationError";
114911
+ }
114912
+ };
114913
+ function isRecord7(value) {
114914
+ return value !== null && typeof value === "object" && !Array.isArray(value);
114915
+ }
114916
+ async function sha256Hex2(bytes2) {
114917
+ const buffer = new ArrayBuffer(bytes2.byteLength);
114918
+ new Uint8Array(buffer).set(bytes2);
114919
+ const digest = await globalThis.crypto.subtle.digest("SHA-256", buffer);
114920
+ return bytesToHex6(new Uint8Array(digest));
114921
+ }
114922
+ async function workloadKeysetDigest(keyset) {
114923
+ return `sha256:${await sha256Hex2(canonicalJsonBytes(keyset))}`;
114924
+ }
114925
+ async function reportDataFor(keysetDigest, nonce) {
114926
+ const nonceJson = nonce === null ? "null" : `"${nonce}"`;
114927
+ const statement = `{"keyset_digest":"${keysetDigest}","nonce":${nonceJson},"purpose":"${ACI_REPORT_DATA_PURPOSE}"}`;
114928
+ return sha256Hex2(new TextEncoder().encode(statement));
114929
+ }
114930
+ function parseReport(body) {
114931
+ if (!isRecord7(body) || typeof body.api_version !== "string" || typeof body.workload_keyset_digest !== "string" || !isRecord7(body.attestation) || typeof body.attestation.tee_type !== "string" || typeof body.attestation.report_data !== "string" || !isRecord7(body.attestation.workload_keyset)) {
114932
+ throw new E2eeAttestationError("malformed_report", "attestation report is missing required fields");
114933
+ }
114934
+ const keyset = body.attestation.workload_keyset;
114935
+ if (typeof keyset.not_after !== "number" || !Array.isArray(keyset.e2ee_public_keys)) {
114936
+ throw new E2eeAttestationError("malformed_report", "workload keyset is missing not_after or e2ee_public_keys");
114937
+ }
114938
+ return body;
114939
+ }
114940
+ async function verifyAciReportBinding(report, nonce, nowSeconds) {
114941
+ if (report.api_version !== ACI_API_VERSION) {
114942
+ throw new E2eeAttestationError("malformed_report", `unsupported attestation api_version ${report.api_version}`);
114943
+ }
114944
+ if (report.attestation.tee_type !== "tdx") {
114945
+ throw new E2eeAttestationError("malformed_report", `unsupported tee_type ${report.attestation.tee_type}`);
114946
+ }
114947
+ const versions = report.service_capabilities?.supported_e2ee_versions;
114948
+ if (!Array.isArray(versions) || !versions.includes(E2EE_VERSION)) {
114949
+ throw new E2eeAttestationError("e2ee_unsupported", "service does not advertise E2EE version 2");
114950
+ }
114951
+ const keyset = report.attestation.workload_keyset;
114952
+ const digest = await workloadKeysetDigest(keyset);
114953
+ if (digest !== report.workload_keyset_digest) {
114954
+ throw new E2eeAttestationError("keyset_digest_mismatch", "workload_keyset_digest does not match the embedded keyset");
114955
+ }
114956
+ const expectedReportData = await reportDataFor(digest, nonce);
114957
+ const reportData = report.attestation.report_data.toLowerCase();
114958
+ if (reportData !== expectedReportData) {
114959
+ throw new E2eeAttestationError("report_data_mismatch", "report_data does not bind the keyset digest and our nonce");
114960
+ }
114961
+ const quoteReportData = report.attestation.evidence?.quote_report_data;
114962
+ if (typeof quoteReportData === "string") {
114963
+ const slot = quoteReportData.toLowerCase();
114964
+ if (slot.length !== 128 || !slot.startsWith(reportData) || !/^0+$/.test(slot.slice(64))) {
114965
+ throw new E2eeAttestationError("report_data_mismatch", "quote report-data slot does not carry report_data zero-padded");
114966
+ }
114967
+ }
114968
+ if (!(nowSeconds < keyset.not_after)) {
114969
+ throw new E2eeAttestationError("keyset_expired", "workload keyset has expired");
114970
+ }
114971
+ if (keyset.not_after - nowSeconds > MAX_KEYSET_LIFETIME_S) {
114972
+ throw new E2eeAttestationError("keyset_expired", "workload keyset not_after is implausibly far in the future");
114973
+ }
114974
+ return digest;
114975
+ }
114976
+ function selectX25519Key(keyset, expectedKeyId) {
114977
+ for (const entry of keyset.e2ee_public_keys) {
114978
+ if (!isRecord7(entry) || entry.algo !== E2EE_ALGO_X25519)
114979
+ continue;
114980
+ if (typeof entry.public_key !== "string")
114981
+ continue;
114982
+ if (expectedKeyId !== void 0 && entry.key_id !== expectedKeyId) {
114983
+ continue;
114984
+ }
114985
+ let publicKey;
114986
+ try {
114987
+ publicKey = parseX25519PublicKey(entry.public_key);
114988
+ } catch {
114989
+ throw new E2eeAttestationError("no_e2ee_key", "the X25519 E2EE key in the keyset is malformed");
114990
+ }
114991
+ return { entry, publicKey };
114992
+ }
114993
+ throw new E2eeAttestationError("no_e2ee_key", expectedKeyId ? `keyset has no ${E2EE_ALGO_X25519} key with key_id ${expectedKeyId}` : `keyset has no ${E2EE_ALGO_X25519} key`);
114994
+ }
114995
+ function attestationUrl(baseUrl, nonce) {
114996
+ return `${baseUrl.replace(/\/+$/, "")}/aci/attestation?nonce=${nonce}`;
114997
+ }
114998
+ async function authorizationFor(signer, url2) {
114999
+ try {
115000
+ return await signer.signRequest({
115001
+ aud: url2.origin,
115002
+ method: "GET",
115003
+ // The nonce lives in the query string, so the query is part of the
115004
+ // signed uri: a captured header cannot be replayed for another nonce.
115005
+ uri: `${url2.pathname}${url2.search}`
115006
+ });
115007
+ } catch (err2) {
115008
+ const name = err2 instanceof Error ? err2.name : "Error";
115009
+ throw new E2eeAttestationError("request_signing_failed", `attestation request could not be signed (${name})`);
115010
+ }
115011
+ }
115012
+ async function fetchReport(doFetch, url2, timeoutMs, requestSigner) {
115013
+ const headers = { Accept: "application/json" };
115014
+ if (requestSigner) {
115015
+ headers.Authorization = await authorizationFor(requestSigner, new URL(url2));
115016
+ }
115017
+ let response;
115018
+ try {
115019
+ response = await doFetch(url2, {
115020
+ method: "GET",
115021
+ headers,
115022
+ signal: AbortSignal.timeout(timeoutMs)
115023
+ });
115024
+ } catch (err2) {
115025
+ const name = err2 instanceof Error ? err2.name : "Error";
115026
+ throw new E2eeAttestationError("fetch_failed", `attestation fetch failed before a response (${name})`);
115027
+ }
115028
+ if (!response.ok) {
115029
+ return { status: response.status, body: null };
115030
+ }
115031
+ try {
115032
+ return { status: response.status, body: await response.json() };
115033
+ } catch {
115034
+ throw new E2eeAttestationError("malformed_report", "attestation response was not JSON");
115035
+ }
115036
+ }
115037
+ async function fetchGatewayE2eeKey(options) {
115038
+ const doFetch = options.fetch ?? fetch;
115039
+ const clock = options.clock ?? Date.now;
115040
+ const random = options.random ?? randomBytes4;
115041
+ const timeoutMs = options.timeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS;
115042
+ const nonce = bytesToHex6(random(32));
115043
+ const fallback = options.fallbackBaseUrl === void 0 ? PHALA_GATEWAY_BASE_URL : options.fallbackBaseUrl;
115044
+ let source = options.baseUrl;
115045
+ let fetched = await fetchReport(doFetch, attestationUrl(source, nonce), timeoutMs, options.requestSigner);
115046
+ if ((fetched.status === 404 || fetched.status === 405) && fallback !== null && fallback.replace(/\/+$/, "") !== source.replace(/\/+$/, "")) {
115047
+ source = fallback;
115048
+ fetched = await fetchReport(doFetch, attestationUrl(source, nonce), timeoutMs);
115049
+ }
115050
+ if (fetched.body === null) {
115051
+ throw new E2eeAttestationError("fetch_failed", `attestation fetch failed with status ${fetched.status}`);
115052
+ }
115053
+ const report = parseReport(fetched.body);
115054
+ const nowSeconds = Math.floor(clock() / 1e3);
115055
+ const keysetDigest = await verifyAciReportBinding(report, nonce, nowSeconds);
115056
+ const { entry, publicKey } = selectX25519Key(report.attestation.workload_keyset, options.expectedKeyId);
115057
+ if (options.verifyEvidence) {
115058
+ try {
115059
+ await options.verifyEvidence(report);
115060
+ } catch (err2) {
115061
+ const reason = err2 instanceof Error ? err2.message : String(err2);
115062
+ throw new E2eeAttestationError("evidence_rejected", `attestation evidence rejected: ${reason}`);
115063
+ }
115064
+ }
115065
+ return {
115066
+ algo: entry.algo,
115067
+ keyId: entry.key_id,
115068
+ publicKey,
115069
+ publicKeyHex: entry.public_key,
115070
+ keysetDigest,
115071
+ notAfter: report.attestation.workload_keyset.not_after,
115072
+ source,
115073
+ report
115074
+ };
115075
+ }
115076
+
115077
+ // ../core/dist/derivatives/e2ee/phala.js
115078
+ var E2EE_HEADER_VERSION = "X-E2EE-Version";
115079
+ var E2EE_HEADER_CLIENT_PUB_KEY = "X-Client-Pub-Key";
115080
+ var E2EE_HEADER_MODEL_PUB_KEY = "X-Model-Pub-Key";
115081
+ var E2EE_HEADER_NONCE = "X-E2EE-Nonce";
115082
+ var E2EE_HEADER_TIMESTAMP = "X-E2EE-Timestamp";
115083
+ var ACI_HEADER_KEYSET_DIGEST = "X-ACI-Keyset-Digest";
115084
+ var DEFAULT_E2EE_KEY_TTL_MS = 5 * 6e4;
115085
+ function keyFetchError(err2) {
115086
+ if (err2 instanceof E2eeAttestationError) {
115087
+ return new InferenceRequestError(`e2ee key fetch failed (${err2.code}): ${err2.message}`, null, {
115088
+ errorType: `e2ee_attestation_${err2.code}`,
115089
+ retryable: err2.code === "fetch_failed"
115090
+ });
115091
+ }
115092
+ const name = err2 instanceof Error ? err2.name : "Error";
115093
+ return new InferenceRequestError(`e2ee key fetch failed (${name})`, null, {
115094
+ retryable: false
115095
+ });
115096
+ }
115097
+ function createPhalaE2eeEncryption(options) {
115098
+ const clock = options.clock ?? Date.now;
115099
+ const ttlMs = options.keyTtlMs ?? DEFAULT_E2EE_KEY_TTL_MS;
115100
+ let cached2 = null;
115101
+ let inFlight = null;
115102
+ const fetchKey = async () => {
115103
+ const key = await fetchGatewayE2eeKey({
115104
+ baseUrl: options.baseUrl,
115105
+ requestSigner: options.requestSigner,
115106
+ fetch: options.fetch,
115107
+ clock,
115108
+ expectedKeyId: options.expectedKeyId,
115109
+ verifyEvidence: options.verifyEvidence,
115110
+ fallbackBaseUrl: options.fallbackAttestationBaseUrl
115111
+ });
115112
+ options.logger?.info?.({
115113
+ keyId: key.keyId,
115114
+ algo: key.algo,
115115
+ keysetDigest: key.keysetDigest,
115116
+ notAfter: key.notAfter,
115117
+ source: key.source,
115118
+ evidenceVerified: Boolean(options.verifyEvidence)
115119
+ }, "E2EE gateway key verified");
115120
+ return key;
115121
+ };
115122
+ const getKey = async () => {
115123
+ const now = clock();
115124
+ if (cached2 && now - cached2.fetchedAt < ttlMs && Math.floor(now / 1e3) < cached2.key.notAfter) {
115125
+ return cached2.key;
115126
+ }
115127
+ if (!inFlight) {
115128
+ inFlight = fetchKey().then((key) => {
115129
+ cached2 = { key, fetchedAt: clock() };
115130
+ return key;
115131
+ }).finally(() => {
115132
+ inFlight = null;
115133
+ });
115134
+ }
115135
+ try {
115136
+ return await inFlight;
115137
+ } catch (err2) {
115138
+ throw keyFetchError(err2);
115139
+ }
115140
+ };
115141
+ const invalidateKey = () => {
115142
+ cached2 = null;
115143
+ };
115144
+ return {
115145
+ invalidateKey,
115146
+ currentKey: () => cached2?.key ?? null,
115147
+ async encryptRequest({ model, messages, headers }) {
115148
+ if (typeof model !== "string" || model === "") {
115149
+ throw new InferenceRequestError("e2ee requires a non-empty request model", null, { errorType: "e2ee_invalid_payload_model", retryable: false });
115150
+ }
115151
+ const gatewayKey = await getKey();
115152
+ const client = await generateX25519KeyPair();
115153
+ const context = {
115154
+ algo: gatewayKey.algo,
115155
+ model,
115156
+ nonce: bytesToHex6(randomBytes4(32)),
115157
+ ts: Math.floor(clock() / 1e3)
115158
+ };
115159
+ headers.set(E2EE_HEADER_VERSION, "2");
115160
+ headers.set(E2EE_HEADER_CLIENT_PUB_KEY, bytesToHex6(client.publicKey));
115161
+ headers.set(E2EE_HEADER_MODEL_PUB_KEY, gatewayKey.publicKeyHex);
115162
+ headers.set(E2EE_HEADER_NONCE, context.nonce);
115163
+ headers.set(E2EE_HEADER_TIMESTAMP, String(context.ts));
115164
+ const encrypted = [];
115165
+ for (let index = 0; index < messages.length; index += 1) {
115166
+ const message = messages[index];
115167
+ let content;
115168
+ try {
115169
+ content = await encryptField({
115170
+ plaintext: message.content,
115171
+ recipientPublicKey: gatewayKey.publicKey,
115172
+ aad: requestFieldAad(context, `messages.${index}.content`)
115173
+ });
115174
+ } catch (err2) {
115175
+ const name = err2 instanceof Error ? err2.name : "Error";
115176
+ throw new InferenceRequestError(`e2ee request encryption failed (${name})`, null, { retryable: false });
115177
+ }
115178
+ encrypted.push({ ...message, content });
115179
+ }
115180
+ const request2 = {
115181
+ messages: encrypted,
115182
+ async decryptResponse({ content, field, id: id2, headers: response }) {
115183
+ const served = response.get(ACI_HEADER_KEYSET_DIGEST);
115184
+ if (served && served !== gatewayKey.keysetDigest) {
115185
+ options.logger?.warn?.({ pinned: gatewayKey.keysetDigest, served }, "E2EE keyset digest changed; refetching the attestation report");
115186
+ invalidateKey();
115187
+ }
115188
+ try {
115189
+ return await decryptField({
115190
+ wire: content,
115191
+ privateKey: client.privateKey,
115192
+ aad: responseFieldAad(context, field, id2)
115193
+ });
115194
+ } catch (err2) {
115195
+ const detail = err2 instanceof E2eeCipherError ? err2.message : "unexpected error";
115196
+ throw new InferenceRequestError(`e2ee response decryption failed for ${field} (${detail})`, null, { errorType: "e2ee_decryption_failed", retryable: false });
115197
+ }
115198
+ }
115199
+ };
115200
+ return request2;
115201
+ },
115202
+ async onRejected({ errorType }) {
115203
+ if (errorType === "e2ee_model_key_mismatch") {
115204
+ options.logger?.warn?.({ keyId: cached2?.key.keyId ?? null }, "E2EE model key rejected by the gateway; refetching the attestation report");
115205
+ invalidateKey();
115206
+ return true;
115207
+ }
115208
+ return false;
115209
+ }
115210
+ };
115211
+ }
115212
+
114619
115213
  // ../core/dist/mcp/store.js
114620
115214
  function createInMemoryMcpOAuthAuthorizationStore() {
114621
115215
  const byId = /* @__PURE__ */ new Map();
@@ -127963,7 +128557,7 @@ var WebStandardStreamableHTTPServerTransport = class {
127963
128557
  * Only sends if eventStore is configured (opt-in for resumability) and
127964
128558
  * the client's protocol version supports empty SSE data (>= 2025-11-25).
127965
128559
  */
127966
- async writePrimingEvent(controller, encoder3, streamId, protocolVersion) {
128560
+ async writePrimingEvent(controller, encoder4, streamId, protocolVersion) {
127967
128561
  if (!this._eventStore) {
127968
128562
  return;
127969
128563
  }
@@ -127982,7 +128576,7 @@ data:
127982
128576
 
127983
128577
  `;
127984
128578
  }
127985
- controller.enqueue(encoder3.encode(primingEvent));
128579
+ controller.enqueue(encoder4.encode(primingEvent));
127986
128580
  }
127987
128581
  /**
127988
128582
  * Handles GET requests for SSE stream
@@ -128011,7 +128605,7 @@ data:
128011
128605
  this.onerror?.(new Error("Conflict: Only one SSE stream is allowed per session"));
128012
128606
  return this.createJsonErrorResponse(409, -32e3, "Conflict: Only one SSE stream is allowed per session");
128013
128607
  }
128014
- const encoder3 = new TextEncoder();
128608
+ const encoder4 = new TextEncoder();
128015
128609
  let streamController;
128016
128610
  const readable = new ReadableStream({
128017
128611
  start: (controller) => {
@@ -128031,7 +128625,7 @@ data:
128031
128625
  }
128032
128626
  this._streamMapping.set(this._standaloneSseStreamId, {
128033
128627
  controller: streamController,
128034
- encoder: encoder3,
128628
+ encoder: encoder4,
128035
128629
  cleanup: () => {
128036
128630
  this._streamMapping.delete(this._standaloneSseStreamId);
128037
128631
  try {
@@ -128072,7 +128666,7 @@ data:
128072
128666
  if (this.sessionId !== void 0) {
128073
128667
  headers["mcp-session-id"] = this.sessionId;
128074
128668
  }
128075
- const encoder3 = new TextEncoder();
128669
+ const encoder4 = new TextEncoder();
128076
128670
  let streamController;
128077
128671
  const readable = new ReadableStream({
128078
128672
  start: (controller) => {
@@ -128083,7 +128677,7 @@ data:
128083
128677
  });
128084
128678
  const replayedStreamId = await this._eventStore.replayEventsAfter(lastEventId, {
128085
128679
  send: async (eventId, message) => {
128086
- const success2 = this.writeSSEEvent(streamController, encoder3, message, eventId);
128680
+ const success2 = this.writeSSEEvent(streamController, encoder4, message, eventId);
128087
128681
  if (!success2) {
128088
128682
  this.onerror?.(new Error("Failed replay events"));
128089
128683
  try {
@@ -128095,7 +128689,7 @@ data:
128095
128689
  });
128096
128690
  this._streamMapping.set(replayedStreamId, {
128097
128691
  controller: streamController,
128098
- encoder: encoder3,
128692
+ encoder: encoder4,
128099
128693
  cleanup: () => {
128100
128694
  this._streamMapping.delete(replayedStreamId);
128101
128695
  try {
@@ -128113,7 +128707,7 @@ data:
128113
128707
  /**
128114
128708
  * Writes an event to an SSE stream via controller with proper formatting
128115
128709
  */
128116
- writeSSEEvent(controller, encoder3, message, eventId) {
128710
+ writeSSEEvent(controller, encoder4, message, eventId) {
128117
128711
  try {
128118
128712
  let eventData = `event: message
128119
128713
  `;
@@ -128124,7 +128718,7 @@ data:
128124
128718
  eventData += `data: ${JSON.stringify(message)}
128125
128719
 
128126
128720
  `;
128127
- controller.enqueue(encoder3.encode(eventData));
128721
+ controller.enqueue(encoder4.encode(eventData));
128128
128722
  return true;
128129
128723
  } catch (error51) {
128130
128724
  this.onerror?.(error51);
@@ -128246,7 +128840,7 @@ data:
128246
128840
  }
128247
128841
  });
128248
128842
  }
128249
- const encoder3 = new TextEncoder();
128843
+ const encoder4 = new TextEncoder();
128250
128844
  let streamController;
128251
128845
  const readable = new ReadableStream({
128252
128846
  start: (controller) => {
@@ -128268,7 +128862,7 @@ data:
128268
128862
  if (isJSONRPCRequest(message)) {
128269
128863
  this._streamMapping.set(streamId, {
128270
128864
  controller: streamController,
128271
- encoder: encoder3,
128865
+ encoder: encoder4,
128272
128866
  cleanup: () => {
128273
128867
  this._streamMapping.delete(streamId);
128274
128868
  try {
@@ -128280,7 +128874,7 @@ data:
128280
128874
  this._requestToStreamMapping.set(message.id, streamId);
128281
128875
  }
128282
128876
  }
128283
- await this.writePrimingEvent(streamController, encoder3, streamId, clientProtocolVersion);
128877
+ await this.writePrimingEvent(streamController, encoder4, streamId, clientProtocolVersion);
128284
128878
  for (const message of messages) {
128285
128879
  let closeSSEStream;
128286
128880
  let closeStandaloneSSEStream;
@@ -131788,14 +132382,25 @@ function psLiteInferenceConfigured(config2) {
131788
132382
  return config2.inference.baseUrl.replace(/\/+$/, "") !== DEFAULT_INFERENCE_BASE_URL.replace(/\/+$/, "");
131789
132383
  }
131790
132384
  function createPsLiteDerivativeCompute(options) {
131791
- const provider = options.provider ?? createOpenAiCompatibleInferenceProvider({
131792
- baseUrl: options.config.inference.baseUrl,
131793
- model: options.config.inference.model
131794
- });
131795
132385
  const logger = options.logger ? {
131796
132386
  info: (payload, message) => options.logger?.info(payload, message),
131797
132387
  warn: (payload, message) => options.logger?.warn(payload, message)
131798
132388
  } : void 0;
132389
+ const provider = options.provider ?? createOpenAiCompatibleInferenceProvider({
132390
+ baseUrl: options.config.inference.baseUrl,
132391
+ model: options.config.inference.model,
132392
+ // PS-Lite holds no provider key: it always talks to the Vana relay,
132393
+ // which forwards only requests signed as the owner's server.
132394
+ requestSigner: options.requestSigner,
132395
+ // E2EE v2 to the Phala gateway (WebCrypto only, so it runs in the
132396
+ // browser): the relay sees ciphertext. `inference.e2ee: false` turns
132397
+ // it off for local development against a provider without ACI.
132398
+ encryption: options.config.inference.e2ee ? createPhalaE2eeEncryption({
132399
+ baseUrl: options.config.inference.baseUrl,
132400
+ requestSigner: options.requestSigner,
132401
+ logger
132402
+ }) : void 0
132403
+ });
131799
132404
  const scheduler = createRecomputeScheduler({
131800
132405
  store: options.store,
131801
132406
  debounceMs: options.config.inference.recomputeDebounceMs,
@@ -131881,9 +132486,10 @@ async function createIndexedDbPsLiteRuntime(options) {
131881
132486
  contracts: config2.gateway.contracts
131882
132487
  });
131883
132488
  const diagnostics = options.diagnostics ?? new DiagnosticsRecorder();
132489
+ const requestSigner = createRequestSigner(identity.account);
131884
132490
  const lineageGateway = createGatewayLineageClient({
131885
132491
  gatewayUrl: config2.gateway.url,
131886
- requestSigner: createRequestSigner(identity.account)
132492
+ requestSigner
131887
132493
  });
131888
132494
  let syncManager = options.syncManager ?? null;
131889
132495
  let scopeDeletions = options.scopeDeletions;
@@ -131905,6 +132511,8 @@ async function createIndexedDbPsLiteRuntime(options) {
131905
132511
  isAvailable: () => runtimeRef?.isAvailable() ?? Boolean(options.active)
131906
132512
  },
131907
132513
  provider: options.inferenceProvider,
132514
+ // The relay forwards only requests signed as the owner's server.
132515
+ requestSigner,
131908
132516
  logger: options.logger
131909
132517
  });
131910
132518
  } else if (derivatives === null && options.derivatives === void 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendatalabs/personal-server-ts-server",
3
- "version": "1.9.0",
3
+ "version": "1.10.1",
4
4
  "description": "Hono HTTP server for the Vana Personal Server — routes, middleware, composition root",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -44,8 +44,8 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@hono/node-server": "^1.19.13",
47
- "@opendatalabs/personal-server-ts-core": "1.9.0",
48
- "@opendatalabs/personal-server-ts-lite": "1.9.0",
47
+ "@opendatalabs/personal-server-ts-core": "1.10.1",
48
+ "@opendatalabs/personal-server-ts-lite": "1.10.1",
49
49
  "@opendatalabs/vana-sdk": "3.14.0",
50
50
  "better-sqlite3": "^12.11.1",
51
51
  "hono": "^4.12.27",