@opendatalabs/personal-server-ts-core 1.9.0 → 1.10.0

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 (52) hide show
  1. package/dist/derivatives/compute.d.ts.map +1 -1
  2. package/dist/derivatives/compute.js +10 -3
  3. package/dist/derivatives/compute.js.map +1 -1
  4. package/dist/derivatives/e2ee/aad.d.ts +22 -0
  5. package/dist/derivatives/e2ee/aad.d.ts.map +1 -0
  6. package/dist/derivatives/e2ee/aad.js +32 -0
  7. package/dist/derivatives/e2ee/aad.js.map +1 -0
  8. package/dist/derivatives/e2ee/attestation.d.ts +122 -0
  9. package/dist/derivatives/e2ee/attestation.d.ts.map +1 -0
  10. package/dist/derivatives/e2ee/attestation.js +217 -0
  11. package/dist/derivatives/e2ee/attestation.js.map +1 -0
  12. package/dist/derivatives/e2ee/index.d.ts +6 -0
  13. package/dist/derivatives/e2ee/index.d.ts.map +1 -0
  14. package/dist/derivatives/e2ee/index.js +6 -0
  15. package/dist/derivatives/e2ee/index.js.map +1 -0
  16. package/dist/derivatives/e2ee/jcs.d.ts +17 -0
  17. package/dist/derivatives/e2ee/jcs.d.ts.map +1 -0
  18. package/dist/derivatives/e2ee/jcs.js +55 -0
  19. package/dist/derivatives/e2ee/jcs.js.map +1 -0
  20. package/dist/derivatives/e2ee/phala.d.ts +55 -0
  21. package/dist/derivatives/e2ee/phala.d.ts.map +1 -0
  22. package/dist/derivatives/e2ee/phala.js +167 -0
  23. package/dist/derivatives/e2ee/phala.js.map +1 -0
  24. package/dist/derivatives/e2ee/suite.d.ts +56 -0
  25. package/dist/derivatives/e2ee/suite.d.ts.map +1 -0
  26. package/dist/derivatives/e2ee/suite.js +164 -0
  27. package/dist/derivatives/e2ee/suite.js.map +1 -0
  28. package/dist/derivatives/index.d.ts +2 -1
  29. package/dist/derivatives/index.d.ts.map +1 -1
  30. package/dist/derivatives/index.js +1 -0
  31. package/dist/derivatives/index.js.map +1 -1
  32. package/dist/derivatives/inference.d.ts +48 -16
  33. package/dist/derivatives/inference.d.ts.map +1 -1
  34. package/dist/derivatives/inference.js +132 -68
  35. package/dist/derivatives/inference.js.map +1 -1
  36. package/dist/schemas/server-config.d.ts +2 -0
  37. package/dist/schemas/server-config.d.ts.map +1 -1
  38. package/dist/schemas/server-config.js +5 -0
  39. package/dist/schemas/server-config.js.map +1 -1
  40. package/dist/test-utils/e2ee-fixtures.d.ts +94 -0
  41. package/dist/test-utils/e2ee-fixtures.d.ts.map +1 -0
  42. package/dist/test-utils/e2ee-fixtures.js +116 -0
  43. package/dist/test-utils/e2ee-fixtures.js.map +1 -0
  44. package/dist/test-utils/e2ee-gateway.d.ts +61 -0
  45. package/dist/test-utils/e2ee-gateway.d.ts.map +1 -0
  46. package/dist/test-utils/e2ee-gateway.js +248 -0
  47. package/dist/test-utils/e2ee-gateway.js.map +1 -0
  48. package/dist/test-utils/index.d.ts +2 -0
  49. package/dist/test-utils/index.d.ts.map +1 -1
  50. package/dist/test-utils/index.js +2 -0
  51. package/dist/test-utils/index.js.map +1 -1
  52. package/package.json +1 -1
@@ -7,13 +7,13 @@
7
7
  * optional API key header exists for local development against a provider
8
8
  * directly.
9
9
  *
10
- * E2EE SEAM (not implemented): the Phala confidential-inference E2EE v2
11
- * protocol encrypts each `messages[i].content` to the model's public key
12
- * and adds the headers X-E2EE-Version, X-Client-Pub-Key, X-Model-Pub-Key,
13
- * X-E2EE-Nonce and X-E2EE-Timestamp; the response content comes back
14
- * encrypted to the client key. `InferenceRequestEncryption` below is the
15
- * hook where that lands: it sees the outgoing messages + headers and the
16
- * incoming content + headers, and nothing else in this module has to change.
10
+ * E2EE SEAM: the Phala confidential-inference E2EE v2 protocol encrypts each
11
+ * `messages[i].content` to the gateway's attested public key and adds the
12
+ * headers X-E2EE-Version, X-Client-Pub-Key, X-Model-Pub-Key, X-E2EE-Nonce
13
+ * and X-E2EE-Timestamp; the response content comes back encrypted to the
14
+ * client key. `InferenceRequestEncryption` below is the hook, implemented
15
+ * by `createPhalaE2eeEncryption` in ./e2ee. This module only knows the
16
+ * shape: encrypt the outgoing messages, decrypt the one response field.
17
17
  */
18
18
  export const DEFAULT_INFERENCE_BASE_URL = "https://inference.phala.com/v1";
19
19
  export const DEFAULT_INFERENCE_MODEL = "z-ai/glm-5.2";
