@opendatalabs/personal-server-ts-core 0.0.1-canary.01ca694 → 0.0.1-canary.052d47e

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 (322) hide show
  1. package/dist/api/index.d.ts +282 -9
  2. package/dist/api/index.d.ts.map +1 -1
  3. package/dist/api/index.js +867 -163
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/auth/request.d.ts.map +1 -1
  6. package/dist/auth/request.js.map +1 -1
  7. package/dist/client.d.ts +8 -1
  8. package/dist/client.d.ts.map +1 -1
  9. package/dist/client.js +21 -3
  10. package/dist/client.js.map +1 -1
  11. package/dist/contracts/binary.d.ts +12 -0
  12. package/dist/contracts/binary.d.ts.map +1 -1
  13. package/dist/contracts/binary.js +31 -0
  14. package/dist/contracts/binary.js.map +1 -1
  15. package/dist/contracts/data.d.ts +51 -5
  16. package/dist/contracts/data.d.ts.map +1 -1
  17. package/dist/contracts/data.js +166 -30
  18. package/dist/contracts/data.js.map +1 -1
  19. package/dist/contracts/grants.d.ts +7 -5
  20. package/dist/contracts/grants.d.ts.map +1 -1
  21. package/dist/contracts/grants.js +60 -37
  22. package/dist/contracts/grants.js.map +1 -1
  23. package/dist/contracts/index.d.ts +1 -1
  24. package/dist/contracts/index.d.ts.map +1 -1
  25. package/dist/contracts/index.js +1 -1
  26. package/dist/contracts/index.js.map +1 -1
  27. package/dist/derivatives/api.d.ts +48 -0
  28. package/dist/derivatives/api.d.ts.map +1 -0
  29. package/dist/derivatives/api.js +366 -0
  30. package/dist/derivatives/api.js.map +1 -0
  31. package/dist/derivatives/compute.d.ts +106 -0
  32. package/dist/derivatives/compute.d.ts.map +1 -0
  33. package/dist/derivatives/compute.js +414 -0
  34. package/dist/derivatives/compute.js.map +1 -0
  35. package/dist/derivatives/e2ee/aad.d.ts +22 -0
  36. package/dist/derivatives/e2ee/aad.d.ts.map +1 -0
  37. package/dist/derivatives/e2ee/aad.js +32 -0
  38. package/dist/derivatives/e2ee/aad.js.map +1 -0
  39. package/dist/derivatives/e2ee/attestation.d.ts +134 -0
  40. package/dist/derivatives/e2ee/attestation.d.ts.map +1 -0
  41. package/dist/derivatives/e2ee/attestation.js +248 -0
  42. package/dist/derivatives/e2ee/attestation.js.map +1 -0
  43. package/dist/derivatives/e2ee/index.d.ts +6 -0
  44. package/dist/derivatives/e2ee/index.d.ts.map +1 -0
  45. package/dist/derivatives/e2ee/index.js +6 -0
  46. package/dist/derivatives/e2ee/index.js.map +1 -0
  47. package/dist/derivatives/e2ee/jcs.d.ts +17 -0
  48. package/dist/derivatives/e2ee/jcs.d.ts.map +1 -0
  49. package/dist/derivatives/e2ee/jcs.js +55 -0
  50. package/dist/derivatives/e2ee/jcs.js.map +1 -0
  51. package/dist/derivatives/e2ee/phala.d.ts +62 -0
  52. package/dist/derivatives/e2ee/phala.d.ts.map +1 -0
  53. package/dist/derivatives/e2ee/phala.js +168 -0
  54. package/dist/derivatives/e2ee/phala.js.map +1 -0
  55. package/dist/derivatives/e2ee/suite.d.ts +56 -0
  56. package/dist/derivatives/e2ee/suite.d.ts.map +1 -0
  57. package/dist/derivatives/e2ee/suite.js +164 -0
  58. package/dist/derivatives/e2ee/suite.js.map +1 -0
  59. package/dist/derivatives/index.d.ts +10 -0
  60. package/dist/derivatives/index.d.ts.map +1 -0
  61. package/dist/derivatives/index.js +10 -0
  62. package/dist/derivatives/index.js.map +1 -0
  63. package/dist/derivatives/inference.d.ts +151 -0
  64. package/dist/derivatives/inference.d.ts.map +1 -0
  65. package/dist/derivatives/inference.js +262 -0
  66. package/dist/derivatives/inference.js.map +1 -0
  67. package/dist/derivatives/prompt.d.ts +64 -0
  68. package/dist/derivatives/prompt.d.ts.map +1 -0
  69. package/dist/derivatives/prompt.js +193 -0
  70. package/dist/derivatives/prompt.js.map +1 -0
  71. package/dist/derivatives/registration.d.ts +54 -0
  72. package/dist/derivatives/registration.d.ts.map +1 -0
  73. package/dist/derivatives/registration.js +180 -0
  74. package/dist/derivatives/registration.js.map +1 -0
  75. package/dist/derivatives/scheduler.d.ts +84 -0
  76. package/dist/derivatives/scheduler.d.ts.map +1 -0
  77. package/dist/derivatives/scheduler.js +257 -0
  78. package/dist/derivatives/scheduler.js.map +1 -0
  79. package/dist/derivatives/store.d.ts +14 -0
  80. package/dist/derivatives/store.d.ts.map +1 -0
  81. package/dist/derivatives/store.js +77 -0
  82. package/dist/derivatives/store.js.map +1 -0
  83. package/dist/derivatives/types.d.ts +92 -0
  84. package/dist/derivatives/types.d.ts.map +1 -0
  85. package/dist/derivatives/types.js +27 -0
  86. package/dist/derivatives/types.js.map +1 -0
  87. package/dist/errors/catalog.d.ts +75 -0
  88. package/dist/errors/catalog.d.ts.map +1 -1
  89. package/dist/errors/catalog.js +104 -0
  90. package/dist/errors/catalog.js.map +1 -1
  91. package/dist/grants/index.d.ts +2 -1
  92. package/dist/grants/index.d.ts.map +1 -1
  93. package/dist/grants/index.js +1 -1
  94. package/dist/grants/index.js.map +1 -1
  95. package/dist/keys/index.d.ts +1 -0
  96. package/dist/keys/index.d.ts.map +1 -1
  97. package/dist/keys/index.js +1 -1
  98. package/dist/keys/index.js.map +1 -1
  99. package/dist/keys/public-only-account.d.ts +8 -0
  100. package/dist/keys/public-only-account.d.ts.map +1 -0
  101. package/dist/keys/public-only-account.js +21 -0
  102. package/dist/keys/public-only-account.js.map +1 -0
  103. package/dist/keys/server-account.d.ts +2 -2
  104. package/dist/keys/server-account.d.ts.map +1 -1
  105. package/dist/lineage/attestation.d.ts +42 -0
  106. package/dist/lineage/attestation.d.ts.map +1 -0
  107. package/dist/lineage/attestation.js +25 -0
  108. package/dist/lineage/attestation.js.map +1 -0
  109. package/dist/lineage/gateway.d.ts +105 -0
  110. package/dist/lineage/gateway.d.ts.map +1 -0
  111. package/dist/lineage/gateway.js +242 -0
  112. package/dist/lineage/gateway.js.map +1 -0
  113. package/dist/lineage/index.d.ts +5 -0
  114. package/dist/lineage/index.d.ts.map +1 -0
  115. package/dist/lineage/index.js +5 -0
  116. package/dist/lineage/index.js.map +1 -0
  117. package/dist/lineage/lineage.d.ts +141 -0
  118. package/dist/lineage/lineage.d.ts.map +1 -0
  119. package/dist/lineage/lineage.js +255 -0
  120. package/dist/lineage/lineage.js.map +1 -0
  121. package/dist/logging/access-log.d.ts +10 -1
  122. package/dist/logging/access-log.d.ts.map +1 -1
  123. package/dist/mcp/activity.d.ts.map +1 -1
  124. package/dist/mcp/activity.js.map +1 -1
  125. package/dist/mcp/connection-api.d.ts.map +1 -1
  126. package/dist/mcp/connection-api.js +0 -1
  127. package/dist/mcp/connection-api.js.map +1 -1
  128. package/dist/mcp/index.d.ts +1 -0
  129. package/dist/mcp/index.d.ts.map +1 -1
  130. package/dist/mcp/index.js +1 -0
  131. package/dist/mcp/index.js.map +1 -1
  132. package/dist/mcp/read-client.d.ts +61 -1
  133. package/dist/mcp/read-client.d.ts.map +1 -1
  134. package/dist/mcp/read-client.js +397 -42
  135. package/dist/mcp/read-client.js.map +1 -1
  136. package/dist/mcp/resources.d.ts +37 -0
  137. package/dist/mcp/resources.d.ts.map +1 -0
  138. package/dist/mcp/resources.js +114 -0
  139. package/dist/mcp/resources.js.map +1 -0
  140. package/dist/mcp/search/index.d.ts.map +1 -1
  141. package/dist/mcp/search/index.js +108 -21
  142. package/dist/mcp/search/index.js.map +1 -1
  143. package/dist/mcp/server.d.ts.map +1 -1
  144. package/dist/mcp/server.js +27 -9
  145. package/dist/mcp/server.js.map +1 -1
  146. package/dist/mcp/session.d.ts +160 -0
  147. package/dist/mcp/session.d.ts.map +1 -0
  148. package/dist/mcp/session.js +243 -0
  149. package/dist/mcp/session.js.map +1 -0
  150. package/dist/mcp/tools.d.ts +29 -3
  151. package/dist/mcp/tools.d.ts.map +1 -1
  152. package/dist/mcp/tools.js +515 -48
  153. package/dist/mcp/tools.js.map +1 -1
  154. package/dist/mcp/types.d.ts.map +1 -1
  155. package/dist/payment/index.d.ts +2 -0
  156. package/dist/payment/index.d.ts.map +1 -0
  157. package/dist/payment/index.js +2 -0
  158. package/dist/payment/index.js.map +1 -0
  159. package/dist/payment/x402.d.ts +155 -0
  160. package/dist/payment/x402.d.ts.map +1 -0
  161. package/dist/payment/x402.js +402 -0
  162. package/dist/payment/x402.js.map +1 -0
  163. package/dist/policy/data-read.d.ts +18 -2
  164. package/dist/policy/data-read.d.ts.map +1 -1
  165. package/dist/policy/data-read.js +80 -49
  166. package/dist/policy/data-read.js.map +1 -1
  167. package/dist/policy/data-write.d.ts +69 -0
  168. package/dist/policy/data-write.d.ts.map +1 -0
  169. package/dist/policy/data-write.js +131 -0
  170. package/dist/policy/data-write.js.map +1 -0
  171. package/dist/policy/index.d.ts +3 -1
  172. package/dist/policy/index.d.ts.map +1 -1
  173. package/dist/policy/index.js +3 -1
  174. package/dist/policy/index.js.map +1 -1
  175. package/dist/policy/signed-artifacts.d.ts +17 -0
  176. package/dist/policy/signed-artifacts.d.ts.map +1 -0
  177. package/dist/policy/signed-artifacts.js +110 -0
  178. package/dist/policy/signed-artifacts.js.map +1 -0
  179. package/dist/ports/index.d.ts +159 -32
  180. package/dist/ports/index.d.ts.map +1 -1
  181. package/dist/ports/index.js +6 -5
  182. package/dist/ports/index.js.map +1 -1
  183. package/dist/schemas/server-config.d.ts +49 -4
  184. package/dist/schemas/server-config.d.ts.map +1 -1
  185. package/dist/schemas/server-config.js +95 -13
  186. package/dist/schemas/server-config.js.map +1 -1
  187. package/dist/signing/index.d.ts +2 -2
  188. package/dist/signing/index.d.ts.map +1 -1
  189. package/dist/signing/index.js +1 -1
  190. package/dist/signing/index.js.map +1 -1
  191. package/dist/signing/request-signer.d.ts +2 -0
  192. package/dist/signing/request-signer.d.ts.map +1 -1
  193. package/dist/signing/request-signer.js +1 -0
  194. package/dist/signing/request-signer.js.map +1 -1
  195. package/dist/signing/signer.d.ts +27 -25
  196. package/dist/signing/signer.d.ts.map +1 -1
  197. package/dist/signing/signer.js +27 -51
  198. package/dist/signing/signer.js.map +1 -1
  199. package/dist/storage/adapters/index.d.ts +1 -1
  200. package/dist/storage/adapters/index.d.ts.map +1 -1
  201. package/dist/storage/adapters/index.js +1 -1
  202. package/dist/storage/adapters/index.js.map +1 -1
  203. package/dist/storage/adapters/interface.d.ts +10 -0
  204. package/dist/storage/adapters/interface.d.ts.map +1 -1
  205. package/dist/storage/adapters/sdk.d.ts +11 -1
  206. package/dist/storage/adapters/sdk.d.ts.map +1 -1
  207. package/dist/storage/adapters/sdk.js +38 -3
  208. package/dist/storage/adapters/sdk.js.map +1 -1
  209. package/dist/storage/adapters/vana.d.ts +3 -0
  210. package/dist/storage/adapters/vana.d.ts.map +1 -1
  211. package/dist/storage/adapters/vana.js +95 -2
  212. package/dist/storage/adapters/vana.js.map +1 -1
  213. package/dist/storage/blocks/errors.d.ts.map +1 -1
  214. package/dist/storage/blocks/errors.js.map +1 -1
  215. package/dist/storage/blocks/index.d.ts +2 -0
  216. package/dist/storage/blocks/index.d.ts.map +1 -1
  217. package/dist/storage/blocks/index.js +2 -0
  218. package/dist/storage/blocks/index.js.map +1 -1
  219. package/dist/storage/blocks/select.d.ts +29 -0
  220. package/dist/storage/blocks/select.d.ts.map +1 -0
  221. package/dist/storage/blocks/select.js +120 -0
  222. package/dist/storage/blocks/select.js.map +1 -0
  223. package/dist/storage/blocks/types.d.ts +7 -0
  224. package/dist/storage/blocks/types.d.ts.map +1 -1
  225. package/dist/storage/index/manager.d.ts +30 -2
  226. package/dist/storage/index/manager.d.ts.map +1 -1
  227. package/dist/storage/index/schema.d.ts +1 -1
  228. package/dist/storage/index/schema.js +1 -1
  229. package/dist/storage/index/types.d.ts +6 -1
  230. package/dist/storage/index/types.d.ts.map +1 -1
  231. package/dist/sync/data-point-feed.d.ts +35 -0
  232. package/dist/sync/data-point-feed.d.ts.map +1 -0
  233. package/dist/sync/data-point-feed.js +122 -0
  234. package/dist/sync/data-point-feed.js.map +1 -0
  235. package/dist/sync/data-point-id.d.ts +7 -0
  236. package/dist/sync/data-point-id.d.ts.map +1 -0
  237. package/dist/sync/data-point-id.js +16 -0
  238. package/dist/sync/data-point-id.js.map +1 -0
  239. package/dist/sync/delete-data-port.d.ts +50 -0
  240. package/dist/sync/delete-data-port.d.ts.map +1 -0
  241. package/dist/sync/delete-data-port.js +244 -0
  242. package/dist/sync/delete-data-port.js.map +1 -0
  243. package/dist/sync/engine/sync-manager.d.ts +16 -4
  244. package/dist/sync/engine/sync-manager.d.ts.map +1 -1
  245. package/dist/sync/engine/sync-manager.js +93 -32
  246. package/dist/sync/engine/sync-manager.js.map +1 -1
  247. package/dist/sync/index.d.ts +7 -0
  248. package/dist/sync/index.d.ts.map +1 -1
  249. package/dist/sync/index.js +7 -0
  250. package/dist/sync/index.js.map +1 -1
  251. package/dist/sync/issues.d.ts.map +1 -1
  252. package/dist/sync/issues.js +21 -3
  253. package/dist/sync/issues.js.map +1 -1
  254. package/dist/sync/pending-blob-deletions.d.ts +29 -0
  255. package/dist/sync/pending-blob-deletions.d.ts.map +1 -0
  256. package/dist/sync/pending-blob-deletions.js +116 -0
  257. package/dist/sync/pending-blob-deletions.js.map +1 -0
  258. package/dist/sync/retry-memory.d.ts +33 -0
  259. package/dist/sync/retry-memory.d.ts.map +1 -0
  260. package/dist/sync/retry-memory.js +68 -0
  261. package/dist/sync/retry-memory.js.map +1 -0
  262. package/dist/sync/scope-deletions.d.ts +155 -0
  263. package/dist/sync/scope-deletions.d.ts.map +1 -0
  264. package/dist/sync/scope-deletions.js +225 -0
  265. package/dist/sync/scope-deletions.js.map +1 -0
  266. package/dist/sync/tombstone.d.ts +27 -0
  267. package/dist/sync/tombstone.d.ts.map +1 -0
  268. package/dist/sync/tombstone.js +28 -0
  269. package/dist/sync/tombstone.js.map +1 -0
  270. package/dist/sync/workers/delete.d.ts +152 -31
  271. package/dist/sync/workers/delete.d.ts.map +1 -1
  272. package/dist/sync/workers/delete.js +457 -55
  273. package/dist/sync/workers/delete.js.map +1 -1
  274. package/dist/sync/workers/download.d.ts +108 -27
  275. package/dist/sync/workers/download.d.ts.map +1 -1
  276. package/dist/sync/workers/download.js +321 -126
  277. package/dist/sync/workers/download.js.map +1 -1
  278. package/dist/sync/workers/upload.d.ts +65 -10
  279. package/dist/sync/workers/upload.d.ts.map +1 -1
  280. package/dist/sync/workers/upload.js +371 -42
  281. package/dist/sync/workers/upload.js.map +1 -1
  282. package/dist/test-utils/e2ee-fixtures.d.ts +94 -0
  283. package/dist/test-utils/e2ee-fixtures.d.ts.map +1 -0
  284. package/dist/test-utils/e2ee-fixtures.js +116 -0
  285. package/dist/test-utils/e2ee-fixtures.js.map +1 -0
  286. package/dist/test-utils/e2ee-gateway.d.ts +61 -0
  287. package/dist/test-utils/e2ee-gateway.d.ts.map +1 -0
  288. package/dist/test-utils/e2ee-gateway.js +248 -0
  289. package/dist/test-utils/e2ee-gateway.js.map +1 -0
  290. package/dist/test-utils/index.d.ts +3 -0
  291. package/dist/test-utils/index.d.ts.map +1 -1
  292. package/dist/test-utils/index.js +3 -0
  293. package/dist/test-utils/index.js.map +1 -1
  294. package/dist/test-utils/memory-storage.d.ts +12 -0
  295. package/dist/test-utils/memory-storage.d.ts.map +1 -0
  296. package/dist/test-utils/memory-storage.js +146 -0
  297. package/dist/test-utils/memory-storage.js.map +1 -0
  298. package/dist/test-utils/wallet.d.ts +6 -0
  299. package/dist/test-utils/wallet.d.ts.map +1 -1
  300. package/dist/test-utils/wallet.js +46 -0
  301. package/dist/test-utils/wallet.js.map +1 -1
  302. package/dist/write/attribution.d.ts +185 -0
  303. package/dist/write/attribution.d.ts.map +1 -0
  304. package/dist/write/attribution.js +450 -0
  305. package/dist/write/attribution.js.map +1 -0
  306. package/dist/write/authorize.d.ts +77 -0
  307. package/dist/write/authorize.d.ts.map +1 -0
  308. package/dist/write/authorize.js +109 -0
  309. package/dist/write/authorize.js.map +1 -0
  310. package/dist/write/index.d.ts +5 -0
  311. package/dist/write/index.d.ts.map +1 -0
  312. package/dist/write/index.js +5 -0
  313. package/dist/write/index.js.map +1 -0
  314. package/dist/write/route.d.ts +61 -0
  315. package/dist/write/route.d.ts.map +1 -0
  316. package/dist/write/route.js +132 -0
  317. package/dist/write/route.js.map +1 -0
  318. package/dist/write/session.d.ts +96 -0
  319. package/dist/write/session.d.ts.map +1 -0
  320. package/dist/write/session.js +136 -0
  321. package/dist/write/session.js.map +1 -0
  322. package/package.json +19 -3
