permdock 0.5.0 → 0.7.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 (399) hide show
  1. package/README.md +1 -0
  2. package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
  3. package/dist/a2a/index.d.ts +5 -5
  4. package/dist/a2a/index.js +4 -4
  5. package/dist/{adoption-scan-B4R5fnMU.js → adoption-scan-D-feE7BE.js} +1 -1
  6. package/dist/agent/index.d.ts +3 -3
  7. package/dist/agent/index.js +1 -1
  8. package/dist/ai-sdk/index.d.ts +21 -6
  9. package/dist/ai-sdk/index.js +19 -9
  10. package/dist/{approval-prompt-Djo_PyZc.d.ts → approval-prompt-K0faOLFp.d.ts} +2 -2
  11. package/dist/approvals/index.d.ts +4 -4
  12. package/dist/approvals/index.js +4 -4
  13. package/dist/{approvals-DJ6Yd5z1.js → approvals-CMRfsbBh.js} +74 -48
  14. package/dist/{arazzo-B6lebmiQ.js → arazzo-ClrF3PVb.js} +2 -2
  15. package/dist/{arazzo-BWhNF-k0.js → arazzo-rdeJ8n1J.js} +4 -4
  16. package/dist/{args-IIolxxKA.js → args-CC3OwyHW.js} +112 -2
  17. package/dist/astro/index.d.ts +6 -6
  18. package/dist/astro/index.js +2 -2
  19. package/dist/{audience-Dg8XsRaO.js → audience-BrMs8c4o.js} +1 -1
  20. package/dist/{auth-DRLEizbL.js → auth-CscUX8Sy.js} +3 -4
  21. package/dist/authzen/index.d.ts +162 -22
  22. package/dist/authzen/index.js +315 -146
  23. package/dist/{automation-BMZPIVUM.d.ts → automation-DOtAFWdy.d.ts} +3 -3
  24. package/dist/{automation-DVjOckjV.js → automation-ySsxp_Yp.js} +1 -1
  25. package/dist/base-url-BQbddZO5.js +9 -0
  26. package/dist/better-auth/index.d.ts +2 -2
  27. package/dist/better-auth/index.js +2 -2
  28. package/dist/better-supabase/index.d.ts +50 -8
  29. package/dist/better-supabase/index.js +94 -32
  30. package/dist/{bind-CZzhx-Vj.js → bind-D1nO6fiC.js} +5 -5
  31. package/dist/{bind--9EFVYWF.d.ts → bind-JDuvxjuW.d.ts} +7 -7
  32. package/dist/{build-instance-BMnAudHn.js → build-instance-DxE7czo9.js} +1 -1
  33. package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
  34. package/dist/{capability-BSslw1QV.d.ts → capability-D4UC9TTW.d.ts} +2 -2
  35. package/dist/{capability-N1K9IpqS.js → capability-L7NnfhiE.js} +1 -1
  36. package/dist/{casbin-Cr7RLtA3.js → casbin-BHijLuHY.js} +2 -2
  37. package/dist/{casbin-Dyu2gnUD.js → casbin-BW9pS47J.js} +1 -1
  38. package/dist/{casl-64gpT-8x.js → casl-CmJlgziS.js} +2 -2
  39. package/dist/{casl-DjEDhTCP.js → casl-UbI8v-Wq.js} +1 -1
  40. package/dist/catalog/index.d.ts +70 -10
  41. package/dist/catalog/index.js +112 -6
  42. package/dist/catalog-BCCjSAdH.js +1 -0
  43. package/dist/{catalog-R_A__RsH.js → catalog-BaMQfQ6Y.js} +3 -3
  44. package/dist/{catalog-BECMPrwc.js → catalog-D69WhFii.js} +43 -13
  45. package/dist/{catalog-doc-C9wjsfNY.js → catalog-doc-CV9s6B1S.js} +28 -5
  46. package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-C144oW4M.js} +1 -1
  47. package/dist/{create-BWRSXgOF.js → challenge-nGWma08S.js} +122 -25
  48. package/dist/chat/index.d.ts +1 -1
  49. package/dist/chat/index.js +2 -2
  50. package/dist/chat-sdk/index.d.ts +3 -3
  51. package/dist/checks-BC_0mPIq.js +37 -0
  52. package/dist/claude-agent/index.d.ts +3 -3
  53. package/dist/claude-agent/index.js +2 -2
  54. package/dist/clerk/index.d.ts +3 -3
  55. package/dist/clerk/index.js +1 -1
  56. package/dist/cli/bin.js +2 -2
  57. package/dist/cli/index.d.ts +3 -3
  58. package/dist/cli/index.js +3 -3
  59. package/dist/cloud/index.d.ts +127 -11
  60. package/dist/cloud/index.js +251 -3
  61. package/dist/{cloud-CIoHNevm.js → cloud-CO8pYtwr.js} +5 -5
  62. package/dist/{codemod-Cxvvc70T.js → codemod-BP6n8N9L.js} +3 -3
  63. package/dist/{codemod-Bmj9dWMH.js → codemod-i4N2BhDc.js} +3 -3
  64. package/dist/{collect-CrZJJnEF.js → collect-BaWeMjwV.js} +17 -8
  65. package/dist/{collect-DloHbDVa.js → collect-DNm3oKOk.js} +6 -5
  66. package/dist/collect-k_Dulxr5.js +1 -0
  67. package/dist/compile/index.d.ts +1 -1
  68. package/dist/compile/index.js +1 -1
  69. package/dist/{compile-CMqMx_IN.js → compile-BAEO5bOk.js} +2 -2
  70. package/dist/{compile-Ckm2HqBZ.d.ts → compile-COM2VKuN.d.ts} +3 -3
  71. package/dist/{completion-BqhRBJD8.js → completion-BNdVf7X2.js} +3 -3
  72. package/dist/{config-bs_kZeYq.js → config-CoQHDrDi.js} +7 -3
  73. package/dist/{config-B46rm9sc.js → config-DGZzMV1B.js} +2 -2
  74. package/dist/{config-report-DUgj62Ai.js → config-report-Cm7UITNA.js} +3 -3
  75. package/dist/connector-schema-_VCSsdtD.js +433 -0
  76. package/dist/{context-bbFHR-0D.js → context--uM9V3Ui.js} +2 -2
  77. package/dist/convex/index.d.ts +5 -5
  78. package/dist/convex/index.js +2 -2
  79. package/dist/core-B5-w6Kw9.js +335 -0
  80. package/dist/core-CQkE8Esr.d.ts +179 -0
  81. package/dist/{create-0VZ7Pdiu.d.ts → create-B2-CQqCI.d.ts} +5 -5
  82. package/dist/{create-C3b4B5eF.js → create-Cb86Z8Im.js} +9 -8
  83. package/dist/{create-DnrmLnLW.js → create-DJrlhEp9.js} +5 -5
  84. package/dist/{create-BFfm17UA.d.ts → create-QHuuPw3q.d.ts} +7 -7
  85. package/dist/{create-BDS7wc3y.d.ts → create-UTnUVETj.d.ts} +30 -10
  86. package/dist/{credential-DM2um3ha.js → credential-CIM7wHwA.js} +4 -4
  87. package/dist/{credentials-DPyHmYz5.js → credentials-BpuTwd7a.js} +1 -1
  88. package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-DRo2QM6E.js} +13 -2
  89. package/dist/{delegation-DaXVdDhM.js → delegation-C5rOdTp5.js} +5 -5
  90. package/dist/delivery/index.d.ts +5 -5
  91. package/dist/delivery/index.js +4 -3
  92. package/dist/{delivery-DCAgNyCn.js → delivery-rwOKLWRm.js} +51 -2
  93. package/dist/{denied-text-D8jDHgsl.d.ts → denied-text-D4qkEtFz.d.ts} +2 -2
  94. package/dist/{describe-BybMRY7A.js → describe-DZlnEtLy.js} +1 -0
  95. package/dist/{describe-BZUsixiL.d.ts → describe-O0SwYIK8.d.ts} +2 -2
  96. package/dist/{diff-CxZo9pTq.js → diff-Btr1c1Ow.js} +2 -2
  97. package/dist/{diff-DCePiN6M.js → diff-DzT-xD13.js} +10 -10
  98. package/dist/{doctor-DFjUxf2f.js → doctor-BU1szn63.js} +241 -49
  99. package/dist/{doctor-CxiwSfqH.js → doctor-BoK_y0KO.js} +4 -4
  100. package/dist/drizzle/index.d.ts +3 -3
  101. package/dist/drizzle/index.js +1 -1
  102. package/dist/elysia/index.d.ts +5 -5
  103. package/dist/elysia/index.js +3 -3
  104. package/dist/{errors-C2PXIv4c.d.ts → errors-B_Qg9D3e.d.ts} +2 -2
  105. package/dist/{errors-CWTY6uih.js → errors-DpP_U6Bf.js} +1 -0
  106. package/dist/{evaluate-_R8QkWaf.js → evaluate-B_oqFbWC.js} +130 -34
  107. package/dist/{evaluations-16UqqQ6W.d.ts → evaluations-BCddEOfO.d.ts} +4 -4
  108. package/dist/{evaluations-DZ2CbV5k.js → evaluations-DReoiVBw.js} +4 -4
  109. package/dist/eve/index.d.ts +5 -5
  110. package/dist/eve/index.js +3 -3
  111. package/dist/express/index.d.ts +5 -5
  112. package/dist/express/index.js +3 -3
  113. package/dist/fastify/index.d.ts +5 -5
  114. package/dist/fastify/index.js +3 -3
  115. package/dist/{fetch-adapter-qKJBuRqy.d.ts → fetch-adapter-CuhyYwC1.d.ts} +4 -4
  116. package/dist/{fetch-adapter-g0ypLkID.js → fetch-adapter-De-u6vhJ.js} +3 -3
  117. package/dist/{fields-D9tPVUUS.js → fields-ClcQLrVc.js} +48 -13
  118. package/dist/{files-C5ZI27eV.js → files-acUbNwWt.js} +15 -2
  119. package/dist/{fixtures-B7XrLeY7.js → fixtures-BTMW6zgU.js} +2 -2
  120. package/dist/{flags-C3DktBDY.js → flags-aaeRAdiD.js} +2 -2
  121. package/dist/{from-snapshot-D2lZt4Dd.js → from-snapshot-Bz469dIh.js} +17 -10
  122. package/dist/generate-3FNO5P5Q.js +159 -0
  123. package/dist/{grantee-Cn1HyUsI.js → grantee-BrRANrpT.js} +14 -4
  124. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-C6P1Tvol.js} +1 -1
  125. package/dist/{grantee-match-DHArqY82.js → grantee-match-0RtHWQDx.js} +3 -3
  126. package/dist/h3/index.d.ts +4 -4
  127. package/dist/h3/index.js +3 -3
  128. package/dist/{helpers-DTcZOzhF.js → helpers-DY3vXuGs.js} +3 -3
  129. package/dist/hono/index.d.ts +5 -5
  130. package/dist/hono/index.js +3 -3
  131. package/dist/{hosted-DBDX0M-P.d.ts → hosted-BmjzxQhp.d.ts} +14 -2
  132. package/dist/{hosted-BZIAYvon.js → hosted-XBgU6RGT.js} +34 -12
  133. package/dist/{http-DXJ37RDA.js → http-Ca3Sr5x1.js} +1 -1
  134. package/dist/{import-DMmOG27O.js → import-Bz0GefWg.js} +5 -5
  135. package/dist/{import-CNV7I2Dw.js → import-DB2EG_iy.js} +3 -3
  136. package/dist/{index-CxGUswIC.d.ts → index-BE8y3moU.d.ts} +50 -8
  137. package/dist/{index-Chrs5fQ-.d.ts → index-BSfRl0hZ.d.ts} +6 -6
  138. package/dist/{index-DOVf7RJv.d.ts → index-BTkwrK7v.d.ts} +155 -17
  139. package/dist/index-CMiPH2Tv.d.ts +206 -0
  140. package/dist/{index-SGdIQyzc.d.ts → index-DH9DUDEM.d.ts} +18 -3
  141. package/dist/{index-BcHcPyIo.d.ts → index-DLwcuCN_.d.ts} +86 -7
  142. package/dist/index.d.ts +18 -17
  143. package/dist/index.js +27 -25
  144. package/dist/{init-GG6Jh8HD.js → init-5TXNji88.js} +5 -5
  145. package/dist/{init-DeMYsnYJ.js → init-B-4t1NzC.js} +4 -4
  146. package/dist/{instance-options-Omfd793B.d.ts → instance-options-CU0YQCLH.d.ts} +1 -1
  147. package/dist/{instance-snapshot-Cxq4ygFc.js → instance-snapshot-CjcwnEiV.js} +20 -14
  148. package/dist/jwt/index.d.ts +83 -5
  149. package/dist/jwt/index.js +143 -5
  150. package/dist/{kernel-5JatXyND.js → kernel-DVExUwkp.js} +138 -12
  151. package/dist/kysely/index.d.ts +3 -3
  152. package/dist/kysely/index.js +1 -1
  153. package/dist/load-DrMHXzgN.js +1 -0
  154. package/dist/{load-DFS_ry0W.js → load-DxroEzH1.js} +2 -2
  155. package/dist/{login-Dfe5RlYk.js → login-ClSJh5t5.js} +4 -4
  156. package/dist/{login-imhuwvn3.js → login-WC9HPJpU.js} +6 -10
  157. package/dist/{manifest-C8IzW3Do.js → manifest-B79YuF2T.js} +6 -2
  158. package/dist/{manifest-mx5ghSFM.d.ts → manifest-BVhExYhw.d.ts} +23 -2
  159. package/dist/{manifest-CtKR3GXL.js → manifest-Dv6q4i5s.js} +54 -35
  160. package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-Cv492Qev.js} +37 -7
  161. package/dist/{map-claims-D3oRmTk0.js → map-claims-etGIS_Dv.js} +14 -11
  162. package/dist/{map-error-TCAdw-eW.js → map-error-BQGyDm_M.js} +1 -1
  163. package/dist/mcp/index.d.ts +64 -10
  164. package/dist/mcp/index.js +151 -22
  165. package/dist/{migrate-BShP7Vf4.js → migrate-Dodel0IJ.js} +77 -24
  166. package/dist/nest/index.d.ts +5 -5
  167. package/dist/nest/index.js +3 -3
  168. package/dist/next/index.d.ts +9 -9
  169. package/dist/next/index.js +5 -5
  170. package/dist/next/plugin.d.ts +1 -1
  171. package/dist/next/plugin.js +2 -2
  172. package/dist/node/index.d.ts +5 -5
  173. package/dist/node/index.js +2 -2
  174. package/dist/openai/index.d.ts +5 -5
  175. package/dist/openai/index.js +3 -3
  176. package/dist/openapi/index.d.ts +14 -4
  177. package/dist/openapi/index.js +1 -1
  178. package/dist/{openapi-ahr8rHu3.js → openapi-DMocl1bh.js} +4 -4
  179. package/dist/{openapi-B7HZ0f-r.js → openapi-Ddb4628T.js} +2 -7
  180. package/dist/{openapi-DTaEmTSW.js → openapi-ztVaux6j.js} +8 -8
  181. package/dist/{operation-findings-DgATDpvh.js → operation-findings-kRcEp8lE.js} +1 -1
  182. package/dist/{operations-CxybZErY.d.ts → operations-BNLes61x.d.ts} +1 -1
  183. package/dist/orpc/index.d.ts +6 -6
  184. package/dist/orpc/index.js +4 -4
  185. package/dist/otel/index.d.ts +3 -3
  186. package/dist/otel/index.js +1 -1
  187. package/dist/{output-Dyw8fyPF.js → output-DgSDLrta.js} +7 -3
  188. package/dist/{output-files-DhRBBE4n.js → output-files-CCMdcFWb.js} +2 -2
  189. package/dist/output-files-DPAY7-GX.js +1 -0
  190. package/dist/{ownership-BatFgAA4.js → ownership-Z2LpxsGa.js} +1349 -883
  191. package/dist/parse-Ddhz2xf4.js +148 -0
  192. package/dist/{parse-local-manifest-CVSs6J9I.js → parse-local-manifest-T1Q8X3A2.js} +24 -1
  193. package/dist/{parse-local-manifest-DgqtruPn.d.ts → parse-local-manifest-e4mdwAKd.d.ts} +1 -1
  194. package/dist/pdp/index.d.ts +3 -3
  195. package/dist/pdp/index.js +7 -3
  196. package/dist/peer-12Q5I_RH.js +976 -0
  197. package/dist/{peer-CRvC7Hg1.js → peer-DOzzMfZL.js} +1 -1
  198. package/dist/{permdock-B9JxkBwC.js → permdock-BfWEeMqk.js} +177 -49
  199. package/dist/{permdock-D7eeLJER.d.ts → permdock-Dco6dyCK.d.ts} +34 -5
  200. package/dist/{permission-registry-Br4jSNVi.js → permission-registry-DpPtSKNZ.js} +1 -1
  201. package/dist/{vocabulary-D6lPdb4Z.d.ts → permission-types-DhNEmoRG.d.ts} +4 -62
  202. package/dist/{permissions-oEWfl-kl.d.ts → permissions-CoqCOfJ3.d.ts} +2 -1
  203. package/dist/{permissions-B-wCP5ZC.js → permissions-CyH2MV_B.js} +1 -1
  204. package/dist/{permissions-CZKiUfFM.js → permissions-DArULThq.js} +4 -4
  205. package/dist/pkce-5h8NgMQJ.js +21 -0
  206. package/dist/{policies-CO1oOymN.js → policies-B2lZIurj.js} +3 -3
  207. package/dist/{policy-Czo4n3Hs.d.ts → policy-B7dg_yzu.d.ts} +2 -2
  208. package/dist/{policy-DLZJ5gAp.js → policy-DaJy4nK4.js} +17 -8
  209. package/dist/{policy-from-catalog-DzhEc3Y9.js → policy-from-catalog-DFWYkNdu.js} +9 -9
  210. package/dist/{policy-types-DzwivBgR.d.ts → policy-types-B-F-qAZk.d.ts} +109 -5
  211. package/dist/postgres-store-BL9M_CA1.js +1001 -0
  212. package/dist/{postgrest-NUqZT-RB.d.ts → postgrest-CYacM_u7.d.ts} +12 -1
  213. package/dist/{postgrest-CW0IqC-U.js → postgrest-r5faDIzD.js} +47 -5
  214. package/dist/{powersync-BHfuehf3.js → powersync-13odBwiM.js} +3 -3
  215. package/dist/powersync-53ryOZip.js +1059 -0
  216. package/dist/powersync-CExtTLyA.js +1 -0
  217. package/dist/preset/index.js +1 -1
  218. package/dist/{preset-DZdU0tne.js → preset-CHTbd-DQ.js} +2 -2
  219. package/dist/prisma/index.d.ts +2 -2
  220. package/dist/prisma/index.js +1 -1
  221. package/dist/{problem-details-DXlt-vks.d.ts → problem-details-Tcfmj3bV.d.ts} +1 -1
  222. package/dist/prompt-DwtVemER.js +935 -0
  223. package/dist/{protected-DEPHc2xV.d.ts → protected-BwZYL1X_.d.ts} +6 -5
  224. package/dist/{protected-DfjY5mLA.js → protected-DXE3cQYg.js} +2 -2
  225. package/dist/{provider-CC-u3bYP.js → provider-BQsTYYy0.js} +2 -2
  226. package/dist/{provider-DMVt6yYn.d.ts → provider-Csk-THAn.d.ts} +1 -1
  227. package/dist/{provider-store-B5Yrkhzr.js → provider-store-IgqQipCO.js} +2 -2
  228. package/dist/{pull-BgIfno6w.js → pull-CN5OLxrF.js} +7 -7
  229. package/dist/pull-Cty6Ovyu.js +1 -0
  230. package/dist/{push-CmFVBOeI.js → push-tVdG8dUL.js} +54 -14
  231. package/dist/{pushed-policy-BImMTTIM.d.ts → pushed-policy-BbcY9r_4.d.ts} +1 -1
  232. package/dist/{pushed-policy-DobP7AHI.js → pushed-policy-CmYeSQqq.js} +1 -1
  233. package/dist/react/index.d.ts +6 -6
  234. package/dist/react/index.js +3 -3
  235. package/dist/react/provider-client.d.ts +1 -1
  236. package/dist/react/provider-client.js +1 -1
  237. package/dist/react-native/index.d.ts +25 -11
  238. package/dist/react-native/index.js +214 -24
  239. package/dist/{refs-K6eWUJ0H.js → refs-CNJBiTFo.js} +15 -1
  240. package/dist/{replay-D7iKcLFe.d.ts → replay-DCDD_ZfL.d.ts} +1 -1
  241. package/dist/{request-context-BTRTG7OT.js → request-context-BykKLmyE.js} +2 -2
  242. package/dist/resend/index.d.ts +4 -4
  243. package/dist/{retire-CALjIQ7e.js → retire-Wj6dkyDE.js} +2 -2
  244. package/dist/{rls-BA8an5Ap.js → rls-Ck_PocSp.js} +32 -8
  245. package/dist/{rls-j6t43t7n.js → rls-CxBZb4rZ.js} +478 -534
  246. package/dist/{role-builder-CXbis5-X.js → role-builder-C1VJzvcr.js} +3 -3
  247. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  248. package/dist/{rpc-aPyNi6tA.js → rpc-Bk1bE-ch.js} +1 -1
  249. package/dist/run-Bz7DXGEv.js +1 -0
  250. package/dist/{run-ticket-sxFI6LAk.js → run-ticket-B5d_63Ma.js} +22 -1
  251. package/dist/{run-ticket-BjhTOi6u.d.ts → run-ticket-BpNi7BCi.d.ts} +8 -3
  252. package/dist/{run-DOfMtc9V.js → run-uLD2aWuO.js} +7 -7
  253. package/dist/{runtime-D3VTAiCA.js → runtime-Vif3_-zf.js} +1 -1
  254. package/dist/{saas-FO-Q8oj0.js → saas-Az_Kz-4D.js} +7 -7
  255. package/dist/{scan-BOI5tJ-6.js → scan-DSljDE1Y.js} +1 -1
  256. package/dist/{schema-yLuBWWsh.js → schema-gIcCx7zM.js} +1 -1
  257. package/dist/scim/index.d.ts +3 -2
  258. package/dist/scim/index.js +3 -1
  259. package/dist/scim-C7JYhySg.js +44 -0
  260. package/dist/{scim-ClHtpyV3.js → scim-YNieBO1U.js} +3 -537
  261. package/dist/{scopes-CUPSjo9q.js → scopes-BHsc-wp-.js} +1 -1
  262. package/dist/server/index.d.ts +11 -11
  263. package/dist/server/index.js +7 -7
  264. package/dist/{server-DqCT4CgZ.js → server-Bnga6I50.js} +3 -3
  265. package/dist/{server-types-BLd4MnBX.d.ts → server-types-C4gZUEZy.d.ts} +9 -9
  266. package/dist/{shared-DvvFzYXe.js → shared-C8LjUdVU.js} +1 -1
  267. package/dist/{shared-CD11nBbC.js → shared-fMKOv8hP.js} +46 -39
  268. package/dist/{sink-Bj_lDUDq.d.ts → sink-Cp_Eot9W.d.ts} +4 -4
  269. package/dist/{skills-B6lVdD_W.js → skills-Dcjw9_1C.js} +5 -5
  270. package/dist/{skills-CTYwkl44.js → skills-g_3BS9NC.js} +3 -3
  271. package/dist/{snapshot-CXUWfsNy.js → snapshot-CbGmYiJx.js} +4 -4
  272. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-DT2Kx1F8.js} +1 -1
  273. package/dist/{snapshot-cache-DqK9eDmM.d.ts → snapshot-cache-Pahd3IYJ.d.ts} +1 -1
  274. package/dist/solid/index.d.ts +6 -5
  275. package/dist/solid/index.js +4 -4
  276. package/dist/solid-start/index.d.ts +6 -6
  277. package/dist/solid-start/index.js +3 -3
  278. package/dist/{sources-vs5dGOsS.js → sources-B-zYB4GS.js} +111 -25
  279. package/dist/{sources-BV9j0DeZ.d.ts → sources-DEEuGb8S.d.ts} +63 -14
  280. package/dist/sources-qoIJQrJv.js +11 -0
  281. package/dist/{sql-B5T1IL83.js → sql-B96movIM.js} +5 -1
  282. package/dist/sql-CDEPCA0g.d.ts +10 -0
  283. package/dist/{src-DLfUWFAI.js → src-DLFrtrrC.js} +154 -53
  284. package/dist/ssf/index.d.ts +4 -4
  285. package/dist/ssf/index.js +640 -211
  286. package/dist/{standard-webhooks-6lg8v_is.d.ts → standard-webhooks-B_qRg0ws.d.ts} +2 -2
  287. package/dist/{store-4u_hxjWa.js → store-DSP9oGvh.js} +15 -7
  288. package/dist/{store-options-BqEakYRa.js → store-options-B_poyYvg.js} +6 -6
  289. package/dist/{stores-ClZUgeoP.d.ts → stores-BAZwSYZA.d.ts} +6 -5
  290. package/dist/{stores-BbsD4fAR.js → stores-BqEuHC05.js} +2 -2
  291. package/dist/{stream-7-xmnf3U.d.ts → stream-2Vwhl7Er.d.ts} +2 -2
  292. package/dist/{style-Uao76wO7.js → style-Cqo7-73x.js} +1 -0
  293. package/dist/{style-DiKWnAvn.js → style-Ds1gNm77.js} +1 -1
  294. package/dist/supabase/index.d.ts +8 -7
  295. package/dist/supabase/index.js +5 -5
  296. package/dist/supabase/middleware.d.ts +6 -6
  297. package/dist/supabase/middleware.js +6 -6
  298. package/dist/{supabase-Dxlp8A94.js → supabase--0aJdLEd.js} +9 -7
  299. package/dist/{supabase-9pqI57pW.js → supabase-Bqp7iIY2.js} +3 -3
  300. package/dist/supabase-hook-DJxC4PoP.js +1 -0
  301. package/dist/{supabase-hook-DdDQhMlw.js → supabase-hook-Dg0SrQWR.js} +1069 -123
  302. package/dist/supautils-MESd81bF.js +689 -0
  303. package/dist/{support-session-C6xJQYut.js → support-session-Cna49-3f.js} +2 -2
  304. package/dist/svelte/index.d.ts +5 -5
  305. package/dist/svelte/index.js +5 -5
  306. package/dist/svelte/runtime.d.ts +3 -3
  307. package/dist/svelte/runtime.js +3 -3
  308. package/dist/svelte/source.d.ts +5 -5
  309. package/dist/svelte/source.js +2 -2
  310. package/dist/sveltekit/index.d.ts +6 -6
  311. package/dist/sveltekit/index.js +2 -2
  312. package/dist/tanstack-start/index.d.ts +6 -6
  313. package/dist/tanstack-start/index.js +2 -2
  314. package/dist/{tenancy-DN2QAx9z.js → tenancy-CmeBQ6Nv.js} +12 -3
  315. package/dist/terminal/index.d.ts +6 -6
  316. package/dist/terminal/index.js +3 -3
  317. package/dist/testing/core.d.ts +2 -0
  318. package/dist/testing/core.js +1 -0
  319. package/dist/testing/fixtures/index.d.ts +12 -0
  320. package/dist/testing/fixtures/index.js +770 -0
  321. package/dist/testing/index.d.ts +41 -174
  322. package/dist/testing/index.js +241 -731
  323. package/dist/testing/saas/index.d.ts +5 -5
  324. package/dist/testing/saas/index.js +2 -2
  325. package/dist/testing/saas/permissions.d.ts +1 -1
  326. package/dist/testing/saas/permissions.js +1 -1
  327. package/dist/text-diff-DhITNCnD.js +444 -0
  328. package/dist/{token-BLZcjQgt.js → token-2qYDvXz2.js} +1 -1
  329. package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-reAhIzdl.js} +1 -1
  330. package/dist/trpc/index.d.ts +6 -6
  331. package/dist/trpc/index.js +3 -3
  332. package/dist/{types-5Ut_pbKy.d.ts → types-BWZybqs9.d.ts} +112 -8
  333. package/dist/{types-CZTnPFzM.d.ts → types-BXMYB7BY.d.ts} +2 -2
  334. package/dist/{types-CdlxsYQh.d.ts → types-BfVmNJO5.d.ts} +14 -3
  335. package/dist/{types-BqAKcRNW.d.ts → types-CIeZcG8v.d.ts} +2 -2
  336. package/dist/{types-BNORmDM8.d.ts → types-CKV71kKh.d.ts} +4 -4
  337. package/dist/{types-tIgIeIKJ.d.ts → types-CQVEQawv.d.ts} +4 -4
  338. package/dist/{types-BjV-fqcA.d.ts → types-CeIscIKp.d.ts} +4 -4
  339. package/dist/{types-_sHy8BQf.d.ts → types-CfiKC5aN.d.ts} +1 -1
  340. package/dist/{types-ClZaWzfb.d.ts → types-D3A19w4A.d.ts} +8 -4
  341. package/dist/{types-C8-KNsFf.d.ts → types-DBHftjgS.d.ts} +15 -8
  342. package/dist/{types-CCpc2Dcv.d.ts → types-DC44-hqb.d.ts} +2 -2
  343. package/dist/{types-fbZ7JEXr.d.ts → types-DXmwu78Z.d.ts} +4 -4
  344. package/dist/{types-DiQjupG2.d.ts → types-cTos-H7p.d.ts} +2 -2
  345. package/dist/{types-DX0LaKTb.d.ts → types-g7Oy6Zg4.d.ts} +3 -3
  346. package/dist/unplugin/index.d.ts +1 -1
  347. package/dist/unplugin/index.js +2 -2
  348. package/dist/{usage-T5mXq98v.js → usage-Bybmck7f.js} +7 -7
  349. package/dist/{usage-DHtE8j4E.js → usage-CDaLXCfL.js} +2 -2
  350. package/dist/usage-y-kBNdqs.js +1 -0
  351. package/dist/{validation-error-Bg5Tpluk.d.ts → validation-error-CQpoquwj.d.ts} +1 -1
  352. package/dist/{verify-DbCL9bnB.js → verify-pe8rL_Qw.js} +350 -83
  353. package/dist/{views-DTIIO-oQ.js → views-BB8E9dTP.js} +1 -1
  354. package/dist/vocabulary-Bg3eeT2H.d.ts +67 -0
  355. package/dist/vue/index.d.ts +6 -5
  356. package/dist/vue/index.js +4 -4
  357. package/dist/{waiter-CKy4MQSY.d.ts → waiter-DwEyouan.d.ts} +2 -2
  358. package/dist/watch-Bd9mx3rd.js +1 -0
  359. package/dist/{watch-CszoTJMq.js → watch-C-4VmFlL.js} +3 -3
  360. package/dist/webmcp/index.d.ts +2 -2
  361. package/dist/webmcp/index.js +2 -2
  362. package/dist/{where-scope-Dv-WTP-w.js → where-scope-wq2coopv.js} +41 -21
  363. package/dist/{who-can-D0QoYbEb.js → who-can-BwNsI_Js.js} +6 -6
  364. package/dist/workflow/index.d.ts +3 -3
  365. package/dist/workflow/index.js +5 -5
  366. package/dist/workflow-sdk/index.d.ts +5 -5
  367. package/dist/{wrap-Bd1Tejur.d.ts → wrap-B6R0cMRL.d.ts} +2 -2
  368. package/dist/{wrap-gX61EtpB.js → wrap-CiSc_KCq.js} +8 -2
  369. package/package.json +22 -11
  370. package/schemas/cli-result-v1.json +1 -0
  371. package/schemas/cloud-api-v1.json +152 -7
  372. package/schemas/connector-v1.json +8 -0
  373. package/schemas/supabase-claims-v1.json +5 -0
  374. package/schemas/supabase-manifest-v1.json +276 -75
  375. package/skills/permdock/SKILL.md +1 -0
  376. package/skills/permdock-agents/references/runtimes.md +3 -1
  377. package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
  378. package/skills/permdock-data/references/queries-and-rls.md +5 -2
  379. package/skills/permdock-tenancy/SKILL.md +1 -1
  380. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -0
  381. package/skills/permdock-wire/references/adapters.md +14 -0
  382. package/skills/permdock-wire/references/policy-options.md +1 -0
  383. package/dist/catalog-DjhMYYCq.js +0 -1
  384. package/dist/collect-FlXJlhus.js +0 -1
  385. package/dist/index-D8EovfsP.d.ts +0 -91
  386. package/dist/load-BxEtwlBS.js +0 -1
  387. package/dist/output-files-B3IZJksC.js +0 -1
  388. package/dist/parse-Cxq0WxrA.js +0 -53
  389. package/dist/peer-C8swJ2GH.js +0 -50
  390. package/dist/powersync-CbzkqL_M.js +0 -1
  391. package/dist/powersync-bYUDLOAO.js +0 -538
  392. package/dist/prompt-DfZLJLIn.js +0 -32
  393. package/dist/pull-ByOks_Tg.js +0 -1
  394. package/dist/run-CNsApDpd.js +0 -1
  395. package/dist/supabase-hook-CXcGpHqq.js +0 -1
  396. package/dist/supautils-B6HYL9eL.js +0 -91
  397. package/dist/text-diff-BQcUapOb.js +0 -15
  398. package/dist/usage-CHOtwL19.js +0 -1
  399. package/dist/watch-Cb-NcaUw.js +0 -1