@@ -25,10 +25,19 @@ export const DEFAULT_INFERENCE_REQUEST_FIELDS = {
25
25
  /** Thrown for a non-2xx or malformed provider reply. Carries no prompt text. */
26
26
  export class InferenceRequestError extends Error {
27
27
  status;
28
- constructor(message, status) {
28
+ /** OpenAI-style `error.type` of the rejection, when the body had one. */
29
+ errorType;
30
+ /**
31
+ * Explicit retry hint. When undefined the compute layer falls back to the
32
+ * status: no response, 429 or 5xx are retried.
33
+ */
34
+ retryable;
35
+ constructor(message, status, options = {}) {
29
36
  super(message);
30
37
  this.status = status;
31
38
  this.name = "InferenceRequestError";
39
+ this.errorType = options.errorType ?? null;
40
+ this.retryable = options.retryable;
32
41
  }
33
42
  }
34
43
  function isRecord(value) {
@@ -51,15 +60,31 @@ function readContent(body) {
51
60
  const first = body.choices[0];
52
61
  if (!isRecord(first) || !isRecord(first.message))
53
62
  return null;
63
+ const index = typeof first.index === "number" ? first.index : 0;
64
+ const field = `choices.${index}.message.content`;
65
+ const id = typeof body.id === "string" ? body.id : "";
54
66
  const content = first.message.content;
55
67
  if (typeof content === "string")
56
- return content;
68
+ return { content, field, id };
57
69
  // Some providers return content parts.
58
70
  if (Array.isArray(content)) {
59
71
  const text = content
60
72
  .map((part) => isRecord(part) && typeof part.text === "string" ? part.text : "")
61
73
  .join("");
62
- return text;
74
+ return { content: text, field, id };
75
+ }
76
+ return null;
77
+ }
78
+ /** OpenAI-style `{ error: { type } }` of a rejection; never its message. */
79
+ async function readErrorType(response) {
80
+ try {
81
+ const body = await response.json();
82
+ if (isRecord(body) && isRecord(body.error)) {
83
+ return typeof body.error.type === "string" ? body.error.type : null;
84
+ }
85
+ }
86
+ catch {
87
+ // Not JSON: no type to report.
63
88
  }
64
89
  return null;
65
90
  }
@@ -69,70 +94,109 @@ export function createOpenAiCompatibleInferenceProvider(options = {}) {
69
94
  const timeoutMs = options.timeoutMs ?? DEFAULT_INFERENCE_TIMEOUT_MS;
70
95
  const doFetch = options.fetch ?? fetch;
71
96
  const requestFields = options.requestFields ?? DEFAULT_INFERENCE_REQUEST_FIELDS;
72
- return {
73
- defaultModel,
74
- async chat(input) {
75
- const headers = new Headers({ "Content-Type": "application/json" });
76
- if (options.apiKey) {
77
- headers.set("Authorization", `Bearer ${options.apiKey}`);
78
- }
79
- let messages = input.messages;
80
- if (options.encryption) {
81
- ({ messages } = await options.encryption.encryptRequest({
82
- messages,
83
- headers,
84
- }));
85
- }
86
- const body = {
87
- ...requestFields,
88
- model: input.model || defaultModel,
97
+ const encryption = options.encryption;
98
+ /** One send; `rejected` reports a non-2xx so the caller may retry once. */
99
+ async function send(input) {
100
+ const headers = new Headers({ "Content-Type": "application/json" });
101
+ if (options.apiKey) {
102
+ headers.set("Authorization", `Bearer ${options.apiKey}`);
103
+ }
104
+ const model = input.model || defaultModel;
105
+ let messages = input.messages;
106
+ let encrypted = null;
107
+ if (encryption) {
108
+ encrypted = await encryption.encryptRequest({
109
+ model,
89
110
  messages,
90
- max_tokens: input.maxTokens ?? DEFAULT_INFERENCE_MAX_TOKENS,
91
- };
92
- let response;
93
- try {
94
- response = await doFetch(`${base}/chat/completions`, {
95
- method: "POST",
96
- headers,
97
- body: JSON.stringify(body),
98
- signal: AbortSignal.timeout(timeoutMs),
99
- });
100
- }
101
- catch (err) {
102
- // Transport failure: no status, no body. The message is the error
103
- // class name only; it never carries request contents.
104
- const name = err instanceof Error ? err.name : "Error";
105
- throw new InferenceRequestError(`inference request failed before a response (${name})`, null);
106
- }
107
- if (!response.ok) {
108
- throw new InferenceRequestError(`inference request failed with status ${response.status}`, response.status);
109
- }
110
- let parsed;
111
- try {
112
- parsed = await response.json();
113
- }
114
- catch {
115
- throw new InferenceRequestError("inference response was not JSON", response.status);
116
- }
117
- let content = readContent(parsed);
118
- if (content === null || content.trim() === "") {
119
- // An empty reply must never become a "ready" derivative.
120
- throw new InferenceRequestError("inference response carried no assistant content", response.status);
121
- }
122
- if (options.encryption) {
123
- content = await options.encryption.decryptResponse({
124
- content,
125
- headers: response.headers,
126
- });
127
- }
128
- const receiptId = response.headers.get("x-receipt-id") ?? undefined;
129
- const aciIdentity = response.headers.get("x-aci-identity") ?? undefined;
111
+ headers,
112
+ });
113
+ messages = encrypted.messages;
114
+ }
115
+ const body = {
116
+ ...requestFields,
117
+ model,
118
+ messages,
119
+ max_tokens: input.maxTokens ?? DEFAULT_INFERENCE_MAX_TOKENS,
120
+ };
121
+ let response;
122
+ try {
123
+ response = await doFetch(`${base}/chat/completions`, {
124
+ method: "POST",
125
+ headers,
126
+ body: JSON.stringify(body),
127
+ signal: AbortSignal.timeout(timeoutMs),
128
+ });
129
+ }
130
+ catch (err) {
131
+ // Transport failure: no status, no body. The message is the error
132
+ // class name only; it never carries request contents.
133
+ const name = err instanceof Error ? err.name : "Error";
134
+ throw new InferenceRequestError(`inference request failed before a response (${name})`, null);
135
+ }
136
+ if (!response.ok) {
137
+ const errorType = await readErrorType(response);
138
+ const retry = (await encryption?.onRejected?.({
139
+ status: response.status,
140
+ errorType,
141
+ headers: response.headers,
142
+ })) === true;
130
143
  return {
144
+ ok: false,
145
+ retry,
146
+ error: new InferenceRequestError(`inference request failed with status ${response.status}${errorType ? ` (${errorType})` : ""}`, response.status, { errorType }),
147
+ };
148
+ }
149
+ let parsed;
150
+ try {
151
+ parsed = await response.json();
152
+ }
153
+ catch {
154
+ throw new InferenceRequestError("inference response was not JSON", response.status);
155
+ }
156
+ const choice = readContent(parsed);
157
+ if (choice === null) {
158
+ throw new InferenceRequestError("inference response carried no assistant content", response.status);
159
+ }
160
+ let content = choice.content;
161
+ if (encrypted) {
162
+ // Fail closed: a reply that is not valid ciphertext for this request
163
+ // is an error, never used as plaintext.
164
+ content = await encrypted.decryptResponse({
165
+ content,
166
+ field: choice.field,
167
+ id: choice.id,
168
+ headers: response.headers,
169
+ });
170
+ }
171
+ if (content.trim() === "") {
172
+ // An empty reply must never become a "ready" derivative.
173
+ throw new InferenceRequestError("inference response carried no assistant content", response.status);
174
+ }
175
+ const receiptId = response.headers.get("x-receipt-id") ?? undefined;
176
+ const aciIdentity = response.headers.get("x-aci-identity") ?? undefined;
177
+ return {
178
+ ok: true,
179
+ result: {
131
180
  content,
132
181
  usage: readUsage(isRecord(parsed) ? parsed.usage : undefined),
133
182
  ...(receiptId ? { receiptId } : {}),
134
183
  ...(aciIdentity ? { aciIdentity } : {}),
135
- };
184
+ },
185
+ };
186
+ }
187
+ return {
188
+ defaultModel,
189
+ async chat(input) {
190
+ const first = await send(input);
191
+ if (first.ok)
192
+ return first.result;
193
+ if (!first.retry)
194
+ throw first.error;
195
+ // The encryption asked for one re-send (fresh key, fresh nonce).
196
+ const second = await send(input);
197
+ if (second.ok)
198
+ return second.result;
199
+ throw second.error;
136
200
  },
137
201
  };
138
202
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inference.js","sourceRoot":"","sources":["../../src/derivatives/inference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAsDH,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAC;AACtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,OAAO,CAAC;AACpD,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAmBlD,MAAM,CAAC,MAAM,gCAAgC,GAA4B;IACvE,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;CAC5C,CAAC;AAEF,gFAAgF;AAChF,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAG5B;IAFlB,YACE,OAAe,EACC,MAAqB;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,WAAM,GAAN,MAAM,CAAe;QAGrC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,KAAK,GAAmB;QAC5B,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;QACtC,gBAAgB,EAAE,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC9C,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;KACrC,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,MAAM,KAAK,GAAY,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IACtC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,uCAAuC;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO;aACjB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACjE;aACA,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,UAA4C,EAAE;IAE9C,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,0BAA0B,CAAC,CAAC,OAAO,CAClE,MAAM,EACN,EAAE,CACH,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,uBAAuB,CAAC;IAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,4BAA4B,CAAC;IACpE,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IACvC,MAAM,aAAa,GACjB,OAAO,CAAC,aAAa,IAAI,gCAAgC,CAAC;IAE5D,OAAO;QACL,YAAY;QACZ,KAAK,CAAC,IAAI,CAAC,KAAK;YACd,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACpE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC9B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;oBACtD,QAAQ;oBACR,OAAO;iBACR,CAAC,CAAC,CAAC;YACN,CAAC;YACD,MAAM,IAAI,GAAG;gBACX,GAAG,aAAa;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,YAAY;gBAClC,QAAQ;gBACR,UAAU,EAAE,KAAK,CAAC,SAAS,IAAI,4BAA4B;aAC5D,CAAC;YACF,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,IAAI,mBAAmB,EAAE;oBACnD,MAAM,EAAE,MAAM;oBACd,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAC1B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;iBACvC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kEAAkE;gBAClE,sDAAsD;gBACtD,MAAM,IAAI,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACvD,MAAM,IAAI,qBAAqB,CAC7B,+CAA+C,IAAI,GAAG,EACtD,IAAI,CACL,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,qBAAqB,CAC7B,wCAAwC,QAAQ,CAAC,MAAM,EAAE,EACzD,QAAQ,CAAC,MAAM,CAChB,CAAC;YACJ,CAAC;YACD,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,qBAAqB,CAC7B,iCAAiC,EACjC,QAAQ,CAAC,MAAM,CAChB,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC9C,yDAAyD;gBACzD,MAAM,IAAI,qBAAqB,CAC7B,iDAAiD,EACjD,QAAQ,CAAC,MAAM,CAChB,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC;oBACjD,OAAO;oBACP,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B,CAAC,CAAC;YACL,CAAC;YACD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;YACpE,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,SAAS,CAAC;YACxE,OAAO;gBACL,OAAO;gBACP,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7D,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAeD,+EAA+E;AAC/E,MAAM,UAAU,2BAA2B,CACzC,UAAwC,EAAE;IAE1C,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,KAAK,IAAI,YAAY;QAC3C,KAAK;QACL,KAAK,CAAC,IAAI,CAAC,KAAK;YACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,IAAI,OAAO,CAAC,OAAO;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrE,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;oBACtB,MAAM,EAAE,aAAa;oBACrB,QAAQ,EAAE,eAAe;iBAC1B,CAAC;gBACF,SAAS,EAAE,cAAc;aAC1B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"inference.js","sourceRoot":"","sources":["../../src/derivatives/inference.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,7 @@ export declare const DEFAULTS: {
46
46
  inference: {
47
47
  baseUrl: string;
48
48
  model: string;
49
+ e2ee: boolean;
49
50
  maxSourceItems: number;
50
51
  recomputeDebounceMs: number;
51
52
  };
@@ -119,6 +120,7 @@ export declare const ServerConfigSchema: z.ZodObject<{
119
120
  inference: z.ZodDefault<z.ZodObject<{
120
121
  baseUrl: z.ZodDefault<z.ZodURL>;
121
122
  model: z.ZodDefault<z.ZodString>;
123
+ e2ee: z.ZodDefault<z.ZodBoolean>;
122
124
  maxSourceItems: z.ZodDefault<z.ZodNumber>;
123
125
  recomputeDebounceMs: z.ZodDefault<z.ZodNumber>;
124
126
  }, z.core.$strip>>;
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/schemas/server-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmEpB,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;EAMzB,CAAC;AAEH,eAAO,MAAM,uBAAuB;;iBAElC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6G7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAEpD,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,YAAY,EAAE,MAAM,CAAC;QACrB,0BAA0B,EAAE,MAAM,CAAC;QACnC,qBAAqB,EAAE,MAAM,CAAC;QAC9B,uBAAuB,EAAE,MAAM,CAAC;QAEhC,qBAAqB,EAAE,MAAM,CAAC;QAG9B,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/schemas/server-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEpB,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;EAMzB,CAAC;AAEH,eAAO,MAAM,uBAAuB;;iBAElC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8G7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAEpD,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,YAAY,EAAE,MAAM,CAAC;QACrB,0BAA0B,EAAE,MAAM,CAAC;QACnC,qBAAqB,EAAE,MAAM,CAAC;QAC9B,uBAAuB,EAAE,MAAM,CAAC;QAEhC,qBAAqB,EAAE,MAAM,CAAC;QAG9B,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC"}
@@ -61,6 +61,10 @@ export const DEFAULTS = {
61
61
  // provider key) or straight at a provider for local development.
62
62
  baseUrl: "https://inference.phala.com/v1",
63
63
  model: "z-ai/glm-5.2",
64
+ // End to end encryption of prompt and answer to the Phala gateway
65
+ // (E2EE v2): the relay only sees ciphertext. Set false only for local
66
+ // development against a provider without ACI attestation.
67
+ e2ee: true,
64
68
  // Newest-first items kept per source scope when a prompt is assembled.
65
69
  maxSourceItems: 50,
66
70
  // Quiet period after a source scope changes before a recompute starts.
@@ -172,6 +176,7 @@ export const ServerConfigSchema = z.object({
172
176
  .object({
173
177
  baseUrl: z.url().default(DEFAULTS.inference.baseUrl),
174
178
  model: z.string().min(1).default(DEFAULTS.inference.model),
179
+ e2ee: z.boolean().default(DEFAULTS.inference.e2ee),
175
180
  maxSourceItems: z
176
181
  .number()
177
182
  .int()
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/schemas/server-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,MAAM,EAAE;QACN,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,uBAAuB;KAChC;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAe;QACtB,MAAM,EAAE,KAAK;KACd;IACD,OAAO,EAAE;QACP,OAAO,EAAE,OAAgB;QACzB,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,MAAM,EAAE,0BAA0B;aACnC;SACF;KACF;IACD,OAAO,EAAE;QACP,GAAG,EAAE,sDAAsD;QAC3D,OAAO,EAAE,KAAK;QACd,SAAS,EAAE;YACT,6CAA6C;YAC7C,YAAY,EAAE,4CAA4C;YAC1D,uDAAuD;YACvD,0BAA0B,EAAE,4CAA4C;YACxE,+DAA+D;YAC/D,qBAAqB,EAAE,4CAA4C;YACnE,wCAAwC;YACxC,uBAAuB,EAAE,4CAA4C;YACrE,mEAAmE;YACnE,oDAAoD;YACpD,qBAAqB,EAAE,4CAA4C;YACnE,kEAAkE;YAClE,8DAA8D;YAC9D,qEAAqE;YACrE,WAAW,EAAE,4CAA4C;YACzD,oEAAoE;SACrE;KACF;IACD,KAAK,EAAE;QACL,OAAO,EAAE,IAAI;KACd;IACD,OAAO,EAAE;QACP,iEAAiE;QACjE,wCAAwC;QACxC,OAAO,EAAE,KAAK;KACf;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,KAAK;QACd,sBAAsB,EAAE,IAAI;KAC7B;IACD,MAAM,EAAE;QACN,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,sBAAsB;QAClC,UAAU,EAAE,IAAI;KACjB;IACD,SAAS,EAAE;QACT,qEAAqE;QACrE,qEAAqE;QACrE,iEAAiE;QACjE,OAAO,EAAE,gCAAgC;QACzC,KAAK,EAAE,cAAc;QACrB,uEAAuE;QACvE,cAAc,EAAE,EAAE;QAClB,uEAAuE;QACvE,mBAAmB,EAAE,KAAK;KAC3B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC;IACnC,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;QACtE,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;KAChD,CAAC;SACD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;aACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;KACrD,CAAC;SACD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC5B,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QACzD,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,IAAI,EAAE,uBAAuB,CAAC,QAAQ,EAAE;SACzC,CAAC;aACD,OAAO,CAAC,EAAE,CAAC;KACf,CAAC;SACD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC5B,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QACtE,SAAS,EAAE,CAAC;aACT,MAAM,CAAC;YACN,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,UAAU,CAAC,IAAI,CAAC;iBAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;YACnD,0BAA0B,EAAE,CAAC;iBAC1B,MAAM,EAAE;iBACR,UAAU,CAAC,IAAI,CAAC;iBAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,0BAA0B,CAAC;YACjE,qBAAqB,EAAE,CAAC;iBACrB,MAAM,EAAE;iBACR,UAAU,CAAC,IAAI,CAAC;iBAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC;YAC5D,uBAAuB,EAAE,CAAC;iBACvB,MAAM,EAAE;iBACR,UAAU,CAAC,IAAI,CAAC;iBAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,uBAAuB,CAAC;YAC9D,qBAAqB,EAAE,CAAC;iBACrB,MAAM,EAAE;iBACR,UAAU,CAAC,IAAI,CAAC;iBAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC;YAC5D,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,UAAU,CAAC,IAAI,CAAC;iBAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC;SACnD,CAAC;aACD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;KACvC,CAAC;SACD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC5B,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;KACrD,CAAC;SACD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC1B,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;KACvD,CAAC;SACD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC5B,IAAI,EAAE,CAAC;SACJ,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QACnD,sBAAsB,EAAE,CAAC;aACtB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC;KACjD,CAAC;SACD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACzB,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;QACrD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;QAC1D,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,KAAK,CAAC;aACV,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KACvC,CAAC;SACD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC3B,SAAS,EAAE,CAAC;SACT,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;QACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;QAC1D,cAAc,EAAE,CAAC;aACd,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,MAAM,CAAC;aACX,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC;QAC7C,mBAAmB,EAAE,CAAC;aACnB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,SAAS,CAAC;aACd,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,mBAAmB,CAAC;KACnD,CAAC;SACD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;CAC/B,CAAC,CAAC"}
1
+ {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/schemas/server-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * A real `GET /v1/aci/attestation?nonce=...` report captured from
3
+ * https://inference.phala.com on 2026-08-28 (the TDX quote, event log,
4
+ * app compose and vm config are omitted: they are not part of the
5
+ * structural binding chain). The nonce below is the one the report was
6
+ * requested with, so `report_data` recomputes from the keyset digest.
7
+ */
8
+ export declare const LIVE_ACI_ATTESTATION_NONCE = "434fe0866976bf566484a1f11dbb0a55d9d4554b84f25ccd1ddd9095375722b1";
9
+ /** Unix seconds inside the fixture keyset's validity window. */
10
+ export declare const LIVE_ACI_ATTESTATION_CLOCK_S = 1788220800;
11
+ export declare const LIVE_ACI_X25519_PUBLIC_KEY_HEX = "408e82d159832cfae15007781bcade0badee7d50e9f76d50eaa1777464006537";
12
+ export declare const LIVE_ACI_ATTESTATION_REPORT: {
13
+ readonly api_version: "aci/1";
14
+ readonly workload_keyset_digest: "sha256:4f3dc45eeb18a5aefa49dfe5c0f2b6dbc77dd37276adc0cee87f1c1f70b73072";
15
+ readonly attestation: {
16
+ readonly tee_type: "tdx";
17
+ readonly workload_keyset: {
18
+ readonly subject: null;
19
+ readonly not_after: 1790498751;
20
+ readonly receipt_signing_keys: readonly [{
21
+ readonly key_id: "dstack-kms-receipt-ed25519-v1";
22
+ readonly algo: "ed25519";
23
+ readonly public_key: "110f3824daeeef29dbeba9677a5794ffed257b1082d9fd4599b3c0819953aa0a";
24
+ }];
25
+ readonly e2ee_public_keys: readonly [{
26
+ readonly key_id: "dstack-kms-e2ee-v1";
27
+ readonly algo: "secp256k1-aes-256-gcm-hkdf-sha256";
28
+ readonly public_key: "04943cea0b4babf60f6e2031e9a00866a37c4ae696fb45895b3a9b38ab8cbb898f42c85b704aceaa0a396cf26f7fdf79d83205be7e11d3a5d70419a68277158c3d";
29
+ }, {
30
+ readonly key_id: "dstack-kms-e2ee-x25519-v1";
31
+ readonly algo: "x25519-aes-256-gcm-hkdf-sha256";
32
+ readonly public_key: "408e82d159832cfae15007781bcade0badee7d50e9f76d50eaa1777464006537";
33
+ }];
34
+ readonly tls_public_keys: readonly [{
35
+ readonly spki_sha256: "4586d125aaef3d1b33a3c34f12a5c235af3016dddd35e56a99b6b3ed3ba57dcb";
36
+ readonly domain: "tee.redpill.ai";
37
+ }, {
38
+ readonly spki_sha256: "8e89a8a01e12098065037be187dcd2f03071dc1e7c9bb8527160f4c56ebc728f";
39
+ readonly domain: "inference.phala.com";
40
+ }, {
41
+ readonly spki_sha256: "e52fdca52c039def33e51cd2b5eded43eae1949030e47866f5f09e90b6940a88";
42
+ readonly domain: "api.redpill.ai";
43
+ }];
44
+ };
45
+ readonly report_data: "9ba90c1e314b8feb6c48be5de2f6b41d7174103056845e27d6e835c4202e5954";
46
+ readonly source_provenance: {
47
+ readonly repo_url: "https://github.com/Dstack-TEE/private-ai-gateway.git";
48
+ readonly repo_commit: "d567f6b4c4d93e33037ea202db04db86a8ad881c";
49
+ readonly image_digest: null;
50
+ readonly image_provenance: null;
51
+ };
52
+ readonly evidence: {
53
+ readonly quote_report_data: "9ba90c1e314b8feb6c48be5de2f6b41d7174103056845e27d6e835c4202e59540000000000000000000000000000000000000000000000000000000000000000";
54
+ readonly key_custody: {
55
+ readonly provider: "dstack-kms";
56
+ readonly keys: readonly [{
57
+ readonly role: "receipt";
58
+ readonly path: "aci/receipt-ed25519/v1";
59
+ readonly purpose: "aci.receipt.ed25519.v1";
60
+ readonly algo: "ed25519";
61
+ readonly public_key: "110f3824daeeef29dbeba9677a5794ffed257b1082d9fd4599b3c0819953aa0a";
62
+ readonly kms_public_key: "02f7fb3ed8c352d316dfdc19458a9f29c06eb7e74130b3808d784e2fd401a2c12d";
63
+ readonly signature_chain: readonly ["d1f59335effc2688acdf502ee34d8d3373b0e7e6be493075383714ce5673a29973f224690437c483ae3fdd37172df3abad82877c4023ed7c5a64d5acaf18477c00", "5c2fe36bdb1e434c0a371579bcbce07c4e7b89eba45affa089191baec84f23ad77b24a594aa28427b6b7a5f348b0ecf5597abfd9a2add05ddb55c521ba38a38501"];
64
+ }, {
65
+ readonly role: "e2ee-secp256k1";
66
+ readonly path: "aci/e2ee/v1";
67
+ readonly purpose: "aci.e2ee.v1";
68
+ readonly algo: "secp256k1-aes-256-gcm-hkdf-sha256";
69
+ readonly public_key: "04943cea0b4babf60f6e2031e9a00866a37c4ae696fb45895b3a9b38ab8cbb898f42c85b704aceaa0a396cf26f7fdf79d83205be7e11d3a5d70419a68277158c3d";
70
+ readonly kms_public_key: "03943cea0b4babf60f6e2031e9a00866a37c4ae696fb45895b3a9b38ab8cbb898f";
71
+ readonly signature_chain: readonly ["452d6f86a807fef0ce0d65e6c5cd25a0a249b1fd8608d26c3efe17fc10346f4c2d3dfb8969d10dc1feac1d595b3816f63faa40ac370a3a233ce1d712d418c89701", "5c2fe36bdb1e434c0a371579bcbce07c4e7b89eba45affa089191baec84f23ad77b24a594aa28427b6b7a5f348b0ecf5597abfd9a2add05ddb55c521ba38a38501"];
72
+ }, {
73
+ readonly role: "e2ee-x25519";
74
+ readonly path: "aci/e2ee-x25519/v1";
75
+ readonly purpose: "aci.e2ee.x25519.v1";
76
+ readonly algo: "x25519-aes-256-gcm-hkdf-sha256";
77
+ readonly public_key: "408e82d159832cfae15007781bcade0badee7d50e9f76d50eaa1777464006537";
78
+ readonly kms_public_key: "03892f86b3f55f78cc0760cec933cf8e2a92862fb173c2d221cc25895847cbb5eb";
79
+ readonly signature_chain: readonly ["358cd661ca4f5e986ed950ca083bf7bcfef6ab4b839ca11a953b156d64f82b1c51a213730d5777b4c845170827680d41e8220c2f950a38081025ff16eb3789ba00", "5c2fe36bdb1e434c0a371579bcbce07c4e7b89eba45affa089191baec84f23ad77b24a594aa28427b6b7a5f348b0ecf5597abfd9a2add05ddb55c521ba38a38501"];
80
+ }];
81
+ };
82
+ readonly downstream_tls_binding: {
83
+ readonly domain: "inference.phala.com";
84
+ readonly spki_sha256: "8e89a8a01e12098065037be187dcd2f03071dc1e7c9bb8527160f4c56ebc728f";
85
+ };
86
+ readonly quote: "<omitted in fixture>";
87
+ };
88
+ };
89
+ readonly service_capabilities: {
90
+ readonly supported_e2ee_versions: readonly ["2"];
91
+ readonly serving: "aggregator";
92
+ };
93
+ };
94
+ //# sourceMappingURL=e2ee-fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2ee-fixtures.d.ts","sourceRoot":"","sources":["../../src/test-utils/e2ee-fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,0BAA0B,qEAC6B,CAAC;AAErE,gEAAgE;AAChE,eAAO,MAAM,4BAA4B,aAAa,CAAC;AAEvD,eAAO,MAAM,8BAA8B,qEACyB,CAAC;AAErE,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuH9B,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * A real `GET /v1/aci/attestation?nonce=...` report captured from
3
+ * https://inference.phala.com on 2026-08-28 (the TDX quote, event log,
4
+ * app compose and vm config are omitted: they are not part of the
5
+ * structural binding chain). The nonce below is the one the report was
6
+ * requested with, so `report_data` recomputes from the keyset digest.
7
+ */
8
+ export const LIVE_ACI_ATTESTATION_NONCE = "434fe0866976bf566484a1f11dbb0a55d9d4554b84f25ccd1ddd9095375722b1";
9
+ /** Unix seconds inside the fixture keyset's validity window. */
10
+ export const LIVE_ACI_ATTESTATION_CLOCK_S = 1788220800;
11
+ export const LIVE_ACI_X25519_PUBLIC_KEY_HEX = "408e82d159832cfae15007781bcade0badee7d50e9f76d50eaa1777464006537";
12
+ export const LIVE_ACI_ATTESTATION_REPORT = {
13
+ api_version: "aci/1",
14
+ workload_keyset_digest: "sha256:4f3dc45eeb18a5aefa49dfe5c0f2b6dbc77dd37276adc0cee87f1c1f70b73072",
15
+ attestation: {
16
+ tee_type: "tdx",
17
+ workload_keyset: {
18
+ subject: null,
19
+ not_after: 1790498751,
20
+ receipt_signing_keys: [
21
+ {
22
+ key_id: "dstack-kms-receipt-ed25519-v1",
23
+ algo: "ed25519",
24
+ public_key: "110f3824daeeef29dbeba9677a5794ffed257b1082d9fd4599b3c0819953aa0a",
25
+ },
26
+ ],
27
+ e2ee_public_keys: [
28
+ {
29
+ key_id: "dstack-kms-e2ee-v1",
30
+ algo: "secp256k1-aes-256-gcm-hkdf-sha256",
31
+ public_key: "04943cea0b4babf60f6e2031e9a00866a37c4ae696fb45895b3a9b38ab8cbb898f42c85b704aceaa0a396cf26f7fdf79d83205be7e11d3a5d70419a68277158c3d",
32
+ },
33
+ {
34
+ key_id: "dstack-kms-e2ee-x25519-v1",
35
+ algo: "x25519-aes-256-gcm-hkdf-sha256",
36
+ public_key: "408e82d159832cfae15007781bcade0badee7d50e9f76d50eaa1777464006537",
37
+ },
38
+ ],
39
+ tls_public_keys: [
40
+ {
41
+ spki_sha256: "4586d125aaef3d1b33a3c34f12a5c235af3016dddd35e56a99b6b3ed3ba57dcb",
42
+ domain: "tee.redpill.ai",
43
+ },
44
+ {
45
+ spki_sha256: "8e89a8a01e12098065037be187dcd2f03071dc1e7c9bb8527160f4c56ebc728f",
46
+ domain: "inference.phala.com",
47
+ },
48
+ {
49
+ spki_sha256: "e52fdca52c039def33e51cd2b5eded43eae1949030e47866f5f09e90b6940a88",
50
+ domain: "api.redpill.ai",
51
+ },
52
+ ],
53
+ },
54
+ report_data: "9ba90c1e314b8feb6c48be5de2f6b41d7174103056845e27d6e835c4202e5954",
55
+ source_provenance: {
56
+ repo_url: "https://github.com/Dstack-TEE/private-ai-gateway.git",
57
+ repo_commit: "d567f6b4c4d93e33037ea202db04db86a8ad881c",
58
+ image_digest: null,
59
+ image_provenance: null,
60
+ },
61
+ evidence: {
62
+ quote_report_data: "9ba90c1e314b8feb6c48be5de2f6b41d7174103056845e27d6e835c4202e59540000000000000000000000000000000000000000000000000000000000000000",
63
+ key_custody: {
64
+ provider: "dstack-kms",
65
+ keys: [
66
+ {
67
+ role: "receipt",
68
+ path: "aci/receipt-ed25519/v1",
69
+ purpose: "aci.receipt.ed25519.v1",
70
+ algo: "ed25519",
71
+ public_key: "110f3824daeeef29dbeba9677a5794ffed257b1082d9fd4599b3c0819953aa0a",
72
+ kms_public_key: "02f7fb3ed8c352d316dfdc19458a9f29c06eb7e74130b3808d784e2fd401a2c12d",
73
+ signature_chain: [
74
+ "d1f59335effc2688acdf502ee34d8d3373b0e7e6be493075383714ce5673a29973f224690437c483ae3fdd37172df3abad82877c4023ed7c5a64d5acaf18477c00",
75
+ "5c2fe36bdb1e434c0a371579bcbce07c4e7b89eba45affa089191baec84f23ad77b24a594aa28427b6b7a5f348b0ecf5597abfd9a2add05ddb55c521ba38a38501",
76
+ ],
77
+ },
78
+ {
79
+ role: "e2ee-secp256k1",
80
+ path: "aci/e2ee/v1",
81
+ purpose: "aci.e2ee.v1",
82
+ algo: "secp256k1-aes-256-gcm-hkdf-sha256",
83
+ public_key: "04943cea0b4babf60f6e2031e9a00866a37c4ae696fb45895b3a9b38ab8cbb898f42c85b704aceaa0a396cf26f7fdf79d83205be7e11d3a5d70419a68277158c3d",
84
+ kms_public_key: "03943cea0b4babf60f6e2031e9a00866a37c4ae696fb45895b3a9b38ab8cbb898f",
85
+ signature_chain: [
86
+ "452d6f86a807fef0ce0d65e6c5cd25a0a249b1fd8608d26c3efe17fc10346f4c2d3dfb8969d10dc1feac1d595b3816f63faa40ac370a3a233ce1d712d418c89701",
87
+ "5c2fe36bdb1e434c0a371579bcbce07c4e7b89eba45affa089191baec84f23ad77b24a594aa28427b6b7a5f348b0ecf5597abfd9a2add05ddb55c521ba38a38501",
88
+ ],
89
+ },
90
+ {
91
+ role: "e2ee-x25519",
92
+ path: "aci/e2ee-x25519/v1",
93
+ purpose: "aci.e2ee.x25519.v1",
94
+ algo: "x25519-aes-256-gcm-hkdf-sha256",
95
+ public_key: "408e82d159832cfae15007781bcade0badee7d50e9f76d50eaa1777464006537",
96
+ kms_public_key: "03892f86b3f55f78cc0760cec933cf8e2a92862fb173c2d221cc25895847cbb5eb",
97
+ signature_chain: [
98
+ "358cd661ca4f5e986ed950ca083bf7bcfef6ab4b839ca11a953b156d64f82b1c51a213730d5777b4c845170827680d41e8220c2f950a38081025ff16eb3789ba00",
99
+ "5c2fe36bdb1e434c0a371579bcbce07c4e7b89eba45affa089191baec84f23ad77b24a594aa28427b6b7a5f348b0ecf5597abfd9a2add05ddb55c521ba38a38501",
100
+ ],
101
+ },
102
+ ],
103
+ },
104
+ downstream_tls_binding: {
105
+ domain: "inference.phala.com",
106
+ spki_sha256: "8e89a8a01e12098065037be187dcd2f03071dc1e7c9bb8527160f4c56ebc728f",
107
+ },
108
+ quote: "<omitted in fixture>",
109
+ },
110
+ },
111
+ service_capabilities: {
112
+ supported_e2ee_versions: ["2"],
113
+ serving: "aggregator",
114
+ },
115
+ };
116
+ //# sourceMappingURL=e2ee-fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2ee-fixtures.js","sourceRoot":"","sources":["../../src/test-utils/e2ee-fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GACrC,kEAAkE,CAAC;AAErE,gEAAgE;AAChE,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC;AAEvD,MAAM,CAAC,MAAM,8BAA8B,GACzC,kEAAkE,CAAC;AAErE,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,WAAW,EAAE,OAAO;IACpB,sBAAsB,EACpB,yEAAyE;IAC3E,WAAW,EAAE;QACX,QAAQ,EAAE,KAAK;QACf,eAAe,EAAE;YACf,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,UAAU;YACrB,oBAAoB,EAAE;gBACpB;oBACE,MAAM,EAAE,+BAA+B;oBACvC,IAAI,EAAE,SAAS;oBACf,UAAU,EACR,kEAAkE;iBACrE;aACF;YACD,gBAAgB,EAAE;gBAChB;oBACE,MAAM,EAAE,oBAAoB;oBAC5B,IAAI,EAAE,mCAAmC;oBACzC,UAAU,EACR,oIAAoI;iBACvI;gBACD;oBACE,MAAM,EAAE,2BAA2B;oBACnC,IAAI,EAAE,gCAAgC;oBACtC,UAAU,EACR,kEAAkE;iBACrE;aACF;YACD,eAAe,EAAE;gBACf;oBACE,WAAW,EACT,kEAAkE;oBACpE,MAAM,EAAE,gBAAgB;iBACzB;gBACD;oBACE,WAAW,EACT,kEAAkE;oBACpE,MAAM,EAAE,qBAAqB;iBAC9B;gBACD;oBACE,WAAW,EACT,kEAAkE;oBACpE,MAAM,EAAE,gBAAgB;iBACzB;aACF;SACF;QACD,WAAW,EACT,kEAAkE;QACpE,iBAAiB,EAAE;YACjB,QAAQ,EAAE,sDAAsD;YAChE,WAAW,EAAE,0CAA0C;YACvD,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE,IAAI;SACvB;QACD,QAAQ,EAAE;YACR,iBAAiB,EACf,kIAAkI;YACpI,WAAW,EAAE;gBACX,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE;oBACJ;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,wBAAwB;wBAC9B,OAAO,EAAE,wBAAwB;wBACjC,IAAI,EAAE,SAAS;wBACf,UAAU,EACR,kEAAkE;wBACpE,cAAc,EACZ,oEAAoE;wBACtE,eAAe,EAAE;4BACf,oIAAoI;4BACpI,oIAAoI;yBACrI;qBACF;oBACD;wBACE,IAAI,EAAE,gBAAgB;wBACtB,IAAI,EAAE,aAAa;wBACnB,OAAO,EAAE,aAAa;wBACtB,IAAI,EAAE,mCAAmC;wBACzC,UAAU,EACR,oIAAoI;wBACtI,cAAc,EACZ,oEAAoE;wBACtE,eAAe,EAAE;4BACf,oIAAoI;4BACpI,oIAAoI;yBACrI;qBACF;oBACD;wBACE,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,oBAAoB;wBAC1B,OAAO,EAAE,oBAAoB;wBAC7B,IAAI,EAAE,gCAAgC;wBACtC,UAAU,EACR,kEAAkE;wBACpE,cAAc,EACZ,oEAAoE;wBACtE,eAAe,EAAE;4BACf,oIAAoI;4BACpI,oIAAoI;yBACrI;qBACF;iBACF;aACF;YACD,sBAAsB,EAAE;gBACtB,MAAM,EAAE,qBAAqB;gBAC7B,WAAW,EACT,kEAAkE;aACrE;YACD,KAAK,EAAE,sBAAsB;SAC9B;KACF;IACD,oBAAoB,EAAE;QACpB,uBAAuB,EAAE,CAAC,GAAG,CAAC;QAC9B,OAAO,EAAE,YAAY;KACtB;CACO,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * A fake Phala-style ACI gateway behind a `fetch` function, for tests of the
3
+ * E2EE v2 client: serves the attestation report for its keyset and a chat
4
+ * completions endpoint that behaves like the enclave (validates the five
5
+ * headers, decrypts the request fields, encrypts the answer to the client
6
+ * key). It records what the "relay" saw on the wire and what the "enclave"
7
+ * decrypted, so a test can assert the two differ.
8
+ */
9
+ import { type AciWorkloadKeyset } from "../derivatives/e2ee/attestation.js";
10
+ import { type E2eeKeyPair } from "../derivatives/e2ee/suite.js";
11
+ /** The spec test-vector service key: seed 32 x 0x03. */
12
+ export declare const TEST_VECTOR_SERVICE_SEED: Uint8Array<ArrayBuffer>;
13
+ export declare const TEST_VECTOR_SERVICE_PUBLIC_KEY_HEX = "5dfedd3b6bd47f6fa28ee15d969d5bb0ea53774d488bdaf9df1c6e0124b3ef22";
14
+ export declare function testVectorServiceKeyPair(): Promise<E2eeKeyPair>;
15
+ export interface FakeE2eeGatewayRequest {
16
+ url: string;
17
+ headers: Record<string, string>;
18
+ /** The JSON body exactly as the relay would see it. */
19
+ body: Record<string, unknown>;
20
+ }
21
+ export interface FakeE2eeGatewayOptions {
22
+ /** Chat completions base the gateway answers on (default relay.test/v1). */
23
+ baseUrl?: string;
24
+ /** Service key (default: the spec test-vector key). */
25
+ serviceKey?: E2eeKeyPair;
26
+ keyId?: string;
27
+ notAfter?: number;
28
+ /** Plaintext answer for a decrypted prompt (default: fixed JSON answer). */
29
+ respond?: (input: {
30
+ model: string;
31
+ messages: Array<{
32
+ role: string;
33
+ content: string;
34
+ }>;
35
+ }) => string | Promise<string>;
36
+ /** false = 404 on the attestation route (a relay without passthrough). */
37
+ attestationRoute?: boolean;
38
+ /** Advertised E2EE versions (default ["2"]). */
39
+ supportedE2eeVersions?: string[];
40
+ /** Response id put on completions (default chatcmpl-test). */
41
+ responseId?: string;
42
+ }
43
+ export interface FakeE2eeGateway {
44
+ fetch: typeof fetch;
45
+ keyset: AciWorkloadKeyset;
46
+ /** Every chat completion request, as seen on the wire. */
47
+ requests: FakeE2eeGatewayRequest[];
48
+ /** Attestation report requests (url only). */
49
+ attestationRequests: string[];
50
+ /** Decrypted message contents per request, as the enclave saw them. */
51
+ decryptedPrompts: string[][];
52
+ /** Replace the service key: a keyset rotation with a fresh digest. */
53
+ rotateKey(): Promise<void>;
54
+ /** Serve the next N chat requests as this OpenAI-style error. */
55
+ failNext(count: number, status: number, errorType: string): void;
56
+ /** Serve the next chat response with plaintext content (no E2EE). */
57
+ plaintextNext(): void;
58
+ keysetDigest(): Promise<string>;
59
+ }
60
+ export declare function createFakeE2eeGateway(options?: FakeE2eeGatewayOptions): Promise<FakeE2eeGateway>;
61
+ //# sourceMappingURL=e2ee-gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2ee-gateway.d.ts","sourceRoot":"","sources":["../../src/test-utils/e2ee-gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,8BAA8B,CAAC;AAEtC,wDAAwD;AACxD,eAAO,MAAM,wBAAwB,yBAA6B,CAAC;AACnE,eAAO,MAAM,kCAAkC,qEACqB,CAAC;AAErE,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,WAAW,CAAC,CAKrE;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACpD,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,0DAA0D;IAC1D,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,8CAA8C;IAC9C,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,EAAE,EAAE,CAAC;IAC7B,sEAAsE;IACtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACjE,qEAAqE;IACrE,aAAa,IAAI,IAAI,CAAC;IACtB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC;AAmBD,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,eAAe,CAAC,CAsP1B"}