permdock 0.3.1 → 0.5.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 (552) hide show
  1. package/README.md +37 -35
  2. package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
  3. package/dist/a2a/index.d.ts +8 -6
  4. package/dist/a2a/index.js +21 -31
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -23
  10. package/dist/ai-sdk/index.js +38 -21
  11. package/dist/app-data-MuyzVqX8.js +60 -0
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  19. package/dist/arazzo-B6lebmiQ.js +36 -0
  20. package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
  21. package/dist/args-IIolxxKA.js +197 -0
  22. package/dist/astro/index.d.ts +43 -0
  23. package/dist/astro/index.js +27 -0
  24. package/dist/audience-Dg8XsRaO.js +55 -0
  25. package/dist/auth-DRLEizbL.js +178 -0
  26. package/dist/authzen/index.d.ts +26 -6
  27. package/dist/authzen/index.js +228 -75
  28. package/dist/automation-BMZPIVUM.d.ts +114 -0
  29. package/dist/automation-DVjOckjV.js +157 -0
  30. package/dist/better-auth/index.d.ts +8 -6
  31. package/dist/better-auth/index.js +11 -23
  32. package/dist/better-supabase/index.d.ts +438 -86
  33. package/dist/better-supabase/index.js +1027 -184
  34. package/dist/bind--9EFVYWF.d.ts +38 -0
  35. package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
  36. package/dist/body-CH5of8Ne.js +10 -0
  37. package/dist/body-text-QcXok_SI.js +52 -0
  38. package/dist/build-instance-BMnAudHn.js +52 -0
  39. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
  40. package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
  41. package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
  42. package/dist/casbin-Cr7RLtA3.js +30 -0
  43. package/dist/casbin-Dyu2gnUD.js +234 -0
  44. package/dist/casl-64gpT-8x.js +24 -0
  45. package/dist/casl-DjEDhTCP.js +299 -0
  46. package/dist/catalog/index.d.ts +74 -2
  47. package/dist/catalog/index.js +51 -2
  48. package/dist/catalog-BECMPrwc.js +100 -0
  49. package/dist/catalog-DjhMYYCq.js +1 -0
  50. package/dist/catalog-R_A__RsH.js +52 -0
  51. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
  52. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  53. package/dist/chat/index.d.ts +2 -0
  54. package/dist/chat/index.js +224 -0
  55. package/dist/chat-sdk/index.d.ts +87 -0
  56. package/dist/chat-sdk/index.js +197 -0
  57. package/dist/claims-map-7oQ3ue4X.js +13 -0
  58. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  59. package/dist/claude-agent/index.d.ts +7 -14
  60. package/dist/claude-agent/index.js +26 -30
  61. package/dist/clerk/index.d.ts +9 -8
  62. package/dist/clerk/index.js +15 -45
  63. package/dist/cli/bin.js +36 -17
  64. package/dist/cli/index.d.ts +20 -6
  65. package/dist/cli/index.js +164 -4
  66. package/dist/cloud/index.d.ts +102 -63
  67. package/dist/cloud/index.js +240 -347
  68. package/dist/cloud-CIoHNevm.js +87 -0
  69. package/dist/codemod-Bmj9dWMH.js +37 -0
  70. package/dist/codemod-Cxvvc70T.js +2084 -0
  71. package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
  72. package/dist/collect-DloHbDVa.js +55 -0
  73. package/dist/collect-FlXJlhus.js +1 -0
  74. package/dist/command-L8EstFNm.js +6 -0
  75. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  76. package/dist/compile/index.d.ts +1 -1
  77. package/dist/compile/index.js +1 -2
  78. package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
  79. package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  80. package/dist/completion-BqhRBJD8.js +143 -0
  81. package/dist/config-B46rm9sc.js +26 -0
  82. package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
  83. package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
  84. package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
  85. package/dist/constants-DcJABbLW.js +20 -0
  86. package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
  87. package/dist/convex/index.d.ts +11 -10
  88. package/dist/convex/index.js +18 -18
  89. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  90. package/dist/create-BDS7wc3y.d.ts +138 -0
  91. package/dist/create-BFfm17UA.d.ts +110 -0
  92. package/dist/create-BWRSXgOF.js +403 -0
  93. package/dist/create-C3b4B5eF.js +130 -0
  94. package/dist/create-DnrmLnLW.js +323 -0
  95. package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
  96. package/dist/credentials-DPyHmYz5.js +74 -0
  97. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  98. package/dist/delegation-DaXVdDhM.js +286 -0
  99. package/dist/delegation-input-FTxMK3ji.js +19 -0
  100. package/dist/delivery/index.d.ts +5 -0
  101. package/dist/delivery/index.js +5 -0
  102. package/dist/delivery-DCAgNyCn.js +499 -0
  103. package/dist/delivery-event-xX4obB8F.js +40 -0
  104. package/dist/denied-text-D8jDHgsl.d.ts +19 -0
  105. package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
  106. package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
  107. package/dist/device-BARQ8eYG.js +193 -0
  108. package/dist/diff-CxZo9pTq.js +37 -0
  109. package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
  110. package/dist/doctor-CxiwSfqH.js +44 -0
  111. package/dist/doctor-DFjUxf2f.js +2361 -0
  112. package/dist/drizzle/index.d.ts +5 -3
  113. package/dist/drizzle/index.js +6 -14
  114. package/dist/elysia/index.d.ts +16 -13
  115. package/dist/elysia/index.js +14 -13
  116. package/dist/env-DJZrPjRi.js +8 -0
  117. package/dist/errors-BDUwg2qC.js +27 -0
  118. package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
  119. package/dist/errors-BWXBMaKK.d.ts +11 -0
  120. package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  121. package/dist/errors-CWTY6uih.js +143 -0
  122. package/dist/evaluate-_R8QkWaf.js +1732 -0
  123. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  124. package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
  125. package/dist/eve/index.d.ts +12 -16
  126. package/dist/eve/index.js +23 -29
  127. package/dist/event-time-CsegxXxB.js +23 -0
  128. package/dist/expiry-D4_YKRKD.js +52 -0
  129. package/dist/express/index.d.ts +13 -10
  130. package/dist/express/index.js +14 -12
  131. package/dist/fastify/index.d.ts +26 -13
  132. package/dist/fastify/index.js +17 -36
  133. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  134. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  135. package/dist/fields-D9tPVUUS.js +203 -0
  136. package/dist/files-C5ZI27eV.js +124 -0
  137. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  138. package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
  139. package/dist/flags-C3DktBDY.js +86 -0
  140. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
  141. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  142. package/dist/grantee-Cn1HyUsI.js +254 -0
  143. package/dist/grantee-conditions-CcXf8hMM.js +271 -0
  144. package/dist/grantee-match-DHArqY82.js +142 -0
  145. package/dist/h3/index.d.ts +37 -0
  146. package/dist/h3/index.js +35 -0
  147. package/dist/headers-BIjfMaoC.js +8 -0
  148. package/dist/headers-CIbDTUTK.d.ts +7 -0
  149. package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
  150. package/dist/hono/index.d.ts +12 -9
  151. package/dist/hono/index.js +14 -13
  152. package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
  153. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  154. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  155. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  156. package/dist/http-DXJ37RDA.js +46 -0
  157. package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
  158. package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
  159. package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
  160. package/dist/index-BcHcPyIo.d.ts +110 -0
  161. package/dist/index-CaxrMD1A.d.ts +1 -0
  162. package/dist/index-Chrs5fQ-.d.ts +210 -0
  163. package/dist/index-CxGUswIC.d.ts +431 -0
  164. package/dist/index-D8EovfsP.d.ts +91 -0
  165. package/dist/index-DOVf7RJv.d.ts +900 -0
  166. package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
  167. package/dist/index.d.ts +20 -14
  168. package/dist/index.js +33 -23
  169. package/dist/init-DeMYsnYJ.js +96 -0
  170. package/dist/init-GG6Jh8HD.js +95 -0
  171. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  172. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  173. package/dist/instant-BluqDvyS.js +19 -0
  174. package/dist/internals-Dk8A8fX3.js +17 -0
  175. package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
  176. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  177. package/dist/jwt/index.d.ts +18 -11
  178. package/dist/jwt/index.js +166 -145
  179. package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
  180. package/dist/kysely/index.d.ts +5 -3
  181. package/dist/kysely/index.js +6 -14
  182. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  183. package/dist/load-BxEtwlBS.js +1 -0
  184. package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
  185. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  186. package/dist/login-Dfe5RlYk.js +68 -0
  187. package/dist/login-imhuwvn3.js +254 -0
  188. package/dist/manifest-C8IzW3Do.js +42 -0
  189. package/dist/manifest-CtKR3GXL.js +370 -0
  190. package/dist/manifest-json-CAGzls-C.js +9 -0
  191. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  192. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  193. package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
  194. package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
  195. package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
  196. package/dist/mcp/index.d.ts +36 -9
  197. package/dist/mcp/index.js +476 -448
  198. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
  199. package/dist/nest/index.d.ts +12 -9
  200. package/dist/nest/index.js +20 -20
  201. package/dist/next/index.d.ts +40 -20
  202. package/dist/next/index.js +37 -39
  203. package/dist/next/plugin.d.ts +1 -1
  204. package/dist/next/plugin.js +2 -2
  205. package/dist/node/index.d.ts +10 -10
  206. package/dist/node/index.js +7 -9
  207. package/dist/ocsf-BFp-PZZA.js +126 -0
  208. package/dist/openai/index.d.ts +9 -16
  209. package/dist/openai/index.js +18 -25
  210. package/dist/openapi/index.d.ts +3 -3
  211. package/dist/openapi/index.js +1 -1
  212. package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
  213. package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
  214. package/dist/openapi-ahr8rHu3.js +138 -0
  215. package/dist/operation-findings-DgATDpvh.js +36 -0
  216. package/dist/operations-CxybZErY.d.ts +59 -0
  217. package/dist/orpc/index.d.ts +13 -10
  218. package/dist/orpc/index.js +23 -20
  219. package/dist/otel/index.d.ts +3 -2
  220. package/dist/otel/index.js +53 -27
  221. package/dist/output-Dyw8fyPF.js +88 -0
  222. package/dist/output-files-B3IZJksC.js +1 -0
  223. package/dist/output-files-DhRBBE4n.js +138 -0
  224. package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
  225. package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
  226. package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
  227. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
  228. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  229. package/dist/parse-request-D_tUXG6M.js +26 -0
  230. package/dist/paths-DXSHAMIa.js +42 -0
  231. package/dist/pdp/index.d.ts +7 -3
  232. package/dist/pdp/index.js +47 -29
  233. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  234. package/dist/peer-CRvC7Hg1.js +1 -0
  235. package/dist/permdock-B9JxkBwC.js +868 -0
  236. package/dist/permdock-D7eeLJER.d.ts +502 -0
  237. package/dist/permission-registry-Br4jSNVi.js +385 -0
  238. package/dist/permissions-B-wCP5ZC.js +30 -0
  239. package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
  240. package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  241. package/dist/policies-CO1oOymN.js +295 -0
  242. package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  243. package/dist/policy-DLZJ5gAp.js +399 -0
  244. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  245. package/dist/policy-module-CTlwMvLI.js +89 -0
  246. package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
  247. package/dist/postgrest-CW0IqC-U.js +566 -0
  248. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  249. package/dist/powersync-BHfuehf3.js +62 -0
  250. package/dist/powersync-CbzkqL_M.js +1 -0
  251. package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
  252. package/dist/preset/index.d.ts +146 -0
  253. package/dist/preset/index.js +1 -0
  254. package/dist/preset-DZdU0tne.js +1768 -0
  255. package/dist/principal-source-pHneukrx.js +103 -0
  256. package/dist/prisma/index.d.ts +6 -3
  257. package/dist/prisma/index.js +6 -12
  258. package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
  259. package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  260. package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
  261. package/dist/problem-types-CJ2325SZ.js +5 -0
  262. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  263. package/dist/protected-DEPHc2xV.d.ts +38 -0
  264. package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
  265. package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
  266. package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  267. package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
  268. package/dist/pull-BgIfno6w.js +256 -0
  269. package/dist/pull-ByOks_Tg.js +1 -0
  270. package/dist/push-CmFVBOeI.js +116 -0
  271. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  272. package/dist/pushed-policy-DobP7AHI.js +238 -0
  273. package/dist/react/index.d.ts +8 -8
  274. package/dist/react/index.js +6 -6
  275. package/dist/react/provider-client.d.ts +1 -1
  276. package/dist/react/provider-client.js +1 -2
  277. package/dist/react-native/index.d.ts +24 -63
  278. package/dist/react-native/index.js +45 -27
  279. package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
  280. package/dist/relation-walk-3OyDBF0S.js +186 -0
  281. package/dist/relations-BnCWnJGI.js +163 -0
  282. package/dist/renames-CGj7YwcQ.js +175 -0
  283. package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  284. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  285. package/dist/request-context-BTRTG7OT.js +71 -0
  286. package/dist/request-context-C2_1lchh.d.ts +5 -0
  287. package/dist/request-schema-CMreVuFM.js +148 -0
  288. package/dist/resend/index.d.ts +126 -0
  289. package/dist/resend/index.js +379 -0
  290. package/dist/resource-relations-D_jw0BFx.js +243 -0
  291. package/dist/retire-CALjIQ7e.js +240 -0
  292. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  293. package/dist/rls-BA8an5Ap.js +336 -0
  294. package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
  295. package/dist/role-builder-CXbis5-X.js +623 -0
  296. package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
  297. package/dist/run-CNsApDpd.js +1 -0
  298. package/dist/run-DOfMtc9V.js +723 -0
  299. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  300. package/dist/run-ticket-sxFI6LAk.js +337 -0
  301. package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
  302. package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
  303. package/dist/scan-BOI5tJ-6.js +29 -0
  304. package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
  305. package/dist/schema-yLuBWWsh.js +130 -0
  306. package/dist/scim/index.d.ts +2 -2
  307. package/dist/scim/index.js +1 -2
  308. package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
  309. package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
  310. package/dist/server/index.d.ts +13 -134
  311. package/dist/server/index.js +13 -10
  312. package/dist/server-DqCT4CgZ.js +453 -0
  313. package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
  314. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  315. package/dist/shared-CD11nBbC.js +304 -0
  316. package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
  317. package/dist/signals-D3NcTKUS.js +32 -0
  318. package/dist/sink-BEZSlMS_.js +957 -0
  319. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  320. package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
  321. package/dist/skills-CTYwkl44.js +51 -0
  322. package/dist/snapshot-CXUWfsNy.js +269 -0
  323. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  324. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  325. package/dist/solid/index.d.ts +24 -25
  326. package/dist/solid/index.js +41 -11
  327. package/dist/solid-start/index.d.ts +52 -0
  328. package/dist/solid-start/index.js +49 -0
  329. package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
  330. package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
  331. package/dist/sql-B5T1IL83.js +55 -0
  332. package/dist/src-DLfUWFAI.js +1851 -0
  333. package/dist/ssf/index.d.ts +4 -4
  334. package/dist/ssf/index.js +440 -106
  335. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  336. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  337. package/dist/storage-C2bWdvJH.js +132 -0
  338. package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
  339. package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
  340. package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
  341. package/dist/stores-ClZUgeoP.d.ts +30 -0
  342. package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  343. package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
  344. package/dist/style-DiKWnAvn.js +1 -0
  345. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  346. package/dist/subject-BGoM5o8B.js +17 -0
  347. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  348. package/dist/supabase/index.d.ts +23 -106
  349. package/dist/supabase/index.js +5 -4
  350. package/dist/supabase/middleware.d.ts +13 -6
  351. package/dist/supabase/middleware.js +16 -11
  352. package/dist/supabase-9pqI57pW.js +92 -0
  353. package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
  354. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  355. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
  356. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  357. package/dist/support-session-C6xJQYut.js +158 -0
  358. package/dist/svelte/Protected.svelte +11 -4
  359. package/dist/svelte/index.d.ts +7 -7
  360. package/dist/svelte/index.js +26 -12
  361. package/dist/svelte/runtime.d.ts +10 -3
  362. package/dist/svelte/runtime.js +4 -3
  363. package/dist/svelte/source.d.ts +7 -7
  364. package/dist/svelte/source.js +5 -5
  365. package/dist/sveltekit/index.d.ts +51 -0
  366. package/dist/sveltekit/index.js +27 -0
  367. package/dist/tanstack-start/index.d.ts +51 -0
  368. package/dist/tanstack-start/index.js +40 -0
  369. package/dist/target-Bw37TFNA.js +51 -0
  370. package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
  371. package/dist/terminal/index.d.ts +11 -9
  372. package/dist/terminal/index.js +36 -316
  373. package/dist/testing/index.d.ts +391 -106
  374. package/dist/testing/index.js +4574 -1286
  375. package/dist/testing/saas/index.d.ts +9 -8
  376. package/dist/testing/saas/index.js +2 -2
  377. package/dist/testing/saas/permissions.d.ts +1 -1
  378. package/dist/testing/saas/permissions.js +1 -2
  379. package/dist/text-BMFRfBqc.js +8 -0
  380. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  381. package/dist/thenable-yD7SabqG.js +31 -0
  382. package/dist/time-DkWjdL98.js +71 -0
  383. package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
  384. package/dist/tool-refusal-CMLN5xhn.js +41 -0
  385. package/dist/trpc/index.d.ts +12 -9
  386. package/dist/trpc/index.js +18 -17
  387. package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
  388. package/dist/types-BNORmDM8.d.ts +172 -0
  389. package/dist/types-BjV-fqcA.d.ts +57 -0
  390. package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
  391. package/dist/types-C8-KNsFf.d.ts +107 -0
  392. package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  393. package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
  394. package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
  395. package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
  396. package/dist/types-DX0LaKTb.d.ts +157 -0
  397. package/dist/types-DiQjupG2.d.ts +332 -0
  398. package/dist/types-DqzsnlSA.js +67 -0
  399. package/dist/types-_sHy8BQf.d.ts +65 -0
  400. package/dist/types-fbZ7JEXr.d.ts +89 -0
  401. package/dist/types-tIgIeIKJ.d.ts +66 -0
  402. package/dist/unplugin/index.d.ts +1 -1
  403. package/dist/unplugin/index.js +2 -2
  404. package/dist/usage-CHOtwL19.js +1 -0
  405. package/dist/usage-DHtE8j4E.js +32 -0
  406. package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
  407. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  408. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  409. package/dist/validity-CZ7-y0Cj.js +79 -0
  410. package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
  411. package/dist/verify-DbCL9bnB.js +1770 -0
  412. package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
  413. package/dist/version-DXkYUISx.js +1 -0
  414. package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
  415. package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
  416. package/dist/vue/index.d.ts +25 -21
  417. package/dist/vue/index.js +25 -9
  418. package/dist/waiter-BGUtGYoU.js +67 -0
  419. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  420. package/dist/watch-Cb-NcaUw.js +1 -0
  421. package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
  422. package/dist/webmcp/index.d.ts +2 -2
  423. package/dist/webmcp/index.js +13 -37
  424. package/dist/where-scope-Dv-WTP-w.js +306 -0
  425. package/dist/who-can-D0QoYbEb.js +364 -0
  426. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  427. package/dist/wire-denial-C7PaVYEM.js +27 -0
  428. package/dist/workflow/index.d.ts +5 -0
  429. package/dist/workflow/index.js +223 -0
  430. package/dist/workflow-sdk/index.d.ts +56 -0
  431. package/dist/workflow-sdk/index.js +78 -0
  432. package/dist/wrap-Bd1Tejur.d.ts +15 -0
  433. package/dist/wrap-gX61EtpB.js +27 -0
  434. package/package.json +140 -41
  435. package/schemas/access-event-v1.json +118 -0
  436. package/schemas/approval-request-v1.json +34 -1
  437. package/schemas/approval-signature-v1.json +94 -0
  438. package/schemas/automation-event-v1.json +113 -0
  439. package/schemas/capability-v1.json +84 -0
  440. package/schemas/catalog-event-v1.json +87 -0
  441. package/schemas/catalog-v1.json +129 -12
  442. package/schemas/cli-commands-v1.json +164 -0
  443. package/schemas/cli-result-v1.json +96 -0
  444. package/schemas/cloud-api-v1.json +5407 -0
  445. package/schemas/connector-v1.json +408 -0
  446. package/schemas/credential-event-v1.json +81 -0
  447. package/schemas/credential-v1.json +134 -0
  448. package/schemas/decision-event-v1.json +288 -0
  449. package/schemas/delivery-event-v1.json +117 -0
  450. package/schemas/directory-event-v1.json +85 -0
  451. package/schemas/evidence-export-v1.json +54 -0
  452. package/schemas/membership-event-v1.json +93 -0
  453. package/schemas/policy-v1.json +68 -0
  454. package/schemas/pushed-policy-v1.json +236 -0
  455. package/schemas/run-v1.json +162 -0
  456. package/schemas/snapshot-v1.json +138 -0
  457. package/schemas/supabase-claims-v1.json +4 -4
  458. package/schemas/supabase-manifest-v1.json +5 -1
  459. package/schemas/support-session-v1.json +111 -0
  460. package/skills/permdock/SKILL.md +16 -12
  461. package/skills/permdock-agents/SKILL.md +40 -23
  462. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  463. package/skills/permdock-agents/references/runtimes.md +22 -18
  464. package/skills/permdock-approvals/SKILL.md +29 -13
  465. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  466. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  467. package/skills/permdock-audit/SKILL.md +3 -3
  468. package/skills/permdock-credentials/SKILL.md +5 -5
  469. package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
  470. package/skills/permdock-data/SKILL.md +6 -6
  471. package/skills/permdock-data/references/queries-and-rls.md +13 -8
  472. package/skills/permdock-data/references/relationships.md +3 -3
  473. package/skills/permdock-tenancy/SKILL.md +20 -7
  474. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  475. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  476. package/skills/permdock-wire/SKILL.md +18 -12
  477. package/skills/permdock-wire/references/adapters.md +146 -50
  478. package/skills/permdock-wire/references/policy-options.md +15 -6
  479. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  480. package/dist/approvals-DbYAuNkG.js +0 -224
  481. package/dist/arazzo-C9chp3ST.js +0 -54
  482. package/dist/bind-C_ob3LKa.d.ts +0 -25
  483. package/dist/catalog-CRW5Mx_B.js +0 -2
  484. package/dist/catalog-CYj-mX2O.js +0 -48
  485. package/dist/catalog-DWF5cYqB.js +0 -55
  486. package/dist/cloud-CfwZ39Rl.js +0 -50
  487. package/dist/cloud-DWLXO2af.js +0 -118
  488. package/dist/collect-CHB22Sx4.js +0 -83
  489. package/dist/collect-DSWOk19R.js +0 -2
  490. package/dist/commands-BeaGNj_o.js +0 -97
  491. package/dist/config-ir40y8m0.js +0 -36
  492. package/dist/create-CMwIl-w2.js +0 -253
  493. package/dist/delegation-D8pUEuce.js +0 -103
  494. package/dist/diff-C9RDjjhs.js +0 -48
  495. package/dist/doctor-Djh6JDEk.js +0 -53
  496. package/dist/doctor-DvH0IQff.js +0 -1194
  497. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  498. package/dist/duration-xK2jGFVc.js +0 -25
  499. package/dist/errors-CWfoNg9N.js +0 -47
  500. package/dist/errors-DRnGZHzF.js +0 -30
  501. package/dist/evaluation-items-CfCCejQd.js +0 -40
  502. package/dist/expiry-BoBJ8Tvc.js +0 -7
  503. package/dist/fields-BMl1RxoX.js +0 -26
  504. package/dist/grantee-Cv5Sogfv.js +0 -602
  505. package/dist/headers-BZSDieNT.js +0 -6
  506. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  507. package/dist/ids-DC4V4CFu.js +0 -18
  508. package/dist/index-0nNqHspG.d.ts +0 -6
  509. package/dist/index-BNc7Wer_.d.ts +0 -483
  510. package/dist/index-C7Tw7MaW.d.ts +0 -201
  511. package/dist/instance-options-Dhhcnm3y.js +0 -22
  512. package/dist/load-DwJUafYN.js +0 -2
  513. package/dist/manifest-iaoBXHKc.js +0 -783
  514. package/dist/map-AcxK9o_D.js +0 -147
  515. package/dist/may-use-DndQ5tQ-.js +0 -77
  516. package/dist/openapi-CQTsgKoB.js +0 -164
  517. package/dist/permdock-CbgvLnuo.js +0 -3479
  518. package/dist/permissions-DVoF6dMt.js +0 -662
  519. package/dist/policy-xyWg7QdR.js +0 -1122
  520. package/dist/powersync-CrBX8hY6.js +0 -2
  521. package/dist/powersync-DE19b9dT.js +0 -62
  522. package/dist/protected-BdnIEFkY.d.ts +0 -27
  523. package/dist/protected-xAr24FEC.d.ts +0 -40
  524. package/dist/relations-cjOL01hZ.js +0 -505
  525. package/dist/rls-P-BeBx0n.js +0 -238
  526. package/dist/rls-graph-CHwx0V8q.js +0 -435
  527. package/dist/rls-ownership-DcYlZ09B.js +0 -843
  528. package/dist/rls-shared-Cewd_-zI.js +0 -495
  529. package/dist/rls-verify-CMv9H3wV.js +0 -746
  530. package/dist/run-BWc9qqvE.js +0 -174
  531. package/dist/server-DlZ28Oz5.js +0 -268
  532. package/dist/sink-B1fZzIMf.d.ts +0 -104
  533. package/dist/sink-Bd9PSyfq.js +0 -141
  534. package/dist/skills-C5CbhhpG.js +0 -56
  535. package/dist/snapshot-Enxd0n-s.js +0 -975
  536. package/dist/sql-xdg5f4Fi.js +0 -27
  537. package/dist/src-BDwEZWrZ.js +0 -568
  538. package/dist/store-jOBYpiXC.d.ts +0 -36
  539. package/dist/stores-C0IMQrGI.d.ts +0 -52
  540. package/dist/subject-C6dLxqHU.js +0 -24
  541. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  542. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  543. package/dist/supabase-s4o9s1O1.js +0 -83
  544. package/dist/thenable-okc2xDsj.js +0 -10
  545. package/dist/types-BnIEz1sU.d.ts +0 -48
  546. package/dist/types-Bvc4oWT6.d.ts +0 -9
  547. package/dist/types-CKNSyIf_.d.ts +0 -52
  548. package/dist/types-Cq_H8N_X.d.ts +0 -197
  549. package/dist/usage-B0YuTQRO.js +0 -42
  550. package/dist/usage-DorAJiU_.js +0 -2
  551. package/dist/vocabulary-DA8a8zif.d.ts +0 -56
  552. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -1,15 +1,24 @@