@@ -1,15 +1,14 @@
1
1
  import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
2
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";
3
+ import { a as problemType, o as statusProblem } from "../problem-details-cn5X30gZ.js";
4
+ import { a as getResource, c as listPermissions } from "../permission-registry-DpPtSKNZ.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";
7
+ import { n as readBodyText, t as MAX_BODY_BYTES } from "../body-text-QcXok_SI.js";
8
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-BMnAudHn.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-DZ2CbV5k.js";
9
+ import { a as methodNotAllowed, c as problemResponse, u as unauthenticatedProblem } from "../problem-CTviyH5L.js";
10
+ import { n as resolveOrNull, t as buildInstance } from "../build-instance-DxE7czo9.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-DReoiVBw.js";
13
12
  //#region src/authzen/map.ts
14
13
  const UNKNOWN = {
15
14
  outcome: "denied",
@@ -123,18 +122,30 @@ function mergeEvaluationItem(shared, item) {
123
122
  context: item["context"] ?? shared.context
124
123
  });
125
124
  }
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";
125
+ //#endregion
126
+ //#region src/authzen/page.ts
127
+ /** The largest page a search answers; a larger `page.limit` is capped to it. */
128
+ const AUTHZEN_MAX_PAGE = 200;
129
+ const DEFAULT_PAGE = 50;
130
+ /**
131
+ * The page a search body asks for. The token is `page.token`, else
132
+ * `page.next_token`, read as a decimal offset; anything else starts at 0. The
133
+ * size is `page.limit`, else `page.size`, capped at 200 and 50 by default.
134
+ */
135
+ function readAuthzenPage(body) {
136
+ const page = isRecord(body) && isRecord(body["page"]) ? body["page"] : void 0;
137
+ const raw = typeof page?.["token"] === "string" ? page["token"] : typeof page?.["next_token"] === "string" ? page["next_token"] : "0";
129
138
  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;
139
+ const sizeRaw = page?.["limit"] ?? page?.["size"];
140
+ const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) : DEFAULT_PAGE;
132
141
  return {
133
142
  offset: Number.isFinite(parsed) && parsed > 0 ? parsed : 0,
134
143
  size
135
144
  };
