permdock 0.6.0 → 0.8.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 (507) hide show
  1. package/README.md +2 -3
  2. package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
  3. package/dist/a2a/index.d.ts +7 -7
  4. package/dist/a2a/index.js +9 -9
  5. package/dist/action-result-CL-QCITA.d.ts +19 -0
  6. package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
  7. package/dist/{adoption-scan-DCYe60Pi.js → adoption-scan-BLs67P1l.js} +5 -5
  8. package/dist/agent/index.d.ts +3 -3
  9. package/dist/agent/index.js +1 -1
  10. package/dist/ai-sdk/index.d.ts +31 -10
  11. package/dist/ai-sdk/index.js +22 -12
  12. package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
  13. package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
  14. package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  15. package/dist/{approval-prompt-DvSSPQJX.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
  16. package/dist/approvals/index.d.ts +5 -5
  17. package/dist/approvals/index.js +7 -7
  18. package/dist/{approvals-p1PGoVjb.js → approvals-DnIBTuXE.js} +128 -78
  19. package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
  20. package/dist/{arazzo-41WuzHou.js → arazzo-3RhGfkAK.js} +2 -2
  21. package/dist/{arazzo-CaUVBn7D.js → arazzo-B5-ulWif.js} +6 -6
  22. package/dist/{args-IIolxxKA.js → args-0FrVs5EH.js} +125 -8
  23. package/dist/astro/index.d.ts +30 -12
  24. package/dist/astro/index.js +2 -2
  25. package/dist/{audience-DabClFLQ.js → audience-BAkBDMqn.js} +8 -8
  26. package/dist/{auth-DRLEizbL.js → auth--yPyZNgr.js} +21 -10
  27. package/dist/authzen/index.d.ts +171 -25
  28. package/dist/authzen/index.js +321 -149
  29. package/dist/{automation-BNM3TtDo.d.ts → automation-DqEoWHBc.d.ts} +42 -32
  30. package/dist/{automation-DVjOckjV.js → automation-x3KEUusw.js} +22 -21
  31. package/dist/base-url-BQbddZO5.js +9 -0
  32. package/dist/better-auth/index.d.ts +2 -2
  33. package/dist/better-auth/index.js +13 -7
  34. package/dist/better-supabase/index.d.ts +392 -220
  35. package/dist/better-supabase/index.js +293 -152
  36. package/dist/{bind-DOyrv6zi.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
  37. package/dist/{bind-CAvgUuKs.js → bind-D_sZSVA3.js} +22 -10
  38. package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
  39. package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
  40. package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
  41. package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
  42. package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
  43. package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
  44. package/dist/{build-instance-Bu_eDqYw.js → build-instance-CNWaYJyr.js} +3 -3
  45. package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
  46. package/dist/{capability-N1K9IpqS.js → capability-BqX94r07.js} +31 -25
  47. package/dist/{capability-Drg-1YhL.d.ts → capability-ChuiONQU.d.ts} +41 -29
  48. package/dist/{casbin-Dyu2gnUD.js → casbin-H0rKxBx2.js} +16 -8
  49. package/dist/{casbin-Cr7RLtA3.js → casbin-cbSbhT_k.js} +2 -2
  50. package/dist/{casl-64gpT-8x.js → casl-C4OINZHI.js} +2 -2
  51. package/dist/{casl-DjEDhTCP.js → casl-CHHoCldP.js} +19 -10
  52. package/dist/catalog/index.d.ts +104 -23
  53. package/dist/catalog/index.js +117 -8
  54. package/dist/{catalog-HD2gf5mY.js → catalog-BFpz2EmT.js} +57 -26
  55. package/dist/{catalog-DZVbrF-z.js → catalog-DCspHDc8.js} +3 -3
  56. package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-DjMKzJp9.js} +53 -16
  57. package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-e6aCWosn.js} +19 -15
  58. package/dist/catalog-mRQQQhNK.js +1 -0
  59. package/dist/catalog-operations-Dadrl7Z-.js +60 -0
  60. package/dist/{create-CQWIpUG-.js → challenge-DImNcR7B.js} +157 -39
  61. package/dist/chat/index.d.ts +1 -1
  62. package/dist/chat/index.js +13 -10
  63. package/dist/chat-sdk/index.d.ts +44 -26
  64. package/dist/chat-sdk/index.js +17 -17
  65. package/dist/checks-CGkP3Z7A.js +40 -0
  66. package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
  67. package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
  68. package/dist/claude-agent/index.d.ts +6 -6
  69. package/dist/claude-agent/index.js +6 -3
  70. package/dist/clerk/index.d.ts +11 -7
  71. package/dist/clerk/index.js +6 -6
  72. package/dist/cli/bin.js +4 -4
  73. package/dist/cli/index.d.ts +82 -7
  74. package/dist/cli/index.js +6 -6
  75. package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
  76. package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
  77. package/dist/cloud/index.d.ts +186 -38
  78. package/dist/cloud/index.js +293 -31
  79. package/dist/{cloud-ytQ3uviA.js → cloud-BFlGMaak.js} +5 -6
  80. package/dist/{codemod-5mpSpnUY.js → codemod-DLQ9Zpo4.js} +3 -4
  81. package/dist/{codemod-ua2hHy7w.js → codemod-DWSN2erG.js} +523 -201
  82. package/dist/collect-B5BL3klN.js +1 -0
  83. package/dist/{collect-mLTY4nwb.js → collect-B7ZFAJU3.js} +36 -64
  84. package/dist/{collect-Ci6akVwH.js → collect-Bzv3le0A.js} +6 -6
  85. package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
  86. package/dist/compile/index.d.ts +2 -2
  87. package/dist/compile/index.js +1 -1
  88. package/dist/{compile-1bsAezL0.d.ts → compile-BFzysW3o.d.ts} +36 -12
  89. package/dist/{compile-CMqMx_IN.js → compile-EzEMB-7v.js} +77 -33
  90. package/dist/{completion-BTFrHZhX.js → completion-saoYiRFO.js} +17 -8
  91. package/dist/config-BwPBfN0t.js +108 -0
  92. package/dist/{config-Bj2Ixq3d.js → config-DBeXXmBF.js} +2 -2
  93. package/dist/{config-report-DSpsLpCE.js → config-report-BipSWA6V.js} +9 -6
  94. package/dist/config-shape-ykV0Vm2n.js +134 -0
  95. package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
  96. package/dist/connector-schema-CYLQNMYq.js +434 -0
  97. package/dist/{context-B_u3_bDJ.js → context-BnIzxTNE.js} +4 -3
  98. package/dist/convex/index.d.ts +13 -7
  99. package/dist/convex/index.js +9 -6
  100. package/dist/core-H-mbhpZc.js +341 -0
  101. package/dist/core-hWIARPDz.d.ts +206 -0
  102. package/dist/{create-CBMmFie-.d.ts → create-BSNrVuxh.d.ts} +87 -34
  103. package/dist/{create-B30OMUOJ.d.ts → create-BVq1lNQE.d.ts} +49 -28
  104. package/dist/{create-D_NmPOdH.d.ts → create-CM1FciYG.d.ts} +37 -29
  105. package/dist/{create-CGm28gyI.js → create-Cq4Uox0f.js} +13 -9
  106. package/dist/{create-DCF2SvoT.js → create-_noSrY1T.js} +15 -21
  107. package/dist/{credential-BcoiejpY.js → credential-CyyyvCsL.js} +42 -39
  108. package/dist/{credentials-DPyHmYz5.js → credentials-CdDxp7jN.js} +6 -6
  109. package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-NB4wcyBf.js} +13 -2
  110. package/dist/{delegation-j6-rc37o.js → delegation-CDB6_keF.js} +31 -22
  111. package/dist/delivery/index.d.ts +5 -5
  112. package/dist/delivery/index.js +6 -5
  113. package/dist/{delivery-DCAgNyCn.js → delivery-BupfvJIV.js} +81 -20
  114. package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
  115. package/dist/denied-text-CHNlVInN.d.ts +22 -0
  116. package/dist/{describe-BybMRY7A.js → describe-Bb4hGK5d.js} +6 -5
  117. package/dist/{describe-B5qgDvEW.d.ts → describe-ByS9LgHK.d.ts} +5 -5
  118. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  119. package/dist/{diff-CmuSD3vc.js → diff-CN8IYhC_.js} +2 -2
  120. package/dist/{diff-3jbx6Rm4.js → diff-iZWV65nC.js} +23 -14
  121. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  122. package/dist/{doctor-BdZw53-k.js → doctor-CHD1M9R5.js} +485 -141
  123. package/dist/{doctor-3ZqNHX_G.js → doctor-D3wo-yuz.js} +4 -4
  124. package/dist/drizzle/index.d.ts +33 -19
  125. package/dist/drizzle/index.js +17 -9
  126. package/dist/elysia/index.d.ts +17 -11
  127. package/dist/elysia/index.js +5 -5
  128. package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
  129. package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  130. package/dist/{errors-CWTY6uih.js → errors-Vpu6rKHl.js} +14 -10
  131. package/dist/{errors-DH5QEGXh.d.ts → errors-zi_4T-rx.d.ts} +22 -6
  132. package/dist/{evaluate-CNClBvcj.js → evaluate-Dd8Ta0Ie.js} +185 -80
  133. package/dist/{evaluations-beAooV0n.js → evaluations-IBceAeKT.js} +41 -20
  134. package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-z8dQFDaN.d.ts} +12 -6
  135. package/dist/eve/index.d.ts +9 -6
  136. package/dist/eve/index.js +4 -4
  137. package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
  138. package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
  139. package/dist/express/index.d.ts +9 -6
  140. package/dist/express/index.js +9 -6
  141. package/dist/fastify/index.d.ts +16 -10
  142. package/dist/fastify/index.js +8 -5
  143. package/dist/{fetch-adapter-Dw0MTS3D.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
  144. package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-JL43jD3E.js} +14 -11
  145. package/dist/fields-D0vUI6dq.js +498 -0
  146. package/dist/{files-C5ZI27eV.js → files-B3AA05f1.js} +21 -5
  147. package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
  148. package/dist/{fixtures-B7XrLeY7.js → fixtures-A1_sp_tR.js} +15 -6
  149. package/dist/{flags-C3DktBDY.js → flags-DXjoTVbS.js} +2 -2
  150. package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
  151. package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-DCakWRsr.js} +26 -16
  152. package/dist/gen-B5kvbAoZ.js +58 -0
  153. package/dist/gen-DWCYcMQM.js +827 -0
  154. package/dist/generate-CRVV5V7l.js +165 -0
  155. package/dist/generate-CezbCaTI.js +275 -0
  156. package/dist/{grantee-hxrUsbpM.js → grantee-Dke-9rd1.js} +4 -4
  157. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-BrYPe-w0.js} +12 -12
  158. package/dist/{grantee-match-DbENBHLB.js → grantee-match-7RZZvoT_.js} +12 -6
  159. package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
  160. package/dist/h3/index.d.ts +10 -7
  161. package/dist/h3/index.js +3 -3
  162. package/dist/headers-B9jQxjtW.d.ts +10 -0
  163. package/dist/{helpers-CBYVMjwh.js → helpers-DJicaG6f.js} +40 -28
  164. package/dist/hono/index.d.ts +16 -10
  165. package/dist/hono/index.js +5 -5
  166. package/dist/{hosted-BPk51-kX.d.ts → hosted-Cmtxogd0.d.ts} +44 -20
  167. package/dist/{hosted-B46-5LYE.js → hosted-D0IzESu_.js} +68 -25
  168. package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
  169. package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
  170. package/dist/{http-DXJ37RDA.js → http-DOL33cO0.js} +11 -8
  171. package/dist/{import-wyqXUyjm.js → import-CST57XLp.js} +64 -51
  172. package/dist/{import-CNV7I2Dw.js → import-_YqhhwvX.js} +6 -6
  173. package/dist/{index-B8YjkEZ4.d.ts → index-B8s204GL.d.ts} +64 -52
  174. package/dist/{index-Ch8LpNDp.d.ts → index-BT5-1VsX.d.ts} +64 -25
  175. package/dist/{index-DuWxc5dt.d.ts → index-BW_0MZOS.d.ts} +388 -149
  176. package/dist/index-BhxEUY9J.d.ts +233 -0
  177. package/dist/index-Bv5iXPqU.d.ts +210 -0
  178. package/dist/{index-C-6Letxg.d.ts → index-_9UiQIkt.d.ts} +164 -77
  179. package/dist/index.d.ts +22 -21
  180. package/dist/index.js +35 -33
  181. package/dist/{init-GG6Jh8HD.js → init-Dz_PsHdv.js} +5 -5
  182. package/dist/{init-DeMYsnYJ.js → init-cE3A8aXq.js} +10 -10
  183. package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
  184. package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot--JWiTrvO.js} +81 -56
  185. package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
  186. package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
  187. package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
  188. package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
  189. package/dist/jwt/index.d.ts +125 -17
  190. package/dist/jwt/index.js +157 -16
  191. package/dist/{kernel-D0NVb1cK.js → kernel-C-fYydV2.js} +151 -16
  192. package/dist/kysely/index.d.ts +49 -33
  193. package/dist/kysely/index.js +9 -7
  194. package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
  195. package/dist/{load-DFS_ry0W.js → load-DjSU5KXO.js} +6 -6
  196. package/dist/load-Dm0pSYH3.js +1 -0
  197. package/dist/{login-Dfe5RlYk.js → login-D-8tMqzo.js} +4 -4
  198. package/dist/{login-imhuwvn3.js → login-DplQ0s84.js} +18 -15
  199. package/dist/{manifest-dvL2XEe1.js → manifest-Cgiq5oqc.js} +67 -37
  200. package/dist/{manifest-mx5ghSFM.d.ts → manifest-CzzWtnAb.d.ts} +144 -28
  201. package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-2r37XRhD.js} +80 -9
  202. package/dist/{manifest-C8IzW3Do.js → manifest-wg8WkkpD.js} +11 -7
  203. package/dist/{map-claims-D3oRmTk0.js → map-claims-BNWCJtmP.js} +27 -18
  204. package/dist/{map-error-Dr70oA_3.js → map-error-pasIGqMT.js} +7 -7
  205. package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
  206. package/dist/mcp/index.d.ts +154 -47
  207. package/dist/mcp/index.js +200 -41
  208. package/dist/{migrate-CIq4-E9F.js → migrate-B7oP_sQU.js} +102 -31
  209. package/dist/module-values-BJTBdo6y.js +107 -0
  210. package/dist/nest/index.d.ts +23 -13
  211. package/dist/nest/index.js +18 -11
  212. package/dist/next/client.d.ts +5 -2
  213. package/dist/next/client.js +1 -1
  214. package/dist/next/index.d.ts +72 -26
  215. package/dist/next/index.js +110 -6
  216. package/dist/next/plugin.d.ts +1 -1
  217. package/dist/next/plugin.js +4 -3
  218. package/dist/node/index.d.ts +5 -5
  219. package/dist/node/index.js +3 -3
  220. package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
  221. package/dist/openai/index.d.ts +13 -7
  222. package/dist/openai/index.js +3 -3
  223. package/dist/openapi/index.d.ts +61 -30
  224. package/dist/openapi/index.js +2 -2
  225. package/dist/{openapi-B7HZ0f-r.js → openapi-BOsx0xn9.js} +34 -24
  226. package/dist/{openapi-C4dDTVEd.js → openapi-CBZUhA3l.js} +4 -5
  227. package/dist/{openapi-DD1SV-5-.js → openapi-VeHHU2l9.js} +23 -14
  228. package/dist/{operation-findings-DgATDpvh.js → operation-findings-CXtFzlKJ.js} +3 -3
  229. package/dist/{operations-X0VM7F3m.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
  230. package/dist/orpc/index.d.ts +68 -14
  231. package/dist/orpc/index.js +62 -13
  232. package/dist/otel/index.d.ts +7 -4
  233. package/dist/otel/index.js +8 -5
  234. package/dist/output-files-BHOIlrfD.js +1 -0
  235. package/dist/{output-files-DhRBBE4n.js → output-files-BIQ_9pIs.js} +29 -17
  236. package/dist/{output-1im__-08.js → output-tkju6U7R.js} +15 -7
  237. package/dist/ownership-B4L59T9u.js +1054 -0
  238. package/dist/parse-1_ZheTW5.js +151 -0
  239. package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
  240. package/dist/parse-local-manifest-DEiCF4ah.js +69 -0
  241. package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
  242. package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
  243. package/dist/pdp/index.d.ts +9 -6
  244. package/dist/pdp/index.js +23 -12
  245. package/dist/{peer-CRvC7Hg1.js → peer-C9LvBCcb.js} +1 -1
  246. package/dist/peer-Q0fuZ6hx.js +982 -0
  247. package/dist/{permdock-SV8ZINYT.d.ts → permdock-B6Sf4T_S.d.ts} +270 -117
  248. package/dist/{permdock-BrAscV28.js → permdock-L-_I_3zP.js} +226 -74
  249. package/dist/{permission-registry-Br4jSNVi.js → permission-registry-B8tYxPIt.js} +24 -11
  250. package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-CAY-GU7e.d.ts} +130 -104
  251. package/dist/{permissions-u_KHg-sN.d.ts → permissions-Bx6UI8n1.d.ts} +6 -2
  252. package/dist/{permissions-B-wCP5ZC.js → permissions-CVXmRILq.js} +3 -3
  253. package/dist/{permissions-BPxlwVhN.js → permissions-mDcTWoBs.js} +8 -5
  254. package/dist/pg-DQTqRrou.js +60 -0
  255. package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
  256. package/dist/pkce-CnmmYqUZ.js +21 -0
  257. package/dist/{policy-77FSAq_V.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
  258. package/dist/{policy-DbM5YYtV.js → policy-CLQ8__GF.js} +49 -20
  259. package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-CJgOm6aq.js} +28 -25
  260. package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
  261. package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-CCiDRZBH.d.ts} +802 -334
  262. package/dist/postgres-store-DcyrPS-r.js +1028 -0
  263. package/dist/{postgrest-DAjUkF9w.js → postgrest-D4nuPXIQ.js} +88 -36
  264. package/dist/{postgrest-CEgRbefE.d.ts → postgrest-DicQyqm-.d.ts} +60 -30
  265. package/dist/powersync-DHNQX06W.js +1117 -0
  266. package/dist/{powersync-DISt6SUe.js → powersync-DXqGuq9A.js} +3 -3
  267. package/dist/powersync-Djf-zCpB.js +1 -0
  268. package/dist/preset/index.d.ts +38 -28
  269. package/dist/preset/index.js +1 -1
  270. package/dist/{preset-DZdU0tne.js → preset-BjLzeFpp.js} +58 -34
  271. package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
  272. package/dist/prisma/index.d.ts +69 -41
  273. package/dist/prisma/index.js +21 -17
  274. package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
  275. package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
  276. package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
  277. package/dist/prompt-BYc6drYW.js +938 -0
  278. package/dist/protected-action-BE7N_Luo.d.ts +58 -0
  279. package/dist/protected-action-DUYqb-Ma.js +80 -0
  280. package/dist/{protected-BlF0F6wL.js → protected-action-QEA8arRB.js} +48 -14
  281. package/dist/{provider-B1al-AZz.js → provider-C55OGXJ7.js} +5 -4
  282. package/dist/{provider-DILL9oPK.d.ts → provider-DXfq5c2d.d.ts} +1 -1
  283. package/dist/{provider-store-DM6DNcta.js → provider-store-CaTv00tr.js} +13 -9
  284. package/dist/pull-B65ndFNZ.js +1 -0
  285. package/dist/{pull-jEwbf80J.js → pull-CwpGaQSi.js} +12 -11
  286. package/dist/{push-BD4f15co.js → push-DgssgzkK.js} +62 -16
  287. package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
  288. package/dist/{pushed-policy-CqtxkV4G.js → pushed-policy-ITwYKvvH.js} +10 -7
  289. package/dist/react/index.d.ts +9 -8
  290. package/dist/react/index.js +7 -6
  291. package/dist/react/provider-client.d.ts +1 -1
  292. package/dist/react/provider-client.js +1 -1
  293. package/dist/react-native/index.d.ts +104 -51
  294. package/dist/react-native/index.js +394 -67
  295. package/dist/{refs-K6eWUJ0H.js → refs-C8BKxc_e.js} +17 -3
  296. package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
  297. package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
  298. package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
  299. package/dist/{replay-Bkm-Ne4l.d.ts → replay-DNftIb_R.d.ts} +1 -1
  300. package/dist/{request-context-C81Pip9n.js → request-context-C25ilqiJ.js} +8 -8
  301. package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
  302. package/dist/resend/index.d.ts +34 -28
  303. package/dist/resend/index.js +29 -29
  304. package/dist/resolve-names-CF7xXLSG.js +201 -0
  305. package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
  306. package/dist/{retire-CALjIQ7e.js → retire-B2xffQgY.js} +15 -6
  307. package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
  308. package/dist/{rls-DTvYd-lI.js → rls-CNEH2_BG.js} +743 -624
  309. package/dist/{rls-BAqP4q66.js → rls-Ca8Jz9b5.js} +41 -10
  310. package/dist/{role-builder-uWQZ4v84.js → role-builder-BK2-T6oD.js} +41 -20
  311. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  312. package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
  313. package/dist/{rpc-VSl5ylaQ.js → rpc-fNqAIqQk.js} +8 -5
  314. package/dist/{run-CUKuz0A8.js → run-Bz26OTfO.js} +26 -23
  315. package/dist/run-D-JE8QWb.js +1 -0
  316. package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-DbWI9f99.d.ts} +33 -13
  317. package/dist/{run-ticket-sxFI6LAk.js → run-ticket-Dv7aF7Dk.js} +29 -8
  318. package/dist/{runtime-D3VTAiCA.js → runtime-BGnrOkVH.js} +5 -2
  319. package/dist/{saas-BCXRuXca.js → saas-iWnUdwCt.js} +42 -29
  320. package/dist/{scan-qvOe0hS3.js → scan-DCj1KQfn.js} +1 -1
  321. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  322. package/dist/{schema-yLuBWWsh.js → schema-Dst9I9Gs.js} +9 -5
  323. package/dist/scim/index.d.ts +3 -2
  324. package/dist/scim/index.js +3 -1
  325. package/dist/scim-D8YupzX1.js +44 -0
  326. package/dist/{scim-ClHtpyV3.js → scim-jJBJ7g1Z.js} +35 -551
  327. package/dist/{scopes-CUPSjo9q.js → scopes-0Up_UA2t.js} +42 -24
  328. package/dist/server/index.d.ts +12 -12
  329. package/dist/server/index.js +13 -13
  330. package/dist/{server-C3WXAHZj.js → server-3cVlTLde.js} +31 -31
  331. package/dist/{server-types-CKQiCnON.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
  332. package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
  333. package/dist/{shared-BAK8t4Uo.js → shared-Afctg7B0.js} +100 -61
  334. package/dist/{shared-DvvFzYXe.js → shared-l0oGGetg.js} +9 -6
  335. package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
  336. package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  337. package/dist/{sink-4-eQIRWf.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
  338. package/dist/{skills-B6lVdD_W.js → skills-Bjj7BNEQ.js} +16 -12
  339. package/dist/{skills-CTYwkl44.js → skills-OuoMR49L.js} +3 -3
  340. package/dist/{snapshot-B7DkYg6g.js → snapshot-CXlzi69u.js} +21 -18
  341. package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
  342. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-Bx_4xC_6.js} +14 -11
  343. package/dist/solid/index.d.ts +55 -15
  344. package/dist/solid/index.js +46 -12
  345. package/dist/solid-start/index.d.ts +30 -12
  346. package/dist/solid-start/index.js +3 -3
  347. package/dist/sources-B1Os_YUu.d.ts +312 -0
  348. package/dist/{sources-vs5dGOsS.js → sources-CMAM-2A3.js} +156 -51
  349. package/dist/sources-qoIJQrJv.js +11 -0
  350. package/dist/{sql-B5T1IL83.js → sql-0WjxIp9g.js} +32 -7
  351. package/dist/sql-B80DFdpG.d.ts +10 -0
  352. package/dist/{src-Cu2m75uo.js → src-DZ0l9UAg.js} +305 -123
  353. package/dist/ssf/index.d.ts +4 -4
  354. package/dist/ssf/index.js +665 -224
  355. package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
  356. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  357. package/dist/{store-BDutJkDL.js → store-RNFvaJJv.js} +43 -29
  358. package/dist/{store-options-u0ycEe8s.js → store-options-Dil3lraY.js} +105 -15
  359. package/dist/stores-C0Kta5Ft.d.ts +59 -0
  360. package/dist/{stores-CGhM8BN_.js → stores-DxZWDXCs.js} +42 -5
  361. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  362. package/dist/{stream-CeCMJmBB.d.ts → stream-ltuLdtTG.d.ts} +4 -3
  363. package/dist/{style-DiKWnAvn.js → style-DblOtSga.js} +1 -1
  364. package/dist/{style-Uao76wO7.js → style-Ds11Hmk4.js} +3 -1
  365. package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
  366. package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
  367. package/dist/supabase/index.d.ts +48 -37
  368. package/dist/supabase/index.js +6 -6
  369. package/dist/supabase/middleware.d.ts +19 -13
  370. package/dist/supabase/middleware.js +7 -7
  371. package/dist/{supabase-x5JtR2tc.js → supabase-BL1qJzzY.js} +82 -36
  372. package/dist/{supabase-By_frk3U.js → supabase-D39cuGPt.js} +3 -3
  373. package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-B-yXnzUl.js} +1206 -286
  374. package/dist/supabase-hook-H-MtE9Wd.js +1 -0
  375. package/dist/supautils-BU-pAEpf.js +808 -0
  376. package/dist/{support-session-C6xJQYut.js → support-session-BsmPCbz8.js} +22 -22
  377. package/dist/svelte/PermissionBoundary.svelte +2 -6
  378. package/dist/svelte/Protected.svelte +2 -8
  379. package/dist/svelte/index.d.ts +9 -8
  380. package/dist/svelte/index.js +10 -9
  381. package/dist/svelte/runtime.d.ts +4 -4
  382. package/dist/svelte/runtime.js +4 -4
  383. package/dist/svelte/source.d.ts +9 -8
  384. package/dist/svelte/source.js +6 -5
  385. package/dist/sveltekit/index.d.ts +30 -12
  386. package/dist/sveltekit/index.js +2 -2
  387. package/dist/{ownership-DqaJNJPn.js → tables-DeMNEy6V.js} +1025 -1085
  388. package/dist/tanstack-start/index.d.ts +22 -10
  389. package/dist/tanstack-start/index.js +2 -2
  390. package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
  391. package/dist/{tenancy-DN2QAx9z.js → tenancy-5d1zVBvK.js} +36 -21
  392. package/dist/terminal/index.d.ts +23 -14
  393. package/dist/terminal/index.js +17 -20
  394. package/dist/testing/core.d.ts +2 -0
  395. package/dist/testing/core.js +1 -0
  396. package/dist/testing/fixtures/index.d.ts +15 -0
  397. package/dist/testing/fixtures/index.js +831 -0
  398. package/dist/testing/index.d.ts +235 -285
  399. package/dist/testing/index.js +502 -927
  400. package/dist/testing/saas/index.d.ts +43 -27
  401. package/dist/testing/saas/index.js +2 -2
  402. package/dist/testing/saas/permissions.d.ts +1 -1
  403. package/dist/testing/saas/permissions.js +1 -1
  404. package/dist/text-diff-BtfSmdUo.js +444 -0
  405. package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
  406. package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
  407. package/dist/{token-BLZcjQgt.js → token-DC9EQiet.js} +15 -13
  408. package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-Qpjs_W6M.js} +5 -2
  409. package/dist/trpc/index.d.ts +11 -8
  410. package/dist/trpc/index.js +15 -9
  411. package/dist/type-helpers-BIPIDa6a.d.ts +50 -0
  412. package/dist/{types-8RnwUAvE.d.ts → types-AMJ5qoU_.d.ts} +49 -30
  413. package/dist/{types-C_IiEs64.d.ts → types-B2mlGuhW.d.ts} +14 -11
  414. package/dist/{types-_WhUP7ud.d.ts → types-B4uqKDnp.d.ts} +25 -12
  415. package/dist/{types-CX7AvRqP.d.ts → types-BJk0BKRX.d.ts} +24 -14
  416. package/dist/types-B_d_g7T3.d.ts +262 -0
  417. package/dist/{types-BdtSDbBO.d.ts → types-B_tiYvk8.d.ts} +59 -32
  418. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  419. package/dist/{types-Dfv0aTER.d.ts → types-DC1Loeh3.d.ts} +449 -168
  420. package/dist/{types-lUlG3TVd.d.ts → types-DHKPcqzr.d.ts} +2 -2
  421. package/dist/{types-C791HFu9.d.ts → types-DjuMBNF9.d.ts} +68 -32
  422. package/dist/{types-C863OQiR.d.ts → types-HzqOtvsJ.d.ts} +23 -12
  423. package/dist/{types-Druu9wLM.d.ts → types-ZzRGoViD.d.ts} +77 -24
  424. package/dist/{types-BzzaHxt3.d.ts → types-ah9NlU6j.d.ts} +137 -48
  425. package/dist/{types-CVZSNocA.d.ts → types-djVzLlIV.d.ts} +31 -14
  426. package/dist/{types-BtHtcKMr.d.ts → types-yUuPR5Hy.d.ts} +47 -24
  427. package/dist/unplugin/index.d.ts +1 -1
  428. package/dist/unplugin/index.js +2 -2
  429. package/dist/usage-CYeXek0p.js +1 -0
  430. package/dist/{usage-SveTRTyr.js → usage-CxEzS4ey.js} +50 -26
  431. package/dist/{usage-CRVl9V3t.js → usage-ab0PdusX.js} +2 -2
  432. package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
  433. package/dist/{validation-error-DHUrAkku.d.ts → validation-error-YGg2mXyH.d.ts} +5 -2
  434. package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
  435. package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
  436. package/dist/{verify-BaAKx7t6.js → verify-DZeqoWu5.js} +417 -489
  437. package/dist/version-DMQ0dnN5.js +48 -0
  438. package/dist/version-DizhmD72.js +1 -0
  439. package/dist/{views-DTIIO-oQ.js → views-CD8wuL4Z.js} +19 -6
  440. package/dist/vocabulary-DEJ5j4mR.d.ts +70 -0
  441. package/dist/vue/index.d.ts +71 -21
  442. package/dist/vue/index.js +50 -13
  443. package/dist/{waiter-B986w1oK.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
  444. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  445. package/dist/{watch-vea54PRw.js → watch-Cx_WciLE.js} +8 -8
  446. package/dist/watch-DB42U1ib.js +1 -0
  447. package/dist/webmcp/index.d.ts +11 -11
  448. package/dist/webmcp/index.js +8 -5
  449. package/dist/{where-scope-C9vfEphl.js → where-scope-DlCdCM_8.js} +56 -30
  450. package/dist/{who-can-DWBAcaCQ.js → who-can-rI7dCR9Q.js} +23 -20
  451. package/dist/workflow/index.d.ts +3 -3
  452. package/dist/workflow/index.js +13 -13
  453. package/dist/workflow-sdk/index.d.ts +19 -13
  454. package/dist/workflow-sdk/index.js +6 -6
  455. package/dist/{wrap-gX61EtpB.js → wrap-B2wziJI_.js} +11 -5
  456. package/dist/{wrap-C5jC6sKI.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
  457. package/package.json +25 -14
  458. package/schemas/catalog-v1.json +3 -0
  459. package/schemas/cli-result-v1.json +1 -0
  460. package/schemas/cloud-api-v1.json +152 -7
  461. package/schemas/connector-v1.json +8 -0
  462. package/schemas/supabase-claims-v1.json +5 -0
  463. package/schemas/supabase-manifest-v1.json +308 -75
  464. package/skills/permdock/SKILL.md +1 -0
  465. package/skills/permdock-agents/references/runtimes.md +3 -1
  466. package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
  467. package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
  468. package/skills/permdock-data/references/queries-and-rls.md +6 -2
  469. package/skills/permdock-tenancy/SKILL.md +1 -1
  470. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -1
  471. package/skills/permdock-wire/references/adapters.md +28 -22
  472. package/skills/permdock-wire/references/policy-options.md +1 -0
  473. package/dist/catalog-BoWglDPI.js +0 -1
  474. package/dist/collect-D7eQDffE.js +0 -1
  475. package/dist/config-bs_kZeYq.js +0 -162
  476. package/dist/denied-text-CiFQNuMV.d.ts +0 -19
  477. package/dist/fields-OYG_JR78.js +0 -203
  478. package/dist/generate-CNU1pIOo.js +0 -171
  479. package/dist/headers-BIjfMaoC.js +0 -8
  480. package/dist/headers-CIbDTUTK.d.ts +0 -7
  481. package/dist/index-Cp_ilKi1.d.ts +0 -91
  482. package/dist/index-CueFnxQc.d.ts +0 -110
  483. package/dist/load-BxEtwlBS.js +0 -1
  484. package/dist/output-files-B3IZJksC.js +0 -1
  485. package/dist/package-root-Dk_ETdkp.js +0 -31
  486. package/dist/parse-Cxq0WxrA.js +0 -53
  487. package/dist/parse-local-manifest-5ODwqu8b.d.ts +0 -10
  488. package/dist/parse-local-manifest-CVSs6J9I.js +0 -34
  489. package/dist/peer-C8swJ2GH.js +0 -50
  490. package/dist/policies-DP2nqRoF.js +0 -295
  491. package/dist/powersync-BkWWCS1K.js +0 -538
  492. package/dist/powersync-MMJ2mI2q.js +0 -1
  493. package/dist/problem-details-B45V5d2b.d.ts +0 -7
  494. package/dist/prompt-DfZLJLIn.js +0 -32
  495. package/dist/protected-RFGpakN9.d.ts +0 -38
  496. package/dist/pull-CvpINcMK.js +0 -1
  497. package/dist/run-DDwUaJDU.js +0 -1
  498. package/dist/sources-Xc4zkszI.d.ts +0 -190
  499. package/dist/stores-BUGNbJTt.d.ts +0 -30
  500. package/dist/supabase-hook-CCw5m35C.js +0 -1
  501. package/dist/supautils-B6HYL9eL.js +0 -91
  502. package/dist/text-diff-BQcUapOb.js +0 -15
  503. package/dist/types-B3_ooZgZ.d.ts +0 -172
  504. package/dist/usage-CZpSQP6L.js +0 -1
  505. package/dist/version-CEbQ5UeM.js +0 -18
  506. package/dist/version-DXkYUISx.js +0 -1
  507. package/dist/watch--ovlPOc0.js +0 -1
@@ -1,15 +1,14 @@
1
1
  import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
2
- import { r as ownGet } from "../paths-DXSHAMIa.js";
3
- import { o as statusProblem } from "../problem-details-cn5X30gZ.js";
4
- import { a as getResource, c as listPermissions } from "../permission-registry-Br4jSNVi.js";
2
+ import { r as ownGet } from "../paths-CUvURzHp.js";
3
+ import { a as problemType, o as statusProblem } from "../problem-details-CLDgX1KV.js";
4
+ import { a as getResource, c as listPermissions } from "../permission-registry-B8tYxPIt.js";
5
5
  import { t as fromWireDelegation } from "../wire-delegation-Cv3W2eaM.js";
6
6
  import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
7
- import { n as readBodyText } from "../body-text-QcXok_SI.js";
8
- import { r as hasCredentials } from "../http-BBoKefeS.js";
9
- import { a as methodNotAllowed, c as problemResponse, d as validationProblem, n as batchTooLarge, u as unauthenticatedProblem } from "../problem-CTviyH5L.js";
10
- import { t as bodyTooLarge } from "../body-CH5of8Ne.js";
11
- import { n as resolveOrNull, t as buildInstance } from "../build-instance-Bu_eDqYw.js";
12
- import { _ as wireResourceId, a as evaluationReasons, c as unknownSemanticProblem, g as permissionLookup, h as itemResourceData, i as evaluateBatch, l as withRequestId, n as applyApprovalResume, r as authzenMetadata, s as evaluationsSemantic, t as EVALUATIONS_SEMANTICS } from "../evaluations-beAooV0n.js";
7
+ import { n as readBodyText, t as MAX_BODY_BYTES } from "../body-text-DQhcmqdY.js";
8
+ import { r as hasCredentials } from "../http-DKLXrFGk.js";
9
+ import { d as unauthenticatedProblem, l as problemResponse, o as methodNotAllowed } from "../problem-BVLHFK33.js";
10
+ import { n as resolveOrNull, t as buildInstance } from "../build-instance-CNWaYJyr.js";
11
+ import { a as evaluationReasons, c as withRequestId, g as wireResourceId, h as permissionLookup, i as evaluateBatch, m as itemResourceData, n as applyApprovalResume, r as authzenMetadata, s as evaluationsSemantic, t as EVALUATIONS_SEMANTICS } from "../evaluations-IBceAeKT.js";
13
12
  //#region src/authzen/map.ts
14
13
  const UNKNOWN = {
15
14
  outcome: "denied",
@@ -41,7 +40,10 @@ function permissionOf(lookup, item) {
41
40
  function resourceData(item) {
42
41
  return itemResourceData(item.resource);
43
42
  }
44
- /** The row id an item names; `undefined` for none and for the collection sentinel `id: "*"`. */
43
+ /**
44
+ * The row id an item names; `undefined` for none and for the collection
45
+ * sentinel `id: "*"`.
46
+ */
45
47
  function resourceIdOf(item) {
46
48
  return wireResourceId(item.resource?.id);
47
49
  }
@@ -123,18 +125,30 @@ function mergeEvaluationItem(shared, item) {
123
125
  context: item["context"] ?? shared.context
124
126
  });
125
127
  }
126
- function pageOf(body) {
127
- const page = isRecord(body["page"]) ? body["page"] : {};
128
- const raw = typeof page["token"] === "string" ? page["token"] : typeof page["next_token"] === "string" ? page["next_token"] : "0";
128
+ //#endregion
129
+ //#region src/authzen/page.ts
130
+ /** The largest page a search answers; a larger `page.limit` is capped to it. */
131
+ const AUTHZEN_MAX_PAGE = 200;
132
+ const DEFAULT_PAGE = 50;
133
+ /**
134
+ * The page a search body asks for. The token is `page.token`, else
135
+ * `page.next_token`, read as a decimal offset; anything else starts at 0. The
136
+ * size is `page.limit`, else `page.size`, capped at 200 and 50 by default.
137
+ */
138
+ function readAuthzenPage(body) {
139
+ const page = isRecord(body) && isRecord(body["page"]) ? body["page"] : void 0;
140
+ const raw = typeof page?.["token"] === "string" ? page["token"] : typeof page?.["next_token"] === "string" ? page["next_token"] : "0";
129
141
  const parsed = Math.trunc(Number(raw));
130
- const sizeRaw = page["limit"] ?? page["size"];
131
- const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) : 50;
142
+ const sizeRaw = page?.["limit"] ?? page?.["size"];
143
+ const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) : DEFAULT_PAGE;
132
144
  return {
133
145
  offset: Number.isFinite(parsed) && parsed > 0 ? parsed : 0,
134
146
  size
135
147
  };
136
148
  }
137
- function paged(items, offset, size) {
149
+ /** One page of `items` with the AuthZEN `page` object. */
150
+ function authzenPage(items, request) {
151
+ const { offset, size } = request;
138
152
  const slice = items.slice(offset, offset + size);
139
153
  const next = offset + slice.length;
140
154
  return {
@@ -146,43 +160,259 @@ function paged(items, offset, size) {
146
160
  }
147
161
  };
148
162
  }
149
- //#endregion
150
- //#region src/authzen/create.ts
151
- function notFound(detail) {
152
- return problemResponse(statusProblem(404, detail));
163
+ /** The answer to a search the PDP cannot run: no results and no next page. */
164
+ function emptyAuthzenPage() {
165
+ return authzenPage([], {
166
+ offset: 0,
167
+ size: 1
168
+ });
153
169
  }
154
- async function readJson(request) {
155
- if (request.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() !== "application/json") return validationProblem("AuthZEN requests must use Content-Type: application/json");
156
- const read = await readBodyText(request);
157
- if (!read.ok) return read.cause === "too-large" ? bodyTooLarge() : validationProblem("AuthZEN body was not valid JSON");
158
- try {
159
- return JSON.parse(read.text);
160
- } catch {
161
- return validationProblem("AuthZEN body was not valid JSON");
170
+ //#endregion
171
+ //#region src/authzen/parse.ts
172
+ /** AuthZEN 1.0 sections 5, 6.1 and 10.1.1. */
173
+ const REQUIRED = {
174
+ evaluation: {
175
+ subject: "type-id",
176
+ action: true,
177
+ resource: "type-id"
178
+ },
179
+ evaluations: {
180
+ subject: "type-id",
181
+ action: true,
182
+ resource: "type-id"
183
+ },
184
+ "search/action": {
185
+ subject: "type-id",
186
+ resource: "type-id"
187
+ },
188
+ "search/resource": {
189
+ subject: "type-id",
190
+ action: true,
191
+ resource: "type"
192
+ },
193
+ "search/subject": {
194
+ subject: "type",
195
+ action: true,
196
+ resource: "type-id"
162
197
  }
198
+ };
199
+ function invalid(detail) {
200
+ return {
201
+ ok: false,
202
+ problem: compact({
203
+ type: problemType("validation"),
204
+ title: "Invalid request",
205
+ status: 400,
206
+ detail
207
+ })
208
+ };
163
209
  }
164
- /**
165
- * The 400 for a request missing a required entity or one of its required
166
- * fields (AuthZEN 1.0 sections 5, 6.1 and 10.1.1), or `undefined`.
167
- */
168
- function missingProblem(body, required) {
210
+ /** The first missing entity or field, checked subject, resource, then action. */
211
+ function missing(body, required) {
169
212
  for (const name of ["subject", "resource"]) {
170
213
  const needs = required[name];
171
214
  if (needs === void 0) continue;
172
215
  const entity = body[name];
173
- if (!isRecord(entity) || typeof entity["type"] !== "string") return validationProblem(`${name}.type is required`);
174
- if (needs === "type-id" && typeof entity["id"] !== "string") return validationProblem(`${name}.id is required`);
216
+ if (!isRecord(entity) || typeof entity["type"] !== "string") return invalid(`${name}.type is required`);
217
+ if (needs === "type-id" && typeof entity["id"] !== "string") return invalid(`${name}.id is required`);
175
218
  }
176
219
  if (required.action === true) {
177
220
  const action = body["action"];
178
- if (!isRecord(action) || typeof action["name"] !== "string") return validationProblem("action.name is required");
221
+ if (!isRecord(action) || typeof action["name"] !== "string") return invalid("action.name is required");
179
222
  }
180
223
  }
181
- const EVALUATION = {
182
- subject: "type-id",
183
- action: true,
184
- resource: "type-id"
185
- };
224
+ function evaluations(body, maxEvaluations) {
225
+ const items = body["evaluations"] ?? [];
226
+ if (!Array.isArray(items)) return invalid("evaluations must be an array");
227
+ if (items.length === 0) return missing(body, REQUIRED.evaluations) ?? {
228
+ ok: true,
229
+ request: {
230
+ kind: "evaluation",
231
+ item: body
232
+ }
233
+ };
234
+ if (items.length > maxEvaluations) return {
235
+ ok: false,
236
+ problem: statusProblem(413, `evaluations batch exceeds ${String(maxEvaluations)}`)
237
+ };
238
+ const semantic = evaluationsSemantic(body);
239
+ if (semantic === void 0) return invalid(`options.evaluations_semantic must be one of ${EVALUATIONS_SEMANTICS.join(", ")}`);
240
+ const shared = compact({
241
+ subject: isRecord(body["subject"]) ? body["subject"] : void 0,
242
+ action: isRecord(body["action"]) ? body["action"] : void 0,
243
+ resource: isRecord(body["resource"]) ? body["resource"] : void 0,
244
+ context: body["context"]
245
+ });
246
+ return {
247
+ ok: true,
248
+ request: {
249
+ kind: "evaluations",
250
+ semantic,
251
+ items: items.map((item) => mergeEvaluationItem(shared, item))
252
+ }
253
+ };
254
+ }
255
+ /**
256
+ * Checks a parsed AuthZEN body the way `permdock/authzen` answers it: the body
257
+ * is an object, then each required entity and field in a fixed order, then the
258
+ * `evaluations` array, batch size and semantic. A failure is the 400 (or 413)
259
+ * Problem Details the handler sends, with the same `detail`.
260
+ */
261
+ function parseAuthzenRequest(kind, body, options = {}) {
262
+ return parseAny(kind, body, options);
263
+ }
264
+ function parseAny(kind, body, options) {
265
+ if (!isRecord(body)) return invalid(`${kind} body must be an object`);
266
+ switch (kind) {
267
+ case "evaluation": return missing(body, REQUIRED.evaluation) ?? {
268
+ ok: true,
269
+ request: {
270
+ kind,
271
+ item: body
272
+ }
273
+ };
274
+ case "evaluations": return evaluations(body, options.maxEvaluations ?? 256);
275
+ case "search/action":
276
+ case "search/resource":
277
+ case "search/subject": return missing(body, REQUIRED[kind]) ?? {
278
+ ok: true,
279
+ request: {
280
+ kind,
281
+ item: body,
282
+ page: readAuthzenPage(body)
283
+ }
284
+ };
285
+ default: return kind;
286
+ }
287
+ }
288
+ /**
289
+ * Reads `request` as an AuthZEN body: `Content-Type: application/json`, at most
290
+ * 1 MiB (a 413 above it), valid JSON, then `parseAuthzenRequest`.
291
+ */
292
+ async function readAuthzenRequest(kind, request, options = {}) {
293
+ if (request.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() !== "application/json") return invalid("AuthZEN requests must use Content-Type: application/json");
294
+ const read = await readBodyText(request);
295
+ if (!read.ok) return read.cause === "too-large" ? {
296
+ ok: false,
297
+ problem: statusProblem(413, `request body exceeds ${String(MAX_BODY_BYTES)} bytes`)
298
+ } : invalid("AuthZEN body was not valid JSON");
299
+ let body;
300
+ try {
301
+ body = JSON.parse(read.text);
302
+ } catch {
303
+ return invalid("AuthZEN body was not valid JSON");
304
+ }
305
+ return parseAuthzenRequest(kind, body, options);
306
+ }
307
+ //#endregion
308
+ //#region src/authzen/search.ts
309
+ /** The one `decide` call every AuthZEN evaluation and search makes. */
310
+ function decideAuthzen(permdock, permission, data, trusted) {
311
+ const decide = permdock.decide;
312
+ return decide(permission, data, trusted ? {
313
+ call: "endpoint",
314
+ adapter: "authzen",
315
+ trusted: true
316
+ } : {
317
+ call: "endpoint",
318
+ adapter: "authzen",
319
+ trusted: false,
320
+ boundary: "decision-endpoint"
321
+ });
322
+ }
323
+ /** Every permission of resource type `type`, in catalog order. */
324
+ function permissionsOfType(tree, type) {
325
+ return listPermissions(tree).filter((leaf) => leaf.resource === type);
326
+ }
327
+ /** The distinct actions of the granted `leaves`, in catalog order. */
328
+ async function grantedActions(leaves, decide) {
329
+ const decisions = await Promise.all(leaves.map(async (leaf) => ({
330
+ leaf,
331
+ decision: await decide(leaf)
332
+ })));
333
+ const names = [];
334
+ for (const { leaf, decision } of decisions) if (decision.outcome === "granted" && !names.includes(leaf.action)) names.push(leaf.action);
335
+ return names.map((name) => ({ name }));
336
+ }
337
+ /** The granted ids among `records`; any subject type but `user` matches none. */
338
+ async function grantedSubjects(type, records, decide) {
339
+ if (typeof type === "string" && type !== "user") return [];
340
+ return (await Promise.all(records.map(async (record) => {
341
+ const properties = {};
342
+ for (const [key, value] of Object.entries(record)) if (key !== "id") properties[key] = value;
343
+ return {
344
+ id: record.id,
345
+ decision: await decide({
346
+ type: "user",
347
+ id: record.id,
348
+ properties
349
+ })
350
+ };
351
+ }))).flatMap(({ id, decision }) => decision.outcome === "granted" ? [{
352
+ type: "user",
353
+ id
354
+ }] : []);
355
+ }
356
+ function scopeOf(options) {
357
+ return {
358
+ tenant: options.tenant,
359
+ actor: options.actor,
360
+ delegation: options.delegation
361
+ };
362
+ }
363
+ /**
364
+ * The AuthZEN `search/action` answer for `user` on `resource`: every permission
365
+ * of `resource.type` in the policy is decided, and the distinct actions of the
366
+ * granted ones are returned in catalog order. Paging is the caller's
367
+ * (`authzenPage`).
368
+ */
369
+ async function searchActions(policy, user, resource, options = {}) {
370
+ const { permdock } = await buildInstance({
371
+ policy,
372
+ user,
373
+ sources: options,
374
+ scope: scopeOf(options)
375
+ });
376
+ const trusted = "data" in options;
377
+ const data = trusted ? options.data : resourceData({ resource });
378
+ return grantedActions(permissionsOfType(policy.permissions, resource.type), (leaf) => decideAuthzen(permdock, leaf, data, trusted));
379
+ }
380
+ /**
381
+ * The AuthZEN `search/subject` answer: the candidates `lister` returns for
382
+ * `request`, each decided as itself, filtered to those granted `action` on
383
+ * `resource`. An unknown action, a subject type other than `user`, or a lister
384
+ * that throws answers none.
385
+ */
386
+ async function searchSubjects(policy, lister, request, options = {}) {
387
+ const permission = permissionOf(permissionLookup(policy.permissions), request);
388
+ if (permission === void 0) return [];
389
+ let records;
390
+ try {
391
+ records = await lister.list(compact({
392
+ type: request.subject.type,
393
+ action: request.action,
394
+ resource: request.resource,
395
+ context: request.context
396
+ }));
397
+ } catch {
398
+ return [];
399
+ }
400
+ const data = resourceData(request);
401
+ return grantedSubjects(request.subject.type, records, async (subject) => {
402
+ const { permdock } = await buildInstance({
403
+ policy,
404
+ user: userFromEntity(subject),
405
+ sources: options,
406
+ scope: scopeOf(options)
407
+ });
408
+ return decideAuthzen(permdock, permission, data, false);
409
+ });
410
+ }
411
+ //#endregion
412
+ //#region src/authzen/create.ts
413
+ function notFound(detail) {
414
+ return problemResponse(statusProblem(404, detail));
415
+ }
186
416
  const WELL_KNOWN = "/.well-known/authzen-configuration";
187
417
  /** The name an item's action gives, for the reasons of an unknown permission. */
188
418
  function actionName(item) {
@@ -249,73 +479,41 @@ const createPermDock = (policy, options) => {
249
479
  if (resolved === void 0) return UNAVAILABLE;
250
480
  const { data, trusted } = resolved;
251
481
  const permdock = await instantiate(pep, item);
252
- const decide = permdock.decide;
253
- const decision = decide(permission, data, trusted ? {
254
- call: "endpoint",
255
- adapter: "authzen",
256
- trusted: true
257
- } : {
258
- call: "endpoint",
259
- adapter: "authzen",
260
- trusted: false,
261
- boundary: "decision-endpoint"
262
- });
263
- return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, resourceIdOf(item)), "authzen");
482
+ return applyApprovalResume(decideAuthzen(permdock, permission, data, trusted), permission, permdock, options.store, request, resourceRef(permission, data, resourceIdOf(item)), "authzen");
264
483
  }
265
484
  async function rowOf(request, pep, item) {
266
485
  return evaluationRow(await decideItem(request, pep, item), permissionOf(lookup, item)?.key ?? actionName(item));
267
486
  }
487
+ function read(kind, request) {
488
+ return readAuthzenRequest(kind, request, { maxEvaluations });
489
+ }
268
490
  async function evaluation(request, pep) {
269
- const body = await readJson(request);
270
- if (body instanceof Response) return body;
271
- if (!isRecord(body)) return validationProblem("evaluation body must be an object");
272
- const missing = missingProblem(body, EVALUATION);
273
- if (missing !== void 0) return missing;
274
- return Response.json(await rowOf(request, pep, body));
491
+ const parsed = await read("evaluation", request);
492
+ if (!parsed.ok) return problemResponse(parsed.problem);
493
+ return Response.json(await rowOf(request, pep, parsed.request.item));
275
494
  }
276
495
  async function evaluations(request, pep) {
277
- const body = await readJson(request);
278
- if (body instanceof Response) return body;
279
- if (!isRecord(body)) return validationProblem("evaluations body must be an object");
280
- const items = body["evaluations"] ?? [];
281
- if (!Array.isArray(items)) return validationProblem("evaluations must be an array");
282
- if (items.length === 0) return missingProblem(body, EVALUATION) ?? Response.json(await rowOf(request, pep, body));
283
- if (items.length > maxEvaluations) return batchTooLarge(maxEvaluations);
284
- const semantic = evaluationsSemantic(body);
285
- if (semantic === void 0) return unknownSemanticProblem();
286
- const shared = compact({
287
- subject: isRecord(body["subject"]) ? body["subject"] : void 0,
288
- action: isRecord(body["action"]) ? body["action"] : void 0,
289
- resource: isRecord(body["resource"]) ? body["resource"] : void 0,
290
- context: body["context"]
291
- });
292
- return Response.json({ evaluations: await evaluateBatch(items, semantic, (item) => rowOf(request, pep, mergeEvaluationItem(shared, item))) });
496
+ const parsed = await read("evaluations", request);
497
+ if (!parsed.ok) return problemResponse(parsed.problem);
498
+ const body = parsed.request;
499
+ switch (body.kind) {
500
+ case "evaluation": return Response.json(await rowOf(request, pep, body.item));
501
+ case "evaluations": return Response.json({ evaluations: await evaluateBatch(body.items, body.semantic, (item) => rowOf(request, pep, item)) });
502
+ default: return body;
503
+ }
293
504
  }
294
505
  async function searchAction(request, pep) {
295
- const body = await readJson(request);
296
- if (body instanceof Response) return body;
297
- if (!isRecord(body)) return validationProblem("search/action body must be an object");
298
- const missingAction = missingProblem(body, {
299
- subject: "type-id",
300
- resource: "type-id"
301
- });
302
- if (missingAction !== void 0) return missingAction;
303
- const item = body;
304
- const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
305
- const leaves = listPermissions(policy.permissions).filter((leaf) => type === void 0 || leaf.resource === type);
306
- const decisions = await Promise.all(leaves.map(async (leaf) => ({
307
- leaf,
308
- decision: await decideItem(request, pep, compact({
309
- subject: item.subject,
310
- context: item.context,
311
- resource: item.resource,
312
- action: { name: leaf.key }
313
- }))
506
+ const parsed = await read("search/action", request);
507
+ if (!parsed.ok) return problemResponse(parsed.problem);
508
+ const { item, page } = parsed.request;
509
+ const type = typeof item.resource?.type === "string" ? item.resource.type : "";
510
+ const actions = await grantedActions(permissionsOfType(policy.permissions, type), (leaf) => decideItem(request, pep, compact({
511
+ subject: item.subject,
512
+ context: item.context,
513
+ resource: item.resource,
514
+ action: { name: leaf.key }
314
515
  })));
315
- const names = [];
316
- for (const { leaf, decision } of decisions) if (decision.outcome === "granted" && !names.includes(leaf.action)) names.push(leaf.action);
317
- const { offset, size } = pageOf(body);
318
- return Response.json(paged(names.map((name) => ({ name })), offset, size));
516
+ return Response.json(authzenPage(actions, page));
319
517
  }
320
518
  async function listRows(type, where) {
321
519
  const list = options.resources?.[type]?.list;
@@ -327,19 +525,12 @@ const createPermDock = (policy, options) => {
327
525
  }
328
526
  }
329
527
  async function searchResource(request, pep) {
330
- const body = await readJson(request);
331
- if (body instanceof Response) return body;
332
- if (!isRecord(body)) return validationProblem("search/resource body must be an object");
333
- const missingResource = missingProblem(body, {
334
- subject: "type-id",
335
- action: true,
336
- resource: "type"
337
- });
338
- if (missingResource !== void 0) return missingResource;
339
- const item = body;
528
+ const parsed = await read("search/resource", request);
529
+ if (!parsed.ok) return problemResponse(parsed.problem);
530
+ const { item, page } = parsed.request;
340
531
  const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
341
532
  const permission = permissionOf(lookup, item);
342
- if (type === void 0 || permission === void 0) return Response.json(paged([], 0, 1));
533
+ if (type === void 0 || permission === void 0) return Response.json(emptyAuthzenPage());
343
534
  const rows = await listRows(type, isRecord(item.resource?.properties) ? item.resource.properties : void 0);
344
535
  const permdock = await instantiate(pep, item);
345
536
  let permitted = [];
@@ -353,51 +544,32 @@ const createPermDock = (policy, options) => {
353
544
  id: String(id)
354
545
  }] : [];
355
546
  });
356
- const { offset, size } = pageOf(body);
357
- return Response.json(paged(entities, offset, size));
547
+ return Response.json(authzenPage(entities, page));
358
548
  }
359
549
  async function searchSubject(request, pep) {
360
- if (options.subjects?.list === void 0) return notFound("search/subject is not configured");
361
- const body = await readJson(request);
362
- if (body instanceof Response) return body;
363
- if (!isRecord(body)) return validationProblem("search/subject body must be an object");
364
- const missingSubject = missingProblem(body, {
365
- subject: "type",
366
- action: true,
367
- resource: "type-id"
368
- });
369
- if (missingSubject !== void 0) return missingSubject;
550
+ const lister = options.subjects;
551
+ if (lister?.list === void 0) return notFound("search/subject is not configured");
552
+ const parsed = await read("search/subject", request);
553
+ if (!parsed.ok) return problemResponse(parsed.problem);
554
+ const { item, page } = parsed.request;
370
555
  let records;
371
556
  try {
372
- records = await options.subjects.list();
557
+ records = await lister.list(compact({
558
+ type: typeof item.subject?.type === "string" ? item.subject.type : "",
559
+ action: item.action ?? {},
560
+ resource: item.resource ?? {},
561
+ context: item.context
562
+ }));
373
563
  } catch {
374
- return Response.json(paged([], 0, 1));
564
+ return Response.json(emptyAuthzenPage());
375
565
  }
376
- const item = body;
377
- const wanted = item.subject?.type;
378
- if (typeof wanted === "string" && wanted !== "user") return Response.json(paged([], 0, 1));
379
- const matches = (await Promise.all(records.map(async (record) => {
380
- const properties = {};
381
- for (const [key, value] of Object.entries(record)) if (key !== "id") properties[key] = value;
382
- return {
383
- id: record.id,
384
- decision: await decideItem(request, pep, compact({
385
- action: item.action,
386
- resource: item.resource,
387
- context: item.context,
388
- subject: {
389
- type: "user",
390
- id: record.id,
391
- properties
392
- }
393
- }))
394
- };
395
- }))).flatMap(({ id, decision }) => decision.outcome === "granted" ? [{
396
- type: "user",
397
- id
398
- }] : []);
399
- const { offset, size } = pageOf(body);
400
- return Response.json(paged(matches, offset, size));
566
+ const matches = await grantedSubjects(item.subject?.type, records, (subject) => decideItem(request, pep, compact({
567
+ action: item.action,
568
+ resource: item.resource,
569
+ context: item.context,
570
+ subject
571
+ })));
572
+ return Response.json(authzenPage(matches, page));
401
573
  }
402
574
  function discovery(request, pathname) {
403
575
  const pdp = `${new URL(request.url).origin}${pathname.slice(pathname.indexOf(WELL_KNOWN) + 34).replace(/\/+$/u, "")}`;
@@ -452,4 +624,4 @@ const createPermDock = (policy, options) => {
452
624
  return { permdockHandler: () => handler };
453
625
  };
454
626
  //#endregion
455
- export { EVALUATIONS_SEMANTICS, createPermDock, evaluateBatch, evaluationsSemantic, mergeEvaluationItem };
627
+ export { AUTHZEN_MAX_PAGE, EVALUATIONS_SEMANTICS, authzenPage, createPermDock, emptyAuthzenPage, evaluateBatch, evaluationsSemantic, mergeEvaluationItem, parseAuthzenRequest, readAuthzenPage, readAuthzenRequest, searchActions, searchSubjects };