@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.
- package/dist/derivatives/compute.d.ts.map +1 -1
- package/dist/derivatives/compute.js +10 -3
- package/dist/derivatives/compute.js.map +1 -1
- package/dist/derivatives/e2ee/aad.d.ts +22 -0
- package/dist/derivatives/e2ee/aad.d.ts.map +1 -0
- package/dist/derivatives/e2ee/aad.js +32 -0
- package/dist/derivatives/e2ee/aad.js.map +1 -0
- package/dist/derivatives/e2ee/attestation.d.ts +122 -0
- package/dist/derivatives/e2ee/attestation.d.ts.map +1 -0
- package/dist/derivatives/e2ee/attestation.js +217 -0
- package/dist/derivatives/e2ee/attestation.js.map +1 -0
- package/dist/derivatives/e2ee/index.d.ts +6 -0
- package/dist/derivatives/e2ee/index.d.ts.map +1 -0
- package/dist/derivatives/e2ee/index.js +6 -0
- package/dist/derivatives/e2ee/index.js.map +1 -0
- package/dist/derivatives/e2ee/jcs.d.ts +17 -0
- package/dist/derivatives/e2ee/jcs.d.ts.map +1 -0
- package/dist/derivatives/e2ee/jcs.js +55 -0
- package/dist/derivatives/e2ee/jcs.js.map +1 -0
- package/dist/derivatives/e2ee/phala.d.ts +55 -0
- package/dist/derivatives/e2ee/phala.d.ts.map +1 -0
- package/dist/derivatives/e2ee/phala.js +167 -0
- package/dist/derivatives/e2ee/phala.js.map +1 -0
- package/dist/derivatives/e2ee/suite.d.ts +56 -0
- package/dist/derivatives/e2ee/suite.d.ts.map +1 -0
- package/dist/derivatives/e2ee/suite.js +164 -0
- package/dist/derivatives/e2ee/suite.js.map +1 -0
- package/dist/derivatives/index.d.ts +2 -1
- package/dist/derivatives/index.d.ts.map +1 -1
- package/dist/derivatives/index.js +1 -0
- package/dist/derivatives/index.js.map +1 -1
- package/dist/derivatives/inference.d.ts +48 -16
- package/dist/derivatives/inference.d.ts.map +1 -1
- package/dist/derivatives/inference.js +132 -68
- package/dist/derivatives/inference.js.map +1 -1
- package/dist/schemas/server-config.d.ts +2 -0
- package/dist/schemas/server-config.d.ts.map +1 -1
- package/dist/schemas/server-config.js +5 -0
- package/dist/schemas/server-config.js.map +1 -1
- package/dist/test-utils/e2ee-fixtures.d.ts +94 -0
- package/dist/test-utils/e2ee-fixtures.d.ts.map +1 -0
- package/dist/test-utils/e2ee-fixtures.js +116 -0
- package/dist/test-utils/e2ee-fixtures.js.map +1 -0
- package/dist/test-utils/e2ee-gateway.d.ts +61 -0
- package/dist/test-utils/e2ee-gateway.d.ts.map +1 -0
- package/dist/test-utils/e2ee-gateway.js +248 -0
- package/dist/test-utils/e2ee-gateway.js.map +1 -0
- package/dist/test-utils/index.d.ts +2 -0
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +2 -0
- package/dist/test-utils/index.js.map +1 -1
- 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
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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;
|
|
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
|
|
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"}
|