permdock 0.4.0 → 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 (514) hide show
  1. package/README.md +37 -35
  2. package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
  3. package/dist/a2a/index.d.ts +6 -6
  4. package/dist/a2a/index.js +14 -17
  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 -35
  10. package/dist/ai-sdk/index.js +37 -23
  11. package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
  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/arazzo-B6lebmiQ.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.js} +20 -14
  20. package/dist/args-IIolxxKA.js +197 -0
  21. package/dist/astro/index.d.ts +43 -0
  22. package/dist/astro/index.js +27 -0
  23. package/dist/audience-Dg8XsRaO.js +55 -0
  24. package/dist/auth-DRLEizbL.js +178 -0
  25. package/dist/authzen/index.d.ts +26 -6
  26. package/dist/authzen/index.js +94 -79
  27. package/dist/automation-BMZPIVUM.d.ts +114 -0
  28. package/dist/automation-DVjOckjV.js +157 -0
  29. package/dist/better-auth/index.d.ts +8 -6
  30. package/dist/better-auth/index.js +9 -8
  31. package/dist/better-supabase/index.d.ts +357 -30
  32. package/dist/better-supabase/index.js +936 -194
  33. package/dist/{bind-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
  34. package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -10
  35. package/dist/body-CH5of8Ne.js +10 -0
  36. package/dist/body-text-QcXok_SI.js +52 -0
  37. package/dist/{build-instance-DIIV9DbC.js → build-instance-BMnAudHn.js} +4 -3
  38. package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
  39. package/dist/{capability-CksyCWDH.d.ts → capability-BSslw1QV.d.ts} +44 -25
  40. package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
  41. package/dist/casbin-Cr7RLtA3.js +30 -0
  42. package/dist/casbin-Dyu2gnUD.js +234 -0
  43. package/dist/casl-64gpT-8x.js +24 -0
  44. package/dist/casl-DjEDhTCP.js +299 -0
  45. package/dist/catalog/index.d.ts +74 -2
  46. package/dist/catalog/index.js +51 -2
  47. package/dist/{catalog-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
  48. package/dist/catalog-DjhMYYCq.js +1 -0
  49. package/dist/catalog-R_A__RsH.js +52 -0
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.js} +45 -23
  51. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  52. package/dist/chat/index.d.ts +2 -0
  53. package/dist/chat/index.js +224 -0
  54. package/dist/chat-sdk/index.d.ts +87 -0
  55. package/dist/chat-sdk/index.js +197 -0
  56. package/dist/claims-map-7oQ3ue4X.js +13 -0
  57. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  58. package/dist/claude-agent/index.d.ts +7 -14
  59. package/dist/claude-agent/index.js +24 -27
  60. package/dist/clerk/index.d.ts +9 -8
  61. package/dist/clerk/index.js +9 -14
  62. package/dist/cli/bin.js +36 -17
  63. package/dist/cli/index.d.ts +19 -5
  64. package/dist/cli/index.js +164 -4
  65. package/dist/cloud/index.d.ts +102 -63
  66. package/dist/cloud/index.js +239 -340
  67. package/dist/cloud-CIoHNevm.js +87 -0
  68. package/dist/codemod-Bmj9dWMH.js +37 -0
  69. package/dist/codemod-Cxvvc70T.js +2084 -0
  70. package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
  71. package/dist/collect-DloHbDVa.js +55 -0
  72. package/dist/collect-FlXJlhus.js +1 -0
  73. package/dist/command-L8EstFNm.js +6 -0
  74. package/dist/compile/index.d.ts +1 -1
  75. package/dist/compile/index.js +1 -2
  76. package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  77. package/dist/{compile-CtTP7eur.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  78. package/dist/completion-BqhRBJD8.js +143 -0
  79. package/dist/config-B46rm9sc.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  87. package/dist/create-BDS7wc3y.d.ts +138 -0
  88. package/dist/create-BFfm17UA.d.ts +110 -0
  89. package/dist/create-BWRSXgOF.js +403 -0
  90. package/dist/create-C3b4B5eF.js +130 -0
  91. package/dist/{create-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
  92. package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-DaXVdDhM.js +286 -0
  95. package/dist/delivery/index.d.ts +5 -0
  96. package/dist/delivery/index.js +5 -0
  97. package/dist/delivery-DCAgNyCn.js +499 -0
  98. package/dist/delivery-event-xX4obB8F.js +40 -0
  99. package/dist/{denied-text-DfRk15uw.d.ts → denied-text-D8jDHgsl.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.d.ts} +2 -2
  101. package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
  102. package/dist/device-BARQ8eYG.js +193 -0
  103. package/dist/diff-CxZo9pTq.js +37 -0
  104. package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
  105. package/dist/doctor-CxiwSfqH.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.js} +245 -50
  107. package/dist/drizzle/index.d.ts +5 -3
  108. package/dist/drizzle/index.js +2 -2
  109. package/dist/elysia/index.d.ts +16 -13
  110. package/dist/elysia/index.js +13 -12
  111. package/dist/env-DJZrPjRi.js +8 -0
  112. package/dist/errors-BDUwg2qC.js +27 -0
  113. package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
  114. package/dist/errors-BWXBMaKK.d.ts +11 -0
  115. package/dist/{errors-OD_4c__H.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  116. package/dist/errors-CWTY6uih.js +143 -0
  117. package/dist/evaluate-_R8QkWaf.js +1732 -0
  118. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-DZ2CbV5k.js} +145 -34
  120. package/dist/eve/index.d.ts +12 -16
  121. package/dist/eve/index.js +22 -28
  122. package/dist/event-time-CsegxXxB.js +23 -0
  123. package/dist/expiry-D4_YKRKD.js +52 -0
  124. package/dist/express/index.d.ts +13 -10
  125. package/dist/express/index.js +12 -11
  126. package/dist/fastify/index.d.ts +25 -22
  127. package/dist/fastify/index.js +13 -12
  128. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  129. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  130. package/dist/fields-D9tPVUUS.js +203 -0
  131. package/dist/files-C5ZI27eV.js +124 -0
  132. package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
  133. package/dist/flags-C3DktBDY.js +86 -0
  134. package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-D2lZt4Dd.js} +55 -52
  135. package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
  136. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.js} +5 -4
  138. package/dist/h3/index.d.ts +37 -0
  139. package/dist/h3/index.js +35 -0
  140. package/dist/headers-BIjfMaoC.js +8 -0
  141. package/dist/headers-CIbDTUTK.d.ts +7 -0
  142. package/dist/{helpers-C9YmyBIa.js → helpers-DTcZOzhF.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-BZIAYvon.js +315 -0
  146. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  147. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  148. package/dist/http-DXJ37RDA.js +46 -0
  149. package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
  150. package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
  151. package/dist/{import-BFIlhetD.js → import-DMmOG27O.js} +190 -53
  152. package/dist/index-BcHcPyIo.d.ts +110 -0
  153. package/dist/index-CaxrMD1A.d.ts +1 -0
  154. package/dist/index-Chrs5fQ-.d.ts +210 -0
  155. package/dist/index-CxGUswIC.d.ts +431 -0
  156. package/dist/index-D8EovfsP.d.ts +91 -0
  157. package/dist/{index-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
  158. package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
  159. package/dist/index.d.ts +19 -15
  160. package/dist/index.js +31 -21
  161. package/dist/init-DeMYsnYJ.js +96 -0
  162. package/dist/init-GG6Jh8HD.js +95 -0
  163. package/dist/{instance-options-plkrsAog.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  164. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  165. package/dist/instant-BluqDvyS.js +19 -0
  166. package/dist/internals-Dk8A8fX3.js +17 -0
  167. package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
  168. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  169. package/dist/jwt/index.d.ts +18 -11
  170. package/dist/jwt/index.js +156 -135
  171. package/dist/{kernel-CB3LrIJM.js → kernel-5JatXyND.js} +52 -24
  172. package/dist/kysely/index.d.ts +5 -3
  173. package/dist/kysely/index.js +2 -2
  174. package/dist/load-BxEtwlBS.js +1 -0
  175. package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
  176. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  177. package/dist/login-Dfe5RlYk.js +68 -0
  178. package/dist/login-imhuwvn3.js +254 -0
  179. package/dist/manifest-C8IzW3Do.js +42 -0
  180. package/dist/manifest-CtKR3GXL.js +370 -0
  181. package/dist/manifest-json-CAGzls-C.js +9 -0
  182. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  183. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  184. package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
  185. package/dist/{map-error-BE27PYkE.js → map-error-TCAdw-eW.js} +3 -3
  186. package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
  187. package/dist/mcp/index.d.ts +22 -12
  188. package/dist/mcp/index.js +57 -39
  189. package/dist/{migrate-BwlB5-Wk.js → migrate-BShP7Vf4.js} +53 -14
  190. package/dist/nest/index.d.ts +12 -9
  191. package/dist/nest/index.js +15 -14
  192. package/dist/next/index.d.ts +18 -21
  193. package/dist/next/index.js +13 -11
  194. package/dist/next/plugin.d.ts +1 -1
  195. package/dist/next/plugin.js +2 -2
  196. package/dist/node/index.d.ts +10 -10
  197. package/dist/node/index.js +7 -9
  198. package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
  199. package/dist/openai/index.d.ts +9 -16
  200. package/dist/openai/index.js +17 -24
  201. package/dist/openapi/index.d.ts +3 -3
  202. package/dist/openapi/index.js +1 -1
  203. package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
  204. package/dist/{openapi-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
  205. package/dist/openapi-ahr8rHu3.js +138 -0
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-CxybZErY.d.ts +59 -0
  208. package/dist/orpc/index.d.ts +13 -10
  209. package/dist/orpc/index.js +20 -15
  210. package/dist/otel/index.d.ts +3 -2
  211. package/dist/otel/index.js +30 -7
  212. package/dist/output-Dyw8fyPF.js +88 -0
  213. package/dist/output-files-B3IZJksC.js +1 -0
  214. package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
  215. package/dist/{permission-keys-B26jeyUv.js → ownership-BatFgAA4.js} +1698 -869
  216. package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
  217. package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
  218. package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
  219. package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  220. package/dist/parse-request-D_tUXG6M.js +26 -0
  221. package/dist/paths-DXSHAMIa.js +42 -0
  222. package/dist/pdp/index.d.ts +7 -3
  223. package/dist/pdp/index.js +45 -26
  224. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  225. package/dist/peer-CRvC7Hg1.js +1 -0
  226. package/dist/permdock-B9JxkBwC.js +868 -0
  227. package/dist/permdock-D7eeLJER.d.ts +502 -0
  228. package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
  229. package/dist/permissions-B-wCP5ZC.js +30 -0
  230. package/dist/{permissions-CCJ6lmxB.js → permissions-CZKiUfFM.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  232. package/dist/policies-CO1oOymN.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
  235. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
  238. package/dist/postgrest-CW0IqC-U.js +566 -0
  239. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  240. package/dist/powersync-BHfuehf3.js +62 -0
  241. package/dist/powersync-CbzkqL_M.js +1 -0
  242. package/dist/{powersync-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
  243. package/dist/preset/index.d.ts +146 -0
  244. package/dist/preset/index.js +1 -0
  245. package/dist/preset-DZdU0tne.js +1768 -0
  246. package/dist/principal-source-pHneukrx.js +103 -0
  247. package/dist/prisma/index.d.ts +6 -3
  248. package/dist/prisma/index.js +2 -2
  249. package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
  250. package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  251. package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
  252. package/dist/problem-types-CJ2325SZ.js +5 -0
  253. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  254. package/dist/{protected-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
  255. package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
  256. package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
  259. package/dist/pull-BgIfno6w.js +256 -0
  260. package/dist/pull-ByOks_Tg.js +1 -0
  261. package/dist/push-CmFVBOeI.js +116 -0
  262. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  263. package/dist/pushed-policy-DobP7AHI.js +238 -0
  264. package/dist/react/index.d.ts +8 -8
  265. package/dist/react/index.js +6 -6
  266. package/dist/react/provider-client.d.ts +1 -1
  267. package/dist/react/provider-client.js +1 -2
  268. package/dist/react-native/index.d.ts +24 -72
  269. package/dist/react-native/index.js +24 -22
  270. package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
  271. package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
  272. package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
  273. package/dist/renames-CGj7YwcQ.js +175 -0
  274. package/dist/{replay-COpmZUfx.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.js} +3 -3
  277. package/dist/request-schema-CMreVuFM.js +148 -0
  278. package/dist/resend/index.d.ts +126 -0
  279. package/dist/resend/index.js +379 -0
  280. package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
  281. package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
  282. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  283. package/dist/rls-BA8an5Ap.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
  287. package/dist/run-CNsApDpd.js +1 -0
  288. package/dist/run-DOfMtc9V.js +723 -0
  289. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  290. package/dist/run-ticket-sxFI6LAk.js +337 -0
  291. package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
  292. package/dist/{saas-DtaA4JuW.js → saas-FO-Q8oj0.js} +16 -14
  293. package/dist/scan-BOI5tJ-6.js +29 -0
  294. package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
  295. package/dist/schema-yLuBWWsh.js +130 -0
  296. package/dist/scim/index.d.ts +2 -2
  297. package/dist/scim/index.js +1 -2
  298. package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
  299. package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
  300. package/dist/server/index.d.ts +12 -143
  301. package/dist/server/index.js +12 -9
  302. package/dist/server-DqCT4CgZ.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-BEZSlMS_.js +957 -0
  309. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  310. package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
  311. package/dist/skills-CTYwkl44.js +51 -0
  312. package/dist/snapshot-CXUWfsNy.js +269 -0
  313. package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  314. package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  315. package/dist/solid/index.d.ts +11 -12
  316. package/dist/solid/index.js +7 -7
  317. package/dist/solid-start/index.d.ts +52 -0
  318. package/dist/solid-start/index.js +49 -0
  319. package/dist/{sources-Dljy06zL.d.ts → sources-BV9j0DeZ.d.ts} +7 -13
  320. package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
  321. package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
  322. package/dist/src-DLfUWFAI.js +1851 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  326. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
  330. package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
  331. package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  333. package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
  334. package/dist/style-DiKWnAvn.js +1 -0
  335. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  336. package/dist/subject-BGoM5o8B.js +17 -0
  337. package/dist/supabase/index.d.ts +23 -106
  338. package/dist/supabase/index.js +5 -4
  339. package/dist/supabase/middleware.d.ts +7 -6
  340. package/dist/supabase/middleware.js +13 -11
  341. package/dist/supabase-9pqI57pW.js +92 -0
  342. package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
  343. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  344. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
  345. package/dist/support-session-C6xJQYut.js +158 -0
  346. package/dist/svelte/Protected.svelte +4 -4
  347. package/dist/svelte/index.d.ts +7 -7
  348. package/dist/svelte/index.js +10 -10
  349. package/dist/svelte/runtime.d.ts +3 -3
  350. package/dist/svelte/runtime.js +3 -3
  351. package/dist/svelte/source.d.ts +7 -7
  352. package/dist/svelte/source.js +4 -4
  353. package/dist/sveltekit/index.d.ts +51 -0
  354. package/dist/sveltekit/index.js +27 -0
  355. package/dist/tanstack-start/index.d.ts +51 -0
  356. package/dist/tanstack-start/index.js +40 -0
  357. package/dist/target-Bw37TFNA.js +51 -0
  358. package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
  359. package/dist/terminal/index.d.ts +11 -9
  360. package/dist/terminal/index.js +23 -287
  361. package/dist/testing/index.d.ts +311 -38
  362. package/dist/testing/index.js +3475 -201
  363. package/dist/testing/saas/index.d.ts +9 -8
  364. package/dist/testing/saas/index.js +2 -2
  365. package/dist/testing/saas/permissions.d.ts +1 -1
  366. package/dist/testing/saas/permissions.js +1 -2
  367. package/dist/text-BMFRfBqc.js +8 -0
  368. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  369. package/dist/thenable-yD7SabqG.js +31 -0
  370. package/dist/time-DkWjdL98.js +71 -0
  371. package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
  372. package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
  373. package/dist/trpc/index.d.ts +12 -9
  374. package/dist/trpc/index.js +16 -14
  375. package/dist/{types-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
  376. package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
  377. package/dist/types-BjV-fqcA.d.ts +57 -0
  378. package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
  379. package/dist/types-C8-KNsFf.d.ts +107 -0
  380. package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  381. package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
  382. package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
  383. package/dist/{types-CIlTojhq.d.ts → types-ClZaWzfb.d.ts} +9 -6
  384. package/dist/types-DX0LaKTb.d.ts +157 -0
  385. package/dist/types-DiQjupG2.d.ts +332 -0
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/types-_sHy8BQf.d.ts +65 -0
  388. package/dist/{types-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
  389. package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CHOtwL19.js +1 -0
  393. package/dist/usage-DHtE8j4E.js +32 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  396. package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
  397. package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
  398. package/dist/{verify-BztUB3GX.js → verify-DbCL9bnB.js} +645 -50
  399. package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
  400. package/dist/version-DXkYUISx.js +1 -0
  401. package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
  402. package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-D6lPdb4Z.d.ts} +65 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-BGUtGYoU.js +67 -0
  406. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  407. package/dist/watch-Cb-NcaUw.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-CszoTJMq.js} +44 -5
  409. package/dist/webmcp/index.d.ts +2 -2
  410. package/dist/webmcp/index.js +3 -3
  411. package/dist/where-scope-Dv-WTP-w.js +306 -0
  412. package/dist/who-can-D0QoYbEb.js +364 -0
  413. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  414. package/dist/wire-denial-C7PaVYEM.js +27 -0
  415. package/dist/workflow/index.d.ts +5 -0
  416. package/dist/workflow/index.js +223 -0
  417. package/dist/workflow-sdk/index.d.ts +56 -0
  418. package/dist/workflow-sdk/index.js +78 -0
  419. package/dist/{wrap-Cr93qqdP.d.ts → wrap-Bd1Tejur.d.ts} +2 -1
  420. package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
  421. package/package.json +136 -37
  422. package/schemas/access-event-v1.json +118 -0
  423. package/schemas/approval-request-v1.json +34 -1
  424. package/schemas/approval-signature-v1.json +94 -0
  425. package/schemas/automation-event-v1.json +113 -0
  426. package/schemas/capability-v1.json +84 -0
  427. package/schemas/catalog-event-v1.json +87 -0
  428. package/schemas/catalog-v1.json +123 -12
  429. package/schemas/cli-commands-v1.json +164 -0
  430. package/schemas/cli-result-v1.json +96 -0
  431. package/schemas/cloud-api-v1.json +5407 -0
  432. package/schemas/connector-v1.json +408 -0
  433. package/schemas/credential-event-v1.json +81 -0
  434. package/schemas/credential-v1.json +134 -0
  435. package/schemas/decision-event-v1.json +288 -0
  436. package/schemas/delivery-event-v1.json +117 -0
  437. package/schemas/directory-event-v1.json +85 -0
  438. package/schemas/evidence-export-v1.json +54 -0
  439. package/schemas/membership-event-v1.json +93 -0
  440. package/schemas/policy-v1.json +68 -0
  441. package/schemas/pushed-policy-v1.json +236 -0
  442. package/schemas/run-v1.json +162 -0
  443. package/schemas/snapshot-v1.json +138 -0
  444. package/schemas/supabase-claims-v1.json +4 -4
  445. package/schemas/supabase-manifest-v1.json +5 -1
  446. package/schemas/support-session-v1.json +111 -0
  447. package/skills/permdock/SKILL.md +16 -12
  448. package/skills/permdock-agents/SKILL.md +40 -23
  449. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  450. package/skills/permdock-agents/references/runtimes.md +22 -18
  451. package/skills/permdock-approvals/SKILL.md +29 -13
  452. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  453. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  454. package/skills/permdock-audit/SKILL.md +3 -3
  455. package/skills/permdock-credentials/SKILL.md +5 -5
  456. package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
  457. package/skills/permdock-data/SKILL.md +6 -6
  458. package/skills/permdock-data/references/queries-and-rls.md +9 -8
  459. package/skills/permdock-data/references/relationships.md +3 -3
  460. package/skills/permdock-tenancy/SKILL.md +20 -7
  461. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  462. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +5 -4
  463. package/skills/permdock-wire/SKILL.md +17 -11
  464. package/skills/permdock-wire/references/adapters.md +139 -51
  465. package/skills/permdock-wire/references/policy-options.md +5 -5
  466. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  467. package/dist/approvals-DZL76lKW.js +0 -240
  468. package/dist/arazzo-CD8d0WLb.js +0 -54
  469. package/dist/catalog-6yWAX6Ps.js +0 -2
  470. package/dist/catalog-WHG4kBq7.js +0 -48
  471. package/dist/cloud-C7bSDgX4.js +0 -50
  472. package/dist/cloud-PeBN3IEn.js +0 -118
  473. package/dist/collect-Bw2Jdq1q.js +0 -2
  474. package/dist/collect-CQx4hX4N.js +0 -83
  475. package/dist/commands-Cpip4ULx.js +0 -97
  476. package/dist/config-DLt6BvV7.js +0 -36
  477. package/dist/diff-Cnghh_Ip.js +0 -48
  478. package/dist/doctor-CuVJvhV_.js +0 -53
  479. package/dist/duration-xK2jGFVc.js +0 -25
  480. package/dist/errors-CWfoNg9N.js +0 -47
  481. package/dist/errors-DRnGZHzF.js +0 -30
  482. package/dist/expiry-BoBJ8Tvc.js +0 -7
  483. package/dist/fields-fwfXN01n.js +0 -1016
  484. package/dist/headers-BZSDieNT.js +0 -6
  485. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  486. package/dist/ids-DC4V4CFu.js +0 -18
  487. package/dist/index-DgM7w96K.d.ts +0 -6
  488. package/dist/index-Dz7didpC.d.ts +0 -201
  489. package/dist/load-B_shHrmd.js +0 -2
  490. package/dist/manifest-BngWKryL.js +0 -770
  491. package/dist/may-use-BOn_dR_w.js +0 -78
  492. package/dist/openapi-DcQ1Kg40.js +0 -164
  493. package/dist/ownership-BgnbOJFT.js +0 -851
  494. package/dist/permdock-L26udHSk.js +0 -3646
  495. package/dist/powersync-BFSbSElQ.js +0 -62
  496. package/dist/powersync-DCDgZgfZ.js +0 -2
  497. package/dist/rls-55DQTuf5.js +0 -250
  498. package/dist/run-DMcNW_8T.js +0 -174
  499. package/dist/server-ZYEHtNHS.js +0 -268
  500. package/dist/sink-BTtmfPnE.js +0 -141
  501. package/dist/sink-CPN4zLfs.d.ts +0 -104
  502. package/dist/skills-Dle4ZoLF.js +0 -56
  503. package/dist/snapshot-Dc9CHPME.js +0 -1078
  504. package/dist/src-Bb7no-hS.js +0 -639
  505. package/dist/subject-C6dLxqHU.js +0 -24
  506. package/dist/supabase-Dbqr141s.js +0 -83
  507. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  508. package/dist/thenable-QSmvt-vZ.js +0 -65
  509. package/dist/types-C0dee0Qf.d.ts +0 -197
  510. package/dist/types-DvupZE0w.d.ts +0 -9
  511. package/dist/usage-4G6t643F.js +0 -42
  512. package/dist/usage-iFLJ0-rr.js +0 -2
  513. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  514. package/dist/watch-C8TpsAl4.js +0 -2
@@ -1,639 +0,0 @@
1
- import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { n as isThenable, s as ownGet } from "./thenable-QSmvt-vZ.js";
4
- import { _ as assertSqlFunctionName, g as assertSqlFunctionArg, h as assertPortableTwin, m as normalizeWhere } from "./role-builder-B4GbKM-i.js";
5
- import { d as scopeList, m as tenantOf } from "./scopes-tvpa34ep.js";
6
- import { r as snapshotGrant, t as buildSnapshot } from "./snapshot-Dc9CHPME.js";
7
- import { d as attachRegistry, i as getRegistry, n as findPermission, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-BsblpB-z.js";
8
- import { c as isEdgeRelation, m as restrictedStops, o as groupEntries, r as assertGraphTargets, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-D1Un3pcz.js";
9
- import { _ as listPlans, o as flattenGrantee } from "./grantee-CXY-0C87.js";
10
- import { t as canonicalJson } from "./canonical-json-CFKyFOke.js";
11
- import { m as tenantsOf } from "./tenancy-DshjqY0n.js";
12
- import { a as declaredRoleNames, l as levelNames, s as grantList } from "./hosted-CBHgkzDl.js";
13
- import { n as sha256, t as bytesToBase64Url } from "./sha256-BO0swRXL.js";
14
- import { c as collectSnapshotGrants, l as rankRoles, m as ceilingGrants, n as resolveSubject, o as snapshotOf, s as snapshotScopes, u as usesAssigns, y as resolveCustomRole } from "./permdock-L26udHSk.js";
15
- import { n as relationId } from "./relations-CvmSpG67.js";
16
- import { n as LOCAL_CUSTOM_ROLE } from "./parse-local-manifest-C-q02Pal.js";
17
- //#region src/conditions/sql-function.ts
18
- function sqlFunction(name, options) {
19
- assertSqlFunctionName(name);
20
- const args = options.args ?? [];
21
- for (const arg of args) assertSqlFunctionArg(arg);
22
- const twin = normalizeWhere(options.twin);
23
- assertPortableTwin(twin);
24
- return freezeDeep({
25
- op: "sqlFunction",
26
- name,
27
- args,
28
- twin
29
- });
30
- }
31
- //#endregion
32
- //#region src/core/memory-sources.ts
33
- function memoryEntitlementSource(entries) {
34
- return { entitlementsFor(_principal, options) {
35
- return options.tenant === void 0 ? [] : [...entries[options.tenant] ?? []];
36
- } };
37
- }
38
- function memorySettings(settings) {
39
- const byTenant = new Map(Object.entries(settings));
40
- return Object.freeze({ settingsFor(tenant) {
41
- return byTenant.get(tenant);
42
- } });
43
- }
44
- /** Memberships keyed by principal id; `tenant` is not a filter, as for a database source. */
45
- function memoryMembershipSource(entries) {
46
- const byPrincipal = new Map(Object.entries(entries));
47
- return Object.freeze({
48
- membershipsFor(principal) {
49
- return [...byPrincipal.get(principal.id) ?? []];
50
- },
51
- list(query) {
52
- const members = [];
53
- for (const [id, memberships] of byPrincipal) for (const membership of memberships) if (membership.scope === query.scope && membership.id === query.id) members.push({
54
- principal: { id },
55
- membership
56
- });
57
- return members;
58
- }
59
- });
60
- }
61
- /** A snapshot held in memory; `set` replaces it and notifies every subscriber. */
62
- function memorySnapshotSource(initial) {
63
- let current = initial;
64
- const listeners = /* @__PURE__ */ new Set();
65
- return Object.freeze({
66
- get: () => current,
67
- subscribe(listener) {
68
- listeners.add(listener);
69
- return () => {
70
- listeners.delete(listener);
71
- };
72
- },
73
- set(snapshot) {
74
- current = snapshot;
75
- for (const listener of listeners) listener();
76
- }
77
- });
78
- }
79
- function memoryRoleSource(customRoles) {
80
- const byTenant = /* @__PURE__ */ new Map();
81
- const global = [];
82
- for (const role of customRoles) {
83
- if (role.tenant === void 0) {
84
- global.push(role);
85
- continue;
86
- }
87
- const list = byTenant.get(role.tenant) ?? [];
88
- list.push(role);
89
- byTenant.set(role.tenant, list);
90
- }
91
- return {
92
- rolesFor(tenant) {
93
- return [...byTenant.get(tenant) ?? []];
94
- },
95
- globalRoles() {
96
- return [...global];
97
- }
98
- };
99
- }
100
- //#endregion
101
- //#region src/core/stripe-entitlements.ts
102
- const PAGE = 100;
103
- const MAX_PAGES = 10;
104
- /**
105
- * Plan names from Stripe Entitlements: the `lookup_key` of every active
106
- * entitlement of the tenant's Stripe customer. `customer` maps the active
107
- * tenant to its customer id; no tenant or no customer means no entitlements.
108
- * Pass it as `entitlements`, and grant with `plan('<lookup_key>')`.
109
- */
110
- function fromStripeEntitlements(options) {
111
- return { async entitlementsFor(principal, query) {
112
- if (query.tenant === void 0) return [];
113
- const customer = await options.customer(query.tenant, principal);
114
- if (customer === void 0 || customer === "") return [];
115
- const keys = /* @__PURE__ */ new Set();
116
- let after;
117
- for (let page = 0; page < MAX_PAGES; page += 1) {
118
- const result = await options.stripe.entitlements.activeEntitlements.list(after === void 0 ? {
119
- customer,
120
- limit: PAGE
121
- } : {
122
- customer,
123
- limit: PAGE,
124
- starting_after: after
125
- });
126
- for (const item of result.data) if (typeof item.lookup_key === "string" && item.lookup_key !== "") keys.add(item.lookup_key);
127
- const last = result.data.at(-1);
128
- if (!result.has_more || last === void 0) break;
129
- after = last.id;
130
- }
131
- return [...keys].toSorted();
132
- } };
133
- }
134
- //#endregion
135
- //#region src/core/memory-relations.ts
136
- /** The holders one edge-table row names for `spec`: none when the row does not belong to it. */
137
- function tableHolders(resourceName, spec, row, id) {
138
- if (relationId(ownGet(row, spec.object ?? `${resourceName}_id`)) !== id) return [];
139
- for (const [column, value] of Object.entries(spec.match ?? {})) if (ownGet(row, column) !== value) return [];
140
- const expiresAt = spec.expiresAt === void 0 ? void 0 : seconds(ownGet(row, spec.expiresAt));
141
- const period = expiresAt === void 0 ? {} : { expiresAt };
142
- const groups = spec.groups;
143
- const direct = relationId(ownGet(row, spec.subject ?? "user_id"));
144
- if (groups === void 0) return direct === void 0 ? [] : [{
145
- principal: { id: direct },
146
- ...period
147
- }];
148
- if (groups.column === void 0) {
149
- const out = direct === void 0 ? [] : [{
150
- principal: { id: direct },
151
- ...period
152
- }];
153
- for (const group of groupEntries(spec)) {
154
- const groupId = relationId(ownGet(row, group.subject));
155
- if (groupId !== void 0) out.push({
156
- group: {
157
- resource: group.resource,
158
- id: groupId,
159
- relation: group.relation
160
- },
161
- ...period
162
- });
163
- }
164
- return out;
165
- }
166
- const kind = ownGet(row, groups.column);
167
- if (kind === null || kind === void 0 || kind === groups.direct) return direct === void 0 ? [] : [{
168
- principal: { id: direct },
169
- ...period
170
- }];
171
- const group = groupEntries(spec).find((entry) => entry.resource === kind);
172
- const groupId = group === void 0 ? void 0 : relationId(ownGet(row, group.subject));
173
- return group === void 0 || groupId === void 0 ? [] : [{
174
- group: {
175
- resource: group.resource,
176
- id: groupId,
177
- relation: group.relation
178
- },
179
- ...period
180
- }];
181
- }
182
- function seconds(value) {
183
- if (value instanceof Date) {
184
- const time = value.getTime();
185
- return Number.isNaN(time) ? void 0 : time / 1e3;
186
- }
187
- if (typeof value === "number" && Number.isFinite(value)) return value;
188
- if (typeof value === "string") {
189
- const parsed = Date.parse(value);
190
- return Number.isNaN(parsed) ? void 0 : parsed / 1e3;
191
- }
192
- }
193
- function restrictedOf(node, row) {
194
- return node.restricted !== void 0 && row !== void 0 && ownGet(row, node.restricted) === true;
195
- }
196
- function edgeHolder(edge) {
197
- const holder = { principal: { id: edge.principal } };
198
- if (edge.startsAt !== void 0) holder.startsAt = edge.startsAt;
199
- if (edge.expiresAt !== void 0) holder.expiresAt = edge.expiresAt;
200
- return holder;
201
- }
202
- /**
203
- * An in-process `RelationSource` over plain rows and edges, read against the
204
- * resource definitions in `permissions`. For tests, fixtures and small apps.
205
- */
206
- function memoryRelations(permissions, data = {}) {
207
- const registry = getRegistry(permissions);
208
- const byId = /* @__PURE__ */ new Map();
209
- for (const [name, rows] of Object.entries(data.rows ?? {})) {
210
- const node = registry.get(name);
211
- const index = /* @__PURE__ */ new Map();
212
- for (const row of rows) {
213
- const id = relationId(ownGet(row, node?.id ?? "id"));
214
- if (id !== void 0) index.set(id, row);
215
- }
216
- byId.set(name, index);
217
- }
218
- const rowOf = (resource, id) => byId.get(resource)?.get(id);
219
- return {
220
- row({ resource, id }) {
221
- return rowOf(resource, id) ?? null;
222
- },
223
- ancestors({ resource, id, depth, through }) {
224
- const node = registry.get(resource);
225
- const start = rowOf(resource, id);
226
- if (node === void 0 || start === void 0) return { ancestors: [] };
227
- if (through !== "parent") {
228
- const link = Object.hasOwn(node.links, through) ? node.links[through] : void 0;
229
- const next = link === void 0 ? void 0 : relationId(ownGet(start, link.field));
230
- if (next === void 0 || depth < 1) return { ancestors: [] };
231
- return { ancestors: [{ id: next }] };
232
- }
233
- const restricted = restrictedOf(node, start);
234
- const stops = restrictedStops(node, "parent");
235
- if (restricted && stops || node.parent === void 0 || node.parent.resource !== resource) return restricted ? {
236
- restricted: true,
237
- ancestors: []
238
- } : { ancestors: [] };
239
- const field = node.parent.field;
240
- const seen = /* @__PURE__ */ new Set([id]);
241
- const ancestors = [];
242
- let next = relationId(ownGet(start, field));
243
- while (next !== void 0 && ancestors.length < depth) {
244
- const row = rowOf(resource, next);
245
- if (row === void 0) {
246
- next = void 0;
247
- break;
248
- }
249
- const hidden = restrictedOf(node, row);
250
- ancestors.push(hidden ? {
251
- id: next,
252
- restricted: true
253
- } : { id: next });
254
- if (seen.has(next) || hidden && stops) {
255
- next = void 0;
256
- break;
257
- }
258
- seen.add(next);
259
- next = relationId(ownGet(row, field));
260
- }
261
- const chain = restricted ? {
262
- restricted: true,
263
- ancestors
264
- } : { ancestors };
265
- return next === void 0 || rowOf(resource, next) === void 0 ? chain : {
266
- ...chain,
267
- truncated: true
268
- };
269
- },
270
- related({ resource, id, relation }) {
271
- const spec = registry.get(resource)?.relations[relation];
272
- if (spec === void 0 || isComputedRelation(spec)) return [];
273
- if (isEdgeRelation(spec)) {
274
- const table = data.tables?.[spec.edge];
275
- if (table !== void 0) return table.flatMap((row) => tableHolders(resource, spec, row, id));
276
- return (data.edges?.[resource]?.[relation] ?? []).filter((edge) => edge.id === id).map(edgeHolder);
277
- }
278
- const row = rowOf(resource, id);
279
- if (row === void 0) return [];
280
- if (isPrincipalRelation(spec)) {
281
- const holder = relationId(ownGet(row, spec.principal));
282
- if (holder === void 0) return [];
283
- const startsAt = spec.period?.startsAt === void 0 ? void 0 : seconds(ownGet(row, spec.period.startsAt));
284
- const expiresAt = spec.period?.expiresAt === void 0 ? void 0 : seconds(ownGet(row, spec.period.expiresAt));
285
- return [{
286
- principal: { id: holder },
287
- ...startsAt === void 0 ? {} : { startsAt },
288
- ...expiresAt === void 0 ? {} : { expiresAt }
289
- }];
290
- }
291
- if (spec.memberOf !== void 0) return [];
292
- const holder = relationId(ownGet(row, spec.field));
293
- return holder === void 0 ? [] : [{ principal: { id: holder } }];
294
- }
295
- };
296
- }
297
- //#endregion
298
- //#region src/core/local-manifest.ts
299
- /** A relation grantee needs the relation graph, which a device does not hold: the grant decides on the server only. */
300
- function localGrant(grant) {
301
- const relational = flattenGrantee(grant.to).some((item) => item.kind === "relation");
302
- return snapshotGrant(relational ? {
303
- ...grant,
304
- portable: false
305
- } : grant, void 0);
306
- }
307
- function customTable(policy, scope, roles) {
308
- const keys = [...new Set(ceilingGrants(policy, scope).map((grant) => grant.permission.key))];
309
- if (keys.length === 0) return;
310
- const resolve = (body) => resolveCustomRole(policy, scope === "global" ? {
311
- name: LOCAL_CUSTOM_ROLE,
312
- scope: "global",
313
- ...body
314
- } : {
315
- name: LOCAL_CUSTOM_ROLE,
316
- tenant: LOCAL_CUSTOM_ROLE,
317
- scope,
318
- ...body
319
- }).grants.map(localGrant);
320
- const permissions = {};
321
- for (const key of keys) {
322
- const leaf = findPermission(policy.permissions, key);
323
- const names = leaf?.kind === "instance" ? levelNames(policy, leaf.resource) : [];
324
- permissions[key] = compact({
325
- all: resolve({ grants: [{ permission: key }] }),
326
- levels: names.length === 0 ? void 0 : Object.fromEntries(names.map((level) => [level, resolve({ grants: [{
327
- permission: key,
328
- level
329
- }] })]))
330
- });
331
- }
332
- const includes = {};
333
- for (const role of roles) {
334
- const grants = resolve({ includes: [role] });
335
- if (grants.length > 0) includes[role] = grants;
336
- }
337
- return {
338
- permissions,
339
- includes
340
- };
341
- }
342
- /**
343
- * What the policy grants, as JSON a device turns into snapshots from its own
344
- * membership rows (`localSnapshot` in `permdock/react-native`). Write it at
345
- * build time; the policy itself never ships to the client.
346
- */
347
- function localSnapshotManifest(policy) {
348
- const roles = [...declaredRoleNames(policy)].toSorted();
349
- const custom = {};
350
- for (const scope of [...scopeList(policy.scopes).map((item) => item.name), "global"]) {
351
- const table = customTable(policy, scope, roles);
352
- if (table !== void 0) custom[scope] = table;
353
- }
354
- const scopes = snapshotScopes(policy);
355
- const { vocabulary } = buildSnapshot({
356
- subject: {
357
- principal: null,
358
- context: {}
359
- },
360
- roles: [],
361
- grants: [],
362
- vocabulary: policy.vocabulary
363
- });
364
- return freezeDeep(compact({
365
- v: 1,
366
- scopes,
367
- vocabulary,
368
- roles,
369
- rank: usesAssigns(policy) ? rankRoles(policy, roles) : void 0,
370
- grants: grantList(policy).map(localGrant),
371
- custom
372
- }));
373
- }
374
- //#endregion
375
- //#region src/core/may-access.ts
376
- function policyPlans(policy) {
377
- const names = new Set(listPlans(policy.vocabulary?.plans).map((p) => p.key));
378
- for (const grant of grantList(policy)) for (const item of flattenGrantee(grant.to)) if (item.kind === "plan") names.add(item.plan);
379
- return [...names];
380
- }
381
- function heldRoleNames(principal) {
382
- return [...principal.roles ?? [], ...(principal.memberships ?? []).flatMap((item) => item.roles)];
383
- }
384
- /**
385
- * An optimistic routing hint for a proxy or middleware, never a decision.
386
- * `false` only when the subject's declared roles provably lack `permission`;
387
- * `true` whenever custom roles, plans, memberships the claims do not carry or
388
- * row conditions could still grant it. Synchronous, no network, never throws.
389
- * Pages, Server Actions and RLS remain the enforcement points.
390
- */
391
- function mayAccess(policy, user, permission, options = {}) {
392
- try {
393
- const resolved = resolveSubject(policy, user, compact({ tenant: options.tenant }), []);
394
- if (isThenable(resolved)) return true;
395
- const principal = resolved.principal;
396
- const relevant = policy.index.grantsByKey.get(permission.key) ?? [];
397
- if (principal !== null) {
398
- const declared = declaredRoleNames(policy);
399
- if (heldRoleNames(principal).some((name) => !declared.has(name))) return true;
400
- if ((principal.memberships ?? []).length === 0 && relevant.some((grant) => grant.scope !== "global")) return true;
401
- }
402
- const tenant = options.tenant;
403
- const subject = principal === null ? resolved : {
404
- ...resolved,
405
- principal: {
406
- ...principal,
407
- plans: policyPlans(policy),
408
- memberships: (principal.memberships ?? []).filter((item) => {
409
- const owner = tenantOf(item, scopeList(policy.scopes));
410
- return tenant === void 0 || owner === void 0 || owner === tenant;
411
- })
412
- }
413
- };
414
- const matched = collectSnapshotGrants(policy, subject, []).filter((item) => item.grant.permission.key === permission.key);
415
- if (matched.some((item) => item.grant.effect === "deny" && item.grant.where === void 0 && item.grant.check === void 0 && item.grant.portable)) return false;
416
- return matched.some((item) => item.grant.effect === "allow");
417
- } catch {
418
- return true;
419
- }
420
- }
421
- //#endregion
422
- //#region src/core/custom-role-source.ts
423
- function ofTenant(tenant, roles) {
424
- return Array.isArray(roles) ? roles.filter((role) => role !== null && typeof role === "object" && Reflect.get(role, "tenant") === tenant) : [];
425
- }
426
- /**
427
- * A `RoleSource` over a reader that returns every custom role of a tenant.
428
- * It keeps only the roles of the requested tenant. With `read: 'held'` it
429
- * skips a tenant's read, and `globalRoles`, when the subject holds only
430
- * declared roles there.
431
- */
432
- function customRoleSource(reader, options = {}) {
433
- const declared = options.read === "held" ? declaredRoleNames(options.policy) : void 0;
434
- return Object.freeze({
435
- rolesFor(tenant, context) {
436
- if (declared !== void 0 && context?.held.every((name) => declared.has(name)) === true) return [];
437
- const roles = reader.rolesOf(tenant);
438
- return isThenable(roles) ? roles.then((list) => ofTenant(tenant, list)) : ofTenant(tenant, roles);
439
- },
440
- ...reader.assignable === void 0 ? {} : { assignable: (tenant) => reader.assignable?.(tenant) ?? [] },
441
- ...reader.globalRoles === void 0 ? {} : { globalRoles: (context) => declared !== void 0 && context?.held.every((name) => declared.has(name)) === true ? [] : reader.globalRoles?.() ?? [] }
442
- });
443
- }
444
- //#endregion
445
- //#region src/core/snapshot-for.ts
446
- function withPlans(subject, plans) {
447
- if (plans === void 0 || subject.principal === null) return subject;
448
- return freezeDeep(compact({
449
- ...subject,
450
- principal: compact({
451
- ...subject.principal,
452
- plans: [...plans]
453
- })
454
- }));
455
- }
456
- /**
457
- * Builds the serializable access snapshot for a subject without a request,
458
- * a network call or a cache directive: call it inside the app's own
459
- * `'use cache: private'` function. Synchronous; the policy's `subject` and
460
- * `context` mappers must be synchronous too.
461
- */
462
- function snapshotFor(policy, user, options = {}) {
463
- const auth = [];
464
- const memberships = options.memberships;
465
- const resolved = resolveSubject(policy, user, compact({
466
- tenant: options.tenant,
467
- memberships: memberships === void 0 ? void 0 : { membershipsFor: () => [...memberships] }
468
- }), auth);
469
- if (isThenable(resolved)) throw new TypeError("PermDock: snapshotFor() needs synchronous subject and context mappers. Resolve async data first and pass it as a Subject, or use createPermDock(...).snapshot().");
470
- const subject = withPlans(resolved, options.plans);
471
- const tenants = new Set(tenantsOf(subject.principal, scopeList(policy.scopes)));
472
- const customRoles = (options.customRoles ?? []).filter((item) => item.scope === "global" || item.tenant !== void 0 && tenants.has(item.tenant));
473
- const names = options.assignable;
474
- const assignable = names === void 0 ? void 0 : new Map([...tenants].map((tenant) => [tenant, Object.hasOwn(names, tenant) ? names[tenant] ?? [] : []]));
475
- return snapshotOf(policy, subject, compact({
476
- customRoles,
477
- assignable,
478
- include: options.include,
479
- tenants: options.tenants,
480
- now: options.now
481
- }));
482
- }
483
- //#endregion
484
- //#region src/core/permissions.ts
485
- function definePermissions(input, options) {
486
- const registry = /* @__PURE__ */ new Map();
487
- const leaves = [];
488
- const former = formerByKey(options?.renamed);
489
- const tree = walk(input, [], registry, leaves, 0, {
490
- former,
491
- x: options?.x
492
- });
493
- assertKeys(leaves, former);
494
- assertGraphTargets(registry);
495
- return freezeDeep(attachRegistry(tree, registry, leaves));
496
- }
497
- //#endregion
498
- //#region src/core/presets.ts
499
- const CRUD_ACTIONS = {
500
- read: { readOnly: true },
501
- update: {},
502
- delete: { destructive: true }
503
- };
504
- const CRUD_COLLECTION = {
505
- create: {},
506
- list: { readOnly: true }
507
- };
508
- const READABLE_ACTIONS = { read: { readOnly: true } };
509
- const READABLE_COLLECTION = { list: { readOnly: true } };
510
- const WRITABLE_ACTIONS = {
511
- read: { readOnly: true },
512
- update: {}
513
- };
514
- const WRITABLE_COLLECTION = {};
515
- function isNameList(list) {
516
- return Array.isArray(list);
517
- }
518
- function toRecord(list) {
519
- if (list === void 0) return {};
520
- if (isNameList(list)) {
521
- const out = {};
522
- for (const name of list) out[name] = {};
523
- return out;
524
- }
525
- return { ...list };
526
- }
527
- function mergeMeta(base, extra) {
528
- return compact({
529
- title: extra.title ?? base.title,
530
- description: extra.description ?? base.description,
531
- tags: extra.tags ?? base.tags,
532
- readOnly: extra.readOnly ?? base.readOnly,
533
- destructive: extra.destructive ?? base.destructive,
534
- idempotent: extra.idempotent ?? base.idempotent
535
- });
536
- }
537
- function mergeActionLists(base, extra) {
538
- const extraRecord = toRecord(extra);
539
- const out = {};
540
- for (const [name, baseMeta] of Object.entries(base)) {
541
- const extraMeta = extraRecord[name];
542
- out[name] = extraMeta === void 0 ? baseMeta : mergeMeta(baseMeta, extraMeta);
543
- }
544
- for (const [name, extraMeta] of Object.entries(extraRecord)) {
545
- if (Object.hasOwn(out, name)) continue;
546
- out[name] = extraMeta;
547
- }
548
- return freezeDeep(out);
549
- }
550
- function finishPreset(baseActions, baseCollection, options) {
551
- const actions = mergeActionLists(baseActions, options?.actions);
552
- const collection = mergeActionLists(baseCollection, options?.collection);
553
- return compact({
554
- id: options?.id,
555
- parent: options?.parent,
556
- relations: options?.relations,
557
- restricted: options?.restricted,
558
- disclosure: options?.disclosure,
559
- actions,
560
- collection: Object.keys(collection).length === 0 ? void 0 : collection
561
- });
562
- }
563
- function crud(options) {
564
- return finishPreset(CRUD_ACTIONS, CRUD_COLLECTION, options);
565
- }
566
- function readable(options) {
567
- return finishPreset(READABLE_ACTIONS, READABLE_COLLECTION, options);
568
- }
569
- function writable(options) {
570
- return finishPreset(WRITABLE_ACTIONS, WRITABLE_COLLECTION, options);
571
- }
572
- //#endregion
573
- //#region src/core/csv.ts
574
- /** The CSV export columns, in order; the header row of every CSV file. */
575
- const CSV_COLUMNS = Object.freeze([
576
- "time",
577
- "principal",
578
- "actor",
579
- "tenant",
580
- "permission",
581
- "outcome",
582
- "matched.role",
583
- "via",
584
- "denials.reason",
585
- "token"
586
- ]);
587
- function field(value) {
588
- const text = value ?? "";
589
- return /[",\r\n]/u.test(text) ? `"${text.replaceAll("\"", "\"\"")}"` : text;
590
- }
591
- /**
592
- * One RFC 4180 row for a decision or approval event, without a line
593
- * terminator; join rows with CRLF under a `CSV_COLUMNS` header.
594
- */
595
- function toCsvRow(event) {
596
- return [
597
- event.at,
598
- event.subject.principal?.id,
599
- event.subject.actor?.id,
600
- event.tenant,
601
- event.permission,
602
- event.outcome,
603
- event.matched?.role,
604
- event.via,
605
- event.denials?.map((denial) => denial.reason).join(";"),
606
- event.token
607
- ].map(field).join(",");
608
- }
609
- //#endregion
610
- //#region src/core/catalog-fingerprint.ts
611
- const OMITTED_TOP_LEVEL = /* @__PURE__ */ new Set([
612
- "generatedAt",
613
- "generator",
614
- "fingerprint"
615
- ]);
616
- function fingerprintInput(catalog) {
617
- const out = {};
618
- for (const [key, value] of Object.entries(catalog)) {
619
- if (OMITTED_TOP_LEVEL.has(key)) continue;
620
- out[key] = key === "permissions" && Array.isArray(value) ? value.map((permission) => {
621
- if (!isRecord(permission)) return permission;
622
- const { usages: _usages, ...rest } = permission;
623
- return rest;
624
- }) : value;
625
- }
626
- return out;
627
- }
628
- /**
629
- * The catalog v1 fingerprint: base64url SHA-256 of canonical JSON (keys
630
- * sorted, no whitespace) without `generatedAt`, `generator`, `fingerprint`
631
- * and every `permissions[].usages`, so neither the CLI version, the clock nor
632
- * call sites change it.
633
- */
634
- function catalogFingerprint(catalog) {
635
- if (!isRecord(catalog)) throw new TypeError("PermDock: a catalog must be an object");
636
- return bytesToBase64Url(sha256(canonicalJson(fingerprintInput(catalog))));
637
- }
638
- //#endregion
639
- export { memorySettings as _, readable as a, snapshotFor as c, localSnapshotManifest as d, memoryRelations as f, memoryRoleSource as g, memoryMembershipSource as h, crud as i, customRoleSource as l, memoryEntitlementSource as m, CSV_COLUMNS as n, writable as o, fromStripeEntitlements as p, toCsvRow as r, definePermissions as s, catalogFingerprint as t, mayAccess as u, memorySnapshotSource as v, sqlFunction as y };
@@ -1,24 +0,0 @@
1
- //#region src/core/subject.ts
2
- function isPrincipal(value) {
3
- if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
4
- if ("principal" in value && "context" in value) return false;
5
- const record = value;
6
- if (typeof record.id !== "string") return false;
7
- return Array.isArray(record.roles) || Array.isArray(record.memberships) || record.kind === "user" || record.kind === "service" || record.kind === "workload" || record.kind === "link" || typeof record.issuer === "string";
8
- }
9
- function isSubject(value) {
10
- return value !== null && typeof value === "object" && "principal" in value && "context" in value && typeof value.context === "object";
11
- }
12
- function isActor(value) {
13
- if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
14
- const record = value;
15
- return typeof record.id === "string" && typeof record.kind === "string";
16
- }
17
- function anonymousSubject(context = {}) {
18
- return Object.freeze({
19
- principal: null,
20
- context: Object.freeze({ ...context })
21
- });
22
- }
23
- //#endregion
24
- export { isSubject as i, isActor as n, isPrincipal as r, anonymousSubject as t };