@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
@@ -0,0 +1,248 @@
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 { requestFieldAad, responseFieldAad } from "../derivatives/e2ee/aad.js";
10
+ import { reportDataFor, workloadKeysetDigest, } from "../derivatives/e2ee/attestation.js";
11
+ import { E2EE_ALGO_X25519, bytesToHex, decryptField, encryptField, generateX25519KeyPair, hexToBytes, importX25519PrivateKey, } from "../derivatives/e2ee/suite.js";
12
+ /** The spec test-vector service key: seed 32 x 0x03. */
13
+ export const TEST_VECTOR_SERVICE_SEED = new Uint8Array(32).fill(3);
14
+ export const TEST_VECTOR_SERVICE_PUBLIC_KEY_HEX = "5dfedd3b6bd47f6fa28ee15d969d5bb0ea53774d488bdaf9df1c6e0124b3ef22";
15
+ export async function testVectorServiceKeyPair() {
16
+ return importX25519PrivateKey(TEST_VECTOR_SERVICE_SEED, hexToBytes(TEST_VECTOR_SERVICE_PUBLIC_KEY_HEX));
17
+ }
18
+ function jsonResponse(status, body, headers = {}) {
19
+ return new Response(JSON.stringify(body), {
20
+ status,
21
+ headers: { "Content-Type": "application/json", ...headers },
22
+ });
23
+ }
24
+ function errorResponse(status, type) {
25
+ return jsonResponse(status, {
26
+ error: { type, message: `fake gateway: ${type}` },
27
+ });
28
+ }
29
+ export async function createFakeE2eeGateway(options = {}) {
30
+ const baseUrl = (options.baseUrl ?? "https://relay.test/v1").replace(/\/+$/, "");
31
+ let serviceKey = options.serviceKey ?? (await testVectorServiceKeyPair());
32
+ const keyId = options.keyId ?? "dstack-kms-e2ee-x25519-v1";
33
+ const notAfter = options.notAfter ?? Math.floor(Date.now() / 1000) + 30 * 24 * 3600;
34
+ const responseId = options.responseId ?? "chatcmpl-test";
35
+ const respond = options.respond ??
36
+ (() => JSON.stringify({ answer: "fake answer", evidence: "fake evidence" }));
37
+ const buildKeyset = () => ({
38
+ subject: null,
39
+ not_after: notAfter,
40
+ receipt_signing_keys: [
41
+ {
42
+ key_id: "dstack-kms-receipt-ed25519-v1",
43
+ algo: "ed25519",
44
+ public_key: "00".repeat(32),
45
+ },
46
+ ],
47
+ e2ee_public_keys: [
48
+ {
49
+ key_id: "dstack-kms-e2ee-v1",
50
+ algo: "secp256k1-aes-256-gcm-hkdf-sha256",
51
+ public_key: "04" + "11".repeat(64),
52
+ },
53
+ {
54
+ key_id: keyId,
55
+ algo: E2EE_ALGO_X25519,
56
+ public_key: bytesToHex(serviceKey.publicKey),
57
+ },
58
+ ],
59
+ tls_public_keys: [{ spki_sha256: "22".repeat(32), domain: "relay.test" }],
60
+ });
61
+ const gateway = {
62
+ fetch: undefined,
63
+ keyset: buildKeyset(),
64
+ requests: [],
65
+ attestationRequests: [],
66
+ decryptedPrompts: [],
67
+ async rotateKey() {
68
+ serviceKey = await generateX25519KeyPair();
69
+ gateway.keyset = buildKeyset();
70
+ },
71
+ failNext(count, status, errorType) {
72
+ pendingFailures = { count, status, errorType };
73
+ },
74
+ plaintextNext() {
75
+ plaintextOnce = true;
76
+ },
77
+ keysetDigest: () => workloadKeysetDigest(gateway.keyset),
78
+ };
79
+ let pendingFailures = null;
80
+ let plaintextOnce = false;
81
+ const serveAttestation = async (url) => {
82
+ gateway.attestationRequests.push(url.toString());
83
+ if (options.attestationRoute === false) {
84
+ return jsonResponse(404, { error: "not found" });
85
+ }
86
+ const nonce = url.searchParams.get("nonce");
87
+ if (!nonce || !/^[0-9a-f]{64}$/.test(nonce)) {
88
+ return errorResponse(400, "invalid_request_error");
89
+ }
90
+ const digest = await workloadKeysetDigest(gateway.keyset);
91
+ const reportData = await reportDataFor(digest, nonce);
92
+ const report = {
93
+ api_version: "aci/1",
94
+ workload_keyset_digest: digest,
95
+ attestation: {
96
+ tee_type: "tdx",
97
+ workload_keyset: gateway.keyset,
98
+ report_data: reportData,
99
+ source_provenance: {
100
+ repo_url: "https://github.com/Dstack-TEE/private-ai-gateway.git",
101
+ repo_commit: "d567f6b4c4d93e33037ea202db04db86a8ad881c",
102
+ image_digest: null,
103
+ image_provenance: null,
104
+ },
105
+ evidence: {
106
+ quote: "0400",
107
+ quote_report_data: reportData + "0".repeat(64),
108
+ },
109
+ },
110
+ service_capabilities: {
111
+ supported_e2ee_versions: options.supportedE2eeVersions ?? ["2"],
112
+ serving: "aggregator",
113
+ },
114
+ };
115
+ return jsonResponse(200, report);
116
+ };
117
+ const serveChat = async (url, init) => {
118
+ const headers = new Headers(init?.headers);
119
+ const headerRecord = {};
120
+ headers.forEach((value, key) => {
121
+ headerRecord[key] = value;
122
+ });
123
+ const body = JSON.parse(String(init?.body));
124
+ gateway.requests.push({ url: url.toString(), headers: headerRecord, body });
125
+ const digest = await workloadKeysetDigest(gateway.keyset);
126
+ const common = { "X-ACI-Keyset-Digest": digest, "X-Receipt-Id": "rcpt-1" };
127
+ if (pendingFailures && pendingFailures.count > 0) {
128
+ pendingFailures.count -= 1;
129
+ return errorResponse(pendingFailures.status, pendingFailures.errorType);
130
+ }
131
+ const required = [
132
+ "x-e2ee-version",
133
+ "x-client-pub-key",
134
+ "x-model-pub-key",
135
+ "x-e2ee-nonce",
136
+ "x-e2ee-timestamp",
137
+ ];
138
+ const present = required.filter((name) => headers.has(name));
139
+ if (present.length !== required.length) {
140
+ return errorResponse(400, "e2ee_header_missing");
141
+ }
142
+ if (headers.get("x-e2ee-version") !== "2") {
143
+ return errorResponse(400, "e2ee_invalid_version");
144
+ }
145
+ if (headers.get("x-model-pub-key") !== bytesToHex(serviceKey.publicKey)) {
146
+ return errorResponse(400, "e2ee_model_key_mismatch");
147
+ }
148
+ const nonce = headers.get("x-e2ee-nonce");
149
+ if (!/^[0-9a-fA-F]{64}$/.test(nonce)) {
150
+ return errorResponse(400, "e2ee_invalid_nonce");
151
+ }
152
+ const ts = Number(headers.get("x-e2ee-timestamp"));
153
+ if (!Number.isInteger(ts)) {
154
+ return errorResponse(400, "e2ee_invalid_timestamp");
155
+ }
156
+ if (typeof body.model !== "string") {
157
+ return errorResponse(400, "e2ee_invalid_payload_model");
158
+ }
159
+ let clientPublicKey;
160
+ try {
161
+ clientPublicKey = hexToBytes(headers.get("x-client-pub-key"));
162
+ if (clientPublicKey.length !== 32)
163
+ throw new Error("length");
164
+ }
165
+ catch {
166
+ return errorResponse(400, "e2ee_invalid_public_key");
167
+ }
168
+ const context = {
169
+ algo: E2EE_ALGO_X25519,
170
+ model: body.model,
171
+ nonce,
172
+ ts,
173
+ };
174
+ const messages = Array.isArray(body.messages) ? body.messages : [];
175
+ const decrypted = [];
176
+ for (let index = 0; index < messages.length; index += 1) {
177
+ const message = messages[index];
178
+ if (typeof message.content !== "string") {
179
+ return errorResponse(400, "e2ee_decryption_failed");
180
+ }
181
+ try {
182
+ decrypted.push({
183
+ role: message.role,
184
+ content: await decryptField({
185
+ wire: message.content,
186
+ privateKey: serviceKey.privateKey,
187
+ aad: requestFieldAad(context, `messages.${index}.content`),
188
+ }),
189
+ });
190
+ }
191
+ catch {
192
+ return errorResponse(400, "e2ee_decryption_failed");
193
+ }
194
+ }
195
+ if (decrypted.length === 0) {
196
+ return errorResponse(400, "e2ee_decryption_failed");
197
+ }
198
+ gateway.decryptedPrompts.push(decrypted.map((m) => m.content));
199
+ const answer = await respond({ model: body.model, messages: decrypted });
200
+ if (plaintextOnce) {
201
+ plaintextOnce = false;
202
+ return jsonResponse(200, {
203
+ id: responseId,
204
+ choices: [
205
+ { index: 0, message: { role: "assistant", content: answer } },
206
+ ],
207
+ }, common);
208
+ }
209
+ const content = await encryptField({
210
+ plaintext: answer,
211
+ recipientPublicKey: clientPublicKey,
212
+ aad: responseFieldAad(context, "choices.0.message.content", responseId),
213
+ });
214
+ return jsonResponse(200, {
215
+ id: responseId,
216
+ object: "chat.completion",
217
+ model: body.model,
218
+ choices: [
219
+ {
220
+ index: 0,
221
+ finish_reason: "stop",
222
+ message: { role: "assistant", content },
223
+ },
224
+ ],
225
+ usage: { prompt_tokens: 1, completion_tokens: 1, total_tokens: 2 },
226
+ }, {
227
+ ...common,
228
+ "X-E2EE-Applied": "true",
229
+ "X-E2EE-Version": "2",
230
+ "X-E2EE-Algo": E2EE_ALGO_X25519,
231
+ });
232
+ };
233
+ gateway.fetch = (async (input, init) => {
234
+ const url = new URL(typeof input === "string"
235
+ ? input
236
+ : input instanceof URL
237
+ ? input.toString()
238
+ : input.url);
239
+ const path = url.origin + url.pathname;
240
+ if (path === `${baseUrl}/aci/attestation`)
241
+ return serveAttestation(url);
242
+ if (path === `${baseUrl}/chat/completions`)
243
+ return serveChat(url, init);
244
+ return jsonResponse(404, { error: "not found" });
245
+ });
246
+ return gateway;
247
+ }
248
+ //# sourceMappingURL=e2ee-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2ee-gateway.js","sourceRoot":"","sources":["../../src/test-utils/e2ee-gateway.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  export { createTestWallet, buildWeb3SignedHeader, type TestWallet, } from "./wallet.js";
2
2
  export { createMemoryDataStorage, type MemoryDataStorage, } from "./memory-storage.js";