1
- import { i as describeError } from "./errors-CWfoNg9N.js";
2
- import { a as sqlFiles } from "./files-DWUN9PzI.js";
3
- import { i as quoteSqlLiteral, n as escapeSqlIdent } from "./sql-xdg5f4Fi.js";
4
- import "./sources-4p0-4xQm.js";
5
- import { r as HELPERS } from "./rls-shared-Cewd_-zI.js";
6
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { i as dateAt } from "./time-DkWjdL98.js";
3
+ import { a as describeError } from "./errors-CWTY6uih.js";
4
+ import { o as sqlFiles } from "./files-D_JIzUrP.js";
5
+ import { r as escapeSqlIdent, s as quoteSqlLiteral } from "./sql-B5T1IL83.js";
6
+ import "./sources-vs5dGOsS.js";
7
+ import { a as RETIRE_MARKER } from "./markers-C6joDI3o.js";
8
+ import { r as refuseDirty, t as applyFiles } from "./files-C5ZI27eV.js";
9
+ import { f as writeOutputFiles, n as dataMigrationFile } from "./output-files-DhRBBE4n.js";
10
+ import { r as HELPERS } from "./shared-CD11nBbC.js";
11
+ import { o as sqlStatements } from "./deciding-columns-Sq12mEA6.js";
12
+ import { i as retireSql, r as retirePlan } from "./retire-CALjIQ7e.js";
13
+ import { existsSync, readFileSync } from "node:fs";
7
14
  import { relative, resolve } from "node:path";
