@noy-db/hub 0.3.0 → 0.4.0-pre.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/dist/aggregate/index.js +4 -4
  2. package/dist/api-3A3S4SHH.js +20 -0
  3. package/dist/as/index.js +11 -11
  4. package/dist/attestation/index.js +18 -18
  5. package/dist/{backup-BJ57IKAO.js → backup-YPUEKIJC.js} +11 -11
  6. package/dist/blobs/index.js +12 -12
  7. package/dist/broker/index.js +12 -12
  8. package/dist/bundle/index.js +22 -22
  9. package/dist/by/index.js +2 -2
  10. package/dist/cargo/index.js +22 -22
  11. package/dist/{chunk-ZAJAVEXY.js → chunk-2PCAVW2I.js} +2 -2
  12. package/dist/{chunk-HTJQYHZP.js → chunk-3ELCWU56.js} +2 -2
  13. package/dist/{chunk-J2ZX2XUV.js → chunk-554KLAAN.js} +5 -5
  14. package/dist/{chunk-NR5LT5RY.js → chunk-5PFOMHTB.js} +7 -7
  15. package/dist/{chunk-B3HJYUOF.js → chunk-5WZXVULX.js} +2 -2
  16. package/dist/{chunk-ZJ2AK4V7.js → chunk-6HPG2YNX.js} +2 -2
  17. package/dist/{chunk-5M5DVGV7.js → chunk-6HY2X62D.js} +2 -2
  18. package/dist/{chunk-QRB7NAOJ.js → chunk-6NQMXTYC.js} +2 -2
  19. package/dist/{chunk-RIX4V2TB.js → chunk-6XE5TMPR.js} +3 -3
  20. package/dist/{chunk-7DSTRQIJ.js → chunk-A4FXFAKF.js} +2 -2
  21. package/dist/{chunk-454JXE57.js → chunk-A5BDDEXK.js} +10 -170
  22. package/dist/chunk-A5BDDEXK.js.map +1 -0
  23. package/dist/{chunk-EVVGJDRQ.js → chunk-ANATMTOA.js} +3 -3
  24. package/dist/{chunk-W22IKJE2.js → chunk-BOKIKJJB.js} +2 -2
  25. package/dist/{chunk-VZRODIM3.js → chunk-CJ5KKU6X.js} +4 -4
  26. package/dist/{chunk-CDUQTA3Z.js → chunk-CZTLE22N.js} +7 -7
  27. package/dist/{chunk-RCVJZMFE.js → chunk-DDHM2TLX.js} +4 -4
  28. package/dist/{chunk-PN2XMATY.js → chunk-DRWBEDYO.js} +2 -2
  29. package/dist/{chunk-EYZ6IQ6X.js → chunk-DSBQODMZ.js} +5 -5
  30. package/dist/{chunk-LASZKVMO.js → chunk-EO43ANYJ.js} +3 -3
  31. package/dist/{chunk-6QTNZJBS.js → chunk-EWPOHMN2.js} +3 -3
  32. package/dist/chunk-FH52K7EG.js +50 -0
  33. package/dist/chunk-FH52K7EG.js.map +1 -0
  34. package/dist/{chunk-FHS2HQSH.js → chunk-FXZDAV62.js} +11 -8
  35. package/dist/chunk-FXZDAV62.js.map +1 -0
  36. package/dist/{chunk-2NVOWNI3.js → chunk-GDG5VVYG.js} +4 -4
  37. package/dist/{chunk-6JTIAGHD.js → chunk-GULTLPFB.js} +3 -3
  38. package/dist/chunk-GULTLPFB.js.map +1 -0
  39. package/dist/{chunk-3B5VVCNY.js → chunk-GWKAVKHI.js} +2 -2
  40. package/dist/{chunk-BDVFPG6Y.js → chunk-H2KSZMIX.js} +5 -5
  41. package/dist/{chunk-CIE2BASH.js → chunk-HOONYZY2.js} +2 -2
  42. package/dist/{chunk-HDMEGAQE.js → chunk-HQBM64EE.js} +5 -5
  43. package/dist/{chunk-VFUPHI2Z.js → chunk-IAO54J4R.js} +6 -6
  44. package/dist/{chunk-5O3XF4DV.js → chunk-IFJTPAQQ.js} +4 -4
  45. package/dist/{chunk-OSDB5WW3.js → chunk-IK43HLDQ.js} +11 -11
  46. package/dist/{chunk-3QCRBHCY.js → chunk-ISMV2QVG.js} +2 -2
  47. package/dist/{chunk-HB3RFQSC.js → chunk-IY23KFNZ.js} +3 -3
  48. package/dist/{chunk-6CRIV7DE.js → chunk-JBBSYJHP.js} +2 -2
  49. package/dist/{chunk-IU6SNYX6.js → chunk-JFCV5QIK.js} +5 -5
  50. package/dist/{chunk-MEFJPTZ4.js → chunk-JRBNCUNT.js} +3 -3
  51. package/dist/{chunk-4VNQOLML.js → chunk-JVBO4SZL.js} +2 -2
  52. package/dist/{chunk-EQO2UVP4.js → chunk-KS6SAVCZ.js} +6 -6
  53. package/dist/{chunk-4CTHCN4J.js → chunk-LVGTA624.js} +4 -4
  54. package/dist/{chunk-K5IMOGHB.js → chunk-M75ZZHSR.js} +2 -2
  55. package/dist/{chunk-NJ4EOKMB.js → chunk-MT62YSPZ.js} +4 -4
  56. package/dist/{chunk-JKJOGPZN.js → chunk-N6WF5PKC.js} +2 -2
  57. package/dist/{chunk-4JBYV75E.js → chunk-NCCBLYEB.js} +5 -5
  58. package/dist/{chunk-SLFHQTTW.js → chunk-OCVM6KDH.js} +5 -5
  59. package/dist/{chunk-GKEWXIV5.js → chunk-ONTBCHCP.js} +2 -2
  60. package/dist/{chunk-X7QBD67R.js → chunk-PK6JIDQ4.js} +124 -104
  61. package/dist/{chunk-X7QBD67R.js.map → chunk-PK6JIDQ4.js.map} +1 -1
  62. package/dist/{chunk-EVX47VBM.js → chunk-QDPZWTN2.js} +2 -2
  63. package/dist/{chunk-IL6POWCW.js → chunk-R3BLCFD2.js} +6 -6
  64. package/dist/chunk-RA5VTXXG.js +173 -0
  65. package/dist/chunk-RA5VTXXG.js.map +1 -0
  66. package/dist/{chunk-QLWMEXCT.js → chunk-RDXW3OBQ.js} +2 -2
  67. package/dist/{chunk-3LQ2YKO4.js → chunk-RFI7GGFO.js} +2 -2
  68. package/dist/{chunk-FUG4SFN3.js → chunk-RJ6K6K5M.js} +2 -2
  69. package/dist/{chunk-T2FFWNPK.js → chunk-RNG4VRP4.js} +3 -3
  70. package/dist/{chunk-JZUV47FZ.js → chunk-RTEK4C4I.js} +2 -2
  71. package/dist/{chunk-KSKBRKGJ.js → chunk-S3BFKGET.js} +84 -6
  72. package/dist/chunk-S3BFKGET.js.map +1 -0
  73. package/dist/{chunk-5YOLBEQ6.js → chunk-S6Q37VGE.js} +2 -2
  74. package/dist/{chunk-E5ZQT5KX.js → chunk-SMIRGMS7.js} +2 -2
  75. package/dist/{chunk-6T2SCQRU.js → chunk-SV6EAJEP.js} +4 -4
  76. package/dist/chunk-T36RFODW.js +180 -0
  77. package/dist/chunk-T36RFODW.js.map +1 -0
  78. package/dist/{chunk-ERJ7FU55.js → chunk-T3GY65MA.js} +3 -3
  79. package/dist/{chunk-LXEXBTKL.js → chunk-TAGR72IR.js} +4 -4
  80. package/dist/{chunk-JIF24JPM.js → chunk-THVIPWRF.js} +9 -9
  81. package/dist/{chunk-ZUODRVHY.js → chunk-TIGPQDYP.js} +2 -2
  82. package/dist/{chunk-NWSGI5C7.js → chunk-U6JMEH2P.js} +3 -3
  83. package/dist/{chunk-ZICD77GM.js → chunk-UC2ETWF3.js} +2 -2
  84. package/dist/{chunk-VLFCJYTL.js → chunk-UDSR4X4L.js} +9 -9
  85. package/dist/{chunk-SNZ6URZZ.js → chunk-UHNGNKLV.js} +7 -7
  86. package/dist/{chunk-R4ROFEYC.js → chunk-VAIS3SOM.js} +2 -2
  87. package/dist/{chunk-VN3DBQAU.js → chunk-VCBHAE4R.js} +2 -2
  88. package/dist/{chunk-JNAI2HN2.js → chunk-VCTXU4AT.js} +1 -1
  89. package/dist/chunk-VCTXU4AT.js.map +1 -0
  90. package/dist/{chunk-M4CV6BRT.js → chunk-VEALDPHW.js} +2 -2
  91. package/dist/{chunk-AUSTCW2X.js → chunk-VKCADNMR.js} +8 -8
  92. package/dist/{chunk-XWZVFISC.js → chunk-VRBTNCM4.js} +6 -6
  93. package/dist/{chunk-BIOUI4HL.js → chunk-W2OG6JOL.js} +1 -1
  94. package/dist/{chunk-BIOUI4HL.js.map → chunk-W2OG6JOL.js.map} +1 -1
  95. package/dist/{chunk-XDYREZWE.js → chunk-W4TCUGQR.js} +8 -8
  96. package/dist/{chunk-FM3G3NOY.js → chunk-WG4QBZDN.js} +83 -6
  97. package/dist/chunk-WG4QBZDN.js.map +1 -0
  98. package/dist/{chunk-HDQIIUPH.js → chunk-WHXXI3W5.js} +3 -3
  99. package/dist/{chunk-F64IRYG3.js → chunk-WKGF2TJR.js} +2 -2
  100. package/dist/{chunk-CAF6WOK7.js → chunk-WNGGJWF7.js} +2 -2
  101. package/dist/{chunk-EXK7QRWF.js → chunk-WOM2HTML.js} +5 -5
  102. package/dist/{chunk-Q5VNKNE5.js → chunk-WQIYTNJV.js} +3 -3
  103. package/dist/{chunk-GTGPO5KW.js → chunk-WZSHL6DQ.js} +5 -5
  104. package/dist/{chunk-CRI4OUV4.js → chunk-XDIAFPUM.js} +2 -2
  105. package/dist/{chunk-RYCTDFUX.js → chunk-XJMBYYQK.js} +2 -2
  106. package/dist/{chunk-DLG74CNB.js → chunk-XTHCN77N.js} +4 -4
  107. package/dist/chunk-XUW3PXHU.js +248 -0
  108. package/dist/chunk-XUW3PXHU.js.map +1 -0
  109. package/dist/{chunk-I6GALP6E.js → chunk-YCH5GBN6.js} +6 -6
  110. package/dist/{chunk-RZ5SVOYR.js → chunk-YTGDPCPW.js} +2 -2
  111. package/dist/{chunk-UNFPPVNI.js → chunk-YZQOGE2L.js} +2 -2
  112. package/dist/{chunk-MV43JSJF.js → chunk-Z4PD65VQ.js} +4 -4
  113. package/dist/{chunk-YFXZEAYK.js → chunk-ZXEZCY6F.js} +6 -6
  114. package/dist/classified/index.js +5 -5
  115. package/dist/{classified-marker-CZKA6ITE.js → classified-marker-QWMASIT7.js} +3 -3
  116. package/dist/collection-facade-KMBWNCYP.js +44 -0
  117. package/dist/{computed-ZIQTYTDI.js → computed-DSMPXG2Y.js} +3 -3
  118. package/dist/consent/index.js +9 -9
  119. package/dist/{public-envelope-B4KNWVUA.js → cover-QJRXINN5.js} +25 -5
  120. package/dist/{dead-filter-ESOBZZP5.js → dead-filter-66VGI6JV.js} +2 -2
  121. package/dist/delegation-SU6CV3W7.js +25 -0
  122. package/dist/derivations/index.js +12 -12
  123. package/dist/derive-6RWU4EOA.js +21 -0
  124. package/dist/{enclave-AP3I5W7O.js → enclave-TKPN2G2U.js} +9 -9
  125. package/dist/executor-KGNLJD6M.js +9 -0
  126. package/dist/executor-UX4FASYZ.js +26 -0
  127. package/dist/executor-XGIS6CR7.js +9 -0
  128. package/dist/export-accessible-LKW3QV22.js +23 -0
  129. package/dist/extract-partition-UP2ARO75.js +38 -0
  130. package/dist/{fanout-sidecar-A765THMX.js → fanout-sidecar-B5LVUMQX.js} +9 -9
  131. package/dist/find-YS6XWB46.js +11 -0
  132. package/dist/forget/index.js +9 -9
  133. package/dist/guards/index.js +3 -3
  134. package/dist/history/index.js +12 -12
  135. package/dist/i18n/index.js +14 -14
  136. package/dist/index.d.ts +6 -3
  137. package/dist/index.js +110 -89
  138. package/dist/index.js.map +1 -1
  139. package/dist/indexing/index.js +2 -2
  140. package/dist/issue-3ACYX7LO.js +19 -0
  141. package/dist/kernel/errors.d.ts +10 -5
  142. package/dist/kernel/noydb.d.ts +21 -11
  143. package/dist/kernel/types.d.ts +12 -6
  144. package/dist/kernel/vault.d.ts +10 -6
  145. package/dist/{ledger-GFBKVPV4.js → ledger-PTK7XZYT.js} +11 -11
  146. package/dist/liberate-MQQXBUCY.js +24 -0
  147. package/dist/{link-set-Z7Q2ASFX.js → link-set-SLJHDNRB.js} +11 -11
  148. package/dist/materialized-views/index.js +19 -18
  149. package/dist/noydb-ANIW5FLE.js +69 -0
  150. package/dist/on/index.js +9 -9
  151. package/dist/overlay-views/index.js +4 -4
  152. package/dist/periods/index.js +12 -12
  153. package/dist/pod/index.js +13 -11
  154. package/dist/{policy-Z3RUAIY2.js → policy-YDLCOX4P.js} +5 -5
  155. package/dist/portability/index.js +8 -8
  156. package/dist/{post-register-JTH76BLY.js → post-register-2YHSADFI.js} +6 -6
  157. package/dist/query/index.js +10 -8
  158. package/dist/register-PAM3ASRZ.js +23 -0
  159. package/dist/registry-4S2U2TR4.js +19 -0
  160. package/dist/registry-NPOWJHC4.js +9 -0
  161. package/dist/registry-VZ3CCI2R.js +18 -0
  162. package/dist/request-withdrawal-DI3H5WUI.js +31 -0
  163. package/dist/{reveal-DIBHLUZX.js → reveal-HWO4YMTJ.js} +6 -6
  164. package/dist/revoke-R5CZSVUT.js +24 -0
  165. package/dist/satellites/index.js +1 -1
  166. package/dist/sealed-record/index.js +12 -12
  167. package/dist/{seed-Q6M2IZFL.js → seed-3ZMF5EQA.js} +11 -11
  168. package/dist/session/index.js +9 -9
  169. package/dist/shadow/index.js +2 -2
  170. package/dist/signer-MBVHW4WE.js +25 -0
  171. package/dist/snapshots/index.js +10 -10
  172. package/dist/{stale-OSQ7J3AA.js → stale-VZL4OGUB.js} +10 -10
  173. package/dist/storage-3MEJUENZ.js +23 -0
  174. package/dist/{store-coordination-provider-64OEZFGS.js → store-coordination-provider-FKX3F6TQ.js} +3 -3
  175. package/dist/sync/index.js +9 -9
  176. package/dist/team/index.js +15 -15
  177. package/dist/tiers/index.js +10 -10
  178. package/dist/to/index.js +1 -1
  179. package/dist/tx/index.js +3 -3
  180. package/dist/util/index.js +1 -1
  181. package/dist/{verify-ZASTRNPR.js → verify-26Y5GNMK.js} +5 -5
  182. package/dist/via/i18n/policy.d.ts +1 -1
  183. package/dist/{walk-SVNDIZ62.js → walk-IPLXE36W.js} +11 -11
  184. package/dist/with/index.js +11 -11
  185. package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +15 -0
  186. package/dist/with-formula/materialized-views/index.d.ts +1 -1
  187. package/dist/with-formula/materialized-views/registry.d.ts +29 -0
  188. package/dist/with-formula/materialized-views/types.d.ts +81 -0
  189. package/dist/with-formula/materialized-views/with-materialized-view.d.ts +9 -5
  190. package/dist/with-party/directory/cover/custom.d.ts +34 -0
  191. package/dist/with-party/directory/cover/index.d.ts +19 -0
  192. package/dist/with-party/directory/cover/schema.d.ts +39 -0
  193. package/dist/with-party/directory/cover/storage.d.ts +71 -0
  194. package/dist/with-party/directory/cover/types.d.ts +149 -0
  195. package/dist/with-party/team/noydb-facade.d.ts +1 -1
  196. package/dist/with-pod/bundle.d.ts +9 -7
  197. package/dist/with-pod/format.d.ts +8 -4
  198. package/dist/with-pod/index.d.ts +2 -1
  199. package/dist/withdraw-accessible-TZDATQVR.js +28 -0
  200. package/package.json +3 -3
  201. package/dist/api-ZGS6LCOF.js +0 -20
  202. package/dist/chunk-454JXE57.js.map +0 -1
  203. package/dist/chunk-4NXKCLLQ.js +0 -97
  204. package/dist/chunk-4NXKCLLQ.js.map +0 -1
  205. package/dist/chunk-6JTIAGHD.js.map +0 -1
  206. package/dist/chunk-FHS2HQSH.js.map +0 -1
  207. package/dist/chunk-FM3G3NOY.js.map +0 -1
  208. package/dist/chunk-JNAI2HN2.js.map +0 -1
  209. package/dist/chunk-KSKBRKGJ.js.map +0 -1
  210. package/dist/chunk-WXSYDNBT.js +0 -39
  211. package/dist/chunk-WXSYDNBT.js.map +0 -1
  212. package/dist/chunk-X3YYQWOQ.js +0 -155
  213. package/dist/chunk-X3YYQWOQ.js.map +0 -1
  214. package/dist/collection-facade-TLWIPI76.js +0 -44
  215. package/dist/delegation-W7ZV2322.js +0 -25
  216. package/dist/derive-H2BJTLUI.js +0 -21
  217. package/dist/executor-KGWTNEQD.js +0 -9
  218. package/dist/executor-OVEXR6RT.js +0 -9
  219. package/dist/executor-UNEH5ZYH.js +0 -25
  220. package/dist/export-accessible-PCMXSUZS.js +0 -23
  221. package/dist/extract-partition-SWHFSYJO.js +0 -38
  222. package/dist/find-N6345CNT.js +0 -11
  223. package/dist/issue-5OKB6I2R.js +0 -19
  224. package/dist/liberate-3VDOT4KO.js +0 -24
  225. package/dist/noydb-ZCJOYBDI.js +0 -68
  226. package/dist/register-VAHONCID.js +0 -23
  227. package/dist/registry-7MLVD3VO.js +0 -19
  228. package/dist/registry-EPKPD5SM.js +0 -18
  229. package/dist/registry-P5T7PS2U.js +0 -9
  230. package/dist/request-withdrawal-TI3A5WPS.js +0 -31
  231. package/dist/revoke-FDRD6GRW.js +0 -24
  232. package/dist/signer-MUWEIUI6.js +0 -25
  233. package/dist/storage-MVFCGEQE.js +0 -23
  234. package/dist/with-party/directory/public-envelope/index.d.ts +0 -12
  235. package/dist/with-party/directory/public-envelope/schema.d.ts +0 -24
  236. package/dist/with-party/directory/public-envelope/storage.d.ts +0 -59
  237. package/dist/with-party/directory/public-envelope/types.d.ts +0 -80
  238. package/dist/withdraw-accessible-WZIEVWSR.js +0 -28
  239. /package/dist/{api-ZGS6LCOF.js.map → api-3A3S4SHH.js.map} +0 -0
  240. /package/dist/{backup-BJ57IKAO.js.map → backup-YPUEKIJC.js.map} +0 -0
  241. /package/dist/{chunk-ZAJAVEXY.js.map → chunk-2PCAVW2I.js.map} +0 -0
  242. /package/dist/{chunk-HTJQYHZP.js.map → chunk-3ELCWU56.js.map} +0 -0
  243. /package/dist/{chunk-J2ZX2XUV.js.map → chunk-554KLAAN.js.map} +0 -0
  244. /package/dist/{chunk-NR5LT5RY.js.map → chunk-5PFOMHTB.js.map} +0 -0
  245. /package/dist/{chunk-B3HJYUOF.js.map → chunk-5WZXVULX.js.map} +0 -0
  246. /package/dist/{chunk-ZJ2AK4V7.js.map → chunk-6HPG2YNX.js.map} +0 -0
  247. /package/dist/{chunk-5M5DVGV7.js.map → chunk-6HY2X62D.js.map} +0 -0
  248. /package/dist/{chunk-QRB7NAOJ.js.map → chunk-6NQMXTYC.js.map} +0 -0
  249. /package/dist/{chunk-RIX4V2TB.js.map → chunk-6XE5TMPR.js.map} +0 -0
  250. /package/dist/{chunk-7DSTRQIJ.js.map → chunk-A4FXFAKF.js.map} +0 -0
  251. /package/dist/{chunk-EVVGJDRQ.js.map → chunk-ANATMTOA.js.map} +0 -0
  252. /package/dist/{chunk-W22IKJE2.js.map → chunk-BOKIKJJB.js.map} +0 -0
  253. /package/dist/{chunk-VZRODIM3.js.map → chunk-CJ5KKU6X.js.map} +0 -0
  254. /package/dist/{chunk-CDUQTA3Z.js.map → chunk-CZTLE22N.js.map} +0 -0
  255. /package/dist/{chunk-RCVJZMFE.js.map → chunk-DDHM2TLX.js.map} +0 -0
  256. /package/dist/{chunk-PN2XMATY.js.map → chunk-DRWBEDYO.js.map} +0 -0
  257. /package/dist/{chunk-EYZ6IQ6X.js.map → chunk-DSBQODMZ.js.map} +0 -0
  258. /package/dist/{chunk-LASZKVMO.js.map → chunk-EO43ANYJ.js.map} +0 -0
  259. /package/dist/{chunk-6QTNZJBS.js.map → chunk-EWPOHMN2.js.map} +0 -0
  260. /package/dist/{chunk-2NVOWNI3.js.map → chunk-GDG5VVYG.js.map} +0 -0
  261. /package/dist/{chunk-3B5VVCNY.js.map → chunk-GWKAVKHI.js.map} +0 -0
  262. /package/dist/{chunk-BDVFPG6Y.js.map → chunk-H2KSZMIX.js.map} +0 -0
  263. /package/dist/{chunk-CIE2BASH.js.map → chunk-HOONYZY2.js.map} +0 -0
  264. /package/dist/{chunk-HDMEGAQE.js.map → chunk-HQBM64EE.js.map} +0 -0
  265. /package/dist/{chunk-VFUPHI2Z.js.map → chunk-IAO54J4R.js.map} +0 -0
  266. /package/dist/{chunk-5O3XF4DV.js.map → chunk-IFJTPAQQ.js.map} +0 -0
  267. /package/dist/{chunk-OSDB5WW3.js.map → chunk-IK43HLDQ.js.map} +0 -0
  268. /package/dist/{chunk-3QCRBHCY.js.map → chunk-ISMV2QVG.js.map} +0 -0
  269. /package/dist/{chunk-HB3RFQSC.js.map → chunk-IY23KFNZ.js.map} +0 -0
  270. /package/dist/{chunk-6CRIV7DE.js.map → chunk-JBBSYJHP.js.map} +0 -0
  271. /package/dist/{chunk-IU6SNYX6.js.map → chunk-JFCV5QIK.js.map} +0 -0
  272. /package/dist/{chunk-MEFJPTZ4.js.map → chunk-JRBNCUNT.js.map} +0 -0
  273. /package/dist/{chunk-4VNQOLML.js.map → chunk-JVBO4SZL.js.map} +0 -0
  274. /package/dist/{chunk-EQO2UVP4.js.map → chunk-KS6SAVCZ.js.map} +0 -0
  275. /package/dist/{chunk-4CTHCN4J.js.map → chunk-LVGTA624.js.map} +0 -0
  276. /package/dist/{chunk-K5IMOGHB.js.map → chunk-M75ZZHSR.js.map} +0 -0
  277. /package/dist/{chunk-NJ4EOKMB.js.map → chunk-MT62YSPZ.js.map} +0 -0
  278. /package/dist/{chunk-JKJOGPZN.js.map → chunk-N6WF5PKC.js.map} +0 -0
  279. /package/dist/{chunk-4JBYV75E.js.map → chunk-NCCBLYEB.js.map} +0 -0
  280. /package/dist/{chunk-SLFHQTTW.js.map → chunk-OCVM6KDH.js.map} +0 -0
  281. /package/dist/{chunk-GKEWXIV5.js.map → chunk-ONTBCHCP.js.map} +0 -0
  282. /package/dist/{chunk-EVX47VBM.js.map → chunk-QDPZWTN2.js.map} +0 -0
  283. /package/dist/{chunk-IL6POWCW.js.map → chunk-R3BLCFD2.js.map} +0 -0
  284. /package/dist/{chunk-QLWMEXCT.js.map → chunk-RDXW3OBQ.js.map} +0 -0
  285. /package/dist/{chunk-3LQ2YKO4.js.map → chunk-RFI7GGFO.js.map} +0 -0
  286. /package/dist/{chunk-FUG4SFN3.js.map → chunk-RJ6K6K5M.js.map} +0 -0
  287. /package/dist/{chunk-T2FFWNPK.js.map → chunk-RNG4VRP4.js.map} +0 -0
  288. /package/dist/{chunk-JZUV47FZ.js.map → chunk-RTEK4C4I.js.map} +0 -0
  289. /package/dist/{chunk-5YOLBEQ6.js.map → chunk-S6Q37VGE.js.map} +0 -0
  290. /package/dist/{chunk-E5ZQT5KX.js.map → chunk-SMIRGMS7.js.map} +0 -0
  291. /package/dist/{chunk-6T2SCQRU.js.map → chunk-SV6EAJEP.js.map} +0 -0
  292. /package/dist/{chunk-ERJ7FU55.js.map → chunk-T3GY65MA.js.map} +0 -0
  293. /package/dist/{chunk-LXEXBTKL.js.map → chunk-TAGR72IR.js.map} +0 -0
  294. /package/dist/{chunk-JIF24JPM.js.map → chunk-THVIPWRF.js.map} +0 -0
  295. /package/dist/{chunk-ZUODRVHY.js.map → chunk-TIGPQDYP.js.map} +0 -0
  296. /package/dist/{chunk-NWSGI5C7.js.map → chunk-U6JMEH2P.js.map} +0 -0
  297. /package/dist/{chunk-ZICD77GM.js.map → chunk-UC2ETWF3.js.map} +0 -0
  298. /package/dist/{chunk-VLFCJYTL.js.map → chunk-UDSR4X4L.js.map} +0 -0
  299. /package/dist/{chunk-SNZ6URZZ.js.map → chunk-UHNGNKLV.js.map} +0 -0
  300. /package/dist/{chunk-R4ROFEYC.js.map → chunk-VAIS3SOM.js.map} +0 -0
  301. /package/dist/{chunk-VN3DBQAU.js.map → chunk-VCBHAE4R.js.map} +0 -0
  302. /package/dist/{chunk-M4CV6BRT.js.map → chunk-VEALDPHW.js.map} +0 -0
  303. /package/dist/{chunk-AUSTCW2X.js.map → chunk-VKCADNMR.js.map} +0 -0
  304. /package/dist/{chunk-XWZVFISC.js.map → chunk-VRBTNCM4.js.map} +0 -0
  305. /package/dist/{chunk-XDYREZWE.js.map → chunk-W4TCUGQR.js.map} +0 -0
  306. /package/dist/{chunk-HDQIIUPH.js.map → chunk-WHXXI3W5.js.map} +0 -0
  307. /package/dist/{chunk-F64IRYG3.js.map → chunk-WKGF2TJR.js.map} +0 -0
  308. /package/dist/{chunk-CAF6WOK7.js.map → chunk-WNGGJWF7.js.map} +0 -0
  309. /package/dist/{chunk-EXK7QRWF.js.map → chunk-WOM2HTML.js.map} +0 -0
  310. /package/dist/{chunk-Q5VNKNE5.js.map → chunk-WQIYTNJV.js.map} +0 -0
  311. /package/dist/{chunk-GTGPO5KW.js.map → chunk-WZSHL6DQ.js.map} +0 -0
  312. /package/dist/{chunk-CRI4OUV4.js.map → chunk-XDIAFPUM.js.map} +0 -0
  313. /package/dist/{chunk-RYCTDFUX.js.map → chunk-XJMBYYQK.js.map} +0 -0
  314. /package/dist/{chunk-DLG74CNB.js.map → chunk-XTHCN77N.js.map} +0 -0
  315. /package/dist/{chunk-I6GALP6E.js.map → chunk-YCH5GBN6.js.map} +0 -0
  316. /package/dist/{chunk-RZ5SVOYR.js.map → chunk-YTGDPCPW.js.map} +0 -0
  317. /package/dist/{chunk-UNFPPVNI.js.map → chunk-YZQOGE2L.js.map} +0 -0
  318. /package/dist/{chunk-MV43JSJF.js.map → chunk-Z4PD65VQ.js.map} +0 -0
  319. /package/dist/{chunk-YFXZEAYK.js.map → chunk-ZXEZCY6F.js.map} +0 -0
  320. /package/dist/{classified-marker-CZKA6ITE.js.map → classified-marker-QWMASIT7.js.map} +0 -0
  321. /package/dist/{collection-facade-TLWIPI76.js.map → collection-facade-KMBWNCYP.js.map} +0 -0
  322. /package/dist/{computed-ZIQTYTDI.js.map → computed-DSMPXG2Y.js.map} +0 -0
  323. /package/dist/{delegation-W7ZV2322.js.map → cover-QJRXINN5.js.map} +0 -0
  324. /package/dist/{dead-filter-ESOBZZP5.js.map → dead-filter-66VGI6JV.js.map} +0 -0
  325. /package/dist/{derive-H2BJTLUI.js.map → delegation-SU6CV3W7.js.map} +0 -0
  326. /package/dist/{enclave-AP3I5W7O.js.map → derive-6RWU4EOA.js.map} +0 -0
  327. /package/dist/{executor-KGWTNEQD.js.map → enclave-TKPN2G2U.js.map} +0 -0
  328. /package/dist/{executor-OVEXR6RT.js.map → executor-KGNLJD6M.js.map} +0 -0
  329. /package/dist/{executor-UNEH5ZYH.js.map → executor-UX4FASYZ.js.map} +0 -0
  330. /package/dist/{export-accessible-PCMXSUZS.js.map → executor-XGIS6CR7.js.map} +0 -0
  331. /package/dist/{extract-partition-SWHFSYJO.js.map → export-accessible-LKW3QV22.js.map} +0 -0
  332. /package/dist/{find-N6345CNT.js.map → extract-partition-UP2ARO75.js.map} +0 -0
  333. /package/dist/{fanout-sidecar-A765THMX.js.map → fanout-sidecar-B5LVUMQX.js.map} +0 -0
  334. /package/dist/{issue-5OKB6I2R.js.map → find-YS6XWB46.js.map} +0 -0
  335. /package/dist/{ledger-GFBKVPV4.js.map → issue-3ACYX7LO.js.map} +0 -0
  336. /package/dist/{liberate-3VDOT4KO.js.map → ledger-PTK7XZYT.js.map} +0 -0
  337. /package/dist/{link-set-Z7Q2ASFX.js.map → liberate-MQQXBUCY.js.map} +0 -0
  338. /package/dist/{noydb-ZCJOYBDI.js.map → link-set-SLJHDNRB.js.map} +0 -0
  339. /package/dist/{policy-Z3RUAIY2.js.map → noydb-ANIW5FLE.js.map} +0 -0
  340. /package/dist/{public-envelope-B4KNWVUA.js.map → policy-YDLCOX4P.js.map} +0 -0
  341. /package/dist/{post-register-JTH76BLY.js.map → post-register-2YHSADFI.js.map} +0 -0
  342. /package/dist/{register-VAHONCID.js.map → register-PAM3ASRZ.js.map} +0 -0
  343. /package/dist/{registry-7MLVD3VO.js.map → registry-4S2U2TR4.js.map} +0 -0
  344. /package/dist/{registry-EPKPD5SM.js.map → registry-NPOWJHC4.js.map} +0 -0
  345. /package/dist/{registry-P5T7PS2U.js.map → registry-VZ3CCI2R.js.map} +0 -0
  346. /package/dist/{request-withdrawal-TI3A5WPS.js.map → request-withdrawal-DI3H5WUI.js.map} +0 -0
  347. /package/dist/{reveal-DIBHLUZX.js.map → reveal-HWO4YMTJ.js.map} +0 -0
  348. /package/dist/{revoke-FDRD6GRW.js.map → revoke-R5CZSVUT.js.map} +0 -0
  349. /package/dist/{seed-Q6M2IZFL.js.map → seed-3ZMF5EQA.js.map} +0 -0
  350. /package/dist/{signer-MUWEIUI6.js.map → signer-MBVHW4WE.js.map} +0 -0
  351. /package/dist/{stale-OSQ7J3AA.js.map → stale-VZL4OGUB.js.map} +0 -0
  352. /package/dist/{storage-MVFCGEQE.js.map → storage-3MEJUENZ.js.map} +0 -0
  353. /package/dist/{store-coordination-provider-64OEZFGS.js.map → store-coordination-provider-FKX3F6TQ.js.map} +0 -0
  354. /package/dist/{verify-ZASTRNPR.js.map → verify-26Y5GNMK.js.map} +0 -0
  355. /package/dist/{walk-SVNDIZ62.js.map → walk-IPLXE36W.js.map} +0 -0
  356. /package/dist/{withdraw-accessible-WZIEVWSR.js.map → withdraw-accessible-TZDATQVR.js.map} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
  listCredentials,