@@ -0,0 +1,56 @@
1
+ /**
2
+ * E2EE v2 cipher suite `x25519-aes-256-gcm-hkdf-sha256` on WebCrypto only
3
+ * (X25519 deriveBits, HKDF-SHA256, AES-256-GCM, getRandomValues), so the
4
+ * same code runs in Node 22+ and in the browser (PS-Lite). No Node-only
5
+ * import lives in this directory.
6
+ *
7
+ * Wire format of one encrypted field value (spec section 4), lowercase hex:
8
+ *
9
+ * ephemeral_public_key (32) || aes_gcm_nonce (12) || ciphertext || tag (16)
10
+ *
11
+ * key = HKDF-SHA256(salt = none, ikm = X25519(ephemeral, recipient),
12
+ * info = "aci.e2ee.v2.x25519", len = 32)
13
+ *
14
+ * A fresh ephemeral key and AES-GCM nonce per field; the AAD is the JCS
15
+ * bytes built in aad.ts.
16
+ */
17
+ export declare const E2EE_ALGO_X25519 = "x25519-aes-256-gcm-hkdf-sha256";
18
+ export declare const E2EE_HKDF_INFO_X25519 = "aci.e2ee.v2.x25519";
19
+ export interface E2eeKeyPair {
20
+ privateKey: CryptoKey;
21
+ /** Raw 32-byte X25519 public key. */
22
+ publicKey: Uint8Array;
23
+ }
24
+ export declare class E2eeCipherError extends Error {
25
+ constructor(message: string);
26
+ }
27
+ export declare function randomBytes(length: number): Uint8Array;
28
+ export declare function bytesToHex(bytes: Uint8Array): string;
29
+ export declare function hexToBytes(hex: string): Uint8Array;
30
+ /** Spec section 4: hex with an optional `0x` prefix, 32 bytes for X25519. */
31
+ export declare function parseX25519PublicKey(hex: string): Uint8Array;
32
+ export declare function generateX25519KeyPair(): Promise<E2eeKeyPair>;
33
+ /**
34
+ * Import a private key from its 32-byte seed. Only for tests and tooling
35
+ * that need a deterministic key; production keys come from generate.
36
+ */
37
+ export declare function importX25519PrivateKey(seed: Uint8Array, publicKey: Uint8Array): Promise<E2eeKeyPair>;
38
+ export interface EncryptFieldInput {
39
+ plaintext: string;
40
+ recipientPublicKey: Uint8Array;
41
+ aad: Uint8Array;
42
+ /** Test hooks: a fixed ephemeral key / nonce make the output reproducible. */
43
+ ephemeral?: E2eeKeyPair;
44
+ nonce?: Uint8Array;
45
+ }
46
+ /** One field value -> lowercase hex wire value. */
47
+ export declare function encryptField(input: EncryptFieldInput): Promise<string>;
48
+ export interface DecryptFieldInput {
49
+ /** Hex wire value (either case, optional 0x). */
50
+ wire: string;
51
+ privateKey: CryptoKey;
52
+ aad: Uint8Array;
53
+ }
54
+ /** Hex wire value -> plaintext; throws E2eeCipherError on any failure. */
55
+ export declare function decryptField(input: DecryptFieldInput): Promise<string>;
56
+ //# sourceMappingURL=suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suite.d.ts","sourceRoot":"","sources":["../../../src/derivatives/e2ee/suite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,gBAAgB,mCAAmC,CAAC;AACjE,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAM1D,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,SAAS,CAAC;IACtB,qCAAqC;IACrC,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAQD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAItD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAWlD;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAM5D;AAoBD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAMlE;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,WAAW,CAAC,CActB;AAmCD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,UAAU,CAAC;IAC/B,GAAG,EAAE,UAAU,CAAC;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,mDAAmD;AACnD,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsB5E;AAED,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,CAAC;IACtB,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,0EAA0E;AAC1E,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwC5E"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * E2EE v2 cipher suite `x25519-aes-256-gcm-hkdf-sha256` on WebCrypto only
3
+ * (X25519 deriveBits, HKDF-SHA256, AES-256-GCM, getRandomValues), so the
4
+ * same code runs in Node 22+ and in the browser (PS-Lite). No Node-only
5
+ * import lives in this directory.
6
+ *
7
+ * Wire format of one encrypted field value (spec section 4), lowercase hex:
8
+ *
9
+ * ephemeral_public_key (32) || aes_gcm_nonce (12) || ciphertext || tag (16)
10
+ *
11
+ * key = HKDF-SHA256(salt = none, ikm = X25519(ephemeral, recipient),
12
+ * info = "aci.e2ee.v2.x25519", len = 32)
13
+ *
14
+ * A fresh ephemeral key and AES-GCM nonce per field; the AAD is the JCS
15
+ * bytes built in aad.ts.
16
+ */
17
+ export const E2EE_ALGO_X25519 = "x25519-aes-256-gcm-hkdf-sha256";
18
+ export const E2EE_HKDF_INFO_X25519 = "aci.e2ee.v2.x25519";
19
+ const X25519_PUBLIC_KEY_BYTES = 32;
20
+ const AES_GCM_NONCE_BYTES = 12;
21
+ const AES_GCM_TAG_BYTES = 16;
22
+ export class E2eeCipherError extends Error {
23
+ constructor(message) {
24
+ super(message);
25
+ this.name = "E2eeCipherError";
26
+ }
27
+ }
28
+ function subtle() {
29
+ const api = globalThis.crypto?.subtle;
30
+ if (!api)
31
+ throw new E2eeCipherError("WebCrypto is not available");
32
+ return api;
33
+ }
34
+ export function randomBytes(length) {
35
+ const bytes = new Uint8Array(length);
36
+ globalThis.crypto.getRandomValues(bytes);
37
+ return bytes;
38
+ }
39
+ export function bytesToHex(bytes) {
40
+ let out = "";
41
+ for (const byte of bytes)
42
+ out += byte.toString(16).padStart(2, "0");
43
+ return out;
44
+ }
45
+ export function hexToBytes(hex) {
46
+ const clean = hex.startsWith("0x") || hex.startsWith("0X") ? hex.slice(2) : hex;
47
+ if (clean.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(clean)) {
48
+ throw new E2eeCipherError("malformed hex");
49
+ }
50
+ const out = new Uint8Array(clean.length / 2);
51
+ for (let i = 0; i < out.length; i += 1) {
52
+ out[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);
53
+ }
54
+ return out;
55
+ }
56
+ /** Spec section 4: hex with an optional `0x` prefix, 32 bytes for X25519. */
57
+ export function parseX25519PublicKey(hex) {
58
+ const bytes = hexToBytes(hex);
59
+ if (bytes.length !== X25519_PUBLIC_KEY_BYTES) {
60
+ throw new E2eeCipherError("X25519 public key must be 32 bytes");
61
+ }
62
+ return bytes;
63
+ }
64
+ function concat(...parts) {
65
+ const total = parts.reduce((sum, part) => sum + part.length, 0);
66
+ const out = new Uint8Array(total);
67
+ let offset = 0;
68
+ for (const part of parts) {
69
+ out.set(part, offset);
70
+ offset += part.length;
71
+ }
72
+ return out;
73
+ }
74
+ /** Copy into a plain ArrayBuffer (WebCrypto rejects some typed-array views). */
75
+ function toBuffer(bytes) {
76
+ const out = new ArrayBuffer(bytes.byteLength);
77
+ new Uint8Array(out).set(bytes);
78
+ return out;
79
+ }
80
+ export async function generateX25519KeyPair() {
81
+ const pair = (await subtle().generateKey({ name: "X25519" }, false, [
82
+ "deriveBits",
83
+ ]));
84
+ const raw = await subtle().exportKey("raw", pair.publicKey);
85
+ return { privateKey: pair.privateKey, publicKey: new Uint8Array(raw) };
86
+ }
87
+ /**
88
+ * Import a private key from its 32-byte seed. Only for tests and tooling
89
+ * that need a deterministic key; production keys come from generate.
90
+ */
91
+ export async function importX25519PrivateKey(seed, publicKey) {
92
+ const b64u = (bytes) => btoa(String.fromCharCode(...bytes))
93
+ .replace(/\+/g, "-")
94
+ .replace(/\//g, "_")
95
+ .replace(/=+$/, "");
96
+ const privateKey = await subtle().importKey("jwk", { kty: "OKP", crv: "X25519", d: b64u(seed), x: b64u(publicKey) }, { name: "X25519" }, false, ["deriveBits"]);
97
+ return { privateKey, publicKey };
98
+ }
99
+ async function deriveFieldKey(privateKey, peerPublicKey, usage) {
100
+ const api = subtle();
101
+ const peer = await api.importKey("raw", toBuffer(peerPublicKey), { name: "X25519" }, false, []);
102
+ const shared = await api.deriveBits({ name: "X25519", public: peer }, privateKey, X25519_PUBLIC_KEY_BYTES * 8);
103
+ const ikm = await api.importKey("raw", shared, "HKDF", false, ["deriveKey"]);
104
+ return api.deriveKey({
105
+ name: "HKDF",
106
+ hash: "SHA-256",
107
+ salt: new Uint8Array(0),
108
+ info: new TextEncoder().encode(E2EE_HKDF_INFO_X25519),
109
+ }, ikm, { name: "AES-GCM", length: 256 }, false, [usage]);
110
+ }
111
+ /** One field value -> lowercase hex wire value. */
112
+ export async function encryptField(input) {
113
+ const ephemeral = input.ephemeral ?? (await generateX25519KeyPair());
114
+ const nonce = input.nonce ?? randomBytes(AES_GCM_NONCE_BYTES);
115
+ if (nonce.length !== AES_GCM_NONCE_BYTES) {
116
+ throw new E2eeCipherError("AES-GCM nonce must be 12 bytes");
117
+ }
118
+ const key = await deriveFieldKey(ephemeral.privateKey, input.recipientPublicKey, "encrypt");
119
+ const sealed = await subtle().encrypt({
120
+ name: "AES-GCM",
121
+ iv: toBuffer(nonce),
122
+ additionalData: toBuffer(input.aad),
123
+ tagLength: AES_GCM_TAG_BYTES * 8,
124
+ }, key, new TextEncoder().encode(input.plaintext));
125
+ return bytesToHex(concat(ephemeral.publicKey, nonce, new Uint8Array(sealed)));
126
+ }
127
+ /** Hex wire value -> plaintext; throws E2eeCipherError on any failure. */
128
+ export async function decryptField(input) {
129
+ let bytes;
130
+ try {
131
+ bytes = hexToBytes(input.wire);
132
+ }
133
+ catch {
134
+ throw new E2eeCipherError("ciphertext is not hex");
135
+ }
136
+ const minimum = X25519_PUBLIC_KEY_BYTES + AES_GCM_NONCE_BYTES + AES_GCM_TAG_BYTES;
137
+ if (bytes.length < minimum) {
138
+ throw new E2eeCipherError("ciphertext is too short");
139
+ }
140
+ const ephemeralPublicKey = bytes.subarray(0, X25519_PUBLIC_KEY_BYTES);
141
+ const nonce = bytes.subarray(X25519_PUBLIC_KEY_BYTES, X25519_PUBLIC_KEY_BYTES + AES_GCM_NONCE_BYTES);
142
+ const sealed = bytes.subarray(X25519_PUBLIC_KEY_BYTES + AES_GCM_NONCE_BYTES);
143
+ let key;
144
+ try {
145
+ key = await deriveFieldKey(input.privateKey, ephemeralPublicKey, "decrypt");
146
+ }
147
+ catch {
148
+ throw new E2eeCipherError("key agreement failed");
149
+ }
150
+ let opened;
151
+ try {
152
+ opened = await subtle().decrypt({
153
+ name: "AES-GCM",
154
+ iv: toBuffer(nonce),
155
+ additionalData: toBuffer(input.aad),
156
+ tagLength: AES_GCM_TAG_BYTES * 8,
157
+ }, key, toBuffer(sealed));
158
+ }
159
+ catch {
160
+ throw new E2eeCipherError("authentication failed");
161
+ }
162
+ return new TextDecoder().decode(opened);
163
+ }
164
+ //# sourceMappingURL=suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suite.js","sourceRoot":"","sources":["../../../src/derivatives/e2ee/suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { questionRegistrationView, type QuestionErrorCode, type QuestionRecompute, type QuestionRegisteredBy, type QuestionRegistration, type QuestionRegistrationPatch, type QuestionRegistrationView, type QuestionStatus, type QuestionStore, type QuestionStoreListFilter, } from "./types.js";
2
+ export { createInMemoryQuestionStore, matchesQuestionFilter, sortQuestions, } from "./store.js";
3
+ export { MAX_ECHOED_SCOPE_CHARS, MAX_MODEL_CHARS, MAX_QUESTION_CHARS, MAX_QUESTION_SOURCE_SCOPES, createQuestionRegistration, findDerivationCycle, parseQuestionInput, uncoveredSourceScopes, type CreateQuestionRegistrationInput, type ParsedQuestionInput, } from "./registration.js";
4
+ export { DEFAULT_MAX_SOURCE_CHARS, DEFAULT_MAX_SOURCE_ITEMS, SYSTEM_PROMPT, buildQuestionMessages, parseAnswer, sortNewestFirst, trimSourceData, type ParsedAnswer, type PromptSource, type TrimResult, } from "./prompt.js";
5
+ export { DEFAULT_INFERENCE_BASE_URL, DEFAULT_INFERENCE_MAX_TOKENS, DEFAULT_INFERENCE_MODEL, DEFAULT_INFERENCE_REQUEST_FIELDS, DEFAULT_INFERENCE_TIMEOUT_MS, InferenceRequestError, createFakeInferenceProvider, createOpenAiCompatibleInferenceProvider, type EncryptedInferenceRequest, type FakeInferenceProvider, type FakeInferenceProviderOptions, type InferenceChatInput, type InferenceChatResult, type InferenceMessage, type InferenceProvider, type InferenceRequestEncryption, type InferenceRole, type InferenceUsage, type OpenAiCompatibleInferenceOptions, } from "./inference.js";
6
+ export { computeQuestion, type ComputeLogger, type ComputeOutcome, type ComputeSyncNotifier, type DerivativeAnswerRecord, type QuestionComputeDeps, } from "./compute.js";
7
+ export { createRecomputeScheduler, type RecomputeScheduler, type RecomputeSchedulerOptions, type SchedulerTimers, } from "./scheduler.js";
8
+ export { MAX_QUESTION_BODY_BYTES, handlePersonalServerDerivativesRequest, type PersonalServerDerivativesApiDeps, } from "./api.js";
9
+ export { DEFAULT_E2EE_KEY_TTL_MS, E2EE_ALGO_X25519, E2eeAttestationError, E2eeCipherError, PHALA_GATEWAY_BASE_URL, createPhalaE2eeEncryption, fetchGatewayE2eeKey, verifyAciReportBinding, type AciAttestationReport, type E2eeAttestationErrorCode, type FetchGatewayE2eeKeyOptions, type GatewayE2eeKey, type PhalaE2eeEncryption, type PhalaE2eeEncryptionOptions, } from "./e2ee/index.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/derivatives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,uBAAuB,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,+BAA+B,EACpC,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,gCAAgC,EAChC,4BAA4B,EAC5B,qBAAqB,EACrB,2BAA2B,EAC3B,uCAAuC,EACvC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gCAAgC,GACtC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,sCAAsC,EACtC,KAAK,gCAAgC,GACtC,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { questionRegistrationView, } from "./types.js";
2
+ export { createInMemoryQuestionStore, matchesQuestionFilter, sortQuestions, } from "./store.js";
3
+ export { MAX_ECHOED_SCOPE_CHARS, MAX_MODEL_CHARS, MAX_QUESTION_CHARS, MAX_QUESTION_SOURCE_SCOPES, createQuestionRegistration, findDerivationCycle, parseQuestionInput, uncoveredSourceScopes, } from "./registration.js";
4
+ export { DEFAULT_MAX_SOURCE_CHARS, DEFAULT_MAX_SOURCE_ITEMS, SYSTEM_PROMPT, buildQuestionMessages, parseAnswer, sortNewestFirst, trimSourceData, } from "./prompt.js";
5
+ export { DEFAULT_INFERENCE_BASE_URL, DEFAULT_INFERENCE_MAX_TOKENS, DEFAULT_INFERENCE_MODEL, DEFAULT_INFERENCE_REQUEST_FIELDS, DEFAULT_INFERENCE_TIMEOUT_MS, InferenceRequestError, createFakeInferenceProvider, createOpenAiCompatibleInferenceProvider, } from "./inference.js";
6
+ export { computeQuestion, } from "./compute.js";
7
+ export { createRecomputeScheduler, } from "./scheduler.js";
8
+ export { MAX_QUESTION_BODY_BYTES, handlePersonalServerDerivativesRequest, } from "./api.js";
9
+ export { DEFAULT_E2EE_KEY_TTL_MS, E2EE_ALGO_X25519, E2eeAttestationError, E2eeCipherError, PHALA_GATEWAY_BASE_URL, createPhalaE2eeEncryption, fetchGatewayE2eeKey, verifyAciReportBinding, } from "./e2ee/index.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/derivatives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,GAUzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GAGtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,cAAc,GAIf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,gCAAgC,EAChC,4BAA4B,EAC5B,qBAAqB,EACrB,2BAA2B,EAC3B,uCAAuC,GAYxC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,eAAe,GAMhB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,wBAAwB,GAIzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,sCAAsC,GAEvC,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,GAOvB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Inference provider adapter for the derivative compute layer.
3
+ *
4
+ * One implementation: OpenAI-compatible chat completions over `fetch`, so it
5
+ * runs unchanged in Node and in the browser (PS-Lite). In production the
6
+ * base URL is the Vana inference relay, which holds the provider key; the
7
+ * optional API key header exists for local development against a provider
8
+ * directly.
9
+ *
10
+ * RELAY AUTH: the Vana inference relay
11
+ * (`POST /v1/inference/chat/completions` on the data gateway) only forwards
12
+ * a request that is signed by the owner or by one of the owner's ACTIVE
13
+ * registered servers, with the same Web3Signed scheme the lineage read uses
14
+ * (`RequestSigner`, see ../signing/request-signer.ts). Pass `requestSigner`
15
+ * and every relay call carries `Authorization: Web3Signed ...` over the
16
+ * exact bytes that go on the wire. `apiKey` is the local-development
17
+ * alternative (direct provider, `Authorization: Bearer`) and wins when both
18
+ * are set: a bearer key means "not the relay".
19
+ *
20
+ * E2EE SEAM: the Phala confidential-inference E2EE v2 protocol encrypts each
21
+ * `messages[i].content` to the gateway's attested public key and adds the
22
+ * headers X-E2EE-Version, X-Client-Pub-Key, X-Model-Pub-Key, X-E2EE-Nonce
23
+ * and X-E2EE-Timestamp; the response content comes back encrypted to the
24
+ * client key. `InferenceRequestEncryption` below is the hook, implemented
25
+ * by `createPhalaE2eeEncryption` in ./e2ee. This module only knows the
26
+ * shape: encrypt the outgoing messages, decrypt the one response field.
27
+ */
28
+ import type { RequestSigner } from "../signing/request-signer.js";
29
+ export type InferenceRole = "system" | "user" | "assistant";
30
+ export interface InferenceMessage {
31
+ role: InferenceRole;
32
+ content: string;
33
+ }
34
+ export interface InferenceChatInput {
35
+ model: string;
36
+ messages: InferenceMessage[];
37
+ maxTokens?: number;
38
+ }
39
+ export interface InferenceUsage {
40
+ promptTokens?: number;
41
+ completionTokens?: number;
42
+ totalTokens?: number;
43
+ }
44
+ export interface InferenceChatResult {
45
+ content: string;
46
+ usage?: InferenceUsage;
47
+ /** `x-receipt-id` response header when the relay / provider sets one. */
48
+ receiptId?: string;
49
+ /** `x-aci-identity` response header (attested compute identity). */
50
+ aciIdentity?: string;
51
+ }
52
+ export interface InferenceProvider {
53
+ /** Model used when a registration names none. */
54
+ readonly defaultModel: string;
55
+ chat(input: InferenceChatInput): Promise<InferenceChatResult>;
56
+ }
57
+ /**
58
+ * One encrypted request: the messages to send and the decryptor bound to
59
+ * that request's context (nonce, timestamp, client key), since the response
60
+ * AAD is built from them.
61
+ */
62
+ export interface EncryptedInferenceRequest {
63
+ messages: InferenceMessage[];
64
+ /**
65
+ * Decrypt one response field. `field` is the spec field path
66
+ * (`choices.{i}.message.content`), `id` the clear response `id` or "".
67
+ */
68
+ decryptResponse(input: {
69
+ content: string;
70
+ field: string;
71
+ id: string;
72
+ headers: Headers;
73
+ }): Promise<string>;
74
+ }
75
+ /**
76
+ * E2EE seam. Implement to encrypt message contents end to end (Phala E2EE
77
+ * v2); absent = plaintext over TLS to the relay. Runs inside
78
+ * `createOpenAiCompatibleInferenceProvider`, around the single fetch.
79
+ */
80
+ export interface InferenceRequestEncryption {
81
+ /** Encrypt `messages[i].content` and add the X-E2EE-* request headers. */
82
+ encryptRequest(input: {
83
+ model: string;
84
+ messages: InferenceMessage[];
85
+ headers: Headers;
86
+ }): Promise<EncryptedInferenceRequest>;
87
+ /**
88
+ * Called once when the provider rejects the request (non-2xx) with the
89
+ * OpenAI-style `error.type` when the body carries one. Return true to
90
+ * re-encrypt and resend once (e.g. after `e2ee_model_key_mismatch`).
91
+ */
92
+ onRejected?(input: {
93
+ status: number;
94
+ errorType: string | null;
95
+ headers: Headers;
96
+ }): Promise<boolean>;
97
+ }
98
+ export declare const DEFAULT_INFERENCE_BASE_URL = "https://inference.phala.com/v1";
99
+ export declare const DEFAULT_INFERENCE_MODEL = "z-ai/glm-5.3-flash";
100
+ export declare const DEFAULT_INFERENCE_TIMEOUT_MS = 120000;
101
+ export declare const DEFAULT_INFERENCE_MAX_TOKENS = 2048;
102
+ export interface OpenAiCompatibleInferenceOptions {
103
+ /** Chat completions base, e.g. `https://inference.phala.com/v1`. */
104
+ baseUrl?: string;
105
+ /** Local development only; production relays hold the key. */
106
+ apiKey?: string;
107
+ /**
108
+ * Signs every request to the Vana inference relay as this personal server
109
+ * (the same signer the lineage client uses). Ignored when `apiKey` is set,
110
+ * which means the base URL is a provider, not the relay.
111
+ */
112
+ requestSigner?: RequestSigner;
113
+ model?: string;
114
+ timeoutMs?: number;
115
+ fetch?: typeof fetch;
116
+ /** E2EE seam; see the module comment. */
117
+ encryption?: InferenceRequestEncryption;
118
+ /**
119
+ * Extra body fields sent with every request. Defaults to the Vana / Phala
120
+ * routing hint `{ provider: { aci_verified: true, zdr: true } }`.
121
+ */
122
+ requestFields?: Record<string, unknown>;
123
+ }
124
+ export declare const DEFAULT_INFERENCE_REQUEST_FIELDS: Record<string, unknown>;
125
+ /** Thrown for a non-2xx or malformed provider reply. Carries no prompt text. */
126
+ export declare class InferenceRequestError extends Error {
127
+ readonly status: number | null;
128
+ /** OpenAI-style `error.type` of the rejection, when the body had one. */
129
+ readonly errorType: string | null;
130
+ /**
131
+ * Explicit retry hint. When undefined the compute layer falls back to the
132
+ * status: no response, 429 or 5xx are retried.
133
+ */
134
+ readonly retryable: boolean | undefined;
135
+ constructor(message: string, status: number | null, options?: {
136
+ errorType?: string | null;
137
+ retryable?: boolean;
138
+ });
139
+ }
140
+ export declare function createOpenAiCompatibleInferenceProvider(options?: OpenAiCompatibleInferenceOptions): InferenceProvider;
141
+ export interface FakeInferenceProviderOptions {
142
+ model?: string;
143
+ /** Answer per call; a function sees the input and may throw. */
144
+ respond?: (input: InferenceChatInput, callIndex: number) => InferenceChatResult | Promise<InferenceChatResult>;
145
+ }
146
+ export interface FakeInferenceProvider extends InferenceProvider {
147
+ readonly calls: InferenceChatInput[];
148
+ }
149
+ /** Test double: records calls, answers with a fixed JSON object by default. */
150
+ export declare function createFakeInferenceProvider(options?: FakeInferenceProviderOptions): FakeInferenceProvider;
151
+ //# sourceMappingURL=inference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../../src/derivatives/inference.ts"],"names":[],"mappings":"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"}