8
15
  import { parse } from "pgsql-parser";
9
- //#region src/cli/rls-migrate.ts
16
+ //#region src/cli/rls/migrate.ts
10
17
  function migrateTarget(generated) {
11
18
  const granted = /* @__PURE__ */ new Map();
19
+ const roles = /* @__PURE__ */ new Set();
12
20
  for (const row of generated.seeds ?? []) {
21
+ roles.add(row.role);
13
22
  if (row.effect !== "allow") continue;
14
23
  let keys = granted.get(row.scope);
15
24
  if (keys === void 0) {
@@ -24,14 +33,12 @@ function migrateTarget(generated) {
24
33
  permissions: new Set(generated.keys?.permissions ?? []),
25
34
  rowConditions: new Set(generated.keys?.rowConditions ?? []),
26
35
  granted,
27
- renamed: generated.keys?.renamed ?? {}
36
+ renamed: generated.keys?.renamed ?? {},
37
+ roles
28
38
  };
29
39
  }
30
- function isNode(value) {
31
- return typeof value === "object" && value !== null && !Array.isArray(value);
32
- }
33
40
  function child(node, key) {
34
- return isNode(node) ? node[key] : void 0;
41
+ return isRecord(node) ? node[key] : void 0;
35
42
  }
36
43
  function list(value) {
37
44
  return Array.isArray(value) ? value : [];
@@ -171,6 +178,21 @@ var Rewriter = class {
171
178
  const column = this.#column(idArg);
172
179
  return "to" in column ? { to: `(${column.to} in (select ${helper}()))` } : column;
173
180
  }
181
+ #role(scope, idArg, roleArgs) {
182
+ const name = `member_${scope}_ids`;
183
+ const helper = this.#helper(name);
184
+ if (helper === void 0 || !this.#target.sql.includes(`.${name}(p_roles text[])`)) return skip("missing-helper", `rls generate writes no ${name}(p_roles text[]): run it with this rls.migrate config, which asks for it`);
185
+ const legacy = roleArgs.map((arg) => stringConst(arg)).filter((role) => role !== void 0);
186
+ if (legacy.length === 0 || legacy.length !== roleArgs.length) return skip("dynamic-role", "a role is not a string literal; map it by hand");
187
+ const mapped = [];
188
+ for (const value of legacy) {
189
+ const declared = this.#target.roleValues?.[value] ?? value;
190
+ if (!this.#target.roles.has(declared)) return skip("unknown-role", `${value} maps to ${declared}, which no role grants; add it to rls.roleValues or declare the role`);
191
+ mapped.push(declared);
192
+ }
193
+ const column = this.#column(idArg);
194
+ return "to" in column ? { to: `(${column.to} in (select ${helper}(array[${mapped.map(literal).join(", ")}])))` } : column;
195
+ }
174
196
  #scoped(args, selected) {
175
197
  const [scopeArg, idArg, keyArg] = args;
176
198
  const named = stringConst(scopeArg);
@@ -185,6 +207,7 @@ var Rewriter = class {
185
207
  case "ids": return this.#ids(helper.scope, args[0]);
186
208
  case "row": return this.#row(helper.scope, args[0], args[1]);
187
209
  case "membership": return this.#membership(helper.scope, args[0]);
210
+ case "role": return this.#role(helper.scope, args[0], args.slice(1));
188
211
  case "scoped": return this.#scoped(args, selected);
189
212
  case "global": return this.#global(args[0], selected);
190
213
  default: return helper;
@@ -259,9 +282,9 @@ async function migrateSql(file, text, config, target) {
259
282
  for (const item of node) visit(item, inPolicy);
260
283
  return;
261
284
  }
262
- if (!isNode(node)) return;
285
+ if (!isRecord(node)) return;
263
286
  for (const [kind, value] of Object.entries(node)) {
264
- if (kind === "FuncCall" && isNode(value)) {
287
+ if (kind === "FuncCall" && isRecord(value)) {
265
288
  const call = rewriter.call(value);
266
289
  if (call !== void 0) {
267
290
  const source = call.end === -1 ? call.name : text.slice(call.start, call.end);
@@ -305,7 +328,7 @@ async function migrateSql(file, text, config, target) {
305
328
  const statement = child(raw, "stmt");
306
329
  const offset = child(raw, "stmt_location");
307
330
  const statementStart = at(typeof offset === "number" ? offset : 0);
308
- const kind = isNode(statement) ? Object.keys(statement)[0] : void 0;
331
+ const kind = isRecord(statement) ? Object.keys(statement)[0] : void 0;
309
332
  if (kind !== void 0 && BODY_STATEMENTS.has(kind)) {
310
333
  for (const body of bodyStrings(child(statement, kind))) {
311
334
  const bodyStart = text.indexOf(body, statementStart);
@@ -329,11 +352,17 @@ async function migrateSql(file, text, config, target) {
329
352
  text: out
330
353
  };
331
354
  }
355
+ function describeRetire(plan) {
356
+ return plan.tables.flatMap((table) => {
357
+ if (!table.present) return [`retire ${table.table}: no longer created by --sql`];
358
+ return [`retire ${table.table}: ${String(table.refreshTriggers.length)} refresh trigger(s), ${String(table.refreshFunctions.length)} refresh function(s), ${String(table.readers.length)} reader(s)${table.readers.length === 0 ? "; --retire-out drops it" : ""}`, ...table.readers.map((reader) => ` read by ${reader.kind} ${reader.name} at ${reader.file}:${String(reader.line)}`)];
359
+ });
360
+ }
332
361
  function describe(report, write) {
333
362
  const lines = [...report.rewrites.map((item) => `${item.file}:${String(item.line)} ${item.from} -> ${item.to}`), ...report.skipped.map((item) => `skipped ${item.file}:${String(item.line)} ${item.call}: ${item.detail}`)];
334
363
  const files = new Set(report.rewrites.map((item) => item.file)).size;
335
364
  const unknown = report.skipped.filter((item) => item.reason === "unknown-key").length;
336
- lines.push(`rls migrate: ${write ? "rewrote" : "would rewrite"} ${String(report.rewrites.length)} call(s) in ${String(files)} file(s), skipped ${String(report.skipped.length)}${unknown === 0 ? "" : `, ${String(unknown)} with an unknown key`}${write ? "" : "; --write applies them"}`);
365
+ lines.push(`rls migrate: ${write ? "rewrote" : "would rewrite"} ${String(report.rewrites.length)} call(s) in ${String(files)} file(s), skipped ${String(report.skipped.length)}${unknown === 0 ? "" : `, ${String(unknown)} with an unknown key`}${write ? "" : "; drop --dry-run to apply them"}`);
337
366
  return lines.join("\n");
338
367
  }
339
368
  /** `permdock rls migrate`: a dry run unless `write`; exits 1 while a key is unknown. */
@@ -346,21 +375,91 @@ async function runRlsMigrate(input) {
346
375
  const files = sqlFiles(root, ["."]);
347
376
  const rewrites = [];
348
377
  const skipped = [];
378
+ const statements = [];
379
+ const writes = [];
349
380
  for (const path of files) {
350
381
  const file = relative(input.cwd, path);
351
382
  const text = readFileSync(path, "utf8");
352
383
  const result = await migrateSql(file, text, input.config, input.target);
353
384
  rewrites.push(...result.rewrites);
354
385
  skipped.push(...result.skipped);
355
- if (input.write && result.text !== text) writeFileSync(path, result.text);
386
+ if (input.write && result.text !== text) writes.push({
387
+ path,
388
+ text: result.text
389
+ });
390
+ for (const statement of sqlStatements(input.write ? result.text : text)) statements.push({
391
+ file,
392
+ ...statement
393
+ });
394
+ }
395
+ if (input.retireOut !== void 0 && input.config.tables === void 0) return {
396
+ code: 2,
397
+ output: "rls migrate --retire-out needs rls.migrate.tables in permdock.config.ts"
398
+ };
399
+ if (writes.length > 0) {
400
+ refuseDirty({
401
+ command: "rls migrate",
402
+ invocation: `rls migrate --sql ${input.sql}`,
403
+ cwd: input.cwd,
404
+ paths: writes.map((write) => write.path),
405
+ force: input.force === true
406
+ });
407
+ applyFiles(input.cwd, writes);
356
408
  }
357
- const report = {
409
+ const retire = input.config.tables === void 0 ? void 0 : retirePlan(statements, input.config);
410
+ const report = retire === void 0 ? {
358
411
  rewrites,
359
412
  skipped
413
+ } : {
414
+ rewrites,
415
+ skipped,
416
+ retire
417
+ };
418
+ const unknown = skipped.some((item) => item.reason === "unknown-key");
419
+ const output = input.json ? JSON.stringify(report, void 0, 2) : [describe(report, input.write), ...retire === void 0 ? [] : describeRetire(retire)].join("\n");
420
+ if (input.retireOut === void 0 || retire === void 0) return {
421
+ code: unknown ? 1 : 0,
422
+ output
423
+ };
424
+ const retired = writeRetire(input.cwd, input.retireOut, retire, input.now, !input.write);
425
+ return {
426
+ code: unknown || retired.code === 1 ? 1 : 0,
427
+ output: `${output}\n${retired.output}`
428
+ };
429
+ }
430
+ /** `--retire-out`: nothing is written while any listed table is still read. */
431
+ function writeRetire(cwd, out, plan, now, dryRun) {
432
+ const read = plan.tables.filter((table) => table.present && table.readers.length > 0);
433
+ if (read.length > 0) return {
434
+ code: 1,
435
+ output: `rls migrate --retire-out: ${read.map((table) => table.table).join(", ")} still read; nothing written`
436
+ };
437
+ const text = retireSql(plan);
438
+ if (text === void 0) return {
439
+ code: 0,
440
+ output: "rls migrate --retire-out: nothing to retire"
441
+ };
442
+ const file = dataMigrationFile({
443
+ cwd,
444
+ out,
445
+ part: "retire",
446
+ marker: RETIRE_MARKER,
447
+ text,
448
+ now: now ?? dateAt(),
449
+ check: false
450
+ });
451
+ if (file === void 0) return {
452
+ code: 0,
453
+ output: "rls migrate --retire-out: up to date"
454
+ };
455
+ if (dryRun && file.rel !== "-") return {
456
+ code: 0,
457
+ output: `would write ${file.rel}`
360
458
  };
459
+ const written = writeOutputFiles(cwd, [file]);
361
460
  return {
362
- code: skipped.some((item) => item.reason === "unknown-key") ? 1 : 0,
363
- output: input.json ? JSON.stringify(report, void 0, 2) : describe(report, input.write)
461
+ code: 0,
462
+ output: written.printed === "" ? `wrote ${written.wrote.join(", ")}` : written.printed
364
463
  };
365
464
  }
366
465
  //#endregion
@@ -1,9 +1,10 @@
1
- import { C as Policy, Nr as Principal, ln as PermDock } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
3
- import { n as RevocationFeed } from "../revocations-Cy06JNx2.js";
4
- import { A as ConnectionOptions, O as Connection, h as InvalidSignatureError, i as ProtectOptions, n as OpenApiHooks, w as verifyWebBotAuth, x as discoverViaSignatureAgent } from "../create-B1d519XK.js";
5
- import { t as ServerAdapterOptions } from "../bind-C_ob3LKa.js";
6
- import { i as sendResponse, t as NodeRequest } from "../http-DPuDaChb.js";
1
+ import { T as Policy, rr as Principal } from "../policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
3
+ import { r as PermDock } from "../permdock-D7eeLJER.js";
4
+ import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
5
+ import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-BLd4MnBX.js";
6
+ import { t as ServerAdapterOptions } from "../bind--9EFVYWF.js";
7
+ import { r as sendResponse, t as NodeRequest } from "../http-B_LphE5Y.js";
7
8
  import { CanActivate, DynamicModule, ExceptionFilter, ExecutionContext, Type } from "@nestjs/common";
8
9
  //#region src/nest/http.d.ts
9
10
  /**
@@ -33,8 +34,8 @@ type NestSocket = {
33
34
  disconnect?(close?: boolean): unknown;
34
35
  close?(code?: number, reason?: string): unknown;
35
36
  };
36
- /** `Protect(null, loadData?, { oauthScopes })` needs a principal and one of the OAuth scopes, but no permission. */
37
- type NestProtect = (permission: Permission | null, loadData?: (req: NestRequest) => unknown, protectOptions?: ProtectOptions) => ClassDecorator & MethodDecorator;
37
+ /** `Protect(null, data?, { oauthScopes })` needs a principal and one of the OAuth scopes, but no permission. */
38
+ type NestProtect = (permission: Permission | null, data?: (req: NestRequest) => unknown, protectOptions?: ProtectOptions) => ClassDecorator & MethodDecorator;
38
39
  type NestHandlerOptions = {
39
40
  /** Controller path; may hold route params such as `:org`. Default `api/permdock`. */
40
41
  readonly path?: string;
@@ -44,6 +45,8 @@ type PermDockModuleOptions = {
44
45
  readonly guard?: "global";
45
46
  };
46
47
  type NestPermDock = {
48
+ /** The `PermDock` for one request, for code the guard does not run before. */
49
+ readonly getPermDock: (req: NestRequest) => Promise<PermDock>;
47
50
  readonly PermDockModule: Type<unknown> & {
48
51
  readonly forRoot: (options?: PermDockModuleOptions) => DynamicModule;
49
52
  };
@@ -72,4 +75,4 @@ export declare function decorateMethod(cls: {
72
75
  readonly prototype: object;
73
76
  }, key: string, ...decorators: readonly MethodDecorator[]): void;
74
77
  //#endregion
75
- export { InvalidSignatureError, type NestHandlerOptions, type NestPermDock, type NestPermDockOptions, type NestProtect, type NestRequest, type NestSocket, type PermDockModuleOptions, discoverViaSignatureAgent, sendResponse, verifyWebBotAuth };
78
+ export { InvalidSignatureError, type NestHandlerOptions, type NestPermDock, type NestPermDockOptions, type NestProtect, type NestRequest, type NestSocket, type PermDockModuleOptions, discoverViaSignatureAgent, sendResponse, webBotAuthVerifier };
@@ -1,11 +1,12 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as PermDockValidationError } from "../validation-error-CnjZ4t92.js";
3
- import { n as PermDockDeniedError, r as PermDockRevokedError, t as PermDockApprovalRequiredError } from "../errors-Cz5zn0mW.js";
4
- import { i as discoverViaSignatureAgent, r as InvalidSignatureError, s as verifyWebBotAuth } from "../evaluations-tz6D9A2G.js";
5
- import { t as problemFromError } from "../map-error-pgUWNNtG.js";
6
- import { a as socketConnection, r as bindKernel } from "../bind-CuzGytRf.js";
7
- import { i as onRevoked, t as POLICY_VIOLATION } from "../stream-DDpvynSB.js";
8
- import { i as toRequest$1, n as isServerResponse, r as sendResponse } from "../http-BIhmLfCc.js";
1
+ import { t as compact } from "../compact-CAf557ZB.js";
2
+ import { n as PermDockValidationError } from "../validation-error-ZfUHbKvf.js";
3
+ import { n as PermDockDeniedError, r as PermDockRevokedError, t as PermDockApprovalRequiredError } from "../errors-BKy0EfhN.js";
4
+ import { c as writeReply, r as hasCredentials } from "../http-BBoKefeS.js";
5
+ import { d as discoverViaSignatureAgent, m as webBotAuthVerifier, u as InvalidSignatureError } from "../evaluations-DZ2CbV5k.js";
6
+ import { t as problemFromError } from "../map-error-TCAdw-eW.js";
7
+ import { a as socketConnection, r as bindKernel } from "../bind-CZzhx-Vj.js";
8
+ import { a as onRevoked, n as closeReason, t as POLICY_VIOLATION } from "../stream-CvdUS9V1.js";
9
+ import { n as sendResponse, r as toRequest$1, t as isServerResponse } from "../http-ujKm0JXE.js";
9
10
  import { Catch, Controller, Get, Inject, Injectable, Module, Post, Req, Res, createParamDecorator } from "@nestjs/common";
10
11
  import { APP_FILTER, APP_GUARD, Reflector } from "@nestjs/core";
11
12
  //#region src/nest/decorate.ts
@@ -47,9 +48,7 @@ async function sendNestResponse(res, response) {
47
48
  return;
48
49
  }
49
50
  if (isFastifyReply(res)) {
50
- res.code(response.status);
51
- for (const [key, value] of response.headers.entries()) res.header(key, value);
52
- await res.send(await response.text());
51
+ await writeReply(res, response);
53
52
  return;
54
53
  }
55
54
  throw new TypeError("permdock/nest supports @nestjs/platform-express and @nestjs/platform-fastify responses");
@@ -97,10 +96,10 @@ function rulesOf(target) {
97
96
  if (!Array.isArray(found)) return [];
98
97
  return found;
99
98
  }
100
- const Protect = (permission, loadData, protectOptions) => {
99
+ const Protect = (permission, data, protectOptions) => {
101
100
  const rule = compact({
102
101
  permission,
103
- loadData,
102
+ data,
104
103
  options: protectOptions
105
104
  });
106
105
  return ((target, _propertyKey, descriptor) => {
@@ -111,11 +110,11 @@ const Protect = (permission, loadData, protectOptions) => {
111
110
  });
112
111
  };
113
112
  function createPermDock(policy, options) {
114
- const { kernel, bind, rebind, scopeOf, handlerScope } = bindKernel(policy, options, "nest", toRequest);
113
+ const { kernel, bind, rebind, scopeOf, handlerScope, getPermDock } = bindKernel(policy, options, "nest", toRequest);
115
114
  const applyProtect = async (remaining, req, request, scope, load) => {
116
115
  const [rule, ...rest] = remaining;
117
116
  if (rule === void 0) return;
118
- const guard = await kernel.protect(rule.permission, load(rule.loadData), rule.options)(request, scope);
117
+ const guard = await kernel.protect(rule.permission, load(rule.data), rule.options)(request, scope);
119
118
  if (!guard.ok) throw new PermDockHttpError(guard.response);
120
119
  req.permdock = guard.permdock;
121
120
  req.permdockData = guard.data;
@@ -127,7 +126,7 @@ function createPermDock(policy, options) {
127
126
  onRevoked(conn, (problem) => {
128
127
  client.emit?.("permdock:error", problem);
129
128
  if (typeof client.disconnect === "function") client.disconnect(true);
130
- else client.close?.(POLICY_VIOLATION, problem.type);
129
+ else client.close?.(POLICY_VIOLATION, closeReason(problem));
131
130
  });
132
131
  return conn;
133
132
  });
@@ -137,7 +136,7 @@ function createPermDock(policy, options) {
137
136
  const load = loadsFor(req);
138
137
  for (const rule of rules) {
139
138
  if (conn.signal.aborted) throw conn.signal.reason instanceof PermDockRevokedError ? conn.signal.reason : new PermDockRevokedError({ code: "denied" });
140
- const guard = await kernel.protectOn(conn.permdock, rule.permission, load(rule.loadData), rule.options, request);
139
+ const guard = await kernel.protectOn(conn.permdock, rule.permission, load(rule.data), rule.options, request);
141
140
  if (!guard.ok) throw new PermDockHttpError(guard.response);
142
141
  }
143
142
  };
@@ -159,7 +158,7 @@ function createPermDock(policy, options) {
159
158
  if (req === void 0) return rules.length === 0;
160
159
  const request = bind(req);
161
160
  const scope = await scopeOf(req);
162
- req.permdock = await kernel.permdock(request, scope);
161
+ req.permdock = await kernel.getPermDock(request, scope);
163
162
  await applyProtect(rules, req, request, scope, loadsFor(req));
164
163
  return true;
165
164
  }
@@ -174,7 +173,7 @@ function createPermDock(policy, options) {
174
173
  class PermDockExceptionFilter {
175
174
  send = sendNestResponse;
176
175
  async catch(exception, host) {
177
- const problem = exception instanceof PermDockHttpError ? exception.response : problemFromError(exception, { credentials: host.getType() === "http" && host.switchToHttp().getRequest().headers.authorization !== void 0 });
176
+ const problem = exception instanceof PermDockHttpError ? exception.response : problemFromError(exception, { credentials: host.getType() === "http" && hasCredentials(host.switchToHttp().getRequest()) });
178
177
  if (problem === void 0) throw new TypeError("unhandled permdock exception");
179
178
  if (host.getType() === "http") {
180
179
  await this.send(host.switchToHttp().getResponse(), problem);
@@ -247,6 +246,7 @@ function createPermDock(policy, options) {
247
246
  return EvaluationsController;
248
247
  };
249
248
  return {
249
+ getPermDock,
250
250
  PermDockModule: PermDockRoot,
251
251
  PermDockGuard,
252
252
  Protect,
@@ -258,4 +258,4 @@ function createPermDock(policy, options) {
258
258
  };
259
259
  }
260
260
  //#endregion
261
- export { InvalidSignatureError, createPermDock, decorateMethod, discoverViaSignatureAgent, sendResponse, toRequest, verifyWebBotAuth };
261
+ export { InvalidSignatureError, createPermDock, decorateMethod, discoverViaSignatureAgent, sendResponse, toRequest, webBotAuthVerifier };
@@ -1,19 +1,25 @@
1
- import { C as Policy, D as PolicyVocabulary, Nr as Principal, Tt as Snapshot, Yn as Decision, ln as PermDock } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
3
- import { f as ApprovalStore } from "../types-aqOHTHcp.js";
4
- import { t as InstanceOptions } from "../instance-options-jARdwfPN.js";
5
- import { o as OtelWrap } from "../types-QCuYJh4q.js";
6
- import { a as snapshotHeaders, i as cacheLifeFor, n as SnapshotHeaders, o as snapshotTag, r as SnapshotHeadersOptions, t as CacheLifeForOptions } from "../snapshot-cache-B-LxUahj.js";
1
+ import { In as DenialReason, Nn as Decision, T as Policy, Vt as Snapshot, ir as Subject, j as PolicyVocabulary, rr as Principal } from "../policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
3
+ import { r as PermDock } from "../permdock-D7eeLJER.js";
4
+ import { m as ApprovalStore } from "../types-CCpc2Dcv.js";
5
+ import { t as InstanceOptions } from "../instance-options-Omfd793B.js";
6
+ import { n as PermDockWrap } from "../wrap-Bd1Tejur.js";
7
+ import { o as OtelWrap } from "../types-BqAKcRNW.js";
8
+ import { n as DescribeMessages } from "../describe-BZUsixiL.js";
9
+ import { a as snapshotHeaders, i as cacheLifeFor, n as SnapshotHeaders, o as snapshotTag, r as SnapshotHeadersOptions, t as CacheLifeForOptions } from "../snapshot-cache-DqK9eDmM.js";
7
10
  import { ReactElement, ReactNode } from "react";
8
11
  //#region src/next/types.d.ts
9
12
  type NextSubjectInput = unknown;
10
13
  type NextPermDockOptions<TUser = NextSubjectInput> = InstanceOptions & {
11
- readonly subject: () => TUser | Promise<TUser>;
14
+ /** The user, or a full `Subject` (core then skips `policy.subject`). */
15
+ readonly subject: () => TUser | Subject | Promise<TUser | Subject>;
12
16
  readonly tenant?: string | (() => string | undefined | Promise<string | undefined>);
13
17
  readonly onDenied?: (decision: Decision) => never | void;
14
18
  readonly store?: ApprovalStore;
15
19
  /** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
16
20
  readonly otel?: OtelWrap;
21
+ /** Wraps each instance after `otel`; build it with `wrapPermDock` to cover derived instances. */
22
+ readonly wrap?: PermDockWrap;
17
23
  /**
18
24
  * Where `PermDockProvider` sends checks the snapshot cannot answer; default `/api/permdock`.
19
25
  * `false` is snapshot-only: no `permdockHandler` route, and those checks are denied with
@@ -32,19 +38,19 @@ type GetSnapshotQuery = GetPermDockQuery & {
32
38
  /** Tags added next to `snapshotTag(sub)`, such as the app's own organisation tag. */
33
39
  readonly tags?: readonly string[];
34
40
  };
35
- type RequireAccessInput = {
36
- readonly permission: Permission;
37
- /** The row for an instance permission; omit it for a collection permission. */
38
- readonly data?: unknown;
39
- /** The active tenant, as for `getPermDock({ tenant })`; defaults to the factory's `tenant`. */
40
- readonly tenant?: string;
41
+ type PermissionRequirementOptions = GetPermDockQuery & {
42
+ /**
43
+ * Runs before the default interrupts; throw or redirect to replace them.
44
+ * Defaults to the factory's `onDenied`.
45
+ */
46
+ readonly onDenied?: (decision: Decision) => never | void;
41
47
  };
42
48
  type ServerPermissionState = {
43
49
  readonly allowed: boolean;
44
50
  readonly status: "ready";
45
51
  readonly decision: Decision;
46
52
  };
47
- type ServerPermDockProviderProps = {
53
+ type NextPermDockProviderProps = {
48
54
  readonly children: ReactNode;
49
55
  readonly tenant?: string;
50
56
  readonly include?: readonly (Permission | {
@@ -55,6 +61,19 @@ type ServerPermDockProviderProps = {
55
61
  readonly endpoint?: string | false;
56
62
  /** Suspends permission readers until the snapshot streams in, instead of answering `pending`. */
57
63
  readonly suspend?: boolean;
64
+ /**
65
+ * What every `<Protected>` below renders for a slot it leaves out. Nodes
66
+ * only: a function cannot cross from a Server Component to the client.
67
+ */
68
+ readonly defaults?: {
69
+ readonly pending?: ReactNode;
70
+ readonly denied?: ReactNode;
71
+ readonly approval?: ReactNode;
72
+ };
73
+ /** Localised text for `useDescribe()`; records only, for the same reason. */
74
+ readonly messages?: Pick<DescribeMessages, "titles" | "separator"> & {
75
+ readonly reasons?: Partial<Record<DenialReason, string>>;
76
+ };
58
77
  };
59
78
  type PermDockHandler = {
60
79
  readonly POST: (request: Request) => Promise<Response>;
@@ -75,19 +94,20 @@ type NextPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
75
94
  */
76
95
  readonly getSnapshot: (query?: GetSnapshotQuery) => Promise<Snapshot>;
77
96
  /**
78
- * Resolves to the granted `Decision`. A denial calls `unauthorized()` for an
79
- * anonymous subject and `forbidden()` otherwise (`experimental.authInterrupts`);
97
+ * Resolves to the granted `Decision`. A denial first runs `onDenied` (the
98
+ * call's, else the factory's), then calls `unauthorized()` for an anonymous
99
+ * subject and `forbidden()` otherwise (`experimental.authInterrupts`);
80
100
  * approval-required and boundary validation throw as from `assert`.
81
101
  */
82
- readonly requireAccess: (input: RequireAccessInput) => Promise<Extract<Decision, {
102
+ readonly requirePermission: (permission: Permission, data?: unknown, options?: PermissionRequirementOptions) => Promise<Extract<Decision, {
83
103
  readonly outcome: "granted";
84
104
  }>>;
85
105
  /** Never awaits: passes an unawaited snapshot to the client provider, whose hooks suspend. */
86
- readonly PermDockProvider: (props: ServerPermDockProviderProps) => ReactElement;
106
+ readonly PermDockProvider: (props: NextPermDockProviderProps) => ReactElement;
87
107
  readonly permdockHandler: () => PermDockHandler;
88
108
  };
89
109
  //#endregion
90
110
  //#region src/next/create.d.ts
91
- export declare function createPermDock<TUser = NextSubjectInput, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: NextPermDockOptions<TUser>): NextPermDock<V>;
111
+ export declare function createPermDock<TUser = NextSubjectInput, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: NextPermDockOptions<TUser>): NextPermDock<V>;
92
112
  //#endregion
93
- export { type CacheLifeForOptions, type GetPermDockQuery, type GetSnapshotQuery, type NextPermDock, type NextPermDockOptions, type PermDockHandler, type RequireAccessInput, type ServerPermDockProviderProps, type ServerPermissionState, type SnapshotHeaders, type SnapshotHeadersOptions, cacheLifeFor, snapshotHeaders, snapshotTag };
113
+ export { type CacheLifeForOptions, type GetPermDockQuery, type GetSnapshotQuery, type NextPermDock, type NextPermDockOptions, type NextPermDockProviderProps, type PermDockHandler, type PermissionRequirementOptions, type ServerPermissionState, type SnapshotHeaders, type SnapshotHeadersOptions, cacheLifeFor, snapshotHeaders, snapshotTag };
@@ -1,8 +1,9 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { t as createPermDock$1 } from "../permdock-CbgvLnuo.js";
3
- import { n as snapshotHeaders, r as snapshotTag, t as cacheLifeFor } from "../snapshot-cache-D6jLelln.js";
4
- import { c as NO_GRANT, n as createEvaluationsHandler } from "../evaluations-tz6D9A2G.js";
5
- import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
1
+ import { t as compact } from "../compact-CAf557ZB.js";
2
+ import { c as withApp } from "../permdock-B9JxkBwC.js";
3
+ import { n as wrapPermDock } from "../wrap-gX61EtpB.js";
4
+ import { n as snapshotHeaders, r as snapshotTag, t as cacheLifeFor } from "../snapshot-cache-DZHQ0KF6.js";
5
+ import { n as resolveOrNull, t as buildInstance } from "../build-instance-BMnAudHn.js";
6
+ import { o as evaluationsHandler, v as NO_GRANT } from "../evaluations-DZ2CbV5k.js";
6
7
  import { cache } from "react";
7
8
  import { jsx } from "react/jsx-runtime";
8
9
  import { forbidden, unauthorized, unstable_rethrow } from "#next/navigation";
@@ -16,7 +17,9 @@ function renderClientProvider(options) {
16
17
  snapshotPromise: options.snapshotPromise,
17
18
  endpoint: options.endpoint,
18
19
  tenant: options.tenant,
19
- suspend: options.suspend
20
+ suspend: options.suspend,
21
+ defaults: options.defaults,
22
+ messages: options.messages
20
23
  }),
21
24
  children: options.children
22
25
  });
@@ -65,44 +68,35 @@ function afterResponse(sink) {
65
68
  }
66
69
  function wrapInstance(permdock, onDenied) {
67
70
  if (onDenied === void 0) return permdock;
68
- const wrap = (next) => wrapInstance(next, onDenied);
69
- const assert = ((permission, data, options) => permdock.assert(permission, data, compact({
71
+ return wrapPermDock(permdock, (inner) => ({ assert: ((permission, data, options) => inner.assert(permission, data, compact({
70
72
  ...options,
71
73
  onDenied: options?.onDenied ?? onDenied
72
- })));
73
- return Object.freeze({
74
- ...permdock,
75
- assert,
76
- tenant: (id) => wrap(permdock.tenant(id)),
77
- team: (id) => wrap(permdock.team(id)),
78
- derive: (options) => {
79
- const derived = permdock.derive(options);
80
- return derived instanceof Promise ? derived.then(wrap) : wrap(derived);
81
- }
82
- });
74
+ }))) }));
83
75
  }
84
- function createPermDock(policy, options) {
76
+ function createPermDock(policy, given) {
77
+ const options = withApp(policy, given);
85
78
  assertServerOnly();
86
79
  const sink = options.sink === void 0 ? void 0 : afterResponse(options.sink);
87
- const resolveSubject = cache(async () => {
88
- try {
89
- return await options.subject();
90
- } catch (error) {
91
- unstable_rethrow(error);
92
- return null;
93
- }
94
- });
80
+ const resolveSubject = cache(() => resolveOrNull(() => options.subject(), unstable_rethrow));
81
+ const decorate = (permdock) => {
82
+ const traced = options.otel === void 0 ? permdock : options.otel(permdock);
83
+ return wrapInstance(options.wrap === void 0 ? traced : options.wrap(traced), options.onDenied);
84
+ };
95
85
  const resolveFallbackTenant = cache(() => readTenant(options.tenant));
96
86
  const instantiate = cache(async (tenantKey) => {
97
87
  const tenant = tenantKey === "" ? void 0 : tenantKey;
98
88
  const user = await resolveSubject();
99
89
  await io();
100
- const built = await createPermDock$1(policy, user, compact({
101
- tenant,
102
- ...instanceOptions(options),
103
- sink
104
- }));
105
- return wrapInstance(options.otel === void 0 ? built : options.otel(built), options.onDenied);
90
+ return (await buildInstance({
91
+ policy,
92
+ user,
93
+ sources: options,
94
+ scope: {
95
+ tenant,
96
+ sink
97
+ },
98
+ wrap: decorate
99
+ })).permdock;
106
100
  });
107
101
  const getPermDock = async (query) => {
108
102
  const tenant = query?.tenant ?? await resolveFallbackTenant();
@@ -140,10 +134,12 @@ function createPermDock(policy, options) {
140
134
  }
141
135
  return snapshot;
142
136
  };
143
- const requireAccess = async (input) => {
144
- const permdock = await getPermDock(input.tenant === void 0 ? void 0 : { tenant: input.tenant });
137
+ const requirePermission = async (permission, data, requirement = {}) => {
138
+ const permdock = await getPermDock(requirement.tenant === void 0 ? void 0 : { tenant: requirement.tenant });
145
139
  const assert = permdock.assert;
146
- return assert(input.permission, input.data, { onDenied: (decision) => {
140
+ const handler = requirement.onDenied ?? options.onDenied;
141
+ return assert(permission, data, { onDenied: (decision) => {
142
+ handler?.(decision);
147
143
  if (decision.outcome !== "denied" || decision.denials.some((denial) => denial.reason === "validation")) return;
148
144
  if (permdock.subject.principal === null) unauthorized();
149
145
  forbidden();
@@ -159,10 +155,12 @@ function createPermDock(policy, options) {
159
155
  endpoint: props.endpoint ?? options.endpoint ?? "/api/permdock",
160
156
  tenant: props.tenant,
161
157
  suspend: props.suspend,
158
+ defaults: props.defaults,
159
+ messages: props.messages,
162
160
  children: props.children
163
161
  }));
164
162
  };
165
- const permdockHandler = () => createEvaluationsHandler(compact({
163
+ const permdockHandler = () => evaluationsHandler(compact({
166
164
  policy,
167
165
  getPermDock,
168
166
  store: options.store
@@ -171,7 +169,7 @@ function createPermDock(policy, options) {
171
169
  getPermDock,
172
170
  getPermission,
173
171
  getSnapshot,
174
- requireAccess,
172
+ requirePermission,
175
173
  PermDockProvider,
176
174
  permdockHandler
177
175
  };
@@ -1,4 +1,4 @@
1
- import { a as PermDockPluginOptions } from "../types-DbjRN55U.js";
1
+ import { a as PermDockPluginOptions } from "../types-5Ut_pbKy.js";
2
2
  //#region src/cli/plugin.d.ts
3
3
  /** Any object: Next's `NextConfig` is an interface, so no index signature. */
4
4
  type NextConfigLike = object;
@@ -1,5 +1,5 @@
1
- import { i as describeError } from "../errors-CWfoNg9N.js";
2
- import { n as createCollectScheduler, r as report, t as collectOnce } from "../watch-DVBJ9cBq.js";
1
+ import { a as describeError } from "../errors-CWTY6uih.js";
2
+ import { n as createCollectScheduler, r as report, t as collectOnce } from "../watch-CszoTJMq.js";
3
3
  //#region src/cli/plugin.ts
4
4
  const PHASE_BUILD = "phase-production-build";
5
5
  const PHASE_DEV = "phase-development-server";