6
6
  putCredential,
7
7
  withTeam
8
- } from "../chunk-I6GALP6E.js";
8
+ } from "../chunk-YCH5GBN6.js";
9
9
  import {
10
10
  NO_TEAM,
11
11
  deriveMagicLinkContentKey,
@@ -23,7 +23,7 @@ import {
23
23
  unwrapMagicLinkGrant,
24
24
  updateAuthenticator,
25
25
  writeMagicLinkGrant
26
- } from "../chunk-AUSTCW2X.js";
26
+ } from "../chunk-VKCADNMR.js";
27
27
  import {
28
28
  burnPaperRecoveryEntry,
29
29
  loadPaperRecoveryEntries,
@@ -32,12 +32,12 @@ import {
32
32
  savePaperRecoveryEntries,
33
33
  unwrapDeksFromBlob,
34
34
  unwrapDeksFromPaperEntry
35
- } from "../chunk-EVVGJDRQ.js";
35
+ } from "../chunk-ANATMTOA.js";
36
36
  import {
37
37
  PresenceHandle,
38
38
  SyncEngine,
39
39
  SyncTransaction
40
- } from "../chunk-HDMEGAQE.js";
40
+ } from "../chunk-HQBM64EE.js";
41
41
  import "../chunk-VQNJ7UZL.js";
