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,566 @@
1
+ import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
+ import { r as validateRecord } from "./thenable-yD7SabqG.js";
4
+ import { t as anonymousSubject } from "./subject-BGoM5o8B.js";
5
+ import { t as readClaim } from "./claims-map-7oQ3ue4X.js";
6
+ import { t as clientNameOf } from "./clients-DjU5ABMy.js";
7
+ import "./budget-NbEtbJC_.js";
8
+ import { a as hookApiNames } from "./sources-vs5dGOsS.js";
9
+ //#region src/supabase/subject.ts
10
+ const REGISTERED = /* @__PURE__ */ new Set([
11
+ "sub",
12
+ "role",
13
+ "iss",
14
+ "aud",
15
+ "exp",
16
+ "iat",
17
+ "nbf",
18
+ "aal",
19
+ "amr",
20
+ "acr",
21
+ "session_id",
22
+ "email",
23
+ "phone",
24
+ "is_anonymous",
25
+ "app_metadata",
26
+ "user_metadata",
27
+ "act",
28
+ "client_id",
29
+ "scope"
30
+ ]);
31
+ /** Top-level first, then `app_metadata`. `null` counts as absent: the RBAC hook writes `null` for a user with no role row. */
32
+ function claimNamed(claims, name) {
33
+ const top = Object.hasOwn(claims, name) ? claims[name] : void 0;
34
+ if (top !== void 0 && top !== null) return top;
35
+ const meta = claims["app_metadata"];
36
+ if (isRecord(meta) && Object.hasOwn(meta, name)) return meta[name] ?? void 0;
37
+ }
38
+ /** A `ClaimPath`: a name read at the top level, then in `app_metadata`; or a function over the claims. */
39
+ function claimAt(claims, path) {
40
+ return typeof path === "string" ? claimNamed(claims, path) : readClaim(claims, path);
41
+ }
42
+ function asRoles(value, declared) {
43
+ const raw = typeof value === "string" ? value === "" ? [] : [value] : Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
44
+ if (declared === void 0) return raw;
45
+ const allowed = new Set(declared);
46
+ return raw.filter((role) => allowed.has(role));
47
+ }
48
+ /** Reads the `memberships` claim; an entry it cannot read is dropped and its index reported. */
49
+ function readMemberships(value) {
50
+ if (!Array.isArray(value)) return {
51
+ memberships: [],
52
+ dropped: []
53
+ };
54
+ const out = [];
55
+ const dropped = [];
56
+ for (const [index, item] of value.entries()) {
57
+ const membership = asMembership(item);
58
+ if (membership === void 0) dropped.push(index);
59
+ else out.push(membership);
60
+ }
61
+ return {
62
+ memberships: out,
63
+ dropped
64
+ };
65
+ }
66
+ function asMembership(item) {
67
+ if (!isRecord(item) || !Array.isArray(item["roles"])) return;
68
+ const roles = item["roles"].filter((role) => typeof role === "string");
69
+ if (roles.length === 0) return;
70
+ const scope = typeof item["scope"] === "string" ? item["scope"] : void 0;
71
+ const id = typeof item["id"] === "string" ? item["id"] : void 0;
72
+ const within = isRecord(item["within"]) ? Object.fromEntries(Object.entries(item["within"]).filter((entry) => typeof entry[1] === "string")) : void 0;
73
+ const tenant = typeof item["tenant"] === "string" ? item["tenant"] : void 0;
74
+ const team = typeof item["team"] === "string" ? item["team"] : void 0;
75
+ const onRecord = isRecord(item["on"]) ? item["on"] : void 0;
76
+ const on = onRecord !== void 0 && typeof onRecord["resource"] === "string" && typeof onRecord["id"] === "string" ? {
77
+ resource: onRecord["resource"],
78
+ id: onRecord["id"]
79
+ } : void 0;
80
+ if ((scope === void 0 || id === void 0) && tenant === void 0 && team === void 0 && on === void 0) return;
81
+ const keep = item["keep"];
82
+ if (keep !== void 0 && (!Array.isArray(keep) || !keep.every((key) => typeof key === "string" && key !== ""))) return;
83
+ return compact({
84
+ roles,
85
+ scope,
86
+ id,
87
+ within,
88
+ tenant,
89
+ team,
90
+ on,
91
+ via: typeof item["via"] === "string" ? item["via"] : void 0,
92
+ expiresAt: typeof item["expires_at"] === "number" ? item["expires_at"] : void 0,
93
+ grantedBy: typeof item["granted_by"] === "string" ? item["granted_by"] : void 0,
94
+ reason: typeof item["reason"] === "string" ? item["reason"] : void 0,
95
+ member: memberOf(item["member"]),
96
+ managedBy: item["managed_by"] === "idp" ? "idp" : void 0,
97
+ entitlements: Array.isArray(item["entitlements"]) ? item["entitlements"].filter((seat) => typeof seat === "string") : void 0,
98
+ keep: keep === void 0 ? void 0 : asStrings(keep)
99
+ });
100
+ }
101
+ function memberOf(value) {
102
+ if (value === null || typeof value !== "object" || !Object.hasOwn(value, "group")) return;
103
+ const group = value.group;
104
+ return typeof group === "string" && group !== "" ? { group } : void 0;
105
+ }
106
+ function asStrings(value) {
107
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
108
+ }
109
+ /** `claims[plans][tenant]`: only the active tenant's entry, never another tenant's. */
110
+ function plansFor(claims, name, tenant) {
111
+ if (name === void 0 || tenant === void 0) return [];
112
+ const byTenant = claimAt(claims, name);
113
+ if (!isRecord(byTenant) || !Object.hasOwn(byTenant, tenant)) return [];
114
+ return asStrings(byTenant[tenant]);
115
+ }
116
+ const INVALID_CHAIN = Object.freeze({
117
+ ok: false,
118
+ reason: "invalid-chain"
119
+ });
120
+ const NO_ACTOR = Object.freeze({ ok: true });
121
+ /** Own entries of one `act` level, with the nested `act` copied the same way. */
122
+ function copyAct(level) {
123
+ const entries = Object.entries(level).map(([key, value]) => [key, key === "act" && isRecord(value) ? copyAct(value) : value]);
124
+ return Object.fromEntries(entries);
125
+ }
126
+ function isToolList(value) {
127
+ return Array.isArray(value) && value.every((tool) => typeof tool === "string" && tool !== "");
128
+ }
129
+ /**
130
+ * The outer `act` level by its `kind`, the marker a support tool writes: none is an OAuth client
131
+ * or agent chain, `support` a support session (with `session_id`), `impersonation` an admin acting
132
+ * as the user, `agent` an agent run with the `tools` it may call. Any other `kind`, a support level
133
+ * without `session_id`, and an agent level with `session_id`, `tools` that are not non-empty
134
+ * strings or a `read_only` that is not a boolean are invalid, as better-supabase reads them.
135
+ */
136
+ function actingParty(outer, id) {
137
+ const marked = Object.hasOwn(outer, "kind") ? outer["kind"] : void 0;
138
+ const kind = marked === void 0 && Object.hasOwn(outer, "session_id") ? "support" : marked;
139
+ const chain = copyAct(outer);
140
+ const reason = typeof outer["reason"] === "string" ? outer["reason"] : void 0;
141
+ switch (kind) {
142
+ case void 0: return freezeDeep({
143
+ ok: true,
144
+ actor: {
145
+ id,
146
+ kind: "oauth-client",
147
+ chain
148
+ }
149
+ });
150
+ case "support": {
151
+ const session = outer["session_id"];
152
+ const readOnly = Object.hasOwn(outer, "read_only") ? outer["read_only"] : true;
153
+ if (typeof session !== "string" || session === "" || typeof readOnly !== "boolean") return INVALID_CHAIN;
154
+ return freezeDeep({
155
+ ok: true,
156
+ actor: compact({
157
+ id,
158
+ kind: "support",
159
+ sessionId: session,
160
+ readOnly,
161
+ reason,
162
+ chain
163
+ })
164
+ });
165
+ }
166
+ case "impersonation": return freezeDeep({
167
+ ok: true,
168
+ actor: compact({
169
+ id,
170
+ kind: "impersonation",
171
+ reason,
172
+ chain
173
+ })
174
+ });
175
+ case "agent": {
176
+ const tools = Object.hasOwn(outer, "tools") ? outer["tools"] : void 0;
177
+ const readOnly = Object.hasOwn(outer, "read_only") ? outer["read_only"] : false;
178
+ if (Object.hasOwn(outer, "session_id") || tools !== void 0 && !isToolList(tools) || typeof readOnly !== "boolean") return INVALID_CHAIN;
179
+ return freezeDeep({
180
+ ok: true,
181
+ actor: compact({
182
+ id,
183
+ kind: "agent",
184
+ tools,
185
+ readOnly,
186
+ chain
187
+ })
188
+ });
189
+ }
190
+ default: return INVALID_CHAIN;
191
+ }
192
+ }
193
+ function readActor(claims) {
194
+ if (Object.hasOwn(claims, "act") && claims["act"] !== void 0) {
195
+ let current = claims["act"];
196
+ while (current !== void 0) {
197
+ const level = isRecord(current) ? current["sub"] : void 0;
198
+ if (!isRecord(current) || typeof level !== "string" || level === "") return INVALID_CHAIN;
199
+ current = Object.hasOwn(current, "act") ? current["act"] : void 0;
200
+ }
201
+ const outer = claims["act"];
202
+ const sub = isRecord(outer) ? outer["sub"] : void 0;
203
+ if (!isRecord(outer) || typeof sub !== "string") return INVALID_CHAIN;
204
+ return actingParty(outer, sub);
205
+ }
206
+ const client = Object.hasOwn(claims, "client_id") ? claims["client_id"] : void 0;
207
+ if (typeof client === "string" && client !== "") return freezeDeep({
208
+ ok: true,
209
+ actor: {
210
+ id: client,
211
+ kind: "oauth-client"
212
+ }
213
+ });
214
+ return NO_ACTOR;
215
+ }
216
+ /**
217
+ * Who acts for the user: the outermost `sub` of an RFC 8693 `act` chain (the current
218
+ * actor; nested levels are prior actors, kept on `chain` for audit), else the
219
+ * OAuth `client_id` of a third-party app. The outer level's `kind` names the actor:
220
+ * none is `oauth-client`, `support` a support session, `impersonation` an admin acting as the
221
+ * user. Reads only `act` and `client_id`; the caller applies the role rule first (`anon` and
222
+ * `service_role` are anonymous and carry no actor). An `act` that is not a chain of objects each
223
+ * with a non-empty `sub`, that names another `kind`, or a support level without `session_id`,
224
+ * is `{ ok: false }` and must deny.
225
+ */
226
+ function actorOf(claims) {
227
+ try {
228
+ return isRecord(claims) ? readActor(claims) : NO_ACTOR;
229
+ } catch {
230
+ return INVALID_CHAIN;
231
+ }
232
+ }
233
+ const IDENTITY_SCOPES = /* @__PURE__ */ new Set([
234
+ "openid",
235
+ "profile",
236
+ "email",
237
+ "address",
238
+ "phone",
239
+ "offline_access"
240
+ ]);
241
+ /**
242
+ * The OAuth `scope` claim (a space-separated string or a list) as `scopes`,
243
+ * without the OpenID Connect identity scopes; `undefined` when none is left.
244
+ */
245
+ function delegationOf(claims) {
246
+ try {
247
+ if (!isRecord(claims) || !Object.hasOwn(claims, "scope")) return;
248
+ const scope = claims["scope"];
249
+ const scopes = (typeof scope === "string" ? scope.split(/\s+/u).filter(Boolean) : asStrings(scope)).filter((name) => !IDENTITY_SCOPES.has(name));
250
+ return scopes.length > 0 ? freezeDeep({ scopes }) : void 0;
251
+ } catch {
252
+ return;
253
+ }
254
+ }
255
+ function subjectDelegation(claims, chain) {
256
+ const delegation = compact({
257
+ scopes: delegationOf(claims)?.scopes,
258
+ chain
259
+ });
260
+ return Object.keys(delegation).length === 0 ? void 0 : delegation;
261
+ }
262
+ function emit(options, reason, cause) {
263
+ try {
264
+ options.onAuth?.({
265
+ reason,
266
+ cause,
267
+ source: "supabase"
268
+ });
269
+ } catch {}
270
+ }
271
+ function extraClaims(claims) {
272
+ const extra = {};
273
+ const meta = claims["app_metadata"];
274
+ if (isRecord(meta)) for (const [key, value] of Object.entries(meta)) extra[key] = value;
275
+ for (const [key, value] of Object.entries(claims)) {
276
+ if (REGISTERED.has(key) || key === "user_metadata") continue;
277
+ extra[key] = value;
278
+ }
279
+ return extra;
280
+ }
281
+ function subjectActor(actor, options) {
282
+ switch (actor.kind) {
283
+ case "support": return {
284
+ id: actor.id,
285
+ kind: actor.kind,
286
+ sessionId: actor.sessionId,
287
+ readOnly: actor.readOnly
288
+ };
289
+ case "oauth-client": return compact({
290
+ id: actor.id,
291
+ kind: actor.kind,
292
+ client: clientNameOf(options.clients, actor.id)
293
+ });
294
+ case "impersonation": return {
295
+ id: actor.id,
296
+ kind: actor.kind
297
+ };
298
+ case "agent": return compact({
299
+ id: actor.id,
300
+ kind: actor.kind,
301
+ tools: actor.tools,
302
+ readOnly: actor.readOnly
303
+ });
304
+ default: return actor;
305
+ }
306
+ }
307
+ function mapClaims(claims, options) {
308
+ const role = claims["role"];
309
+ if (role === "anon" || role === "service_role") return anonymousSubject();
310
+ const id = claims["sub"];
311
+ if (typeof id !== "string" || id === "") return anonymousSubject();
312
+ const act = readActor(claims);
313
+ if (!act.ok) {
314
+ emit(options, "invalid-token", act.reason);
315
+ return anonymousSubject();
316
+ }
317
+ if (options.anonymousSignIns === "deny" && claims["is_anonymous"] === true) return anonymousSubject();
318
+ const actor = act.actor === void 0 ? void 0 : subjectActor(act.actor, options);
319
+ const roleClaim = options.claims?.roles ?? "user_role";
320
+ const tenantClaim = options.claims?.tenant ?? "tenant_id";
321
+ const membershipsClaim = options.claims?.memberships ?? "memberships";
322
+ let extra = extraClaims(claims);
323
+ if (options.schema !== void 0) extra = validateRecord(options.schema, extra) ?? {};
324
+ const include = new Set(options.include ?? []);
325
+ const tenantValue = claimAt(claims, tenantClaim);
326
+ const version = claimAt(claims, "authz_ver");
327
+ const tenant = typeof tenantValue === "string" ? tenantValue : void 0;
328
+ const { memberships, dropped } = readMemberships(claimAt(claims, membershipsClaim));
329
+ if (dropped.length > 0) emit(options, "schema", "membership-dropped");
330
+ const plans = plansFor(claims, options.claims?.plans, tenant);
331
+ const principal = compact({
332
+ id,
333
+ kind: "user",
334
+ roles: asRoles(claimAt(claims, roleClaim), options.declared),
335
+ tenant,
336
+ plans: plans.length > 0 ? plans : void 0,
337
+ memberships,
338
+ membershipsTruncated: claimAt(claims, "memberships_truncated") === true ? true : void 0,
339
+ authzVersion: typeof version === "number" && Number.isInteger(version) ? version : void 0,
340
+ issuer: typeof claims["iss"] === "string" ? claims["iss"] : void 0,
341
+ assurance: typeof claims["aal"] === "string" ? { acr: claims["aal"] } : void 0,
342
+ claims: Object.keys(extra).length === 0 ? void 0 : extra,
343
+ email: include.has("email") && typeof claims["email"] === "string" ? claims["email"] : void 0,
344
+ phone: include.has("phone") && typeof claims["phone"] === "string" ? claims["phone"] : void 0,
345
+ is_anonymous: include.has("is_anonymous") && typeof claims["is_anonymous"] === "boolean" ? claims["is_anonymous"] : void 0
346
+ });
347
+ const session = typeof claims["session_id"] === "string" ? claims["session_id"] : void 0;
348
+ const expiresAt = typeof claims["exp"] === "number" ? claims["exp"] : void 0;
349
+ return freezeDeep(compact({
350
+ principal,
351
+ actor,
352
+ delegation: act.actor?.kind === "oauth-client" || act.actor?.kind === "agent" ? subjectDelegation(claims, act.actor.chain) : void 0,
353
+ context: {},
354
+ session,
355
+ expiresAt,
356
+ liveSession: options.liveSession === true && session !== void 0 ? true : void 0
357
+ }));
358
+ }
359
+ function subjectFromSupabase(claims, options = {}) {
360
+ try {
361
+ if (!isRecord(claims)) return anonymousSubject();
362
+ const rest = {};
363
+ for (const [key, value] of Object.entries(claims)) {
364
+ if (key === "user_metadata") continue;
365
+ rest[key] = value;
366
+ }
367
+ return mapClaims(rest, options);
368
+ } catch {
369
+ return anonymousSubject();
370
+ }
371
+ }
372
+ /**
373
+ * A verified session object (`{ kind, claims }`) in, `Subject` out.
374
+ * Only `kind: 'user'` sessions map; `anon`, `service`, `invalid` and anything else are anonymous.
375
+ */
376
+ function subjectFromSupabaseSession(session, options = {}) {
377
+ try {
378
+ if (session === null || session === void 0 || session.kind !== "user") return anonymousSubject();
379
+ return subjectFromSupabase(session.claims, options);
380
+ } catch {
381
+ return anonymousSubject();
382
+ }
383
+ }
384
+ //#endregion
385
+ //#region src/supabase/postgrest.ts
386
+ function callRpc(client, schema, fn, args) {
387
+ return client.schema(schema).rpc(fn, args);
388
+ }
389
+ function strings(value) {
390
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
391
+ }
392
+ function grantOf(value) {
393
+ if (!isRecord(value) || typeof value["permission"] !== "string") return;
394
+ return compact({
395
+ permission: value["permission"],
396
+ effect: value["effect"] === "deny" ? "deny" : "allow",
397
+ level: typeof value["level"] === "string" ? value["level"] : void 0
398
+ });
399
+ }
400
+ function customRoleOf(value) {
401
+ if (!isRecord(value) || typeof value["name"] !== "string") return;
402
+ const grants = Array.isArray(value["grants"]) ? value["grants"].flatMap((item) => {
403
+ const grant = grantOf(item);
404
+ return grant === void 0 ? [] : [grant];
405
+ }) : [];
406
+ const includes = strings(value["includes"]);
407
+ const body = {
408
+ name: value["name"],
409
+ grants,
410
+ ...includes.length === 0 ? {} : { includes }
411
+ };
412
+ if (value["scope"] === "global") return value["tenant"] === void 0 ? {
413
+ ...body,
414
+ scope: "global"
415
+ } : void 0;
416
+ if (typeof value["tenant"] !== "string") return;
417
+ return compact({
418
+ ...body,
419
+ tenant: value["tenant"],
420
+ scope: typeof value["scope"] === "string" ? value["scope"] : void 0,
421
+ id: typeof value["id"] === "string" ? value["id"] : void 0
422
+ });
423
+ }
424
+ function readMemberEntries(value) {
425
+ if (!Array.isArray(value)) return [];
426
+ return value.flatMap((item) => {
427
+ if (!isRecord(item) || !isRecord(item["principal"])) return [];
428
+ const id = item["principal"]["id"];
429
+ const [membership] = readMemberships([item["membership"]]).memberships;
430
+ return typeof id === "string" && id !== "" && membership !== void 0 ? [{
431
+ principal: { id },
432
+ membership
433
+ }] : [];
434
+ });
435
+ }
436
+ function versionOf(value) {
437
+ const version = typeof value === "string" ? Number(value) : value;
438
+ return typeof version === "number" && Number.isFinite(version) ? version : void 0;
439
+ }
440
+ /** Reads `subject_for`'s JSON; anything it cannot read is left out, and a malformed record is no record. */
441
+ function readSubjectRecord(value) {
442
+ if (!isRecord(value) || typeof value["id"] !== "string") return;
443
+ if (value["active"] !== true) return {
444
+ id: value["id"],
445
+ active: false,
446
+ roles: [],
447
+ memberships: [],
448
+ customRoles: []
449
+ };
450
+ const version = value["authzVersion"];
451
+ return compact({
452
+ id: value["id"],
453
+ active: true,
454
+ roles: strings(value["roles"]),
455
+ memberships: readMemberships(value["memberships"]).memberships,
456
+ customRoles: Array.isArray(value["customRoles"]) ? value["customRoles"].flatMap((item) => {
457
+ const role = customRoleOf(item);
458
+ return role === void 0 ? [] : [role];
459
+ }) : [],
460
+ authzVersion: typeof version === "number" && Number.isFinite(version) ? version : void 0
461
+ });
462
+ }
463
+ /**
464
+ * Membership, custom-role and subject sources over the `subject_for(p_user)`,
465
+ * `authz_version_for(p_user)` and `members_of(p_scope, p_id)` functions
466
+ * `permdock supabase hook generate` writes, for a backend that reaches
467
+ * Postgres only through PostgREST. `memberships.version` reads only the
468
+ * version, so `claimsFirst` with `onStale: 'reread'` reads the full subject
469
+ * only for a stale token; when the version function is missing it falls back
470
+ * to `subject_for`. With `policy`, a token that claims a custom role has its
471
+ * subject read in one `subject_for` call instead, and custom roles are read
472
+ * only for a subject that holds one. Each user and each instance is read once per
473
+ * `postgrestSources` call, so create it per request or per job.
474
+ */
475
+ function postgrestSources(client, options = {}) {
476
+ const api = options.api;
477
+ const names = api === void 0 ? void 0 : hookApiNames(api.prefix);
478
+ const schema = options.schema ?? (api === void 0 ? "permdock" : api.schema ?? "public");
479
+ const fn = options.fn ?? names?.subjectFor ?? "subject_for";
480
+ const membersFn = options.membersFn ?? names?.membersOf ?? "members_of";
481
+ const versionFn = options.versionFn ?? names?.authzVersionFor ?? "authz_version_for";
482
+ const declared = options.policy === void 0 ? void 0 : options.policy.index.declaredRoles;
483
+ const onlyDeclared = (held) => declared !== void 0 && held?.every((name) => declared.has(name)) === true;
484
+ const loaded = /* @__PURE__ */ new Map();
485
+ const versions = /* @__PURE__ */ new Map();
486
+ const listed = /* @__PURE__ */ new Map();
487
+ const list = (query) => {
488
+ const key = JSON.stringify([query.scope, query.id]);
489
+ const cached = listed.get(key);
490
+ if (cached !== void 0) return cached.then((entries) => [...entries]);
491
+ const pending = Promise.resolve(callRpc(client, schema, membersFn, {
492
+ p_scope: query.scope,
493
+ p_id: query.id
494
+ })).then((result) => {
495
+ if (result.error !== null) throw new Error(`PermDock: ${schema}.${membersFn} failed: ${result.error.message}`);
496
+ return readMemberEntries(result.data);
497
+ });
498
+ listed.set(key, pending);
499
+ return pending.then((entries) => [...entries]);
500
+ };
501
+ const record = (userId) => {
502
+ const cached = loaded.get(userId);
503
+ if (cached !== void 0) return cached;
504
+ const pending = Promise.resolve(callRpc(client, schema, fn, { p_user: userId })).then((result) => {
505
+ if (result.error !== null) throw new Error(`PermDock: ${schema}.${fn} failed: ${result.error.message}`);
506
+ return readSubjectRecord(result.data);
507
+ });
508
+ loaded.set(userId, pending);
509
+ return pending;
510
+ };
511
+ const version = (userId) => {
512
+ const read = loaded.get(userId);
513
+ if (read !== void 0) return read.then((found) => found?.authzVersion);
514
+ const cached = versions.get(userId);
515
+ if (cached !== void 0) return cached;
516
+ const pending = Promise.resolve(callRpc(client, schema, versionFn, { p_user: userId })).then((result) => result.error === null ? versionOf(result.data) : record(userId).then((found) => found?.authzVersion));
517
+ versions.set(userId, pending);
518
+ return pending;
519
+ };
520
+ const live = async (userId) => {
521
+ const found = await record(userId);
522
+ return found?.active === true ? found : void 0;
523
+ };
524
+ return {
525
+ memberships: {
526
+ async membershipsFor(principal) {
527
+ return [...(await live(principal.id))?.memberships ?? []];
528
+ },
529
+ version(principal) {
530
+ return declared !== void 0 && !onlyDeclared([...principal.roles ?? [], ...(principal.memberships ?? []).flatMap((membership) => membership.roles)]) ? record(principal.id).then((found) => found?.authzVersion) : version(principal.id);
531
+ },
532
+ list
533
+ },
534
+ customRoles(principal) {
535
+ return {
536
+ async rolesFor(tenant, context) {
537
+ if (onlyDeclared(context?.held)) return [];
538
+ return ((await live(principal.id))?.customRoles ?? []).filter((role) => role.tenant === tenant);
539
+ },
540
+ async globalRoles(context) {
541
+ if (onlyDeclared(context?.held)) return [];
542
+ return ((await live(principal.id))?.customRoles ?? []).filter((role) => role.scope === "global");
543
+ }
544
+ };
545
+ },
546
+ async subject(userId) {
547
+ const found = await live(userId);
548
+ if (found === void 0) return {
549
+ principal: null,
550
+ context: {}
551
+ };
552
+ return {
553
+ principal: compact({
554
+ id: found.id,
555
+ roles: found.roles,
556
+ memberships: found.memberships,
557
+ authzVersion: found.authzVersion
558
+ }),
559
+ context: {}
560
+ };
561
+ },
562
+ record
563
+ };
564
+ }
565
+ //#endregion
566
+ export { delegationOf as a, subjectFromSupabaseSession as c, actorOf as i, postgrestSources as n, readMemberships as o, readSubjectRecord as r, subjectFromSupabase as s, callRpc as t };
@@ -0,0 +1,100 @@
1
+ import { $ as MemberEntry, T as Policy, W as CustomRoleSource, Zn as CustomRole, et as MembershipSource, ir as Subject, nr as Membership } from "./policy-types-DzwivBgR.js";
2
+ //#region src/supabase/postgrest.d.ts
3
+ /** What a supabase-js `rpc` call resolves to: `data` or an `error` with a message. */
4
+ type SupabaseRpcResult = {
5
+ readonly data: unknown;
6
+ readonly error: {
7
+ readonly message: string;
8
+ } | null;
9
+ };
10
+ /**
11
+ * The part of a supabase-js client `postgrestSources` calls:
12
+ * `client.schema(name).rpc(fn, args)`. Pass a client that may execute the
13
+ * function, such as a `service_role` client after the grant the docs show.
14
+ */
15
+ type SupabaseRpcClient = {
16
+ schema(name: string): {
17
+ rpc(fn: string, args: Readonly<Record<string, unknown>>): PromiseLike<SupabaseRpcResult>;
18
+ };
19
+ };
20
+ type SupabaseRpcCaller = {
21
+ schema(name: never): {
22
+ rpc(fn: never, args: never): PromiseLike<SupabaseRpcResult>;
23
+ };
24
+ };
25
+ type PostgrestSourcesOptions = {
26
+ /**
27
+ * The `supabase.hook.api` setting the hook file was generated with: the
28
+ * wrappers live in `schema` (default `public`) as `<prefix>subject_for`,
29
+ * `<prefix>members_of` and `<prefix>authz_version_for` (default prefix
30
+ * `permdock_`). It sets the defaults of `schema`, `fn`, `membersFn` and
31
+ * `versionFn`, which still override it.
32
+ */
33
+ readonly api?: {
34
+ readonly schema?: string;
35
+ readonly prefix?: string;
36
+ };
37
+ /** Schema of the functions. Default `permdock`, where the hook generates `subject_for` and `members_of`. */
38
+ readonly schema?: string;
39
+ /** Function name, for a wrapper in an exposed schema. Default `subject_for`. */
40
+ readonly fn?: string;
41
+ readonly membersFn?: string;
42
+ /** The version-only function `memberships.version` calls. Default `authz_version_for`. */
43
+ readonly versionFn?: string;
44
+ /**
45
+ * The policy whose declared roles tell custom roles apart. With it,
46
+ * `customRoles` reads nothing while every role the subject holds is
47
+ * declared, and `memberships.version` reads the whole subject in one call
48
+ * when the token claims a custom role, which the custom roles need anyway.
49
+ */
50
+ readonly policy?: Policy;
51
+ };
52
+ /** One user as `subject_for(p_user)` returns it. */
53
+ type SubjectRecord = {
54
+ readonly id: string;
55
+ /** `false` for a suspended user, who holds no roles or memberships. */
56
+ readonly active: boolean;
57
+ readonly roles: readonly string[];
58
+ readonly memberships: readonly Membership[];
59
+ readonly customRoles: readonly CustomRole[];
60
+ readonly authzVersion?: number;
61
+ };
62
+ type PostgrestSources = {
63
+ /**
64
+ * Memberships and the authorization version of any principal, and `list`,
65
+ * the live members of one scope instance through `members_of`, for
66
+ * `countHolders` and `whoCan`. Wrap it in `claimsFirst` to read only when
67
+ * the token was truncated.
68
+ */
69
+ readonly memberships: MembershipSource & {
70
+ list(query: {
71
+ readonly scope: string;
72
+ readonly id: string;
73
+ }): Promise<MemberEntry[]>;
74
+ };
75
+ /** The custom roles `principal` holds, for `createPermDock`'s `customRoles`. */
76
+ customRoles(principal: {
77
+ readonly id: string;
78
+ }): CustomRoleSource;
79
+ /** The subject the hook would mint for `userId`: anonymous when the user is unknown or suspended. */
80
+ subject(userId: string): Promise<Subject>;
81
+ /** The raw record, `undefined` for an unknown user. */
82
+ record(userId: string): Promise<SubjectRecord | undefined>;
83
+ };
84
+ /** Reads `subject_for`'s JSON; anything it cannot read is left out, and a malformed record is no record. */
85
+ declare function readSubjectRecord(value: unknown): SubjectRecord | undefined;
86
+ /**
87
+ * Membership, custom-role and subject sources over the `subject_for(p_user)`,
88
+ * `authz_version_for(p_user)` and `members_of(p_scope, p_id)` functions
89
+ * `permdock supabase hook generate` writes, for a backend that reaches
90
+ * Postgres only through PostgREST. `memberships.version` reads only the
91
+ * version, so `claimsFirst` with `onStale: 'reread'` reads the full subject
92
+ * only for a stale token; when the version function is missing it falls back
93
+ * to `subject_for`. With `policy`, a token that claims a custom role has its
94
+ * subject read in one `subject_for` call instead, and custom roles are read
95
+ * only for a subject that holds one. Each user and each instance is read once per
96
+ * `postgrestSources` call, so create it per request or per job.
97
+ */
98
+ declare function postgrestSources(client: SupabaseRpcCaller, options?: PostgrestSourcesOptions): PostgrestSources;
99
+ //#endregion
100
+ export { SupabaseRpcClient as a, readSubjectRecord as c, SupabaseRpcCaller as i, PostgrestSourcesOptions as n, SupabaseRpcResult as o, SubjectRecord as r, postgrestSources as s, PostgrestSources as t };