136
145
  }
137
- function paged(items, offset, size) {
146
+ /** One page of `items` with the AuthZEN `page` object. */
147
+ function authzenPage(items, request) {
148
+ const { offset, size } = request;
138
149
  const slice = items.slice(offset, offset + size);
139
150
  const next = offset + slice.length;
140
151
  return {
@@ -146,43 +157,259 @@ function paged(items, offset, size) {
146
157
  }
147
158
  };
148
159
  }
149
- //#endregion
150
- //#region src/authzen/create.ts
151
- function notFound(detail) {
152
- return problemResponse(statusProblem(404, detail));
160
+ /** The answer to a search the PDP cannot run: no results and no next page. */
161
+ function emptyAuthzenPage() {
162
+ return authzenPage([], {
163
+ offset: 0,
164
+ size: 1
165
+ });
153
166
  }
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");
167
+ //#endregion
168
+ //#region src/authzen/parse.ts
169
+ /** AuthZEN 1.0 sections 5, 6.1 and 10.1.1. */
170
+ const REQUIRED = {
171
+ evaluation: {
172
+ subject: "type-id",
173
+ action: true,
174
+ resource: "type-id"
175
+ },
176
+ evaluations: {
177
+ subject: "type-id",
178
+ action: true,
179
+ resource: "type-id"
180
+ },
181
+ "search/action": {
182
+ subject: "type-id",
183
+ resource: "type-id"
184
+ },
185
+ "search/resource": {
186
+ subject: "type-id",
187
+ action: true,
188
+ resource: "type"
189
+ },
190
+ "search/subject": {
191
+ subject: "type",
192
+ action: true,
193
+ resource: "type-id"
162
194
  }
195
+ };
196
+ function invalid(detail) {
197
+ return {
198
+ ok: false,
199
+ problem: compact({
200
+ type: problemType("validation"),
201
+ title: "Invalid request",
202
+ status: 400,
203
+ detail
204
+ })
205
+ };
163
206
  }
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) {
207
+ /** The first missing entity or field, checked subject, resource, then action. */
208
+ function missing(body, required) {
169
209
  for (const name of ["subject", "resource"]) {
170
210
  const needs = required[name];
171
211
  if (needs === void 0) continue;
172
212
  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`);
213
+ if (!isRecord(entity) || typeof entity["type"] !== "string") return invalid(`${name}.type is required`);
214
+ if (needs === "type-id" && typeof entity["id"] !== "string") return invalid(`${name}.id is required`);
175
215
  }
176
216
  if (required.action === true) {
177
217
  const action = body["action"];
178
- if (!isRecord(action) || typeof action["name"] !== "string") return validationProblem("action.name is required");
218
+ if (!isRecord(action) || typeof action["name"] !== "string") return invalid("action.name is required");
179
219
  }
180
220
  }
181
- const EVALUATION = {
182
- subject: "type-id",
183
- action: true,
184
- resource: "type-id"
185
- };
221
+ function evaluations(body, maxEvaluations) {
222
+ const items = body["evaluations"] ?? [];
223
+ if (!Array.isArray(items)) return invalid("evaluations must be an array");
224
+ if (items.length === 0) return missing(body, REQUIRED.evaluations) ?? {
225
+ ok: true,
226
+ request: {
227
+ kind: "evaluation",
228
+ item: body
229
+ }
230
+ };
231
+ if (items.length > maxEvaluations) return {
232
+ ok: false,
233
+ problem: statusProblem(413, `evaluations batch exceeds ${String(maxEvaluations)}`)
234
+ };
235
+ const semantic = evaluationsSemantic(body);
236
+ if (semantic === void 0) return invalid(`options.evaluations_semantic must be one of ${EVALUATIONS_SEMANTICS.join(", ")}`);
237
+ const shared = compact({
238
+ subject: isRecord(body["subject"]) ? body["subject"] : void 0,
239
+ action: isRecord(body["action"]) ? body["action"] : void 0,
240
+ resource: isRecord(body["resource"]) ? body["resource"] : void 0,
241
+ context: body["context"]
242
+ });
243
+ return {
244
+ ok: true,
245
+ request: {
246
+ kind: "evaluations",
247
+ semantic,
248
+ items: items.map((item) => mergeEvaluationItem(shared, item))
249
+ }
250
+ };
251
+ }
252
+ /**
253
+ * Checks a parsed AuthZEN body the way `permdock/authzen` answers it: the body
254
+ * is an object, then each required entity and field in a fixed order, then
255
+ * the `evaluations` array, batch size and semantic. A failure is the 400 (or
256
+ * 413) Problem Details the handler sends, with the same `detail`.
257
+ */
258
+ function parseAuthzenRequest(kind, body, options = {}) {
259
+ return parseAny(kind, body, options);
260
+ }
261
+ function parseAny(kind, body, options) {
262
+ if (!isRecord(body)) return invalid(`${kind} body must be an object`);
263
+ switch (kind) {
264
+ case "evaluation": return missing(body, REQUIRED.evaluation) ?? {
265
+ ok: true,
266
+ request: {
267
+ kind,
268
+ item: body
269
+ }
270
+ };
271
+ case "evaluations": return evaluations(body, options.maxEvaluations ?? 256);
272
+ case "search/action":
273
+ case "search/resource":
274
+ case "search/subject": return missing(body, REQUIRED[kind]) ?? {
275
+ ok: true,
276
+ request: {
277
+ kind,
278
+ item: body,
279
+ page: readAuthzenPage(body)
280
+ }
281
+ };
282
+ default: return kind;
283
+ }
284
+ }
285
+ /**
286
+ * Reads `request` as an AuthZEN body: `Content-Type: application/json`, at
287
+ * most 1 MiB (a 413 above it), valid JSON, then `parseAuthzenRequest`.
288
+ */
289
+ async function readAuthzenRequest(kind, request, options = {}) {
290
+ if (request.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() !== "application/json") return invalid("AuthZEN requests must use Content-Type: application/json");
291
+ const read = await readBodyText(request);
292
+ if (!read.ok) return read.cause === "too-large" ? {
293
+ ok: false,
294
+ problem: statusProblem(413, `request body exceeds ${String(MAX_BODY_BYTES)} bytes`)
295
+ } : invalid("AuthZEN body was not valid JSON");
296
+ let body;
297
+ try {
298
+ body = JSON.parse(read.text);
299
+ } catch {
300
+ return invalid("AuthZEN body was not valid JSON");
301
+ }
302
+ return parseAuthzenRequest(kind, body, options);
303
+ }
304
+ //#endregion
305
+ //#region src/authzen/search.ts
306
+ /** The one `decide` call every AuthZEN evaluation and search makes. */
307
+ function decideAuthzen(permdock, permission, data, trusted) {
308
+ const decide = permdock.decide;
309
+ return decide(permission, data, trusted ? {
310
+ call: "endpoint",
311
+ adapter: "authzen",
312
+ trusted: true
313
+ } : {
314
+ call: "endpoint",
315
+ adapter: "authzen",
316
+ trusted: false,
317
+ boundary: "decision-endpoint"
318
+ });
319
+ }
320
+ /** Every permission of resource type `type`, in catalog order. */
321
+ function permissionsOfType(tree, type) {
322
+ return listPermissions(tree).filter((leaf) => leaf.resource === type);
323
+ }
324
+ /** The distinct actions of the granted `leaves`, in catalog order. */
325
+ async function grantedActions(leaves, decide) {
326
+ const decisions = await Promise.all(leaves.map(async (leaf) => ({
327
+ leaf,
328
+ decision: await decide(leaf)
329
+ })));
330
+ const names = [];
331
+ for (const { leaf, decision } of decisions) if (decision.outcome === "granted" && !names.includes(leaf.action)) names.push(leaf.action);
332
+ return names.map((name) => ({ name }));
333
+ }
334
+ /** The granted ids among `records`; any subject type but `user` matches none. */
335
+ async function grantedSubjects(type, records, decide) {
336
+ if (typeof type === "string" && type !== "user") return [];
337
+ return (await Promise.all(records.map(async (record) => {
338
+ const properties = {};
339
+ for (const [key, value] of Object.entries(record)) if (key !== "id") properties[key] = value;
340
+ return {
341
+ id: record.id,
342
+ decision: await decide({
343
+ type: "user",
344
+ id: record.id,
345
+ properties
346
+ })
347
+ };
348
+ }))).flatMap(({ id, decision }) => decision.outcome === "granted" ? [{
349
+ type: "user",
350
+ id
351
+ }] : []);
352
+ }
353
+ function scopeOf(options) {
354
+ return {
355
+ tenant: options.tenant,
356
+ actor: options.actor,
357
+ delegation: options.delegation
358
+ };
359
+ }
360
+ /**
361
+ * The AuthZEN `search/action` answer for `user` on `resource`: every
362
+ * permission of `resource.type` in the policy is decided, and the distinct
363
+ * actions of the granted ones are returned in catalog order. Paging is the
364
+ * caller's (`authzenPage`).
365
+ */
366
+ async function searchActions(policy, user, resource, options = {}) {
367
+ const { permdock } = await buildInstance({
368
+ policy,
369
+ user,
370
+ sources: options,
371
+ scope: scopeOf(options)
372
+ });
373
+ const trusted = "data" in options;
374
+ const data = trusted ? options.data : resourceData({ resource });
375
+ return grantedActions(permissionsOfType(policy.permissions, resource.type), (leaf) => decideAuthzen(permdock, leaf, data, trusted));
376
+ }
377
+ /**
378
+ * The AuthZEN `search/subject` answer: the candidates `lister` returns for
379
+ * `request`, each decided as itself, filtered to those granted `action` on
380
+ * `resource`. An unknown action, a subject type other than `user`, or a
381
+ * lister that throws answers none.
382
+ */
383
+ async function searchSubjects(policy, lister, request, options = {}) {
384
+ const permission = permissionOf(permissionLookup(policy.permissions), request);
385
+ if (permission === void 0) return [];
386
+ let records;
387
+ try {
388
+ records = await lister.list(compact({
389
+ type: request.subject.type,
390
+ action: request.action,
391
+ resource: request.resource,
392
+ context: request.context
393
+ }));
394
+ } catch {
395
+ return [];
396
+ }
397
+ const data = resourceData(request);
398
+ return grantedSubjects(request.subject.type, records, async (subject) => {
399
+ const { permdock } = await buildInstance({
400
+ policy,
401
+ user: userFromEntity(subject),
402
+ sources: options,
403
+ scope: scopeOf(options)
404
+ });
405
+ return decideAuthzen(permdock, permission, data, false);
406
+ });
407
+ }
408
+ //#endregion
409
+ //#region src/authzen/create.ts
410
+ function notFound(detail) {
411
+ return problemResponse(statusProblem(404, detail));
412
+ }
186
413
  const WELL_KNOWN = "/.well-known/authzen-configuration";
187
414
  /** The name an item's action gives, for the reasons of an unknown permission. */
188
415
  function actionName(item) {
@@ -249,73 +476,41 @@ const createPermDock = (policy, options) => {
249
476
  if (resolved === void 0) return UNAVAILABLE;
250
477
  const { data, trusted } = resolved;
251
478
  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");
479
+ return applyApprovalResume(decideAuthzen(permdock, permission, data, trusted), permission, permdock, options.store, request, resourceRef(permission, data, resourceIdOf(item)), "authzen");
264
480
  }
265
481
  async function rowOf(request, pep, item) {
266
482
  return evaluationRow(await decideItem(request, pep, item), permissionOf(lookup, item)?.key ?? actionName(item));
267
483
  }
484
+ function read(kind, request) {
485
+ return readAuthzenRequest(kind, request, { maxEvaluations });
486
+ }
268
487
  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));
488
+ const parsed = await read("evaluation", request);
489
+ if (!parsed.ok) return problemResponse(parsed.problem);
490
+ return Response.json(await rowOf(request, pep, parsed.request.item));
275
491
  }
276
492
  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))) });
493
+ const parsed = await read("evaluations", request);
494
+ if (!parsed.ok) return problemResponse(parsed.problem);
495
+ const body = parsed.request;
496
+ switch (body.kind) {
497
+ case "evaluation": return Response.json(await rowOf(request, pep, body.item));
498
+ case "evaluations": return Response.json({ evaluations: await evaluateBatch(body.items, body.semantic, (item) => rowOf(request, pep, item)) });
499
+ default: return body;
500
+ }
293
501
  }
294
502
  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
- }))
503
+ const parsed = await read("search/action", request);
504
+ if (!parsed.ok) return problemResponse(parsed.problem);
505
+ const { item, page } = parsed.request;
506
+ const type = typeof item.resource?.type === "string" ? item.resource.type : "";
507
+ const actions = await grantedActions(permissionsOfType(policy.permissions, type), (leaf) => decideItem(request, pep, compact({
508
+ subject: item.subject,
509
+ context: item.context,
510
+ resource: item.resource,
511
+ action: { name: leaf.key }
314
512
  })));
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));
513
+ return Response.json(authzenPage(actions, page));
319
514
  }
320
515
  async function listRows(type, where) {
321
516
  const list = options.resources?.[type]?.list;
@@ -327,19 +522,12 @@ const createPermDock = (policy, options) => {
327
522
  }
328
523
  }
329
524
  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;
525
+ const parsed = await read("search/resource", request);
526
+ if (!parsed.ok) return problemResponse(parsed.problem);
527
+ const { item, page } = parsed.request;
340
528
  const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
341
529
  const permission = permissionOf(lookup, item);
342
- if (type === void 0 || permission === void 0) return Response.json(paged([], 0, 1));
530
+ if (type === void 0 || permission === void 0) return Response.json(emptyAuthzenPage());
343
531
  const rows = await listRows(type, isRecord(item.resource?.properties) ? item.resource.properties : void 0);
344
532
  const permdock = await instantiate(pep, item);
345
533
  let permitted = [];
@@ -353,51 +541,32 @@ const createPermDock = (policy, options) => {
353
541
  id: String(id)
354
542
  }] : [];
355
543
  });
356
- const { offset, size } = pageOf(body);
357
- return Response.json(paged(entities, offset, size));
544
+ return Response.json(authzenPage(entities, page));
358
545
  }
359
546
  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;
547
+ const lister = options.subjects;
548
+ if (lister?.list === void 0) return notFound("search/subject is not configured");
549
+ const parsed = await read("search/subject", request);
550
+ if (!parsed.ok) return problemResponse(parsed.problem);
551
+ const { item, page } = parsed.request;
370
552
  let records;
371
553
  try {
372
- records = await options.subjects.list();
554
+ records = await lister.list(compact({
555
+ type: typeof item.subject?.type === "string" ? item.subject.type : "",
556
+ action: item.action ?? {},
557
+ resource: item.resource ?? {},
558
+ context: item.context
559
+ }));
373
560
  } catch {
374
- return Response.json(paged([], 0, 1));
561
+ return Response.json(emptyAuthzenPage());
375
562
  }
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));
563
+ const matches = await grantedSubjects(item.subject?.type, records, (subject) => decideItem(request, pep, compact({
564
+ action: item.action,
565
+ resource: item.resource,
566
+ context: item.context,
567
+ subject
568
+ })));
569
+ return Response.json(authzenPage(matches, page));
401
570
  }
402
571
  function discovery(request, pathname) {
403
572
  const pdp = `${new URL(request.url).origin}${pathname.slice(pathname.indexOf(WELL_KNOWN) + 34).replace(/\/+$/u, "")}`;
@@ -452,4 +621,4 @@ const createPermDock = (policy, options) => {
452
621
  return { permdockHandler: () => handler };
453
622
  };
454
623
  //#endregion
455
- export { EVALUATIONS_SEMANTICS, createPermDock, evaluateBatch, evaluationsSemantic, mergeEvaluationItem };
624
+ export { AUTHZEN_MAX_PAGE, EVALUATIONS_SEMANTICS, authzenPage, createPermDock, emptyAuthzenPage, evaluateBatch, evaluationsSemantic, mergeEvaluationItem, parseAuthzenRequest, readAuthzenPage, readAuthzenRequest, searchActions, searchSubjects };
@@ -1,6 +1,6 @@
1
- import { Lt as InstanceHandle, Pn as Denial, Rt as Instant } from "./policy-types-DzwivBgR.js";
2
- import { w as Permission } from "./vocabulary-D6lPdb4Z.js";
3
- import { t as Operation } from "./operations-CxybZErY.js";
1
+ import { Lt as InstanceHandle, Rn as Denial, Rt as Instant } from "./policy-types-B-F-qAZk.js";
2
+ import { u as Permission } from "./permission-types-DhNEmoRG.js";
3
+ import { t as Operation } from "./operations-BNLes61x.js";
4
4
  //#region src/core/automation.d.ts
5
5
  /**
6
6
  * Who an automation runs as. `publisher`: the person who published it, with
@@ -3,7 +3,7 @@ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
3
  import { a as ownRecord } from "./paths-DXSHAMIa.js";
4
4
  import { a as isId, r as idList } from "./expiry-D4_YKRKD.js";
5
5
  import { n as internalsOf } from "./internals-Dk8A8fX3.js";
6
- import { n as findPermission } from "./permission-registry-Br4jSNVi.js";
6
+ import { n as findPermission } from "./permission-registry-DpPtSKNZ.js";
7
7
  import { l as isRfc3339, m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
8
8
  //#region src/core/automation.ts
9
9
  const MAX_NAME = 256;
@@ -0,0 +1,9 @@
1
+ //#region src/cloud/base-url.ts
2
+ /**
3
+ * The one base URL of PermDock Cloud. The platform issuer is this URL; its
4
+ * OAuth routes, `/.well-known/oauth-authorization-server` and `/openapi.json`
5
+ * sit at the root, unversioned, and the data routes under `/v1`.
6
+ */
7
+ const CLOUD_BASE_URL = "https://permdock.com/api";
8
+ //#endregion
9
+ export { CLOUD_BASE_URL as t };
@@ -1,5 +1,5 @@
1
- import { N as RoleBinding, W as CustomRoleSource, ir as Subject, q as DecisionSink, rr as Principal } from "../policy-types-DzwivBgR.js";
2
- import { E as PermissionTree } from "../vocabulary-D6lPdb4Z.js";
1
+ import { N as RoleBinding, W as CustomRoleSource, lr as Subject, q as DecisionSink, sr as Principal } from "../policy-types-B-F-qAZk.js";
2
+ import { f as PermissionTree } from "../permission-types-DhNEmoRG.js";
3
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
4
  //#region src/better-auth/types.d.ts
5
5
  type BetterAuthPrincipal = Principal & {
@@ -1,7 +1,7 @@
1
1
  import { n as isReadonlyArray, r as isRecord, t as compact } from "../compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
- import { n as role, r as allow } from "../role-builder-CXbis5-X.js";
4
- import { c as listPermissions } from "../permission-registry-Br4jSNVi.js";
3
+ import { n as role, r as allow } from "../role-builder-C1VJzvcr.js";
4
+ import { c as listPermissions } from "../permission-registry-DpPtSKNZ.js";
5
5
  import { r as validateRecord } from "../thenable-yD7SabqG.js";
6
6
  import { t as anonymousSubject } from "../subject-BGoM5o8B.js";
7
7
  import { d as membershipEvent } from "../sink-BEZSlMS_.js";