42
42
  import {
43
43
  SYNC_CREDENTIALS_COLLECTION,
@@ -56,20 +56,20 @@ import {
56
56
  persistKeyring,
57
57
  revoke,
58
58
  updateKeyringIdentity
59
- } from "../chunk-J2ZX2XUV.js";
60
- import "../chunk-4JBYV75E.js";
61
- import "../chunk-ZICD77GM.js";
62
- import "../chunk-XDYREZWE.js";
63
- import "../chunk-7DSTRQIJ.js";
64
- import "../chunk-HB3RFQSC.js";
65
- import "../chunk-JKJOGPZN.js";
66
- import "../chunk-5M5DVGV7.js";
59
+ } from "../chunk-554KLAAN.js";
60
+ import "../chunk-NCCBLYEB.js";
61
+ import "../chunk-UC2ETWF3.js";
62
+ import "../chunk-W4TCUGQR.js";
63
+ import "../chunk-A4FXFAKF.js";
64
+ import "../chunk-IY23KFNZ.js";
65
+ import "../chunk-N6WF5PKC.js";
66
+ import "../chunk-6HY2X62D.js";
67
67
  import "../chunk-LP7BEXCT.js";
68
- import "../chunk-CIE2BASH.js";
69
- import "../chunk-JNAI2HN2.js";
68
+ import "../chunk-HOONYZY2.js";
69
+ import "../chunk-VCTXU4AT.js";
70
70
  import {
71
71
  TeamNotEnabledError
72
- } from "../chunk-BIOUI4HL.js";
72
+ } from "../chunk-W2OG6JOL.js";
73
73
  import "../chunk-PZ5AY32C.js";
