@opendatalabs/personal-server-ts-core 0.0.1-canary.00328bf

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 (573) hide show
  1. package/dist/api/index.d.ts +408 -0
  2. package/dist/api/index.d.ts.map +1 -0
  3. package/dist/api/index.js +1257 -0
  4. package/dist/api/index.js.map +1 -0
  5. package/dist/api/raw-envelope.d.ts +3 -0
  6. package/dist/api/raw-envelope.d.ts.map +1 -0
  7. package/dist/api/raw-envelope.js +215 -0
  8. package/dist/api/raw-envelope.js.map +1 -0
  9. package/dist/auth/index.d.ts +2 -0
  10. package/dist/auth/index.d.ts.map +1 -0
  11. package/dist/auth/index.js +2 -0
  12. package/dist/auth/index.js.map +1 -0
  13. package/dist/auth/request.d.ts +28 -0
  14. package/dist/auth/request.d.ts.map +1 -0
  15. package/dist/auth/request.js +106 -0
  16. package/dist/auth/request.js.map +1 -0
  17. package/dist/client.d.ts +233 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/client.js +243 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/config/defaults.d.ts +12 -0
  22. package/dist/config/defaults.d.ts.map +1 -0
  23. package/dist/config/defaults.js +12 -0
  24. package/dist/config/defaults.js.map +1 -0
  25. package/dist/config/index.d.ts +3 -0
  26. package/dist/config/index.d.ts.map +1 -0
  27. package/dist/config/index.js +3 -0
  28. package/dist/config/index.js.map +1 -0
  29. package/dist/config/paths.d.ts +9 -0
  30. package/dist/config/paths.d.ts.map +1 -0
  31. package/dist/config/paths.js +14 -0
  32. package/dist/config/paths.js.map +1 -0
  33. package/dist/contracts/access-logs.d.ts +8 -0
  34. package/dist/contracts/access-logs.d.ts.map +1 -0
  35. package/dist/contracts/access-logs.js +7 -0
  36. package/dist/contracts/access-logs.js.map +1 -0
  37. package/dist/contracts/auth-device.d.ts +70 -0
  38. package/dist/contracts/auth-device.d.ts.map +1 -0
  39. package/dist/contracts/auth-device.js +163 -0
  40. package/dist/contracts/auth-device.js.map +1 -0
  41. package/dist/contracts/binary.d.ts +66 -0
  42. package/dist/contracts/binary.d.ts.map +1 -0
  43. package/dist/contracts/binary.js +123 -0
  44. package/dist/contracts/binary.js.map +1 -0
  45. package/dist/contracts/config.d.ts +5 -0
  46. package/dist/contracts/config.d.ts.map +1 -0
  47. package/dist/contracts/config.js +30 -0
  48. package/dist/contracts/config.js.map +1 -0
  49. package/dist/contracts/data.d.ts +165 -0
  50. package/dist/contracts/data.d.ts.map +1 -0
  51. package/dist/contracts/data.js +371 -0
  52. package/dist/contracts/data.js.map +1 -0
  53. package/dist/contracts/grants.d.ts +45 -0
  54. package/dist/contracts/grants.d.ts.map +1 -0
  55. package/dist/contracts/grants.js +177 -0
  56. package/dist/contracts/grants.js.map +1 -0
  57. package/dist/contracts/http.d.ts +21 -0
  58. package/dist/contracts/http.d.ts.map +1 -0
  59. package/dist/contracts/http.js +49 -0
  60. package/dist/contracts/http.js.map +1 -0
  61. package/dist/contracts/index.d.ts +16 -0
  62. package/dist/contracts/index.d.ts.map +1 -0
  63. package/dist/contracts/index.js +10 -0
  64. package/dist/contracts/index.js.map +1 -0
  65. package/dist/contracts/oauth.d.ts +38 -0
  66. package/dist/contracts/oauth.d.ts.map +1 -0
  67. package/dist/contracts/oauth.js +130 -0
  68. package/dist/contracts/oauth.js.map +1 -0
  69. package/dist/contracts/sync.d.ts +10 -0
  70. package/dist/contracts/sync.d.ts.map +1 -0
  71. package/dist/contracts/sync.js +35 -0
  72. package/dist/contracts/sync.js.map +1 -0
  73. package/dist/derivatives/answer-shape.d.ts +83 -0
  74. package/dist/derivatives/answer-shape.d.ts.map +1 -0
  75. package/dist/derivatives/answer-shape.js +320 -0
  76. package/dist/derivatives/answer-shape.js.map +1 -0
  77. package/dist/derivatives/api.d.ts +48 -0
  78. package/dist/derivatives/api.d.ts.map +1 -0
  79. package/dist/derivatives/api.js +374 -0
  80. package/dist/derivatives/api.js.map +1 -0
  81. package/dist/derivatives/compute.d.ts +112 -0
  82. package/dist/derivatives/compute.d.ts.map +1 -0
  83. package/dist/derivatives/compute.js +476 -0
  84. package/dist/derivatives/compute.js.map +1 -0
  85. package/dist/derivatives/e2ee/aad.d.ts +22 -0
  86. package/dist/derivatives/e2ee/aad.d.ts.map +1 -0
  87. package/dist/derivatives/e2ee/aad.js +32 -0
  88. package/dist/derivatives/e2ee/aad.js.map +1 -0
  89. package/dist/derivatives/e2ee/attestation.d.ts +134 -0
  90. package/dist/derivatives/e2ee/attestation.d.ts.map +1 -0
  91. package/dist/derivatives/e2ee/attestation.js +248 -0
  92. package/dist/derivatives/e2ee/attestation.js.map +1 -0
  93. package/dist/derivatives/e2ee/index.d.ts +6 -0
  94. package/dist/derivatives/e2ee/index.d.ts.map +1 -0
  95. package/dist/derivatives/e2ee/index.js +6 -0
  96. package/dist/derivatives/e2ee/index.js.map +1 -0
  97. package/dist/derivatives/e2ee/jcs.d.ts +17 -0
  98. package/dist/derivatives/e2ee/jcs.d.ts.map +1 -0
  99. package/dist/derivatives/e2ee/jcs.js +55 -0
  100. package/dist/derivatives/e2ee/jcs.js.map +1 -0
  101. package/dist/derivatives/e2ee/phala.d.ts +62 -0
  102. package/dist/derivatives/e2ee/phala.d.ts.map +1 -0
  103. package/dist/derivatives/e2ee/phala.js +168 -0
  104. package/dist/derivatives/e2ee/phala.js.map +1 -0
  105. package/dist/derivatives/e2ee/suite.d.ts +56 -0
  106. package/dist/derivatives/e2ee/suite.d.ts.map +1 -0
  107. package/dist/derivatives/e2ee/suite.js +164 -0
  108. package/dist/derivatives/e2ee/suite.js.map +1 -0
  109. package/dist/derivatives/index.d.ts +11 -0
  110. package/dist/derivatives/index.d.ts.map +1 -0
  111. package/dist/derivatives/index.js +11 -0
  112. package/dist/derivatives/index.js.map +1 -0
  113. package/dist/derivatives/inference.d.ts +151 -0
  114. package/dist/derivatives/inference.d.ts.map +1 -0
  115. package/dist/derivatives/inference.js +262 -0
  116. package/dist/derivatives/inference.js.map +1 -0
  117. package/dist/derivatives/prompt.d.ts +99 -0
  118. package/dist/derivatives/prompt.d.ts.map +1 -0
  119. package/dist/derivatives/prompt.js +281 -0
  120. package/dist/derivatives/prompt.js.map +1 -0
  121. package/dist/derivatives/registration.d.ts +56 -0
  122. package/dist/derivatives/registration.d.ts.map +1 -0
  123. package/dist/derivatives/registration.js +187 -0
  124. package/dist/derivatives/registration.js.map +1 -0
  125. package/dist/derivatives/scheduler.d.ts +114 -0
  126. package/dist/derivatives/scheduler.d.ts.map +1 -0
  127. package/dist/derivatives/scheduler.js +331 -0
  128. package/dist/derivatives/scheduler.js.map +1 -0
  129. package/dist/derivatives/store.d.ts +14 -0
  130. package/dist/derivatives/store.d.ts.map +1 -0
  131. package/dist/derivatives/store.js +79 -0
  132. package/dist/derivatives/store.js.map +1 -0
  133. package/dist/derivatives/types.d.ts +102 -0
  134. package/dist/derivatives/types.d.ts.map +1 -0
  135. package/dist/derivatives/types.js +29 -0
  136. package/dist/derivatives/types.js.map +1 -0
  137. package/dist/errors/catalog.d.ts +125 -0
  138. package/dist/errors/catalog.d.ts.map +1 -0
  139. package/dist/errors/catalog.js +198 -0
  140. package/dist/errors/catalog.js.map +1 -0
  141. package/dist/errors/pdpp-catalog.d.ts +36 -0
  142. package/dist/errors/pdpp-catalog.d.ts.map +1 -0
  143. package/dist/errors/pdpp-catalog.js +82 -0
  144. package/dist/errors/pdpp-catalog.js.map +1 -0
  145. package/dist/grants/index.d.ts +5 -0
  146. package/dist/grants/index.d.ts.map +1 -0
  147. package/dist/grants/index.js +6 -0
  148. package/dist/grants/index.js.map +1 -0
  149. package/dist/grants/pdpp-binding-store.d.ts +58 -0
  150. package/dist/grants/pdpp-binding-store.d.ts.map +1 -0
  151. package/dist/grants/pdpp-binding-store.js +97 -0
  152. package/dist/grants/pdpp-binding-store.js.map +1 -0
  153. package/dist/grants/pdpp-binding.d.ts +179 -0
  154. package/dist/grants/pdpp-binding.d.ts.map +1 -0
  155. package/dist/grants/pdpp-binding.js +214 -0
  156. package/dist/grants/pdpp-binding.js.map +1 -0
  157. package/dist/keys/index.d.ts +3 -0
  158. package/dist/keys/index.d.ts.map +1 -0
  159. package/dist/keys/index.js +2 -0
  160. package/dist/keys/index.js.map +1 -0
  161. package/dist/keys/public-only-account.d.ts +8 -0
  162. package/dist/keys/public-only-account.d.ts.map +1 -0
  163. package/dist/keys/public-only-account.js +21 -0
  164. package/dist/keys/public-only-account.js.map +1 -0
  165. package/dist/keys/server-account.d.ts +24 -0
  166. package/dist/keys/server-account.d.ts.map +1 -0
  167. package/dist/keys/server-account.js +2 -0
  168. package/dist/keys/server-account.js.map +1 -0
  169. package/dist/lineage/attestation.d.ts +42 -0
  170. package/dist/lineage/attestation.d.ts.map +1 -0
  171. package/dist/lineage/attestation.js +25 -0
  172. package/dist/lineage/attestation.js.map +1 -0
  173. package/dist/lineage/gateway.d.ts +105 -0
  174. package/dist/lineage/gateway.d.ts.map +1 -0
  175. package/dist/lineage/gateway.js +242 -0
  176. package/dist/lineage/gateway.js.map +1 -0
  177. package/dist/lineage/index.d.ts +5 -0
  178. package/dist/lineage/index.d.ts.map +1 -0
  179. package/dist/lineage/index.js +5 -0
  180. package/dist/lineage/index.js.map +1 -0
  181. package/dist/lineage/lineage.d.ts +141 -0
  182. package/dist/lineage/lineage.d.ts.map +1 -0
  183. package/dist/lineage/lineage.js +255 -0
  184. package/dist/lineage/lineage.js.map +1 -0
  185. package/dist/logger/index.d.ts +9 -0
  186. package/dist/logger/index.d.ts.map +1 -0
  187. package/dist/logger/index.js +5 -0
  188. package/dist/logger/index.js.map +1 -0
  189. package/dist/logging/access-log.d.ts +23 -0
  190. package/dist/logging/access-log.d.ts.map +1 -0
  191. package/dist/logging/access-log.js +2 -0
  192. package/dist/logging/access-log.js.map +1 -0
  193. package/dist/logging/access-reader.d.ts +14 -0
  194. package/dist/logging/access-reader.d.ts.map +1 -0
  195. package/dist/logging/access-reader.js +2 -0
  196. package/dist/logging/access-reader.js.map +1 -0
  197. package/dist/mcp/activity.d.ts +68 -0
  198. package/dist/mcp/activity.d.ts.map +1 -0
  199. package/dist/mcp/activity.js +111 -0
  200. package/dist/mcp/activity.js.map +1 -0
  201. package/dist/mcp/builder-registration.d.ts +24 -0
  202. package/dist/mcp/builder-registration.d.ts.map +1 -0
  203. package/dist/mcp/builder-registration.js +89 -0
  204. package/dist/mcp/builder-registration.js.map +1 -0
  205. package/dist/mcp/connection-api.d.ts +201 -0
  206. package/dist/mcp/connection-api.d.ts.map +1 -0
  207. package/dist/mcp/connection-api.js +506 -0
  208. package/dist/mcp/connection-api.js.map +1 -0
  209. package/dist/mcp/grantee.d.ts +52 -0
  210. package/dist/mcp/grantee.d.ts.map +1 -0
  211. package/dist/mcp/grantee.js +91 -0
  212. package/dist/mcp/grantee.js.map +1 -0
  213. package/dist/mcp/index.d.ts +12 -0
  214. package/dist/mcp/index.d.ts.map +1 -0
  215. package/dist/mcp/index.js +12 -0
  216. package/dist/mcp/index.js.map +1 -0
  217. package/dist/mcp/read-client.d.ts +176 -0
  218. package/dist/mcp/read-client.d.ts.map +1 -0
  219. package/dist/mcp/read-client.js +579 -0
  220. package/dist/mcp/read-client.js.map +1 -0
  221. package/dist/mcp/resources.d.ts +37 -0
  222. package/dist/mcp/resources.d.ts.map +1 -0
  223. package/dist/mcp/resources.js +114 -0
  224. package/dist/mcp/resources.js.map +1 -0
  225. package/dist/mcp/search/index.d.ts +34 -0
  226. package/dist/mcp/search/index.d.ts.map +1 -0
  227. package/dist/mcp/search/index.js +156 -0
  228. package/dist/mcp/search/index.js.map +1 -0
  229. package/dist/mcp/server.d.ts +72 -0
  230. package/dist/mcp/server.d.ts.map +1 -0
  231. package/dist/mcp/server.js +447 -0
  232. package/dist/mcp/server.js.map +1 -0
  233. package/dist/mcp/session.d.ts +160 -0
  234. package/dist/mcp/session.d.ts.map +1 -0
  235. package/dist/mcp/session.js +243 -0
  236. package/dist/mcp/session.js.map +1 -0
  237. package/dist/mcp/store.d.ts +13 -0
  238. package/dist/mcp/store.d.ts.map +1 -0
  239. package/dist/mcp/store.js +119 -0
  240. package/dist/mcp/store.js.map +1 -0
  241. package/dist/mcp/token-expiry.d.ts +38 -0
  242. package/dist/mcp/token-expiry.d.ts.map +1 -0
  243. package/dist/mcp/token-expiry.js +55 -0
  244. package/dist/mcp/token-expiry.js.map +1 -0
  245. package/dist/mcp/tools.d.ts +95 -0
  246. package/dist/mcp/tools.d.ts.map +1 -0
  247. package/dist/mcp/tools.js +1381 -0
  248. package/dist/mcp/tools.js.map +1 -0
  249. package/dist/mcp/types.d.ts +135 -0
  250. package/dist/mcp/types.d.ts.map +1 -0
  251. package/dist/mcp/types.js +24 -0
  252. package/dist/mcp/types.js.map +1 -0
  253. package/dist/payment/index.d.ts +2 -0
  254. package/dist/payment/index.d.ts.map +1 -0
  255. package/dist/payment/index.js +2 -0
  256. package/dist/payment/index.js.map +1 -0
  257. package/dist/payment/x402.d.ts +155 -0
  258. package/dist/payment/x402.d.ts.map +1 -0
  259. package/dist/payment/x402.js +402 -0
  260. package/dist/payment/x402.js.map +1 -0
  261. package/dist/pdpp/approval.d.ts +182 -0
  262. package/dist/pdpp/approval.d.ts.map +1 -0
  263. package/dist/pdpp/approval.js +337 -0
  264. package/dist/pdpp/approval.js.map +1 -0
  265. package/dist/pdpp/client-identity.d.ts +88 -0
  266. package/dist/pdpp/client-identity.d.ts.map +1 -0
  267. package/dist/pdpp/client-identity.js +183 -0
  268. package/dist/pdpp/client-identity.js.map +1 -0
  269. package/dist/pdpp/client-metadata.d.ts +95 -0
  270. package/dist/pdpp/client-metadata.d.ts.map +1 -0
  271. package/dist/pdpp/client-metadata.js +96 -0
  272. package/dist/pdpp/client-metadata.js.map +1 -0
  273. package/dist/pdpp/declaration.d.ts +118 -0
  274. package/dist/pdpp/declaration.d.ts.map +1 -0
  275. package/dist/pdpp/declaration.js +549 -0
  276. package/dist/pdpp/declaration.js.map +1 -0
  277. package/dist/pdpp/index.d.ts +35 -0
  278. package/dist/pdpp/index.d.ts.map +1 -0
  279. package/dist/pdpp/index.js +22 -0
  280. package/dist/pdpp/index.js.map +1 -0
  281. package/dist/pdpp/issuance.d.ts +91 -0
  282. package/dist/pdpp/issuance.d.ts.map +1 -0
  283. package/dist/pdpp/issuance.js +124 -0
  284. package/dist/pdpp/issuance.js.map +1 -0
  285. package/dist/pdpp/pkce.d.ts +53 -0
  286. package/dist/pdpp/pkce.d.ts.map +1 -0
  287. package/dist/pdpp/pkce.js +109 -0
  288. package/dist/pdpp/pkce.js.map +1 -0
  289. package/dist/pdpp/redirect.d.ts +60 -0
  290. package/dist/pdpp/redirect.d.ts.map +1 -0
  291. package/dist/pdpp/redirect.js +125 -0
  292. package/dist/pdpp/redirect.js.map +1 -0
  293. package/dist/pdpp/resolve.d.ts +53 -0
  294. package/dist/pdpp/resolve.d.ts.map +1 -0
  295. package/dist/pdpp/resolve.js +218 -0
  296. package/dist/pdpp/resolve.js.map +1 -0
  297. package/dist/pdpp/review.d.ts +155 -0
  298. package/dist/pdpp/review.d.ts.map +1 -0
  299. package/dist/pdpp/review.js +142 -0
  300. package/dist/pdpp/review.js.map +1 -0
  301. package/dist/pdpp/selection.d.ts +43 -0
  302. package/dist/pdpp/selection.d.ts.map +1 -0
  303. package/dist/pdpp/selection.js +211 -0
  304. package/dist/pdpp/selection.js.map +1 -0
  305. package/dist/pdpp/store.d.ts +204 -0
  306. package/dist/pdpp/store.d.ts.map +1 -0
  307. package/dist/pdpp/store.js +501 -0
  308. package/dist/pdpp/store.js.map +1 -0
  309. package/dist/pdpp/tokens.d.ts +149 -0
  310. package/dist/pdpp/tokens.d.ts.map +1 -0
  311. package/dist/pdpp/tokens.js +387 -0
  312. package/dist/pdpp/tokens.js.map +1 -0
  313. package/dist/pdpp/types.d.ts +258 -0
  314. package/dist/pdpp/types.d.ts.map +1 -0
  315. package/dist/pdpp/types.js +40 -0
  316. package/dist/pdpp/types.js.map +1 -0
  317. package/dist/pdpp-version.d.ts +28 -0
  318. package/dist/pdpp-version.d.ts.map +1 -0
  319. package/dist/pdpp-version.js +28 -0
  320. package/dist/pdpp-version.js.map +1 -0
  321. package/dist/policy/data-read.d.ts +56 -0
  322. package/dist/policy/data-read.d.ts.map +1 -0
  323. package/dist/policy/data-read.js +176 -0
  324. package/dist/policy/data-read.js.map +1 -0
  325. package/dist/policy/data-write.d.ts +69 -0
  326. package/dist/policy/data-write.d.ts.map +1 -0
  327. package/dist/policy/data-write.js +131 -0
  328. package/dist/policy/data-write.js.map +1 -0
  329. package/dist/policy/index.d.ts +4 -0
  330. package/dist/policy/index.d.ts.map +1 -0
  331. package/dist/policy/index.js +4 -0
  332. package/dist/policy/index.js.map +1 -0
  333. package/dist/policy/signed-artifacts.d.ts +17 -0
  334. package/dist/policy/signed-artifacts.d.ts.map +1 -0
  335. package/dist/policy/signed-artifacts.js +110 -0
  336. package/dist/policy/signed-artifacts.js.map +1 -0
  337. package/dist/ports/index.d.ts +243 -0
  338. package/dist/ports/index.d.ts.map +1 -0
  339. package/dist/ports/index.js +7 -0
  340. package/dist/ports/index.js.map +1 -0
  341. package/dist/ports/pdpp-auth.d.ts +103 -0
  342. package/dist/ports/pdpp-auth.d.ts.map +1 -0
  343. package/dist/ports/pdpp-auth.js +37 -0
  344. package/dist/ports/pdpp-auth.js.map +1 -0
  345. package/dist/ports/pdpp-auth.test-utils.d.ts +9 -0
  346. package/dist/ports/pdpp-auth.test-utils.d.ts.map +1 -0
  347. package/dist/ports/pdpp-auth.test-utils.js +18 -0
  348. package/dist/ports/pdpp-auth.test-utils.js.map +1 -0
  349. package/dist/schemas/server-config.d.ts +190 -0
  350. package/dist/schemas/server-config.d.ts.map +1 -0
  351. package/dist/schemas/server-config.js +282 -0
  352. package/dist/schemas/server-config.js.map +1 -0
  353. package/dist/signing/index.d.ts +3 -0
  354. package/dist/signing/index.d.ts.map +1 -0
  355. package/dist/signing/index.js +3 -0
  356. package/dist/signing/index.js.map +1 -0
  357. package/dist/signing/request-signer.d.ts +20 -0
  358. package/dist/signing/request-signer.d.ts.map +1 -0
  359. package/dist/signing/request-signer.js +23 -0
  360. package/dist/signing/request-signer.js.map +1 -0
  361. package/dist/signing/signer.d.ts +40 -0
  362. package/dist/signing/signer.d.ts.map +1 -0
  363. package/dist/signing/signer.js +56 -0
  364. package/dist/signing/signer.js.map +1 -0
  365. package/dist/storage/adapters/index.d.ts +4 -0
  366. package/dist/storage/adapters/index.d.ts.map +1 -0
  367. package/dist/storage/adapters/index.js +3 -0
  368. package/dist/storage/adapters/index.js.map +1 -0
  369. package/dist/storage/adapters/interface.d.ts +57 -0
  370. package/dist/storage/adapters/interface.d.ts.map +1 -0
  371. package/dist/storage/adapters/interface.js +2 -0
  372. package/dist/storage/adapters/interface.js.map +1 -0
  373. package/dist/storage/adapters/sdk.d.ts +23 -0
  374. package/dist/storage/adapters/sdk.d.ts.map +1 -0
  375. package/dist/storage/adapters/sdk.js +73 -0
  376. package/dist/storage/adapters/sdk.js.map +1 -0
  377. package/dist/storage/adapters/vana.d.ts +12 -0
  378. package/dist/storage/adapters/vana.d.ts.map +1 -0
  379. package/dist/storage/adapters/vana.js +111 -0
  380. package/dist/storage/adapters/vana.js.map +1 -0
  381. package/dist/storage/blocks/build.d.ts +20 -0
  382. package/dist/storage/blocks/build.d.ts.map +1 -0
  383. package/dist/storage/blocks/build.js +378 -0
  384. package/dist/storage/blocks/build.js.map +1 -0
  385. package/dist/storage/blocks/cursor.d.ts +33 -0
  386. package/dist/storage/blocks/cursor.d.ts.map +1 -0
  387. package/dist/storage/blocks/cursor.js +142 -0
  388. package/dist/storage/blocks/cursor.js.map +1 -0
  389. package/dist/storage/blocks/errors.d.ts +6 -0
  390. package/dist/storage/blocks/errors.d.ts.map +1 -0
  391. package/dist/storage/blocks/errors.js +9 -0
  392. package/dist/storage/blocks/errors.js.map +1 -0
  393. package/dist/storage/blocks/index.d.ts +6 -0
  394. package/dist/storage/blocks/index.d.ts.map +1 -0
  395. package/dist/storage/blocks/index.js +5 -0
  396. package/dist/storage/blocks/index.js.map +1 -0
  397. package/dist/storage/blocks/select.d.ts +29 -0
  398. package/dist/storage/blocks/select.d.ts.map +1 -0
  399. package/dist/storage/blocks/select.js +120 -0
  400. package/dist/storage/blocks/select.js.map +1 -0
  401. package/dist/storage/blocks/types.d.ts +56 -0
  402. package/dist/storage/blocks/types.d.ts.map +1 -0
  403. package/dist/storage/blocks/types.js +2 -0
  404. package/dist/storage/blocks/types.js.map +1 -0
  405. package/dist/storage/hierarchy/index.d.ts +3 -0
  406. package/dist/storage/hierarchy/index.d.ts.map +1 -0
  407. package/dist/storage/hierarchy/index.js +2 -0
  408. package/dist/storage/hierarchy/index.js.map +1 -0
  409. package/dist/storage/hierarchy/manager.d.ts +9 -0
  410. package/dist/storage/hierarchy/manager.d.ts.map +1 -0
  411. package/dist/storage/hierarchy/manager.js +2 -0
  412. package/dist/storage/hierarchy/manager.js.map +1 -0
  413. package/dist/storage/hierarchy/paths.d.ts +11 -0
  414. package/dist/storage/hierarchy/paths.d.ts.map +1 -0
  415. package/dist/storage/hierarchy/paths.js +43 -0
  416. package/dist/storage/hierarchy/paths.js.map +1 -0
  417. package/dist/storage/index/index.d.ts +3 -0
  418. package/dist/storage/index/index.d.ts.map +1 -0
  419. package/dist/storage/index/index.js +2 -0
  420. package/dist/storage/index/index.js.map +1 -0
  421. package/dist/storage/index/manager.d.ts +63 -0
  422. package/dist/storage/index/manager.d.ts.map +1 -0
  423. package/dist/storage/index/manager.js +2 -0
  424. package/dist/storage/index/manager.js.map +1 -0
  425. package/dist/storage/index/schema.d.ts +2 -0
  426. package/dist/storage/index/schema.d.ts.map +1 -0
  427. package/dist/storage/index/schema.js +2 -0
  428. package/dist/storage/index/schema.js.map +1 -0
  429. package/dist/storage/index/types.d.ts +37 -0
  430. package/dist/storage/index/types.d.ts.map +1 -0
  431. package/dist/storage/index/types.js +2 -0
  432. package/dist/storage/index/types.js.map +1 -0
  433. package/dist/storage/pdpp-records/cursor.d.ts +27 -0
  434. package/dist/storage/pdpp-records/cursor.d.ts.map +1 -0
  435. package/dist/storage/pdpp-records/cursor.js +49 -0
  436. package/dist/storage/pdpp-records/cursor.js.map +1 -0
  437. package/dist/storage/pdpp-records/enforcement.d.ts +37 -0
  438. package/dist/storage/pdpp-records/enforcement.d.ts.map +1 -0
  439. package/dist/storage/pdpp-records/enforcement.js +79 -0
  440. package/dist/storage/pdpp-records/enforcement.js.map +1 -0
  441. package/dist/storage/pdpp-records/index.d.ts +8 -0
  442. package/dist/storage/pdpp-records/index.d.ts.map +1 -0
  443. package/dist/storage/pdpp-records/index.js +8 -0
  444. package/dist/storage/pdpp-records/index.js.map +1 -0
  445. package/dist/storage/pdpp-records/interface.d.ts +49 -0
  446. package/dist/storage/pdpp-records/interface.d.ts.map +1 -0
  447. package/dist/storage/pdpp-records/interface.js +2 -0
  448. package/dist/storage/pdpp-records/interface.js.map +1 -0
  449. package/dist/storage/pdpp-records/memory-store.d.ts +9 -0
  450. package/dist/storage/pdpp-records/memory-store.d.ts.map +1 -0
  451. package/dist/storage/pdpp-records/memory-store.js +0 -0
  452. package/dist/storage/pdpp-records/memory-store.js.map +1 -0
  453. package/dist/storage/pdpp-records/record-key.d.ts +52 -0
  454. package/dist/storage/pdpp-records/record-key.d.ts.map +1 -0
  455. package/dist/storage/pdpp-records/record-key.js +97 -0
  456. package/dist/storage/pdpp-records/record-key.js.map +1 -0
  457. package/dist/storage/pdpp-records/stream-declaration.d.ts +43 -0
  458. package/dist/storage/pdpp-records/stream-declaration.d.ts.map +1 -0
  459. package/dist/storage/pdpp-records/stream-declaration.js +17 -0
  460. package/dist/storage/pdpp-records/stream-declaration.js.map +1 -0
  461. package/dist/storage/pdpp-records/types.d.ts +93 -0
  462. package/dist/storage/pdpp-records/types.d.ts.map +1 -0
  463. package/dist/storage/pdpp-records/types.js +17 -0
  464. package/dist/storage/pdpp-records/types.js.map +1 -0
  465. package/dist/storage/preview.d.ts +12 -0
  466. package/dist/storage/preview.d.ts.map +1 -0
  467. package/dist/storage/preview.js +239 -0
  468. package/dist/storage/preview.js.map +1 -0
  469. package/dist/sync/cursor.d.ts +10 -0
  470. package/dist/sync/cursor.d.ts.map +1 -0
  471. package/dist/sync/cursor.js +2 -0
  472. package/dist/sync/cursor.js.map +1 -0
  473. package/dist/sync/data-point-feed.d.ts +35 -0
  474. package/dist/sync/data-point-feed.d.ts.map +1 -0
  475. package/dist/sync/data-point-feed.js +122 -0
  476. package/dist/sync/data-point-feed.js.map +1 -0
  477. package/dist/sync/data-point-id.d.ts +7 -0
  478. package/dist/sync/data-point-id.d.ts.map +1 -0
  479. package/dist/sync/data-point-id.js +16 -0
  480. package/dist/sync/data-point-id.js.map +1 -0
  481. package/dist/sync/delete-data-port.d.ts +50 -0
  482. package/dist/sync/delete-data-port.d.ts.map +1 -0
  483. package/dist/sync/delete-data-port.js +244 -0
  484. package/dist/sync/delete-data-port.js.map +1 -0
  485. package/dist/sync/engine/sync-manager.d.ts +58 -0
  486. package/dist/sync/engine/sync-manager.d.ts.map +1 -0
  487. package/dist/sync/engine/sync-manager.js +285 -0
  488. package/dist/sync/engine/sync-manager.js.map +1 -0
  489. package/dist/sync/index.d.ts +15 -0
  490. package/dist/sync/index.d.ts.map +1 -0
  491. package/dist/sync/index.js +14 -0
  492. package/dist/sync/index.js.map +1 -0
  493. package/dist/sync/issues.d.ts +55 -0
  494. package/dist/sync/issues.d.ts.map +1 -0
  495. package/dist/sync/issues.js +168 -0
  496. package/dist/sync/issues.js.map +1 -0
  497. package/dist/sync/pdpp-import.d.ts +192 -0
  498. package/dist/sync/pdpp-import.d.ts.map +1 -0
  499. package/dist/sync/pdpp-import.js +422 -0
  500. package/dist/sync/pdpp-import.js.map +1 -0
  501. package/dist/sync/pending-blob-deletions.d.ts +29 -0
  502. package/dist/sync/pending-blob-deletions.d.ts.map +1 -0
  503. package/dist/sync/pending-blob-deletions.js +116 -0
  504. package/dist/sync/pending-blob-deletions.js.map +1 -0
  505. package/dist/sync/retry-memory.d.ts +33 -0
  506. package/dist/sync/retry-memory.d.ts.map +1 -0
  507. package/dist/sync/retry-memory.js +68 -0
  508. package/dist/sync/retry-memory.js.map +1 -0
  509. package/dist/sync/scope-deletions.d.ts +155 -0
  510. package/dist/sync/scope-deletions.d.ts.map +1 -0
  511. package/dist/sync/scope-deletions.js +225 -0
  512. package/dist/sync/scope-deletions.js.map +1 -0
  513. package/dist/sync/tombstone.d.ts +27 -0
  514. package/dist/sync/tombstone.d.ts.map +1 -0
  515. package/dist/sync/tombstone.js +28 -0
  516. package/dist/sync/tombstone.js.map +1 -0
  517. package/dist/sync/types.d.ts +27 -0
  518. package/dist/sync/types.d.ts.map +1 -0
  519. package/dist/sync/types.js +2 -0
  520. package/dist/sync/types.js.map +1 -0
  521. package/dist/sync/workers/delete.d.ts +163 -0
  522. package/dist/sync/workers/delete.d.ts.map +1 -0
  523. package/dist/sync/workers/delete.js +474 -0
  524. package/dist/sync/workers/delete.js.map +1 -0
  525. package/dist/sync/workers/download.d.ts +159 -0
  526. package/dist/sync/workers/download.d.ts.map +1 -0
  527. package/dist/sync/workers/download.js +731 -0
  528. package/dist/sync/workers/download.js.map +1 -0
  529. package/dist/sync/workers/upload.d.ts +98 -0
  530. package/dist/sync/workers/upload.d.ts.map +1 -0
  531. package/dist/sync/workers/upload.js +412 -0
  532. package/dist/sync/workers/upload.js.map +1 -0
  533. package/dist/test-utils/e2ee-fixtures.d.ts +94 -0
  534. package/dist/test-utils/e2ee-fixtures.d.ts.map +1 -0
  535. package/dist/test-utils/e2ee-fixtures.js +116 -0
  536. package/dist/test-utils/e2ee-fixtures.js.map +1 -0
  537. package/dist/test-utils/e2ee-gateway.d.ts +61 -0
  538. package/dist/test-utils/e2ee-gateway.d.ts.map +1 -0
  539. package/dist/test-utils/e2ee-gateway.js +248 -0
  540. package/dist/test-utils/e2ee-gateway.js.map +1 -0
  541. package/dist/test-utils/index.d.ts +5 -0
  542. package/dist/test-utils/index.d.ts.map +1 -0
  543. package/dist/test-utils/index.js +5 -0
  544. package/dist/test-utils/index.js.map +1 -0
  545. package/dist/test-utils/memory-storage.d.ts +12 -0
  546. package/dist/test-utils/memory-storage.d.ts.map +1 -0
  547. package/dist/test-utils/memory-storage.js +146 -0
  548. package/dist/test-utils/memory-storage.js.map +1 -0
  549. package/dist/test-utils/wallet.d.ts +47 -0
  550. package/dist/test-utils/wallet.d.ts.map +1 -0
  551. package/dist/test-utils/wallet.js +98 -0
  552. package/dist/test-utils/wallet.js.map +1 -0
  553. package/dist/write/attribution.d.ts +185 -0
  554. package/dist/write/attribution.d.ts.map +1 -0
  555. package/dist/write/attribution.js +450 -0
  556. package/dist/write/attribution.js.map +1 -0
  557. package/dist/write/authorize.d.ts +77 -0
  558. package/dist/write/authorize.d.ts.map +1 -0
  559. package/dist/write/authorize.js +109 -0
  560. package/dist/write/authorize.js.map +1 -0
  561. package/dist/write/index.d.ts +5 -0
  562. package/dist/write/index.d.ts.map +1 -0
  563. package/dist/write/index.js +5 -0
  564. package/dist/write/index.js.map +1 -0
  565. package/dist/write/route.d.ts +61 -0
  566. package/dist/write/route.d.ts.map +1 -0
  567. package/dist/write/route.js +132 -0
  568. package/dist/write/route.js.map +1 -0
  569. package/dist/write/session.d.ts +96 -0
  570. package/dist/write/session.d.ts.map +1 -0
  571. package/dist/write/session.js +136 -0
  572. package/dist/write/session.js.map +1 -0
  573. package/package.json +175 -0
