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
@@ -0,0 +1,450 @@
1
+ import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
+ import { p as normalizeWhere } from "./role-builder-CXbis5-X.js";
4
+ import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
5
+ import { _ as resource, i as getRegistry, n as findPermission } from "./permission-registry-Br4jSNVi.js";
6
+ import { n as defineScopes } from "./scopes-CUPSjo9q.js";
7
+ import { f as definePlans, p as defineRoles } from "./grantee-Cn1HyUsI.js";
8
+ import { r as readWireValidity } from "./validity-CZ7-y0Cj.js";
9
+ import { i as indexPolicy, u as normalizeDelegation } from "./policy-DLZJ5gAp.js";
10
+ import { r as isPortableCondition } from "./hosted-BZIAYvon.js";
11
+ import { t as definePermissions } from "./permissions-B-wCP5ZC.js";
12
+ import { n as copyJson, t as checkSchema } from "./json-schema-B-vAwlde.js";
13
+ import { t as parseCatalog } from "./parse-Cxq0WxrA.js";
14
+ import { n as parsePushedPolicy } from "./pushed-policy-DobP7AHI.js";
15
+ //#region src/catalog/json-schema-validator.ts
16
+ const ANNOTATIONS = /* @__PURE__ */ new Set([
17
+ "$schema",
18
+ "$id",
19
+ "$comment",
20
+ "title",
21
+ "description",
22
+ "default",
23
+ "examples",
24
+ "deprecated",
25
+ "readOnly",
26
+ "writeOnly"
27
+ ]);
28
+ const NUMBERS = [
29
+ "minLength",
30
+ "maxLength",
31
+ "minimum",
32
+ "maximum",
33
+ "exclusiveMinimum",
34
+ "exclusiveMaximum",
35
+ "minItems",
36
+ "maxItems"
37
+ ];
38
+ const TYPES = /* @__PURE__ */ new Set([
39
+ "object",
40
+ "array",
41
+ "string",
42
+ "boolean",
43
+ "integer",
44
+ "number",
45
+ "null"
46
+ ]);
47
+ function isType(value) {
48
+ return TYPES.has(value);
49
+ }
50
+ function readList(value, keyword) {
51
+ if (!Array.isArray(value)) return keyword;
52
+ const nodes = [];
53
+ for (const item of value) {
54
+ const read = readNode(item);
55
+ if ("unsupported" in read) return read.unsupported;
56
+ nodes.push(read.node);
57
+ }
58
+ return nodes;
59
+ }
60
+ function readMap(value, keyword) {
61
+ if (!isRecord(value)) return keyword;
62
+ const out = {};
63
+ for (const [key, child] of Object.entries(value)) {
64
+ const read = readNode(child);
65
+ if ("unsupported" in read) return read.unsupported;
66
+ Object.defineProperty(out, key, {
67
+ value: read.node,
68
+ enumerable: true,
69
+ writable: true,
70
+ configurable: true
71
+ });
72
+ }
73
+ return out;
74
+ }
75
+ /**
76
+ * Reads one JSON Schema node into the subset `checkSchema` interprets. Any
77
+ * other keyword is reported, so the caller can refuse the schema instead of
78
+ * validating less than the code did. `format` is accepted only next to a
79
+ * `pattern` that enforces it.
80
+ */
81
+ function readNode(value) {
82
+ if (value === true) return { node: {} };
83
+ if (value === false) return { node: { enum: [] } };
84
+ if (!isRecord(value)) return { unsupported: "a non-object schema" };
85
+ const node = {};
86
+ for (const [keyword, raw] of Object.entries(value)) {
87
+ if (ANNOTATIONS.has(keyword)) continue;
88
+ switch (keyword) {
89
+ case "format":
90
+ if (typeof value["pattern"] !== "string") return { unsupported: "format" };
91
+ break;
92
+ case "type":
93
+ if (!(isType(raw) || Array.isArray(raw) && raw.every(isType))) return { unsupported: "type" };
94
+ node["type"] = raw;
95
+ break;
96
+ case "const":
97
+ case "enum":
98
+ case "required":
99
+ case "uniqueItems":
100
+ case "$ref":
101
+ node[keyword] = raw;
102
+ break;
103
+ case "pattern":
104
+ if (typeof raw !== "string") return { unsupported: "pattern" };
105
+ node["pattern"] = raw;
106
+ break;
107
+ case "minLength":
108
+ case "maxLength":
109
+ case "minimum":
110
+ case "maximum":
111
+ case "exclusiveMinimum":
112
+ case "exclusiveMaximum":
113
+ case "minItems":
114
+ case "maxItems":
115
+ if (typeof raw !== "number") return { unsupported: keyword };
116
+ node[keyword] = raw;
117
+ break;
118
+ case "items":
119
+ case "additionalProperties": {
120
+ if (keyword === "additionalProperties" && raw === false) {
121
+ node[keyword] = false;
122
+ break;
123
+ }
124
+ const read = readNode(raw);
125
+ if ("unsupported" in read) return read;
126
+ node[keyword] = read.node;
127
+ break;
128
+ }
129
+ case "properties":
130
+ case "$defs": {
131
+ const read = readMap(raw, keyword);
132
+ if (typeof read === "string") return { unsupported: read };
133
+ node[keyword] = read;
134
+ break;
135
+ }
136
+ case "oneOf":
137
+ case "anyOf":
138
+ case "allOf": {
139
+ const read = readList(raw, keyword);
140
+ if (typeof read === "string") return { unsupported: read };
141
+ node[keyword] = read;
142
+ break;
143
+ }
144
+ default: return { unsupported: keyword };
145
+ }
146
+ }
147
+ if (NUMBERS.some((key) => key in node && !Number.isFinite(node[key]))) return { unsupported: "a non-finite bound" };
148
+ if (typeof node["$ref"] === "string" && !/^#\/\$defs\/[^/]+$/u.test(node["$ref"])) return { unsupported: "$ref" };
149
+ return { node };
150
+ }
151
+ function refusing(keyword) {
152
+ const message = `PermDock: the catalog schema uses ${keyword}, which policyFromCatalog does not interpret`;
153
+ return freezeDeep({ "~standard": {
154
+ version: 1,
155
+ vendor: "permdock",
156
+ validate: () => ({ issues: [{ message }] })
157
+ } });
158
+ }
159
+ /**
160
+ * A Standard Schema that validates against a catalog resource's JSON Schema.
161
+ * `null` (no JSON Schema in the catalog) gives `undefined`. A schema that uses
162
+ * a keyword outside the supported subset rejects every value, so a hosted
163
+ * check never validates less than the code did.
164
+ */
165
+ function resourceSchemaFromJson(json) {
166
+ if (json === null || json === void 0) return;
167
+ const read = readNode(json);
168
+ if ("unsupported" in read) return refusing(read.unsupported);
169
+ const root = read.node;
170
+ return freezeDeep({ "~standard": {
171
+ version: 1,
172
+ vendor: "permdock",
173
+ validate: (value) => {
174
+ const issues = [];
175
+ const copy = copyJson(value, [], issues, /* @__PURE__ */ new Set());
176
+ if (issues.length === 0) try {
177
+ checkSchema(root, copy, [], issues);
178
+ } catch {
179
+ issues.push({ message: "Unresolvable $ref" });
180
+ }
181
+ return issues.length === 0 ? { value } : { issues };
182
+ }
183
+ } });
184
+ }
185
+ //#endregion
186
+ //#region src/catalog/policy-from-catalog.ts
187
+ /**
188
+ * Stands in for a condition that only code can evaluate: an allow that holds
189
+ * it never matches and a deny that holds it always applies.
190
+ */
191
+ const CODE_CONDITION = freezeDeep({
192
+ op: "opaque",
193
+ sql: "",
194
+ fingerprint: "permdock:closure"
195
+ });
196
+ function invalid(message, cause) {
197
+ throw new PermDockValidationError({
198
+ code: "invalid-data",
199
+ permission: "",
200
+ resource: "",
201
+ boundary: "catalog",
202
+ issues: [{ message }],
203
+ message: `PermDock: policyFromCatalog: ${message}`,
204
+ ...cause === void 0 ? {} : { cause }
205
+ });
206
+ }
207
+ function actionsOf(permissions, arity) {
208
+ const entries = permissions.filter((leaf) => leaf.arity === arity).map((leaf) => [leaf.action, { ...leaf.meta }]);
209
+ return entries.length === 0 ? void 0 : Object.fromEntries(entries);
210
+ }
211
+ function resourceInit(name, entry, permissions) {
212
+ const options = compact({
213
+ name,
214
+ id: entry.id,
215
+ actions: actionsOf(permissions, "instance"),
216
+ collection: actionsOf(permissions, "collection"),
217
+ parent: entry.parent,
218
+ links: entry.links,
219
+ disclosure: entry.disclosure,
220
+ relations: entry.relations,
221
+ version: entry.version,
222
+ restricted: entry.restricted === void 0 ? void 0 : entry.restrictedStops === void 0 ? entry.restricted : {
223
+ field: entry.restricted,
224
+ stops: entry.restrictedStops
225
+ },
226
+ meta: entry.meta
227
+ });
228
+ const schema = resourceSchemaFromJson(entry.schema);
229
+ return schema === void 0 ? resource(options) : resource(schema, options);
230
+ }
231
+ function setPath(root, path, value, key) {
232
+ let node = root;
233
+ for (const segment of path.slice(0, -1)) {
234
+ const next = Object.hasOwn(node, segment) ? node[segment] : void 0;
235
+ if (next === void 0) {
236
+ const child = {};
237
+ node[segment] = child;
238
+ node = child;
239
+ } else if (typeof next === "object" && next !== null && Object.getOwnPropertySymbols(next).length === 0) node = next;
240
+ else invalid(`permission '${key}' nests under another resource`);
241
+ }
242
+ const last = path.at(-1);
243
+ if (last === void 0 || Object.hasOwn(node, last)) invalid(`permission '${key}' collides with another resource path`);
244
+ node[last] = value;
245
+ }
246
+ function permissionTree(catalog) {
247
+ const byResource = /* @__PURE__ */ new Map();
248
+ for (const leaf of catalog.permissions) byResource.set(leaf.resource, [...byResource.get(leaf.resource) ?? [], leaf]);
249
+ const input = {};
250
+ const renamed = {};
251
+ for (const [name, leaves] of byResource) {
252
+ const entry = Object.hasOwn(catalog.resources, name) ? catalog.resources[name] : void 0;
253
+ const first = leaves[0];
254
+ if (entry === void 0 || first === void 0) invalid(`resource '${name}' is missing from catalog.resources`);
255
+ const suffix = `.${first.action}`;
256
+ if (!first.key.endsWith(suffix)) invalid(`permission '${first.key}' does not end in its action`);
257
+ const path = first.key.slice(0, -suffix.length).split(".");
258
+ for (const leaf of leaves) {
259
+ if (leaf.key !== `${path.join(".")}.${leaf.action}`) invalid(`permission '${leaf.key}' sits apart from resource '${name}'`);
260
+ for (const former of leaf.renamedFrom ?? []) renamed[former] = leaf.key;
261
+ }
262
+ setPath(input, path, resourceInit(name, entry, leaves), first.key);
263
+ }
264
+ try {
265
+ return definePermissions(input, { renamed });
266
+ } catch (error) {
267
+ return invalid(error instanceof Error ? error.message : "invalid permission tree", error);
268
+ }
269
+ }
270
+ /** A portable grant's condition must be in the portable subset; a non-portable one is read as written and fails closed where it cannot evaluate. */
271
+ function condition(value, label, portable) {
272
+ if (value === void 0) return;
273
+ if (portable && !isPortableCondition(value)) return invalid(`${label} is not a portable condition`);
274
+ try {
275
+ return normalizeWhere(value);
276
+ } catch (error) {
277
+ return invalid(`${label} is not a valid condition`, error);
278
+ }
279
+ }
280
+ function buildGrant(tree, raw) {
281
+ const permission = findPermission(tree, raw.permission);
282
+ if (permission === void 0 || permission.key !== raw.permission) invalid(`grant names unknown permission '${raw.permission}'`);
283
+ const validity = readWireValidity(raw.validity, raw.effect);
284
+ const where = raw.closure === true ? CODE_CONDITION : condition(raw.where, `grant '${raw.permission}' where`, raw.portable !== false);
285
+ return freezeDeep(compact({
286
+ permission,
287
+ effect: raw.effect,
288
+ to: raw.to,
289
+ role: raw.role,
290
+ where,
291
+ check: condition(raw.check, `grant '${raw.permission}' check`, raw.portable !== false),
292
+ approval: raw.approval,
293
+ portable: raw.portable !== false,
294
+ limit: raw.limit,
295
+ fields: raw.fields,
296
+ scope: raw.scope ?? "global",
297
+ name: raw.name,
298
+ meta: raw.meta,
299
+ obligations: raw.obligations,
300
+ purpose: raw.purpose,
301
+ breakGlass: raw.breakGlass,
302
+ viaOnly: raw.viaOnly,
303
+ validity,
304
+ requires: raw.requires
305
+ }));
306
+ }
307
+ function roleOn(role, grants, resources, tree) {
308
+ if (role?.on === void 0) return;
309
+ if (role.on !== "resource") return role.on;
310
+ const nodes = [...new Set(grants.flatMap((grant) => typeof grant.scope === "object" ? [grant.scope.resource] : []))].flatMap((name) => {
311
+ const node = resources.get(name);
312
+ const first = node === void 0 ? void 0 : leafOf(tree, node);
313
+ return first === void 0 ? [] : [first];
314
+ });
315
+ return nodes.length === 1 ? nodes[0] : nodes;
316
+ }
317
+ /** The subtree of `node`: its path walked from the root of `tree`. */
318
+ function leafOf(tree, node) {
319
+ let current = tree;
320
+ for (const segment of node.path.split(".")) current = typeof current === "object" && current !== null && Object.hasOwn(current, segment) ? Reflect.get(current, segment) : void 0;
321
+ return current;
322
+ }
323
+ function activationOf(role) {
324
+ const activation = role.activation;
325
+ if (activation === void 0) return;
326
+ return compact({
327
+ maxDuration: activation.maxDuration,
328
+ justification: activation.justification,
329
+ approval: activation.approval === true ? "human" : void 0,
330
+ assurance: activation.assurance
331
+ });
332
+ }
333
+ function binding(name, role, grants, on) {
334
+ return freezeDeep(compact({
335
+ name,
336
+ grants,
337
+ on,
338
+ assignable: role?.assignable ?? on !== void 0,
339
+ exclusiveWith: role?.exclusiveWith,
340
+ min: role?.min,
341
+ max: role?.max,
342
+ transferOnly: role?.transferOnly,
343
+ assigns: role?.assigns,
344
+ for: role?.for,
345
+ meta: role?.audience === void 0 ? void 0 : { audience: role.audience },
346
+ activation: role === void 0 ? void 0 : activationOf(role),
347
+ support: role?.supportAccess === void 0 ? void 0 : {
348
+ role: name,
349
+ actorRequired: role.supportAccess.actorRequired,
350
+ consent: {
351
+ by: [],
352
+ durations: role.supportAccess.durations
353
+ },
354
+ group: role.supportAccess.group
355
+ }
356
+ }));
357
+ }
358
+ function delegationsOf(catalog, tree) {
359
+ if (catalog.delegations === void 0) return;
360
+ return catalog.delegations.map((entry, index) => {
361
+ const permissions = entry.permissions.map((key) => {
362
+ const leaf = findPermission(tree, key);
363
+ if (leaf === void 0) invalid(`delegations[${String(index)}] names unknown permission '${key}'`);
364
+ return leaf;
365
+ });
366
+ const input = {
367
+ from: entry.from,
368
+ to: entry.to,
369
+ permissions,
370
+ validFrom: entry.validity?.from,
371
+ validUntil: entry.validity?.until
372
+ };
373
+ try {
374
+ return normalizeDelegation(input, index, tree);
375
+ } catch (error) {
376
+ return invalid(`delegations[${String(index)}] is invalid`, error);
377
+ }
378
+ });
379
+ }
380
+ function identity(user) {
381
+ return user;
382
+ }
383
+ /**
384
+ * Rebuilds an evaluable `Policy` from a catalog (`permissions.catalog.json`)
385
+ * and the policy `permdock cloud push` sent with it, for a service that holds
386
+ * no application code: the hosted AuthZEN endpoint or a `mergeHostedGrants`
387
+ * pre-check. Throws `PermDockValidationError` when either input is malformed
388
+ * or the two disagree.
389
+ *
390
+ * What only code can answer fails closed: an allow whose condition is a
391
+ * closure never grants and such a deny always applies; a resource schema
392
+ * keyword outside the supported JSON Schema subset rejects every value; a
393
+ * support role has no one who may consent. Grant levels and OAuth scopes
394
+ * are not in a catalog, so the rebuilt policy has none.
395
+ */
396
+ function policyFromCatalog(catalogInput, pushedInput, options = {}) {
397
+ const catalog = parseCatalog(catalogInput);
398
+ const pushed = parsePushedPolicy(pushedInput);
399
+ const permissions = permissionTree(catalog);
400
+ const resources = getRegistry(permissions);
401
+ const scopes = defineScopes(pushed.scopes === void 0 ? catalog.scopes === void 0 ? void 0 : Object.fromEntries(catalog.scopes.map((scope) => [scope.name, compact({
402
+ key: scope.key,
403
+ within: scope.within
404
+ })])) : Object.fromEntries(pushed.scopes.map((scope) => [scope.name, compact({
405
+ key: scope.key,
406
+ within: scope.within
407
+ })])));
408
+ const grants = pushed.grants.map((raw) => buildGrant(permissions, raw));
409
+ const catalogRoles = new Map((catalog.roles ?? []).map((role) => [role.key, role]));
410
+ const roleNames = [.../* @__PURE__ */ new Set([...grants.flatMap((grant) => grant.role === null ? [] : [grant.role]), ...(catalog.roles ?? []).map((role) => role.key)])];
411
+ const roles = roleNames.flatMap((name) => {
412
+ const role = catalogRoles.get(name);
413
+ const own = grants.filter((grant) => grant.role === name);
414
+ if (own.length === 0 && role?.activation === void 0 && role?.supportAccess === void 0) return [];
415
+ return [binding(name, role, own, roleOn(role, own, resources, permissions))];
416
+ });
417
+ const vocabulary = freezeDeep({
418
+ permissions,
419
+ roles: defineRoles(Object.fromEntries(roleNames.map((name) => {
420
+ const role = catalogRoles.get(name);
421
+ return [name, compact({
422
+ on: role?.on === void 0 || role.on === "resource" ? void 0 : role.on,
423
+ assignable: role?.assignable,
424
+ meta: role?.audience === void 0 ? void 0 : { audience: role.audience }
425
+ })];
426
+ }))),
427
+ plans: definePlans(Object.fromEntries((catalog.plans ?? []).map((plan) => [plan.key, {}])))
428
+ });
429
+ const subject = options.subject ?? identity;
430
+ const delegations = delegationsOf(catalog, permissions);
431
+ const hostable = catalog.permissions.filter((leaf) => leaf.hostable === true).map((leaf) => leaf.key);
432
+ return freezeDeep(compact({
433
+ permissions,
434
+ roles,
435
+ rolesByName: new Map(roles.map((role) => [role.name, role])),
436
+ grants,
437
+ vocabulary,
438
+ scopes,
439
+ principal: subject,
440
+ subject,
441
+ validate: "boundary",
442
+ fingerprint: pushed.fingerprint,
443
+ resources,
444
+ hostable,
445
+ delegations,
446
+ index: indexPolicy(roles, grants, vocabulary)
447
+ }));
448
+ }
449
+ //#endregion
450
+ export { resourceSchemaFromJson as n, policyFromCatalog as t };
@@ -0,0 +1,89 @@
1
+ import { t as byCodePoint } from "./compare-pfyVnBjE.js";
2
+ import { t as emitPermissionsModule } from "./generate-CNU1pIOo.js";
3
+ //#region src/cli/importers/policy-module.ts
4
+ const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
5
+ /** Actions a collection permission decides: there is no row yet, or a list of rows. */
6
+ const COLLECTION_ACTIONS = /* @__PURE__ */ new Set(["create", "list"]);
7
+ /** Whether `name` can be a resource or action key in generated code. */
8
+ function isIdentifier(name) {
9
+ return IDENTIFIER.test(name);
10
+ }
11
+ function quote(value) {
12
+ return `'${value.replaceAll("\\", "\\\\").replaceAll("'", "\\'")}'`;
13
+ }
14
+ function isValueList(value) {
15
+ return Array.isArray(value);
16
+ }
17
+ function renderValue(value) {
18
+ if (value === null) return "null";
19
+ if (isValueList(value)) return `[${value.map((item) => renderValue(item)).join(", ")}]`;
20
+ if (typeof value === "object") return `principal.${value.principal}`;
21
+ return typeof value === "string" ? quote(value) : String(value);
22
+ }
23
+ function propertyKey(name) {
24
+ return isIdentifier(name) ? name : quote(name);
25
+ }
26
+ function renderWhere(where) {
27
+ if ("and" in where) return `{ and: [${where.and.map(renderWhere).join(", ")}] }`;
28
+ if ("or" in where) return `{ or: [${where.or.map(renderWhere).join(", ")}] }`;
29
+ if ("not" in where) return `{ not: ${renderWhere(where.not)} }`;
30
+ const value = renderValue(where.value);
31
+ return where.op === "eq" ? `{ ${propertyKey(where.field)}: ${value} }` : `{ ${propertyKey(where.field)}: { ${where.op}: ${value} } }`;
32
+ }
33
+ function renderGrant(grant) {
34
+ const options = [...grant.where === void 0 ? [] : [`where: ${renderWhere(grant.where)}`], ...grant.fields === void 0 ? [] : [`fields: [${grant.fields.map(quote).join(", ")}]`]];
35
+ const permission = `permissions.${grant.resource}.${grant.action}`;
36
+ return options.length === 0 ? `${grant.effect}(${permission})` : `${grant.effect}(${permission}, { ${options.join(", ")} })`;
37
+ }
38
+ function usesPrincipal(where) {
39
+ return where !== void 0 && JSON.stringify(where).includes("\"principal\"");
40
+ }
41
+ /** Resources keyed by name, each with its actions split into instance and collection ones. */
42
+ function resourcesOf(actions) {
43
+ return [...actions.entries()].toSorted(([a], [b]) => byCodePoint(a, b)).map(([name, set]) => {
44
+ const sorted = [...set].toSorted();
45
+ return {
46
+ path: [name],
47
+ actions: sorted.filter((action) => !COLLECTION_ACTIONS.has(action)),
48
+ collection: sorted.filter((action) => COLLECTION_ACTIONS.has(action))
49
+ };
50
+ });
51
+ }
52
+ /**
53
+ * A deterministic module with the imported `permissions` and a `policy` of
54
+ * their roles. Rules stay data: an import writes declarations and grants,
55
+ * never code an application maintains by hand.
56
+ */
57
+ function emitPolicyModule(input) {
58
+ const permissionsModule = emitPermissionsModule({
59
+ generator: input.generator,
60
+ schema: void 0,
61
+ resources: resourcesOf(input.actions),
62
+ ...input.exports === void 0 ? {} : { exports: input.exports }
63
+ });
64
+ const grants = input.roles.flatMap((role) => role.grants);
65
+ const names = /* @__PURE__ */ new Set([
66
+ "definePermissions",
67
+ "definePolicy",
68
+ "resource",
69
+ "role"
70
+ ]);
71
+ for (const grant of grants) names.add(grant.effect);
72
+ if (grants.some((grant) => usesPrincipal(grant.where))) names.add("principal");
73
+ const imports = `import { ${[...names].toSorted().join(", ")} } from 'permdock'`;
74
+ const roles = input.roles.toSorted((a, b) => byCodePoint(a.name, b.name)).map((role) => {
75
+ const body = role.grants.map((grant) => ` ${renderGrant(grant)},`);
76
+ return body.length === 0 ? ` role(${quote(role.name)}, []),` : ` role(${quote(role.name)}, [\n${body.join("\n")}\n ]),`;
77
+ });
78
+ return `${permissionsModule.replace("import { definePermissions, resource } from 'permdock'", imports)}
79
+ export const policy = definePolicy(permissions, {
80
+ roles: [
81
+ ${roles.join("\n")}
82
+ ],
83
+ subject: (user: { readonly id: string; readonly roles: readonly string[] }) =>
84
+ user,
85
+ })
86
+ `;
87
+ }
88
+ //#endregion
89
+ export { isIdentifier as n, emitPolicyModule as t };