74
74
  export {
75
75
  NO_TEAM,
@@ -11,19 +11,19 @@ import {
11
11
  putAtTier,
12
12
  syncDerivedOutputs,
13
13
  withTiers
14
- } from "../chunk-CDUQTA3Z.js";
15
- import "../chunk-ZICD77GM.js";
16
- import "../chunk-XDYREZWE.js";
17
- import "../chunk-7DSTRQIJ.js";
18
- import "../chunk-HB3RFQSC.js";
19
- import "../chunk-JKJOGPZN.js";
20
- import "../chunk-5M5DVGV7.js";
14
+ } from "../chunk-CZTLE22N.js";
15
+ import "../chunk-UC2ETWF3.js";
16
+ import "../chunk-W4TCUGQR.js";
17
+ import "../chunk-A4FXFAKF.js";
18
+ import "../chunk-IY23KFNZ.js";
19
+ import "../chunk-N6WF5PKC.js";
20
+ import "../chunk-6HY2X62D.js";
21
21
  import "../chunk-LP7BEXCT.js";
22
- import "../chunk-CIE2BASH.js";
23
- import "../chunk-JNAI2HN2.js";
22
+ import "../chunk-HOONYZY2.js";
23
+ import "../chunk-VCTXU4AT.js";
24
24
  import {
25
25
  TiersNotEnabledError
26
- } from "../chunk-BIOUI4HL.js";
26
+ } from "../chunk-W2OG6JOL.js";
27
27
  import "../chunk-PZ5AY32C.js";