@@ -0,0 +1,218 @@
1
+ /**
2
+ * PDPP Core §6→§7 resolution: turn a validated selection request into the
3
+ * explicit grant facts that get frozen at issuance.
4
+ *
5
+ * Every request-only convenience dies here. Wildcards and presets expand to
6
+ * concrete stream rows, views resolve to field lists, omitted fields become
7
+ * the declaration's full field set, omitted instance handles resolve against
8
+ * the owner's connection inventory, and `time_range` freezes against the
9
+ * declaration's `consent_time_field`. §7 is explicit that none of these
10
+ * conveniences are continuing authority in the grant — the RS must never have
11
+ * to resolve anything, which is also what the AS→RS contract promises.
12
+ *
13
+ * Resolution runs against the same retained snapshot `selection.ts` validated
14
+ * against. Passing a newer declaration here is the bug §9 AS item 16 exists to
15
+ * prevent: it would let a later declaration widen an in-flight authorization.
16
+ */
17
+ function failure(code, message, extra) {
18
+ return { ok: false, failure: { code, message, ...extra } };
19
+ }
20
+ /** Stable de-duplication. Grant field and instance lists must be unique (§7). */
21
+ function unique(values) {
22
+ return Array.from(new Set(values));
23
+ }
24
+ /**
25
+ * Resolve the field allowlist for one stream.
26
+ *
27
+ * Schema-required fields are unioned in unconditionally: §6 calls them the
28
+ * per-stream consent floor, because a record missing them is not a valid
29
+ * record of that stream. That means a client asking for fewer fields than the
30
+ * floor gets the floor, not an error.
31
+ */
32
+ function resolveFields(request, declared, snapshot) {
33
+ let requested;
34
+ if (request.view !== undefined) {
35
+ const view = snapshot.views?.find((v) => v.name === request.view);
36
+ if (!view) {
37
+ return {
38
+ ok: false,
39
+ failure: {
40
+ code: "unknown_view",
41
+ message: `view '${request.view}' is not defined for this source`,
42
+ stream: declared.name,
43
+ },
44
+ };
45
+ }
46
+ requested = view.fields;
47
+ }
48
+ else if (request.fields !== undefined) {
49
+ requested = request.fields;
50
+ }
51
+ else {
52
+ // §6 "Note on defaults": omitting both asks the AS to resolve all
53
+ // permitted fields from the retained snapshot.
54
+ requested = declared.fields;
55
+ }
56
+ // Intersect with the declared schema before adding the floor, so a view or
57
+ // allowlist can never introduce a field the snapshot does not define.
58
+ const permitted = requested.filter((f) => declared.fields.includes(f));
59
+ const fields = unique([...permitted, ...declared.required_fields]);
60
+ if (fields.length === 0) {
61
+ return {
62
+ ok: false,
63
+ failure: {
64
+ code: "empty_field_set",
65
+ message: `stream '${declared.name}' resolved to an empty field set`,
66
+ stream: declared.name,
67
+ },
68
+ };
69
+ }
70
+ return { ok: true, fields };
71
+ }
72
+ /**
73
+ * Resolve instance handles for one stream.
74
+ *
75
+ * Three outcomes, per §6 and §7: explicit handles are verified for
76
+ * eligibility; a single eligible handle resolves automatically; anything else
77
+ * is an owner choice the AS must surface before the final approval surface.
78
+ */
79
+ function resolveInstances(request, streamName, inventory) {
80
+ const eligible = inventory.eligibleFor(streamName);
81
+ if (request.instance_ids !== undefined && request.instance_ids.length > 0) {
82
+ const ineligible = request.instance_ids.filter((id) => !eligible.includes(id));
83
+ if (ineligible.length > 0) {
84
+ return {
85
+ ok: false,
86
+ failure: {
87
+ code: "unknown_instance",
88
+ message: `stream '${streamName}' requests instance handles that are not eligible: ${ineligible.join(", ")}`,
89
+ stream: streamName,
90
+ },
91
+ };
92
+ }
93
+ // Explicitly listing more than one handle is how a client asks for
94
+ // fan-in, and it is allowed precisely because it is explicit.
95
+ return { ok: true, instanceIds: unique(request.instance_ids) };
96
+ }
97
+ if (eligible.length === 0) {
98
+ return {
99
+ ok: false,
100
+ failure: {
101
+ code: "no_eligible_instance",
102
+ message: `stream '${streamName}' has no connected instance to authorize`,
103
+ stream: streamName,
104
+ },
105
+ };
106
+ }
107
+ if (eligible.length > 1) {
108
+ // Omission never means fan-in. The owner picks.
109
+ return {
110
+ ok: false,
111
+ failure: {
112
+ code: "instance_choice_required",
113
+ message: `stream '${streamName}' has ${eligible.length} eligible instances and the request named none`,
114
+ stream: streamName,
115
+ candidates: eligible,
116
+ },
117
+ };
118
+ }
119
+ return { ok: true, instanceIds: [eligible[0]] };
120
+ }
121
+ /**
122
+ * Freeze `time_range` into the grant's `time_constraint`, binding the
123
+ * declaration's `consent_time_field` as the field the RS evaluates against.
124
+ * Freezing the field name (not just the bounds) is what stops a later
125
+ * declaration that renames its time field from silently re-scoping the grant.
126
+ */
127
+ function resolveTimeConstraint(request, declared) {
128
+ if (!request.time_range)
129
+ return undefined;
130
+ const { since, until } = request.time_range;
131
+ if (since === undefined && until === undefined)
132
+ return undefined;
133
+ // Validation already rejected time_range on a stream with no time field.
134
+ const field = declared.consent_time_field;
135
+ if (!field)
136
+ return undefined;
137
+ return {
138
+ field,
139
+ ...(since !== undefined && { since }),
140
+ ...(until !== undefined && { until }),
141
+ };
142
+ }
143
+ function resolveOneStream(request, declared, snapshot, inventory) {
144
+ const fields = resolveFields(request, declared, snapshot);
145
+ if (!fields.ok)
146
+ return fields;
147
+ const instances = resolveInstances(request, declared.name, inventory);
148
+ if (!instances.ok)
149
+ return instances;
150
+ const timeConstraint = resolveTimeConstraint(request, declared);
151
+ return {
152
+ ok: true,
153
+ stream: {
154
+ name: declared.name,
155
+ instance_ids: instances.instanceIds,
156
+ fields: fields.fields,
157
+ ...(timeConstraint && { time_constraint: timeConstraint }),
158
+ ...(request.resources && { resources: unique(request.resources) }),
159
+ },
160
+ };
161
+ }
162
+ /**
163
+ * Expand the request's stream selections into the concrete list to resolve.
164
+ *
165
+ * A wildcard entry fans out to every declared stream, carrying its own
166
+ * per-stream parameters with it — §6 says a wildcard's `instance_ids` apply to
167
+ * every expanded stream, and each handle is then verified per stream by
168
+ * `resolveInstances`. A preset expands from the snapshot instead.
169
+ */
170
+ function expandSelections(request, snapshot) {
171
+ if (request.selection_preset !== undefined) {
172
+ const preset = snapshot.selection_presets?.find((p) => p.name === request.selection_preset);
173
+ return preset ? preset.streams : [];
174
+ }
175
+ const streams = request.streams ?? [];
176
+ const wildcard = streams.find((s) => s.name === "*");
177
+ if (wildcard) {
178
+ return snapshot.streams.map((declared) => ({
179
+ ...wildcard,
180
+ name: declared.name,
181
+ // A wildcard cannot carry a view (validation rejects that pairing), and
182
+ // its time_range only applies to streams that can accept one. Dropping
183
+ // it for time-incapable streams is what makes `{"name":"*"}` with a
184
+ // time_range usable on a mixed-capability source at all.
185
+ ...(wildcard.time_range && !declared.consent_time_field
186
+ ? { time_range: undefined }
187
+ : {}),
188
+ }));
189
+ }
190
+ return streams;
191
+ }
192
+ /**
193
+ * Resolve every enforcement axis for a validated selection request.
194
+ *
195
+ * Call this before showing the final approval surface: §7 requires the
196
+ * approval artifact to contain the exact resolved instance handles, stream
197
+ * names, fields, resources, and temporal bounds, which only exist once this
198
+ * has run.
199
+ */
200
+ export function resolveSelection(request, snapshot, inventory) {
201
+ const selections = expandSelections(request, snapshot);
202
+ if (selections.length === 0) {
203
+ return failure("unknown_stream", "the selection resolved to no streams against the retained snapshot");
204
+ }
205
+ const resolved = [];
206
+ for (const selection of selections) {
207
+ const declared = snapshot.streams.find((s) => s.name === selection.name);
208
+ if (!declared) {
209
+ return failure("unknown_stream", `stream '${selection.name}' is not declared by the retained snapshot`, { stream: selection.name });
210
+ }
211
+ const result = resolveOneStream(selection, declared, snapshot, inventory);
212
+ if (!result.ok)
213
+ return { ok: false, failure: result.failure };
214
+ resolved.push(result.stream);
215
+ }
216
+ return { ok: true, streams: resolved };
217
+ }
218
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/pdpp/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * PDPP Core §6/§7 consent review model and immutable review digest.
3
+ *
4
+ * Two jobs here, and they are related:
5
+ *
6
+ * 1. Build the review model Account/Web renders. §6 forbids flattening the
7
+ * consent surface: requester identity, declaration-authored data
8
+ * descriptions, structured policy declarations, and attributed client
9
+ * claims are four distinct categories, and a client claim must never be
10
+ * rendered in the same register as a protocol-enforced term. The model
11
+ * below keeps them in four separate fields so a renderer cannot
12
+ * accidentally merge them.
13
+ *
14
+ * 2. Compute a digest over the decision fields. §7 requires the approval
15
+ * mutation to bind to an immutable review revision or digest, and to reject
16
+ * approval if eligibility or the reviewed revision changed in the meantime.
17
+ * That is what stops a resolved-then-widened race: the owner approves a
18
+ * digest, and issuance re-derives the digest from what it is about to issue.
19
+ * If they differ, the approval is stale and dies.
20
+ *
21
+ * The digest covers exactly the decision fields §7 enumerates, plus the
22
+ * normalized client claims when they were rendered. It deliberately does NOT
23
+ * cover `issued_at` or `grant_id`, which do not exist yet at review time.
24
+ */
25
+ import { type ClientClaims, type ClientDisplay, type DeclarationSnapshot, type Retention, type SelectionRequest, type StreamGrant } from "./types.js";
26
+ /** How the AS resolved requester identity, and how much it actually knows. */
27
+ export interface RequesterIdentity {
28
+ client_id: string;
29
+ /** Resolved per §6 precedence. Falls back to `client_id` when nothing else exists. */
30
+ display_name: string;
31
+ display?: ClientDisplay;
32
+ /**
33
+ * §6 obligation 5: verified domain control is named, never presented as an
34
+ * unqualified "verified app". Absent means no positive trust signal, and the
35
+ * surface must show an unverified indicator.
36
+ */
37
+ verified_domain?: string;
38
+ /** True only for a local registration or trust-registry admission decision. */
39
+ app_approved: boolean;
40
+ }
41
+ /** One stream row as the owner reviews it, with declaration-authored copy. */
42
+ export interface ReviewStream {
43
+ name: string;
44
+ /** Declaration-authored description. Its own category — not a client claim. */
45
+ description?: string;
46
+ instance_ids: string[];
47
+ fields: string[];
48
+ time_constraint?: {
49
+ field: string;
50
+ since?: string;
51
+ until?: string;
52
+ };
53
+ resources?: string[];
54
+ }
55
+ /**
56
+ * The four semantic categories §6 requires a conformant consent surface to
57
+ * keep distinct. A renderer that wants to flatten them has to do so
58
+ * deliberately; it cannot do so by accident.
59
+ */
60
+ export interface ConsentReviewModel {
61
+ /** Category 1: who is asking. */
62
+ requester: RequesterIdentity;
63
+ /** Category 2: declaration-authored data descriptions + protocol-enforced terms. */
64
+ data: {
65
+ source: {
66
+ kind: string;
67
+ id: string;
68
+ };
69
+ source_declaration_version: string;
70
+ access_mode: "single_use" | "continuous";
71
+ streams: ReviewStream[];
72
+ expires_at?: string;
73
+ };
74
+ /** Category 3: structured policy declarations. */
75
+ policy: {
76
+ purpose_code: string;
77
+ purpose_description?: string;
78
+ /**
79
+ * True when the code is absent from the PDPP registry. §9 AS item 6:
80
+ * this drives *rendering* (show the description or raw URI), never
81
+ * rejection.
82
+ */
83
+ purpose_unregistered: boolean;
84
+ retention?: Retention;
85
+ /**
86
+ * §6: the sole purpose code with a protocol-level consent requirement.
87
+ * The surface must collect explicit affirmative consent when this is set.
88
+ */
89
+ requires_explicit_ai_training_consent: boolean;
90
+ };
91
+ /** Category 4: attributed, unverifiable, non-enforceable client claims. */
92
+ client_claims?: {
93
+ /** Always rendered as "<name> says:" — never as a protocol term. */
94
+ attributed_to: string;
95
+ commitments: string[];
96
+ };
97
+ /** Digest over the decision fields. The approval must carry this back. */
98
+ review_digest: string;
99
+ }
100
+ export declare function isRegisteredPurposeCode(code: string): boolean;
101
+ /**
102
+ * Normalize client claims before binding. §6 requires the *normalized exact*
103
+ * claims to be bound into the approval artifact, so the digest has to be
104
+ * computed over a canonical form — otherwise re-rendering with different
105
+ * whitespace would spuriously invalidate an approval.
106
+ */
107
+ export declare function normalizeClientClaims(claims: ClientClaims | undefined): string[] | undefined;
108
+ /**
109
+ * The exact set of fields the digest covers. Kept as its own type so that
110
+ * adding a decision field to the grant without adding it here is a visible
111
+ * omission rather than a silent hole in the binding.
112
+ */
113
+ interface ReviewDecisionFields {
114
+ subject_id: string;
115
+ client_id: string;
116
+ source_id: string;
117
+ source_kind: string;
118
+ source_declaration_version: string;
119
+ /** The digest of the retained snapshot, so a re-fetched declaration cannot pass. */
120
+ declaration_digest: string;
121
+ purpose_code: string;
122
+ purpose_description?: string;
123
+ access_mode: string;
124
+ streams: StreamGrant[];
125
+ retention?: Retention;
126
+ expires_at?: string;
127
+ /** Bound with attribution when rendered; stays outside the grant regardless. */
128
+ client_claims?: {
129
+ attributed_to: string;
130
+ commitments: string[];
131
+ };
132
+ }
133
+ export declare function computeReviewDigest(fields: ReviewDecisionFields): string;
134
+ export interface BuildReviewInput {
135
+ subjectId: string;
136
+ request: SelectionRequest;
137
+ snapshot: DeclarationSnapshot;
138
+ /** The output of `resolveSelection` — fully concrete. */
139
+ resolvedStreams: StreamGrant[];
140
+ requester: RequesterIdentity;
141
+ /** AS-policy grant expiry, when the deployment sets one. */
142
+ expiresAt?: string;
143
+ /** Declaration-authored stream descriptions, keyed by stream name. */
144
+ streamDescriptions?: Record<string, string>;
145
+ }
146
+ /**
147
+ * Build the review model and its binding digest.
148
+ *
149
+ * The digest is computed from the same resolved streams that will be issued.
150
+ * `issueGrant` recomputes it and refuses to issue if it moved — see
151
+ * `issuance.ts`.
152
+ */
153
+ export declare function buildConsentReview(input: BuildReviewInput): ConsentReviewModel;
154
+ export {};
155
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/pdpp/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * PDPP Core §6/§7 consent review model and immutable review digest.
3
+ *
4
+ * Two jobs here, and they are related:
5
+ *
6
+ * 1. Build the review model Account/Web renders. §6 forbids flattening the
7
+ * consent surface: requester identity, declaration-authored data
8
+ * descriptions, structured policy declarations, and attributed client
9
+ * claims are four distinct categories, and a client claim must never be
10
+ * rendered in the same register as a protocol-enforced term. The model
11
+ * below keeps them in four separate fields so a renderer cannot
12
+ * accidentally merge them.
13
+ *
14
+ * 2. Compute a digest over the decision fields. §7 requires the approval
15
+ * mutation to bind to an immutable review revision or digest, and to reject
16
+ * approval if eligibility or the reviewed revision changed in the meantime.
17
+ * That is what stops a resolved-then-widened race: the owner approves a
18
+ * digest, and issuance re-derives the digest from what it is about to issue.
19
+ * If they differ, the approval is stale and dies.
20
+ *
21
+ * The digest covers exactly the decision fields §7 enumerates, plus the
22
+ * normalized client claims when they were rendered. It deliberately does NOT
23
+ * cover `issued_at` or `grant_id`, which do not exist yet at review time.
24
+ */
25
+ import { createHash } from "node:crypto";
26
+ import { AI_TRAINING_PURPOSE, } from "./types.js";
27
+ /**
28
+ * Purpose codes in the Appendix A initial registry. Membership drives display
29
+ * only. An unrecognized code is displayed from its description or raw URI and
30
+ * is never a rejection reason on its own (§9 AS item 6).
31
+ */
32
+ const REGISTERED_PURPOSE_CODES = new Set([
33
+ "https://pdpp.dev/purpose/personalization",
34
+ "https://pdpp.dev/purpose/analytics",
35
+ "https://pdpp.dev/purpose/research",
36
+ "https://pdpp.dev/purpose/portability",
37
+ "https://pdpp.dev/purpose/ai_training",
38
+ ]);
39
+ export function isRegisteredPurposeCode(code) {
40
+ return REGISTERED_PURPOSE_CODES.has(code);
41
+ }
42
+ /**
43
+ * Normalize client claims before binding. §6 requires the *normalized exact*
44
+ * claims to be bound into the approval artifact, so the digest has to be
45
+ * computed over a canonical form — otherwise re-rendering with different
46
+ * whitespace would spuriously invalidate an approval.
47
+ */
48
+ export function normalizeClientClaims(claims) {
49
+ const commitments = claims?.commitments;
50
+ if (!commitments || commitments.length === 0)
51
+ return undefined;
52
+ const normalized = commitments
53
+ .map((c) => c.trim().replace(/\s+/g, " "))
54
+ .filter((c) => c.length > 0);
55
+ return normalized.length > 0 ? normalized : undefined;
56
+ }
57
+ /**
58
+ * Deterministic serialization. `JSON.stringify` preserves insertion order, so
59
+ * we sort keys explicitly — two structurally identical decisions must produce
60
+ * one digest regardless of how the objects were built.
61
+ */
62
+ function canonicalize(value) {
63
+ if (value === null || typeof value !== "object") {
64
+ return JSON.stringify(value) ?? "null";
65
+ }
66
+ if (Array.isArray(value)) {
67
+ // Array order is meaningful (a field list's order is part of the decision
68
+ // the owner saw), so we do not sort array members.
69
+ return `[${value.map(canonicalize).join(",")}]`;
70
+ }
71
+ const entries = Object.entries(value)
72
+ .filter(([, v]) => v !== undefined)
73
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
74
+ return `{${entries
75
+ .map(([k, v]) => `${JSON.stringify(k)}:${canonicalize(v)}`)
76
+ .join(",")}}`;
77
+ }
78
+ export function computeReviewDigest(fields) {
79
+ return createHash("sha256")
80
+ .update(canonicalize(fields), "utf8")
81
+ .digest("hex");
82
+ }
83
+ /**
84
+ * Build the review model and its binding digest.
85
+ *
86
+ * The digest is computed from the same resolved streams that will be issued.
87
+ * `issueGrant` recomputes it and refuses to issue if it moved — see
88
+ * `issuance.ts`.
89
+ */
90
+ export function buildConsentReview(input) {
91
+ const { request, snapshot, resolvedStreams, requester } = input;
92
+ const normalizedClaims = normalizeClientClaims(request.client_claims);
93
+ const boundClaims = normalizedClaims
94
+ ? { attributed_to: requester.display_name, commitments: normalizedClaims }
95
+ : undefined;
96
+ const review_digest = computeReviewDigest({
97
+ subject_id: input.subjectId,
98
+ client_id: requester.client_id,
99
+ source_id: snapshot.source_id,
100
+ source_kind: snapshot.source_kind,
101
+ source_declaration_version: snapshot.version,
102
+ declaration_digest: snapshot.digest,
103
+ purpose_code: request.purpose_code,
104
+ purpose_description: request.purpose_description,
105
+ access_mode: request.access_mode,
106
+ streams: resolvedStreams,
107
+ retention: request.retention,
108
+ expires_at: input.expiresAt,
109
+ client_claims: boundClaims,
110
+ });
111
+ return {
112
+ requester,
113
+ data: {
114
+ source: { kind: snapshot.source_kind, id: snapshot.source_id },
115
+ source_declaration_version: snapshot.version,
116
+ access_mode: request.access_mode,
117
+ streams: resolvedStreams.map((s) => ({
118
+ name: s.name,
119
+ ...(input.streamDescriptions?.[s.name] && {
120
+ description: input.streamDescriptions[s.name],
121
+ }),
122
+ instance_ids: s.instance_ids,
123
+ fields: s.fields,
124
+ ...(s.time_constraint && { time_constraint: s.time_constraint }),
125
+ ...(s.resources && { resources: s.resources }),
126
+ })),
127
+ ...(input.expiresAt && { expires_at: input.expiresAt }),
128
+ },
129
+ policy: {
130
+ purpose_code: request.purpose_code,
131
+ ...(request.purpose_description && {
132
+ purpose_description: request.purpose_description,
133
+ }),
134
+ purpose_unregistered: !isRegisteredPurposeCode(request.purpose_code),
135
+ ...(request.retention && { retention: request.retention }),
136
+ requires_explicit_ai_training_consent: request.purpose_code === AI_TRAINING_PURPOSE,
137
+ },
138
+ ...(boundClaims && { client_claims: boundClaims }),
139
+ review_digest,
140
+ };
141
+ }
142
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/pdpp/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * PDPP Core §6 selection-request validation.
3
+ *
4
+ * This is the shape gate that runs before consent. It answers one question:
5
+ * is this request expressible against the retained declaration snapshot? It
6
+ * does not resolve anything — `resolve.ts` does that, and only against the
7
+ * same snapshot this module validated against.
8
+ *
9
+ * "Fails neutrally" in §6 means the both/neither `streams`/`selection_preset`
10
+ * failure is a Source validation failure the binding maps to an error code; it
11
+ * must not leak which of the two the client got wrong, and it must not depend
12
+ * on any owner-specific state. We return a binding-neutral failure and let the
13
+ * OAuth/RAR layer map it to RFC 9396 `invalid_authorization_details`.
14
+ */
15
+ import { type DeclarationSnapshot, type SelectionRequest } from "./types.js";
16
+ /**
17
+ * Binding-neutral validation failure codes. The OAuth/RAR binding maps these
18
+ * to wire errors in `../../../server/src/routes/pdpp-authorize.ts`; Core
19
+ * itself stays binding-neutral (§9 AS item 5).
20
+ */
21
+ export type SelectionFailureCode =
22
+ /** Both or neither of `streams` and `selection_preset`. */
23
+ "source_validation_failed" | "unknown_stream" | "unknown_preset" | "unknown_view" | "unknown_field" | "unsupported_selection_parameter" | "invalid_resource_key" | "invalid_request";
24
+ export interface SelectionFailure {
25
+ code: SelectionFailureCode;
26
+ message: string;
27
+ }
28
+ export type SelectionValidation = {
29
+ ok: true;
30
+ } | {
31
+ ok: false;
32
+ failure: SelectionFailure;
33
+ };
34
+ /**
35
+ * Validate one selection request against the retained declaration snapshot.
36
+ *
37
+ * The caller must have already retrieved and pinned `snapshot`; this function
38
+ * never fetches. §9 AS item 16 requires that the same snapshot carry through
39
+ * consent and issuance, so passing a freshly fetched declaration here and a
40
+ * different one to `resolveGrant` would defeat the whole guarantee.
41
+ */
42
+ export declare function validateSelectionRequest(request: SelectionRequest, snapshot: DeclarationSnapshot): SelectionValidation;
43
+ //# sourceMappingURL=selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/pdpp/selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAEtB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,MAAM,MAAM,oBAAoB;AAC9B,2DAA2D;AACzD,0BAA0B,GAC1B,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,eAAe,GACf,iCAAiC,GACjC,sBAAsB,GACtB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,mBAAmB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAsK1D;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,mBAAmB,GAC5B,mBAAmB,CAwGrB"}