3
+ export { TEST_VECTOR_SERVICE_PUBLIC_KEY_HEX, TEST_VECTOR_SERVICE_SEED, createFakeE2eeGateway, testVectorServiceKeyPair, type FakeE2eeGateway, type FakeE2eeGatewayOptions, type FakeE2eeGatewayRequest, } from "./e2ee-gateway.js";
4
+ export { LIVE_ACI_ATTESTATION_CLOCK_S, LIVE_ACI_ATTESTATION_NONCE, LIVE_ACI_ATTESTATION_REPORT, LIVE_ACI_X25519_PUBLIC_KEY_HEX, } from "./e2ee-fixtures.js";
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,EACvB,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,EACvB,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kCAAkC,EAClC,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export { createTestWallet, buildWeb3SignedHeader, } from "./wallet.js";
2
2
  export { createMemoryDataStorage, } from "./memory-storage.js";
3
+ export { TEST_VECTOR_SERVICE_PUBLIC_KEY_HEX, TEST_VECTOR_SERVICE_SEED, createFakeE2eeGateway, testVectorServiceKeyPair, } from "./e2ee-gateway.js";
4
+ export { LIVE_ACI_ATTESTATION_CLOCK_S, LIVE_ACI_ATTESTATION_NONCE, LIVE_ACI_ATTESTATION_REPORT, LIVE_ACI_X25519_PUBLIC_KEY_HEX, } from "./e2ee-fixtures.js";
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,GAExB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,GAExB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kCAAkC,EAClC,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,GAIzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendatalabs/personal-server-ts-core",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "Protocol logic for the Vana Personal Server — auth, grants, scopes, storage, keys",
5
5
  "license": "MIT",
6
6
  "repository": {