28
28
  export {
29
29
  NO_TIERS,
package/dist/to/index.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  NetworkError,
5
5
  PodVersionConflictError,
6
6
  StoreCapabilityError
7
- } from "../chunk-BIOUI4HL.js";
7
+ } from "../chunk-W2OG6JOL.js";
8
8
  import "../chunk-PZ5AY32C.js";
9
9
  export {
10
10
  BundleVersionConflictError,
package/dist/tx/index.js CHANGED
@@ -3,9 +3,9 @@ import {
3
3
  TxContext,
4
4
  TxVault,
5
5
  runTransaction
6
- } from "../chunk-MEFJPTZ4.js";
6
+ } from "../chunk-JRBNCUNT.js";
7
7
  import "../chunk-ZJADGNYF.js";
8
- import "../chunk-BIOUI4HL.js";
8
+ import "../chunk-W2OG6JOL.js";
9
9
  import "../chunk-PZ5AY32C.js";
10
10
 
11
11
  // src/with-commit/tx/dry-run.ts
@@ -44,7 +44,7 @@ async function runDryRun(db, fn) {
44
44
  const gctx = { existing: before, vault: facade, userId: v.userId, role: v.role };
45
45
  try {
46
46
  await registry.runChecks(op.collectionName, after, gctx);
47
- const { GuardExecutor } = await import("../executor-KGWTNEQD.js");
47
+ const { GuardExecutor } = await import("../executor-KGNLJD6M.js");
48
48
  for (const g of guards) {
49
49
  await GuardExecutor.checkFrozenFields(g, op.id, before, after);
50
50
  }
@@ -3,7 +3,7 @@ import {
3
3
  } from "../chunk-PY4KJPYU.js";
4
4
  import {
5
5
  FilenameSanitizationError
6
- } from "../chunk-BIOUI4HL.js";
6
+ } from "../chunk-W2OG6JOL.js";
7
7
  import "../chunk-PZ5AY32C.js";
8
8
 
9
9
  // src/kernel/util/sanitize-filename.ts
@@ -2,10 +2,10 @@ import {
2
2
  blindedEqual,
3
3
  evaluateKofN,
4
4
  openVdigPayload
5
- } from "./chunk-HB3RFQSC.js";
5
+ } from "./chunk-IY23KFNZ.js";
6
6
  import {
7
7
  dualReadSealedSlot
8
- } from "./chunk-JKJOGPZN.js";
8
+ } from "./chunk-N6WF5PKC.js";
9
9
  import {
10
10
  VDIG_ITERATIONS,
11
11
  normalizeForVerify,
@@ -14,11 +14,11 @@ import {
14
14
  import {
15
15
  base64ToBuffer,
16
16
  generateSalt
17
- } from "./chunk-CIE2BASH.js";
17
+ } from "./chunk-HOONYZY2.js";
18
18
  import {
19
19
  ClassifiedConfigError,
20
20
  ClassifiedVerifyError
21
- } from "./chunk-BIOUI4HL.js";
21
+ } from "./chunk-W2OG6JOL.js";
22
22
  import "./chunk-PZ5AY32C.js";
23
23
 
24
24
  // src/kernel/enclave/classify/verify.ts
@@ -137,4 +137,4 @@ export {
137
137
  verifyDigestField,
138
138
  verifyTextField
139
139
  };
140
- //# sourceMappingURL=verify-ZASTRNPR.js.map
140
+ //# sourceMappingURL=verify-26Y5GNMK.js.map
@@ -32,7 +32,7 @@ export type OnMissing = 'substitute' | 'null' | 'throw';
32
32
  * - `join` — a joined record expanded onto a row.
33
33
  * - `mv` — materialized-view input.
34
34
  * - `derivation` — derivation input.
35
- * - `export` — bundle/public-envelope export.
35
+ * - `export` — bundle/cover export.
36
36
  */
37
37
  export type Layer = 'read' | 'guard' | 'join' | 'mv' | 'derivation' | 'export';
38
38
  /** Field-level policy: a single scalar, or a per-layer map. */
@@ -3,19 +3,19 @@ import {
3
3
  } from "./chunk-VYYM3MEN.js";
4
4
  import {
5
5
  derivePersistedSchema
6
- } from "./chunk-W22IKJE2.js";
6
+ } from "./chunk-BOKIKJJB.js";
7
7
  import {
8
8
  loadPersistedSchema
9
- } from "./chunk-VZRODIM3.js";
10
- import "./chunk-XDYREZWE.js";
11
- import "./chunk-7DSTRQIJ.js";
12
- import "./chunk-HB3RFQSC.js";
13
- import "./chunk-JKJOGPZN.js";
14
- import "./chunk-5M5DVGV7.js";
9
+ } from "./chunk-CJ5KKU6X.js";
10
+ import "./chunk-W4TCUGQR.js";
11
+ import "./chunk-A4FXFAKF.js";
12
+ import "./chunk-IY23KFNZ.js";
13
+ import "./chunk-N6WF5PKC.js";
14
+ import "./chunk-6HY2X62D.js";
15
15
  import "./chunk-LP7BEXCT.js";
16
- import "./chunk-CIE2BASH.js";
17
- import "./chunk-JNAI2HN2.js";
18
- import "./chunk-BIOUI4HL.js";
16
+ import "./chunk-HOONYZY2.js";
17
+ import "./chunk-VCTXU4AT.js";
18
+ import "./chunk-W2OG6JOL.js";
19
19
  import "./chunk-PZ5AY32C.js";
20
20
 
21
21
  // src/with-shape/introspection/walk.ts
@@ -238,4 +238,4 @@ function summariseAggregateOp(value) {
238
238
  export {
239
239
  dumpVaultSchema
240
240
  };
241
- //# sourceMappingURL=walk-SVNDIZ62.js.map
241
+ //# sourceMappingURL=walk-IPLXE36W.js.map
@@ -6,18 +6,18 @@ import {
6
6
  assertCanImport,
7
7
  canExport,
8
8
  canImport
9
- } from "../chunk-6QTNZJBS.js";
10
- import "../chunk-J2ZX2XUV.js";
11
- import "../chunk-4JBYV75E.js";
12
- import "../chunk-XDYREZWE.js";
13
- import "../chunk-7DSTRQIJ.js";
14
- import "../chunk-HB3RFQSC.js";
15
- import "../chunk-JKJOGPZN.js";
16
- import "../chunk-5M5DVGV7.js";
9
+ } from "../chunk-EWPOHMN2.js";
10
+ import "../chunk-554KLAAN.js";
11
+ import "../chunk-NCCBLYEB.js";
12
+ import "../chunk-W4TCUGQR.js";
13
+ import "../chunk-A4FXFAKF.js";
14
+ import "../chunk-IY23KFNZ.js";
15
+ import "../chunk-N6WF5PKC.js";
16
+ import "../chunk-6HY2X62D.js";
17
17
  import "../chunk-LP7BEXCT.js";
18
- import "../chunk-CIE2BASH.js";
19
- import "../chunk-JNAI2HN2.js";
20
- import "../chunk-BIOUI4HL.js";
18
+ import "../chunk-HOONYZY2.js";
19
+ import "../chunk-VCTXU4AT.js";
20
+ import "../chunk-W2OG6JOL.js";
21
21
  import "../chunk-PZ5AY32C.js";
22
22
  export {
23
23
  ServiceBus,
@@ -56,3 +56,18 @@ export declare function summarizeQueryPlan(query: Query<any>): string;
56
56
  * `map` semantics change non-equivalently.
57
57
  */
58
58
  export declare function summarizeUnionPlan<T extends Record<string, unknown>>(spec: MaterializedViewStrategy<T>): string;
59
+ /**
60
+ * Canonical string description of a projection MV's plan (#810), used
61
+ * as input to `computeQueryHash`.
62
+ *
63
+ * Leg descriptors ARE sorted (contrast with UNION arm order): every
64
+ * leg attaches under a distinct `as` alias, forward legs are
65
+ * one-to-one attachments and collect legs are independent
66
+ * hash-grouped passes, so declaration order never changes the
67
+ * materialized rows — a pure reorder must NOT force a refresh.
68
+ *
69
+ * The projection `map` is NOT fingerprinted (identical limitation as
70
+ * the UNION arm `map`); consumers must bump the MV's `name` when
71
+ * `map` semantics change non-equivalently.
72
+ */
73
+ export declare function summarizeProjectionPlan<T extends Record<string, unknown>>(spec: MaterializedViewStrategy<T>): string;
@@ -5,7 +5,7 @@ export { analyzeDependencies, summarizeQueryPlan } from './dependency-analyzer.j
5
5
  export { computeQueryHash, canonicalizeQueryPlan } from './query-hash.js';
6
6
  export { markMVStale, resolveStaleMVOnRead, isMVStale, clearMVStale } from './stale.js';
7
7
  export type { MVStaleAccessor } from './stale.js';
8
- export type { MaterializedViewStrategy, MaterializedViewStrategyHandle, MaterializedViewOutput, MaterializedFromMeta, UnionSource, UnionArmJoin, } from './types.js';
8
+ export type { MaterializedViewStrategy, MaterializedViewStrategyHandle, MaterializedViewOutput, MaterializedFromMeta, UnionSource, UnionArmJoin, ProjectionSpec, ProjectionJoinLeg, } from './types.js';
9
9
  export type { RegisteredMV } from './registry.js';
10
10
  export type { MVExecutorAccessor, RefreshResult } from './executor.js';
11
11
  export { MaterializedViewCycleError, MaterializedViewConfigError, MaterializedViewSourceUnknownError, MaterializedViewTooLargeError, } from '../../kernel/errors.js';
@@ -40,6 +40,20 @@ export declare class MaterializedViewRegistry {
40
40
  private readonly _byName;
41
41
  /** Keyed by dependency source-collection → MVs that depend on it. */
42
42
  private readonly _bySource;
43
+ /**
44
+ * Projection MVs (#810) whose forward-leg ref() targets could not be
45
+ * resolved at registration time. A forward leg names only the FK
46
+ * FIELD; its dependency is the field's ref() TARGET, declared on the
47
+ * source collection — but registration runs at vault open, BEFORE
48
+ * user code declares collections (and their refs). Constructing the
49
+ * source collection here to look them up would be worse: a later
50
+ * `vault.collection(source, { refs })` call only registers refs on a
51
+ * cache miss, so an early construction would silently drop them.
52
+ * Instead each entry carries a non-constructive ref-registry probe;
53
+ * `mvsForSource` retries on every dispatch until every forward
54
+ * target has resolved (see `_resolvePendingForwardDeps`).
55
+ */
56
+ private readonly _pendingForwardDeps;
43
57
  /**
44
58
  * Register an MV. Invokes `spec.query()` once at registration time to
45
59
  * read the plan + join context; the resulting `Query<T>` is discarded
@@ -56,6 +70,21 @@ export declare class MaterializedViewRegistry {
56
70
  }): Promise<void>;
57
71
  /** All MVs that depend on `source`, in registration order. */
58
72
  mvsForSource(source: string): ReadonlyArray<RegisteredMV>;
73
+ /**
74
+ * Retry ref() resolution for every pending projection forward leg
75
+ * (#810). A field resolves once its source collection's refs have
76
+ * been declared; the target then folds into the owning MV's
77
+ * dependency set and `_bySource`, so subsequent writes to it
78
+ * dispatch a refresh. Idempotent and cheap — the pending list
79
+ * empties as fields resolve, and `mvsForSource` skips the call
80
+ * entirely once it's empty.
81
+ *
82
+ * Late-resolved targets do NOT retro-feed `edges()` — the cycle
83
+ * pass runs once at vault open, before refs exist. A cycle routed
84
+ * exclusively through a forward leg is therefore not detected at
85
+ * open (collect + source edges, the literal names, are).
86
+ */
87
+ private _resolvePendingForwardDeps;
59
88
  /** Single MV by name, or `undefined`. */
60
89
  byName(name: string): RegisteredMV | undefined;
61
90
  /** Iterate over every registered MV. */
@@ -118,6 +118,68 @@ export interface UnionArmJoin {
118
118
  /** Planner strategy override. `undefined` → auto-select. */
119
119
  readonly strategy?: JoinStrategy;
120
120
  }
121
+ /**
122
+ * Projection-form registration (#810): one output row per record of a
123
+ * primary `source` collection, enriched with forward FK legs and
124
+ * reverse one-to-many "collect" legs BEFORE `map` shapes the MV row.
125
+ * The niwat federated read-model shape — a bill row carrying its
126
+ * client lookup plus the receipt / application / credit-note sets
127
+ * that point back at it.
128
+ */
129
+ export interface ProjectionSpec<TRow extends Record<string, unknown>> {
130
+ /** Primary collection. One output row per primary record (unless {@link map} omits). */
131
+ readonly source: string;
132
+ /** Join legs attached to each primary row BEFORE {@link map} runs. */
133
+ readonly joins: ReadonlyArray<ProjectionJoinLeg>;
134
+ /**
135
+ * Pure projection: primary row + leg attachments → MV row. Called
136
+ * once per primary record at materialization time, AFTER every leg
137
+ * has attached under its `as` alias.
138
+ *
139
+ * Returning `null` or `undefined` **omits** the primary record from
140
+ * the materialized output entirely (same contract as the UNION arm
141
+ * `map`) — filtering lives here; there is no `where` on the
142
+ * projection form.
143
+ */
144
+ readonly map: (row: Record<string, unknown>) => TRow | null | undefined;
145
+ }
146
+ /**
147
+ * One join leg of a projection MV. Discriminated by the presence of
148
+ * `collect` (reverse leg) vs `field` (forward leg); `as` aliases must
149
+ * be unique across legs and non-empty.
150
+ *
151
+ * - **Forward FK leg** — identical shape + machinery as
152
+ * {@link UnionArmJoin} / `Query.join()`: resolves a `ref()`-declared
153
+ * FK on the projection source into an attached right-side record
154
+ * (record | null) under `as`.
155
+ * - **Reverse "collect" leg** — every row of `collect` whose `on`
156
+ * field references the primary record's id, attached as a
157
+ * possibly-empty ARRAY under `as`. `on` must carry a `ref()`
158
+ * declared on the `collect` collection targeting the projection
159
+ * `source` — checked at first materialization (parity with
160
+ * join-time ref errors). `maxRows` here is a PER-PRIMARY-ROW
161
+ * fan-out ceiling (default: the join default); exceeding it throws
162
+ * `JoinTooLargeError`.
163
+ */
164
+ export type ProjectionJoinLeg = {
165
+ /** FK field on the projection source (must have a `ref()` declared). */
166
+ readonly field: string;
167
+ /** Alias under which the resolved right-side record attaches. */
168
+ readonly as: string;
169
+ /** Per-side row ceiling override. `undefined` → the join default. */
170
+ readonly maxRows?: number;
171
+ /** Planner strategy override. `undefined` → auto-select. */
172
+ readonly strategy?: JoinStrategy;
173
+ } | {
174
+ /** Sibling collection to collect from. */
175
+ readonly collect: string;
176
+ /** FK field on `collect` (`ref()` targeting the projection source required). */
177
+ readonly on: string;
178
+ /** Alias under which the collected array attaches. */
179
+ readonly as: string;
180
+ /** Per-primary-row fan-out ceiling. `undefined` → the join default. */
181
+ readonly maxRows?: number;
182
+ };
121
183
  /**
122
184
  * Registration shape passed to `withMaterializedView()`.
123
185
  *
@@ -167,6 +229,25 @@ export interface MaterializedViewStrategy<TRow extends Record<string, unknown>>
167
229
  * {@link sources} is ignored.
168
230
  */
169
231
  unionSources?: ReadonlyArray<UnionSource<TRow>>;
232
+ /**
233
+ * Projection-form registration (#810): one output row per primary
234
+ * record of `projection.source`, enriched with forward FK legs and
235
+ * reverse one-to-many "collect" legs before `projection.map` shapes
236
+ * the MV row. Post-map {@link groupBy} + {@link aggregate} are
237
+ * supported exactly as in UNION mode.
238
+ *
239
+ * Mutually exclusive with {@link query} and {@link unionSources} —
240
+ * a strategy must declare exactly one of the three forms.
241
+ * Registration throws `MaterializedViewConfigError` otherwise.
242
+ *
243
+ * Dependencies are all AUTO: `{source} ∪ forward ref() targets ∪
244
+ * collect collections` (explicit {@link sources} remains additive).
245
+ * Forward targets resolve from the source collection's `ref()`
246
+ * declarations; those are declared by user code AFTER the vault
247
+ * opens (registration time), so the registry folds them into the
248
+ * dependency set on the first MV dispatch that finds them declared.
249
+ */
250
+ projection?: ProjectionSpec<TRow>;
170
251
  /**
171
252
  * Group-key field(s) for UNION mode. Applied to the
172
253
  * concatenated mapped-row stream from {@link unionSources} before
@@ -7,18 +7,22 @@ import type { MaterializedViewStrategy, MaterializedViewStrategyHandle } from '.
7
7
  * user `onDelete` guards on the output collection aren't tripped by
8
8
  * housekeeping.
9
9
  *
10
- * Two registration modes:
10
+ * Three registration modes:
11
11
  * - **single-source** — declare `query: (db) => Query<TRow>`; the
12
12
  * dependency analyzer derives source collections from the plan.
13
13
  * - **UNION** — declare `unionSources: [{ collection, map }, ...]`
14
14
  * plus optional `groupBy` + `aggregate`; the executor reads each
15
15
  * arm, maps to the unified row shape, concatenates, then groups
16
16
  * and aggregates.
17
+ * - **projection** (#810) — declare `projection: { source, joins,
18
+ * map }`; one output row per primary record, enriched with
19
+ * forward FK legs and reverse "collect" legs before `map` runs.
17
20
  *
18
- * The two modes are mutually exclusive — exactly one of `query` /
19
- * `unionSources` must be set at registration time.
21
+ * The three modes are mutually exclusive — exactly one of `query` /
22
+ * `unionSources` / `projection` must be set at registration time.
20
23
  *
21
- * See docs/superpowers/specs/2026-05-20-dim14-mv-v2-design.md (single-source v2)
22
- * and docs/superpowers/specs/2026-05-21-dim14-mv-multikey-and-union.md (UNION).
24
+ * See docs/superpowers/specs/2026-05-20-dim14-mv-v2-design.md (single-source v2),
25
+ * docs/superpowers/specs/2026-05-21-dim14-mv-multikey-and-union.md (UNION),
26
+ * and docs/superpowers/specs/2026-07-25-join-projection-mv-design.md (projection).
23
27
  */
24
28
  export declare function withMaterializedView<TRow extends Record<string, unknown>>(spec: MaterializedViewStrategy<TRow>): MaterializedViewStrategyHandle;
@@ -0,0 +1,34 @@
1
+ import type { Cover, JsonValue, ResolvedCoverSchema } from './types.js';
2
+ /**
3
+ * Validate the owner-supplied `custom` input: the field must be a
4
+ * plain object, every key must match {@link CUSTOM_KEY_PATTERN}, and
5
+ * every value must be JSON-serializable (no functions, `undefined`,
6
+ * symbols, bigints, or cycles) within the depth cap. `null` is
7
+ * accepted — it is the delete-this-namespace directive and never
8
+ * persists. Throws `ValidationError` on the first violation.
9
+ */
10
+ export declare function validateCustomInput(custom: Record<string, JsonValue>): void;
11
+ /**
12
+ * Namespace-level patch merge for `setCover`: provided namespaces
13
+ * replace their previous value, absent namespaces are preserved, and
14
+ * an explicit `null` deletes that namespace (so `null` never persists
15
+ * as a namespace value). A whole-`custom`-absent patch preserves the
16
+ * previous custom, consistent with the other cover fields. Rationale:
17
+ * framework A must never need read-modify-write of framework B's data.
18
+ *
19
+ * Returns a spreadable fragment — `{ custom }` when the merge leaves
20
+ * at least one namespace, `{}` when it leaves none (the field is
21
+ * dropped from the persisted document rather than stored empty).
22
+ */
23
+ export declare function mergeCustom(existing: Record<string, JsonValue> | undefined, patch: Record<string, JsonValue> | undefined): {
24
+ custom: Record<string, JsonValue>;
25
+ } | Record<string, never>;
26
+ /**
27
+ * Post-merge size caps — validates the WOULD-BE-PERSISTED document
28
+ * (after the namespace merge), so a small patch can't tip the stored
29
+ * cover over a cap unnoticed. `maxCoverBytes` bounds the entire
30
+ * serialized document, which also closes the unbounded locale-map
31
+ * key-count hole for `name` / `description`. Sizes are measured as
32
+ * `JSON.stringify` length. Throws `ValidationError` on violation.
33
+ */
34
+ export declare function validateCoverSize(cover: Cover, schema: ResolvedCoverSchema): void;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Cover service — barrel export. (Formerly "public envelope"; the
3
+ * old names remain as deprecated aliases for one pre-release window.)
4
+ *
5
+ * @see https://github.com/vLannaAi/noy-db-docs/blob/main/content/docs/services/public-envelope.md
6
+ *
7
+ * @module
8
+ */
9
+ export type { Cover, CoverText, CoverSchema, CoverField, JsonValue, ResolvedCoverSchema, } from './types.js';
10
+ export { COVER_FIELDS, DEFAULT_COVER_SCHEMA, resolveSchema, } from './types.js';
11
+ export type { SetCoverInput } from './schema.js';
12
+ export { validateCoverInput, isCover } from './schema.js';
13
+ export { mergeCustom, validateCoverSize } from './custom.js';
14
+ export { loadCover, saveCover, readCover, resolveLocale, pickLocale, COVER_RECORD_ID, } from './storage.js';
15
+ export type { PublicEnvelope, PublicEnvelopeText, PublicEnvelopeSchema, PublicEnvelopeField, ResolvedPublicEnvelopeSchema, } from './types.js';
16
+ export { PUBLIC_ENVELOPE_FIELDS, DEFAULT_PUBLIC_ENVELOPE_SCHEMA, } from './types.js';
17
+ export type { SetPublicEnvelopeInput } from './schema.js';
18
+ export { validatePublicEnvelopeInput, isPublicEnvelope } from './schema.js';
19
+ export { loadPublicEnvelope, savePublicEnvelope, readPublicEnvelope, PUBLIC_ENVELOPE_RECORD_ID, } from './storage.js';
@@ -0,0 +1,39 @@
1
+ import type { Cover, CoverText, JsonValue, ResolvedCoverSchema } from './types.js';
2
+ /** Owner-supplied input — the subset of {@link Cover} the owner can set. */
3
+ export interface SetCoverInput {
4
+ readonly name?: CoverText;
5
+ readonly description?: CoverText;
6
+ readonly icon?: string;
7
+ readonly defaultLocale?: string;
8
+ /**
9
+ * Namespace-level patch for the cover's `custom` slot (#800):
10
+ * provided namespaces replace their previous value, absent
11
+ * namespaces are preserved, an explicit `null` deletes that
12
+ * namespace. Requires `'custom'` in the schema's `fields` list —
13
+ * the `cover: true` shorthand does NOT enable it.
14
+ */
15
+ readonly custom?: Record<string, JsonValue>;
16
+ }
17
+ /**
18
+ * Validate an owner-supplied cover input against the developer's
19
+ * resolved schema. Throws `ValidationError` on the first violation;
20
+ * returns void on success.
21
+ *
22
+ * The validator is deliberately strict: every fail mode is a hard
23
+ * error rather than a silent drop, so the owner finds out immediately
24
+ * which field they oversized rather than discovering a truncated
25
+ * label months later.
26
+ */
27
+ export declare function validateCoverInput(input: SetCoverInput, schema: ResolvedCoverSchema): void;
28
+ /**
29
+ * Lightweight runtime predicate — used by the bundle header
30
+ * validator to recognise a cover without requiring it. (The wire
31
+ * discriminator keeps its frozen name: `_noydb_public: 1`.)
32
+ */
33
+ export declare function isCover(x: unknown): x is Cover;
34
+ /** @deprecated Use {@link SetCoverInput}. */
35
+ export type SetPublicEnvelopeInput = SetCoverInput;
36
+ /** @deprecated Use {@link validateCoverInput}. */
37
+ export declare const validatePublicEnvelopeInput: typeof validateCoverInput;
38
+ /** @deprecated Use {@link isCover}. */
39
+ export declare const isPublicEnvelope: typeof isCover;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Persistence helpers for `_meta/public-envelope` — the cover's
3
+ * frozen wire location. Mirrors the bypass-AES pattern used by
4
+ * `_meta/handle` and `_meta/policy` — the document is plaintext
5
+ * JSON, the envelope's `_iv` field is left empty.
6
+ *
7
+ * @module
8
+ */
9
+ import type { NoydbStore } from '../../../kernel/types.js';
10
+ import type { Cover } from './types.js';
11
+ /**
12
+ * Reserved id for the vault-level cover record. The VALUE is frozen
13
+ * wire format — the record predates the #799 rename and stays at
14
+ * `_meta/public-envelope` so existing vaults need no migration.
15
+ */
16
+ export declare const COVER_RECORD_ID = "public-envelope";
17
+ /**
18
+ * Read the cover from `_meta/public-envelope`. Returns `undefined`
19
+ * when no cover has been persisted (fresh vault, or a vault written
20
+ * before the feature was enabled). Tolerates corrupted documents —
21
+ * a JSON parse failure surfaces as `undefined`, not a thrown error,
22
+ * mirroring `_meta/handle`'s contract.
23
+ */
24
+ export declare function loadCover(store: NoydbStore, vault: string): Promise<Cover | undefined>;
25
+ /** Persist the cover. Idempotent — overwrites any prior write. */
26
+ export declare function saveCover(store: NoydbStore, vault: string, cover: Cover): Promise<void>;
27
+ /**
28
+ * Public, no-key reader. Plain function, not a method on `Noydb` —
29
+ * the whole point is it works without an authenticated session, so
30
+ * a UI can show "Acme 2026 Tax Records" before unlocking.
31
+ *
32
+ * Resolves any `name` / `description` locale map through the supplied
33
+ * `locale` (when provided). Omitting `locale` returns the raw
34
+ * cover, which a multilingual picker can render as it pleases.
35
+ */
36
+ export declare function readCover(store: NoydbStore, vault: string, opts?: {
37
+ readonly locale?: string;
38
+ }): Promise<Cover | undefined>;
39
+ /**
40
+ * Resolve the locale-map fields (`name`, `description`) of a cover
41
+ * to plain strings for the requested locale, falling back through
42
+ * `defaultLocale` and then any available translation.
43
+ *
44
+ * @internal
45
+ */
46
+ export declare function resolveLocale(cover: Cover, locale: string): Cover;
47
+ /**
48
+ * Resolve a `string | { [locale]: string }` value to a string for a
49
+ * given locale. Exported so the bundle reader can reuse it without
50
+ * duplicating the fallback chain.
51
+ *
52
+ * **Looser than `resolveI18nText`** — the hub's record-field resolver
53
+ * throws `LocaleNotSpecifiedError` when no translation matches, but
54
+ * label semantics deliberately prefer "show *something*" over
55
+ * throwing. The fallback chain is:
56
+ * 1. Exact `locale` match.
57
+ * 2. `defaultLocale` (when supplied on the cover).
58
+ * 3. First non-empty value in the map.
59
+ * 4. Empty string (only if every translation is empty — pathological).
60
+ *
61
+ * This deviation is documented in `https://github.com/vLannaAi/noy-db-docs/blob/main/content/docs/services/public-envelope.md`.
62
+ */
63
+ export declare function pickLocale(value: string | Record<string, string>, locale: string, defaultLocale: string | undefined): string;
64
+ /** @deprecated Use {@link COVER_RECORD_ID}. */
65
+ export declare const PUBLIC_ENVELOPE_RECORD_ID = "public-envelope";
66
+ /** @deprecated Use {@link loadCover}. */
67
+ export declare const loadPublicEnvelope: typeof loadCover;
68
+ /** @deprecated Use {@link saveCover}. */
69
+ export declare const savePublicEnvelope: typeof saveCover;
70
+ /** @deprecated Use {@link readCover}. */
71
+ export declare const readPublicEnvelope: typeof readCover;