permdock 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/README.md +37 -35
  2. package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
  3. package/dist/a2a/index.d.ts +8 -6
  4. package/dist/a2a/index.js +21 -31
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -23
  10. package/dist/ai-sdk/index.js +38 -21
  11. package/dist/app-data-MuyzVqX8.js +60 -0
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  19. package/dist/arazzo-B6lebmiQ.js +36 -0
  20. package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
  21. package/dist/args-IIolxxKA.js +197 -0
  22. package/dist/astro/index.d.ts +43 -0
  23. package/dist/astro/index.js +27 -0
  24. package/dist/audience-Dg8XsRaO.js +55 -0
  25. package/dist/auth-DRLEizbL.js +178 -0
  26. package/dist/authzen/index.d.ts +26 -6
  27. package/dist/authzen/index.js +228 -75
  28. package/dist/automation-BMZPIVUM.d.ts +114 -0
  29. package/dist/automation-DVjOckjV.js +157 -0
  30. package/dist/better-auth/index.d.ts +8 -6
  31. package/dist/better-auth/index.js +11 -23
  32. package/dist/better-supabase/index.d.ts +438 -86
  33. package/dist/better-supabase/index.js +1027 -184
  34. package/dist/bind--9EFVYWF.d.ts +38 -0
  35. package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
  36. package/dist/body-CH5of8Ne.js +10 -0
  37. package/dist/body-text-QcXok_SI.js +52 -0
  38. package/dist/build-instance-BMnAudHn.js +52 -0
  39. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
  40. package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
  41. package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
  42. package/dist/casbin-Cr7RLtA3.js +30 -0
  43. package/dist/casbin-Dyu2gnUD.js +234 -0
  44. package/dist/casl-64gpT-8x.js +24 -0
  45. package/dist/casl-DjEDhTCP.js +299 -0
  46. package/dist/catalog/index.d.ts +74 -2
  47. package/dist/catalog/index.js +51 -2
  48. package/dist/catalog-BECMPrwc.js +100 -0
  49. package/dist/catalog-DjhMYYCq.js +1 -0
  50. package/dist/catalog-R_A__RsH.js +52 -0
  51. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
  52. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  53. package/dist/chat/index.d.ts +2 -0
  54. package/dist/chat/index.js +224 -0
  55. package/dist/chat-sdk/index.d.ts +87 -0
  56. package/dist/chat-sdk/index.js +197 -0
  57. package/dist/claims-map-7oQ3ue4X.js +13 -0
  58. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  59. package/dist/claude-agent/index.d.ts +7 -14
  60. package/dist/claude-agent/index.js +26 -30
  61. package/dist/clerk/index.d.ts +9 -8
  62. package/dist/clerk/index.js +15 -45
  63. package/dist/cli/bin.js +36 -17
  64. package/dist/cli/index.d.ts +20 -6
  65. package/dist/cli/index.js +164 -4
  66. package/dist/cloud/index.d.ts +102 -63
  67. package/dist/cloud/index.js +240 -347
  68. package/dist/cloud-CIoHNevm.js +87 -0
  69. package/dist/codemod-Bmj9dWMH.js +37 -0
  70. package/dist/codemod-Cxvvc70T.js +2084 -0
  71. package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
  72. package/dist/collect-DloHbDVa.js +55 -0
  73. package/dist/collect-FlXJlhus.js +1 -0
  74. package/dist/command-L8EstFNm.js +6 -0
  75. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  76. package/dist/compile/index.d.ts +1 -1
  77. package/dist/compile/index.js +1 -2
  78. package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
  79. package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  80. package/dist/completion-BqhRBJD8.js +143 -0
  81. package/dist/config-B46rm9sc.js +26 -0
  82. package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
  83. package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
  84. package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
  85. package/dist/constants-DcJABbLW.js +20 -0
  86. package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
  87. package/dist/convex/index.d.ts +11 -10
  88. package/dist/convex/index.js +18 -18
  89. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  90. package/dist/create-BDS7wc3y.d.ts +138 -0
  91. package/dist/create-BFfm17UA.d.ts +110 -0
  92. package/dist/create-BWRSXgOF.js +403 -0
  93. package/dist/create-C3b4B5eF.js +130 -0
  94. package/dist/create-DnrmLnLW.js +323 -0
  95. package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
  96. package/dist/credentials-DPyHmYz5.js +74 -0
  97. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  98. package/dist/delegation-DaXVdDhM.js +286 -0
  99. package/dist/delegation-input-FTxMK3ji.js +19 -0
  100. package/dist/delivery/index.d.ts +5 -0
  101. package/dist/delivery/index.js +5 -0
  102. package/dist/delivery-DCAgNyCn.js +499 -0
  103. package/dist/delivery-event-xX4obB8F.js +40 -0
  104. package/dist/denied-text-D8jDHgsl.d.ts +19 -0
  105. package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
  106. package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
  107. package/dist/device-BARQ8eYG.js +193 -0
  108. package/dist/diff-CxZo9pTq.js +37 -0
  109. package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
  110. package/dist/doctor-CxiwSfqH.js +44 -0
  111. package/dist/doctor-DFjUxf2f.js +2361 -0
  112. package/dist/drizzle/index.d.ts +5 -3
  113. package/dist/drizzle/index.js +6 -14
  114. package/dist/elysia/index.d.ts +16 -13
  115. package/dist/elysia/index.js +14 -13
  116. package/dist/env-DJZrPjRi.js +8 -0
  117. package/dist/errors-BDUwg2qC.js +27 -0
  118. package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
  119. package/dist/errors-BWXBMaKK.d.ts +11 -0
  120. package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  121. package/dist/errors-CWTY6uih.js +143 -0
  122. package/dist/evaluate-_R8QkWaf.js +1732 -0
  123. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  124. package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
  125. package/dist/eve/index.d.ts +12 -16
  126. package/dist/eve/index.js +23 -29
  127. package/dist/event-time-CsegxXxB.js +23 -0
  128. package/dist/expiry-D4_YKRKD.js +52 -0
  129. package/dist/express/index.d.ts +13 -10
  130. package/dist/express/index.js +14 -12
  131. package/dist/fastify/index.d.ts +26 -13
  132. package/dist/fastify/index.js +17 -36
  133. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  134. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  135. package/dist/fields-D9tPVUUS.js +203 -0
  136. package/dist/files-C5ZI27eV.js +124 -0
  137. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  138. package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
  139. package/dist/flags-C3DktBDY.js +86 -0
  140. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
  141. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  142. package/dist/grantee-Cn1HyUsI.js +254 -0
  143. package/dist/grantee-conditions-CcXf8hMM.js +271 -0
  144. package/dist/grantee-match-DHArqY82.js +142 -0
  145. package/dist/h3/index.d.ts +37 -0
  146. package/dist/h3/index.js +35 -0
  147. package/dist/headers-BIjfMaoC.js +8 -0
  148. package/dist/headers-CIbDTUTK.d.ts +7 -0
  149. package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
  150. package/dist/hono/index.d.ts +12 -9
  151. package/dist/hono/index.js +14 -13
  152. package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
  153. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  154. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  155. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  156. package/dist/http-DXJ37RDA.js +46 -0
  157. package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
  158. package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
  159. package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
  160. package/dist/index-BcHcPyIo.d.ts +110 -0
  161. package/dist/index-CaxrMD1A.d.ts +1 -0
  162. package/dist/index-Chrs5fQ-.d.ts +210 -0
  163. package/dist/index-CxGUswIC.d.ts +431 -0
  164. package/dist/index-D8EovfsP.d.ts +91 -0
  165. package/dist/index-DOVf7RJv.d.ts +900 -0
  166. package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
  167. package/dist/index.d.ts +20 -14
  168. package/dist/index.js +33 -23
  169. package/dist/init-DeMYsnYJ.js +96 -0
  170. package/dist/init-GG6Jh8HD.js +95 -0
  171. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  172. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  173. package/dist/instant-BluqDvyS.js +19 -0
  174. package/dist/internals-Dk8A8fX3.js +17 -0
  175. package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
  176. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  177. package/dist/jwt/index.d.ts +18 -11
  178. package/dist/jwt/index.js +166 -145
  179. package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
  180. package/dist/kysely/index.d.ts +5 -3
  181. package/dist/kysely/index.js +6 -14
  182. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  183. package/dist/load-BxEtwlBS.js +1 -0
  184. package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
  185. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  186. package/dist/login-Dfe5RlYk.js +68 -0
  187. package/dist/login-imhuwvn3.js +254 -0
  188. package/dist/manifest-C8IzW3Do.js +42 -0
  189. package/dist/manifest-CtKR3GXL.js +370 -0
  190. package/dist/manifest-json-CAGzls-C.js +9 -0
  191. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  192. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  193. package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
  194. package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
  195. package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
  196. package/dist/mcp/index.d.ts +36 -9
  197. package/dist/mcp/index.js +476 -448
  198. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
  199. package/dist/nest/index.d.ts +12 -9
  200. package/dist/nest/index.js +20 -20
  201. package/dist/next/index.d.ts +40 -20
  202. package/dist/next/index.js +37 -39
  203. package/dist/next/plugin.d.ts +1 -1
  204. package/dist/next/plugin.js +2 -2
  205. package/dist/node/index.d.ts +10 -10
  206. package/dist/node/index.js +7 -9
  207. package/dist/ocsf-BFp-PZZA.js +126 -0
  208. package/dist/openai/index.d.ts +9 -16
  209. package/dist/openai/index.js +18 -25
  210. package/dist/openapi/index.d.ts +3 -3
  211. package/dist/openapi/index.js +1 -1
  212. package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
  213. package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
  214. package/dist/openapi-ahr8rHu3.js +138 -0
  215. package/dist/operation-findings-DgATDpvh.js +36 -0
  216. package/dist/operations-CxybZErY.d.ts +59 -0
  217. package/dist/orpc/index.d.ts +13 -10
  218. package/dist/orpc/index.js +23 -20
  219. package/dist/otel/index.d.ts +3 -2
  220. package/dist/otel/index.js +53 -27
  221. package/dist/output-Dyw8fyPF.js +88 -0
  222. package/dist/output-files-B3IZJksC.js +1 -0
  223. package/dist/output-files-DhRBBE4n.js +138 -0
  224. package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
  225. package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
  226. package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
  227. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
  228. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  229. package/dist/parse-request-D_tUXG6M.js +26 -0
  230. package/dist/paths-DXSHAMIa.js +42 -0
  231. package/dist/pdp/index.d.ts +7 -3
  232. package/dist/pdp/index.js +47 -29
  233. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  234. package/dist/peer-CRvC7Hg1.js +1 -0
  235. package/dist/permdock-B9JxkBwC.js +868 -0
  236. package/dist/permdock-D7eeLJER.d.ts +502 -0
  237. package/dist/permission-registry-Br4jSNVi.js +385 -0
  238. package/dist/permissions-B-wCP5ZC.js +30 -0
  239. package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
  240. package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  241. package/dist/policies-CO1oOymN.js +295 -0
  242. package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  243. package/dist/policy-DLZJ5gAp.js +399 -0
  244. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  245. package/dist/policy-module-CTlwMvLI.js +89 -0
  246. package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
  247. package/dist/postgrest-CW0IqC-U.js +566 -0
  248. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  249. package/dist/powersync-BHfuehf3.js +62 -0
  250. package/dist/powersync-CbzkqL_M.js +1 -0
  251. package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
  252. package/dist/preset/index.d.ts +146 -0
  253. package/dist/preset/index.js +1 -0
  254. package/dist/preset-DZdU0tne.js +1768 -0
  255. package/dist/principal-source-pHneukrx.js +103 -0
  256. package/dist/prisma/index.d.ts +6 -3
  257. package/dist/prisma/index.js +6 -12
  258. package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
  259. package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  260. package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
  261. package/dist/problem-types-CJ2325SZ.js +5 -0
  262. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  263. package/dist/protected-DEPHc2xV.d.ts +38 -0
  264. package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
  265. package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
  266. package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  267. package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
  268. package/dist/pull-BgIfno6w.js +256 -0
  269. package/dist/pull-ByOks_Tg.js +1 -0
  270. package/dist/push-CmFVBOeI.js +116 -0
  271. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  272. package/dist/pushed-policy-DobP7AHI.js +238 -0
  273. package/dist/react/index.d.ts +8 -8
  274. package/dist/react/index.js +6 -6
  275. package/dist/react/provider-client.d.ts +1 -1
  276. package/dist/react/provider-client.js +1 -2
  277. package/dist/react-native/index.d.ts +24 -63
  278. package/dist/react-native/index.js +45 -27
  279. package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
  280. package/dist/relation-walk-3OyDBF0S.js +186 -0
  281. package/dist/relations-BnCWnJGI.js +163 -0
  282. package/dist/renames-CGj7YwcQ.js +175 -0
  283. package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  284. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  285. package/dist/request-context-BTRTG7OT.js +71 -0
  286. package/dist/request-context-C2_1lchh.d.ts +5 -0
  287. package/dist/request-schema-CMreVuFM.js +148 -0
  288. package/dist/resend/index.d.ts +126 -0
  289. package/dist/resend/index.js +379 -0
  290. package/dist/resource-relations-D_jw0BFx.js +243 -0
  291. package/dist/retire-CALjIQ7e.js +240 -0
  292. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  293. package/dist/rls-BA8an5Ap.js +336 -0
  294. package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
  295. package/dist/role-builder-CXbis5-X.js +623 -0
  296. package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
  297. package/dist/run-CNsApDpd.js +1 -0
  298. package/dist/run-DOfMtc9V.js +723 -0
  299. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  300. package/dist/run-ticket-sxFI6LAk.js +337 -0
  301. package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
  302. package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
  303. package/dist/scan-BOI5tJ-6.js +29 -0
  304. package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
  305. package/dist/schema-yLuBWWsh.js +130 -0
  306. package/dist/scim/index.d.ts +2 -2
  307. package/dist/scim/index.js +1 -2
  308. package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
  309. package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
  310. package/dist/server/index.d.ts +13 -134
  311. package/dist/server/index.js +13 -10
  312. package/dist/server-DqCT4CgZ.js +453 -0
  313. package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
  314. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  315. package/dist/shared-CD11nBbC.js +304 -0
  316. package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
  317. package/dist/signals-D3NcTKUS.js +32 -0
  318. package/dist/sink-BEZSlMS_.js +957 -0
  319. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  320. package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
  321. package/dist/skills-CTYwkl44.js +51 -0
  322. package/dist/snapshot-CXUWfsNy.js +269 -0
  323. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  324. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  325. package/dist/solid/index.d.ts +24 -25
  326. package/dist/solid/index.js +41 -11
  327. package/dist/solid-start/index.d.ts +52 -0
  328. package/dist/solid-start/index.js +49 -0
  329. package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
  330. package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
  331. package/dist/sql-B5T1IL83.js +55 -0
  332. package/dist/src-DLfUWFAI.js +1851 -0
  333. package/dist/ssf/index.d.ts +4 -4
  334. package/dist/ssf/index.js +440 -106
  335. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  336. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  337. package/dist/storage-C2bWdvJH.js +132 -0
  338. package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
  339. package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
  340. package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
  341. package/dist/stores-ClZUgeoP.d.ts +30 -0
  342. package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  343. package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
  344. package/dist/style-DiKWnAvn.js +1 -0
  345. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  346. package/dist/subject-BGoM5o8B.js +17 -0
  347. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  348. package/dist/supabase/index.d.ts +23 -106
  349. package/dist/supabase/index.js +5 -4
  350. package/dist/supabase/middleware.d.ts +13 -6
  351. package/dist/supabase/middleware.js +16 -11
  352. package/dist/supabase-9pqI57pW.js +92 -0
  353. package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
  354. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  355. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
  356. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  357. package/dist/support-session-C6xJQYut.js +158 -0
  358. package/dist/svelte/Protected.svelte +11 -4
  359. package/dist/svelte/index.d.ts +7 -7
  360. package/dist/svelte/index.js +26 -12
  361. package/dist/svelte/runtime.d.ts +10 -3
  362. package/dist/svelte/runtime.js +4 -3
  363. package/dist/svelte/source.d.ts +7 -7
  364. package/dist/svelte/source.js +5 -5
  365. package/dist/sveltekit/index.d.ts +51 -0
  366. package/dist/sveltekit/index.js +27 -0
  367. package/dist/tanstack-start/index.d.ts +51 -0
  368. package/dist/tanstack-start/index.js +40 -0
  369. package/dist/target-Bw37TFNA.js +51 -0
  370. package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
  371. package/dist/terminal/index.d.ts +11 -9
  372. package/dist/terminal/index.js +36 -316
  373. package/dist/testing/index.d.ts +391 -106
  374. package/dist/testing/index.js +4574 -1286
  375. package/dist/testing/saas/index.d.ts +9 -8
  376. package/dist/testing/saas/index.js +2 -2
  377. package/dist/testing/saas/permissions.d.ts +1 -1
  378. package/dist/testing/saas/permissions.js +1 -2
  379. package/dist/text-BMFRfBqc.js +8 -0
  380. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  381. package/dist/thenable-yD7SabqG.js +31 -0
  382. package/dist/time-DkWjdL98.js +71 -0
  383. package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
  384. package/dist/tool-refusal-CMLN5xhn.js +41 -0
  385. package/dist/trpc/index.d.ts +12 -9
  386. package/dist/trpc/index.js +18 -17
  387. package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
  388. package/dist/types-BNORmDM8.d.ts +172 -0
  389. package/dist/types-BjV-fqcA.d.ts +57 -0
  390. package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
  391. package/dist/types-C8-KNsFf.d.ts +107 -0
  392. package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  393. package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
  394. package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
  395. package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
  396. package/dist/types-DX0LaKTb.d.ts +157 -0
  397. package/dist/types-DiQjupG2.d.ts +332 -0
  398. package/dist/types-DqzsnlSA.js +67 -0
  399. package/dist/types-_sHy8BQf.d.ts +65 -0
  400. package/dist/types-fbZ7JEXr.d.ts +89 -0
  401. package/dist/types-tIgIeIKJ.d.ts +66 -0
  402. package/dist/unplugin/index.d.ts +1 -1
  403. package/dist/unplugin/index.js +2 -2
  404. package/dist/usage-CHOtwL19.js +1 -0
  405. package/dist/usage-DHtE8j4E.js +32 -0
  406. package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
  407. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  408. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  409. package/dist/validity-CZ7-y0Cj.js +79 -0
  410. package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
  411. package/dist/verify-DbCL9bnB.js +1770 -0
  412. package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
  413. package/dist/version-DXkYUISx.js +1 -0
  414. package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
  415. package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
  416. package/dist/vue/index.d.ts +25 -21
  417. package/dist/vue/index.js +25 -9
  418. package/dist/waiter-BGUtGYoU.js +67 -0
  419. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  420. package/dist/watch-Cb-NcaUw.js +1 -0
  421. package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
  422. package/dist/webmcp/index.d.ts +2 -2
  423. package/dist/webmcp/index.js +13 -37
  424. package/dist/where-scope-Dv-WTP-w.js +306 -0
  425. package/dist/who-can-D0QoYbEb.js +364 -0
  426. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  427. package/dist/wire-denial-C7PaVYEM.js +27 -0
  428. package/dist/workflow/index.d.ts +5 -0
  429. package/dist/workflow/index.js +223 -0
  430. package/dist/workflow-sdk/index.d.ts +56 -0
  431. package/dist/workflow-sdk/index.js +78 -0
  432. package/dist/wrap-Bd1Tejur.d.ts +15 -0
  433. package/dist/wrap-gX61EtpB.js +27 -0
  434. package/package.json +140 -41
  435. package/schemas/access-event-v1.json +118 -0
  436. package/schemas/approval-request-v1.json +34 -1
  437. package/schemas/approval-signature-v1.json +94 -0
  438. package/schemas/automation-event-v1.json +113 -0
  439. package/schemas/capability-v1.json +84 -0
  440. package/schemas/catalog-event-v1.json +87 -0
  441. package/schemas/catalog-v1.json +129 -12
  442. package/schemas/cli-commands-v1.json +164 -0
  443. package/schemas/cli-result-v1.json +96 -0
  444. package/schemas/cloud-api-v1.json +5407 -0
  445. package/schemas/connector-v1.json +408 -0
  446. package/schemas/credential-event-v1.json +81 -0
  447. package/schemas/credential-v1.json +134 -0
  448. package/schemas/decision-event-v1.json +288 -0
  449. package/schemas/delivery-event-v1.json +117 -0
  450. package/schemas/directory-event-v1.json +85 -0
  451. package/schemas/evidence-export-v1.json +54 -0
  452. package/schemas/membership-event-v1.json +93 -0
  453. package/schemas/policy-v1.json +68 -0
  454. package/schemas/pushed-policy-v1.json +236 -0
  455. package/schemas/run-v1.json +162 -0
  456. package/schemas/snapshot-v1.json +138 -0
  457. package/schemas/supabase-claims-v1.json +4 -4
  458. package/schemas/supabase-manifest-v1.json +5 -1
  459. package/schemas/support-session-v1.json +111 -0
  460. package/skills/permdock/SKILL.md +16 -12
  461. package/skills/permdock-agents/SKILL.md +40 -23
  462. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  463. package/skills/permdock-agents/references/runtimes.md +22 -18
  464. package/skills/permdock-approvals/SKILL.md +29 -13
  465. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  466. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  467. package/skills/permdock-audit/SKILL.md +3 -3
  468. package/skills/permdock-credentials/SKILL.md +5 -5
  469. package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
  470. package/skills/permdock-data/SKILL.md +6 -6
  471. package/skills/permdock-data/references/queries-and-rls.md +13 -8
  472. package/skills/permdock-data/references/relationships.md +3 -3
  473. package/skills/permdock-tenancy/SKILL.md +20 -7
  474. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  475. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  476. package/skills/permdock-wire/SKILL.md +18 -12
  477. package/skills/permdock-wire/references/adapters.md +146 -50
  478. package/skills/permdock-wire/references/policy-options.md +15 -6
  479. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  480. package/dist/approvals-DbYAuNkG.js +0 -224
  481. package/dist/arazzo-C9chp3ST.js +0 -54
  482. package/dist/bind-C_ob3LKa.d.ts +0 -25
  483. package/dist/catalog-CRW5Mx_B.js +0 -2
  484. package/dist/catalog-CYj-mX2O.js +0 -48
  485. package/dist/catalog-DWF5cYqB.js +0 -55
  486. package/dist/cloud-CfwZ39Rl.js +0 -50
  487. package/dist/cloud-DWLXO2af.js +0 -118
  488. package/dist/collect-CHB22Sx4.js +0 -83
  489. package/dist/collect-DSWOk19R.js +0 -2
  490. package/dist/commands-BeaGNj_o.js +0 -97
  491. package/dist/config-ir40y8m0.js +0 -36
  492. package/dist/create-CMwIl-w2.js +0 -253
  493. package/dist/delegation-D8pUEuce.js +0 -103
  494. package/dist/diff-C9RDjjhs.js +0 -48
  495. package/dist/doctor-Djh6JDEk.js +0 -53
  496. package/dist/doctor-DvH0IQff.js +0 -1194
  497. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  498. package/dist/duration-xK2jGFVc.js +0 -25
  499. package/dist/errors-CWfoNg9N.js +0 -47
  500. package/dist/errors-DRnGZHzF.js +0 -30
  501. package/dist/evaluation-items-CfCCejQd.js +0 -40
  502. package/dist/expiry-BoBJ8Tvc.js +0 -7
  503. package/dist/fields-BMl1RxoX.js +0 -26
  504. package/dist/grantee-Cv5Sogfv.js +0 -602
  505. package/dist/headers-BZSDieNT.js +0 -6
  506. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  507. package/dist/ids-DC4V4CFu.js +0 -18
  508. package/dist/index-0nNqHspG.d.ts +0 -6
  509. package/dist/index-BNc7Wer_.d.ts +0 -483
  510. package/dist/index-C7Tw7MaW.d.ts +0 -201
  511. package/dist/instance-options-Dhhcnm3y.js +0 -22
  512. package/dist/load-DwJUafYN.js +0 -2
  513. package/dist/manifest-iaoBXHKc.js +0 -783
  514. package/dist/map-AcxK9o_D.js +0 -147
  515. package/dist/may-use-DndQ5tQ-.js +0 -77
  516. package/dist/openapi-CQTsgKoB.js +0 -164
  517. package/dist/permdock-CbgvLnuo.js +0 -3479
  518. package/dist/permissions-DVoF6dMt.js +0 -662
  519. package/dist/policy-xyWg7QdR.js +0 -1122
  520. package/dist/powersync-CrBX8hY6.js +0 -2
  521. package/dist/powersync-DE19b9dT.js +0 -62
  522. package/dist/protected-BdnIEFkY.d.ts +0 -27
  523. package/dist/protected-xAr24FEC.d.ts +0 -40
  524. package/dist/relations-cjOL01hZ.js +0 -505
  525. package/dist/rls-P-BeBx0n.js +0 -238
  526. package/dist/rls-graph-CHwx0V8q.js +0 -435
  527. package/dist/rls-ownership-DcYlZ09B.js +0 -843
  528. package/dist/rls-shared-Cewd_-zI.js +0 -495
  529. package/dist/rls-verify-CMv9H3wV.js +0 -746
  530. package/dist/run-BWc9qqvE.js +0 -174
  531. package/dist/server-DlZ28Oz5.js +0 -268
  532. package/dist/sink-B1fZzIMf.d.ts +0 -104
  533. package/dist/sink-Bd9PSyfq.js +0 -141
  534. package/dist/skills-C5CbhhpG.js +0 -56
  535. package/dist/snapshot-Enxd0n-s.js +0 -975
  536. package/dist/sql-xdg5f4Fi.js +0 -27
  537. package/dist/src-BDwEZWrZ.js +0 -568
  538. package/dist/store-jOBYpiXC.d.ts +0 -36
  539. package/dist/stores-C0IMQrGI.d.ts +0 -52
  540. package/dist/subject-C6dLxqHU.js +0 -24
  541. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  542. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  543. package/dist/supabase-s4o9s1O1.js +0 -83
  544. package/dist/thenable-okc2xDsj.js +0 -10
  545. package/dist/types-BnIEz1sU.d.ts +0 -48
  546. package/dist/types-Bvc4oWT6.d.ts +0 -9
  547. package/dist/types-CKNSyIf_.d.ts +0 -52
  548. package/dist/types-Cq_H8N_X.d.ts +0 -197
  549. package/dist/usage-B0YuTQRO.js +0 -42
  550. package/dist/usage-DorAJiU_.js +0 -2
  551. package/dist/vocabulary-DA8a8zif.d.ts +0 -56
  552. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -1,783 +0,0 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { n as PermDockValidationError } from "./validation-error-CnjZ4t92.js";
4
- import { t as ignoreRejection } from "./thenable-okc2xDsj.js";
5
- import { t as anonymousSubject } from "./subject-C6dLxqHU.js";
6
- import { t as clientNameOf } from "./clients-DjU5ABMy.js";
7
- import "./budget-NbEtbJC_.js";
8
- import { n as copyJson, t as checkSchema } from "./json-schema-BsAflUGW.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
- function isRecord(value) {
32
- return value !== null && typeof value === "object" && !Array.isArray(value);
33
- }
34
- /** Top-level first, then `app_metadata`. `null` counts as absent: the RBAC hook writes `null` for a user with no role row. */
35
- function readClaim(claims, name) {
36
- const top = Object.hasOwn(claims, name) ? claims[name] : void 0;
37
- if (top !== void 0 && top !== null) return top;
38
- const meta = claims["app_metadata"];
39
- if (isRecord(meta) && Object.hasOwn(meta, name)) return meta[name] ?? void 0;
40
- }
41
- function asRoles(value, declared) {
42
- const raw = typeof value === "string" ? value === "" ? [] : [value] : Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
43
- if (declared === void 0) return raw;
44
- const allowed = new Set(declared);
45
- return raw.filter((role) => allowed.has(role));
46
- }
47
- /** Reads the `memberships` claim; an entry it cannot read is dropped and its index reported. */
48
- function readMemberships(value) {
49
- if (!Array.isArray(value)) return {
50
- memberships: [],
51
- dropped: []
52
- };
53
- const out = [];
54
- const dropped = [];
55
- for (const [index, item] of value.entries()) {
56
- const membership = asMembership(item);
57
- if (membership === void 0) dropped.push(index);
58
- else out.push(membership);
59
- }
60
- return {
61
- memberships: out,
62
- dropped
63
- };
64
- }
65
- function asMembership(item) {
66
- if (!isRecord(item) || !Array.isArray(item["roles"])) return;
67
- const roles = item["roles"].filter((role) => typeof role === "string");
68
- if (roles.length === 0) return;
69
- const scope = typeof item["scope"] === "string" ? item["scope"] : void 0;
70
- const id = typeof item["id"] === "string" ? item["id"] : void 0;
71
- const within = isRecord(item["within"]) ? Object.fromEntries(Object.entries(item["within"]).filter((entry) => typeof entry[1] === "string")) : void 0;
72
- const tenant = typeof item["tenant"] === "string" ? item["tenant"] : void 0;
73
- const team = typeof item["team"] === "string" ? item["team"] : void 0;
74
- const onRecord = isRecord(item["on"]) ? item["on"] : void 0;
75
- const on = onRecord !== void 0 && typeof onRecord["resource"] === "string" && typeof onRecord["id"] === "string" ? {
76
- resource: onRecord["resource"],
77
- id: onRecord["id"]
78
- } : void 0;
79
- if ((scope === void 0 || id === void 0) && tenant === void 0 && team === void 0 && on === void 0) return;
80
- const keep = item["keep"];
81
- if (keep !== void 0 && (!Array.isArray(keep) || !keep.every((key) => typeof key === "string" && key !== ""))) return;
82
- return compact({
83
- roles,
84
- scope,
85
- id,
86
- within,
87
- tenant,
88
- team,
89
- on,
90
- via: typeof item["via"] === "string" ? item["via"] : void 0,
91
- expiresAt: typeof item["expiresAt"] === "number" ? item["expiresAt"] : void 0,
92
- grantedBy: typeof item["grantedBy"] === "string" ? item["grantedBy"] : void 0,
93
- reason: typeof item["reason"] === "string" ? item["reason"] : void 0,
94
- member: memberOf(item["member"]),
95
- managedBy: item["managedBy"] === "idp" ? "idp" : void 0,
96
- entitlements: Array.isArray(item["entitlements"]) ? item["entitlements"].filter((seat) => typeof seat === "string") : void 0,
97
- keep: keep === void 0 ? void 0 : asStrings(keep)
98
- });
99
- }
100
- function memberOf(value) {
101
- if (value === null || typeof value !== "object" || !Object.hasOwn(value, "group")) return;
102
- const group = value.group;
103
- return typeof group === "string" && group !== "" ? { group } : void 0;
104
- }
105
- function asStrings(value) {
106
- return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
107
- }
108
- /** `claims[plans][tenant]`: only the active tenant's entry, never another tenant's. */
109
- function plansFor(claims, name, tenant) {
110
- if (name === void 0 || tenant === void 0) return [];
111
- const byTenant = readClaim(claims, name);
112
- if (!isRecord(byTenant) || !Object.hasOwn(byTenant, tenant)) return [];
113
- return asStrings(byTenant[tenant]);
114
- }
115
- const INVALID_CHAIN = Object.freeze({
116
- ok: false,
117
- reason: "invalid-chain"
118
- });
119
- const NO_ACTOR = Object.freeze({ ok: true });
120
- /** Own entries of one `act` level, with the nested `act` copied the same way. */
121
- function copyAct(level) {
122
- const entries = Object.entries(level).map(([key, value]) => [key, key === "act" && isRecord(value) ? copyAct(value) : value]);
123
- return Object.fromEntries(entries);
124
- }
125
- /**
126
- * The outer `act` level by its `kind`, the marker a support tool writes: none is an OAuth client
127
- * or agent chain, `support` a support session (with `session_id`), `impersonation` an admin acting
128
- * as the user. Any other `kind`, or a support level without `session_id`, is invalid.
129
- */
130
- function actingParty(outer, id) {
131
- const marked = Object.hasOwn(outer, "kind") ? outer["kind"] : void 0;
132
- const kind = marked === void 0 && Object.hasOwn(outer, "session_id") ? "support" : marked;
133
- const chain = copyAct(outer);
134
- const reason = typeof outer["reason"] === "string" ? outer["reason"] : void 0;
135
- switch (kind) {
136
- case void 0: return freezeDeep({
137
- ok: true,
138
- actor: {
139
- id,
140
- kind: "oauth-client",
141
- chain
142
- }
143
- });
144
- case "support": {
145
- const session = outer["session_id"];
146
- const readOnly = Object.hasOwn(outer, "read_only") ? outer["read_only"] : true;
147
- if (typeof session !== "string" || session === "" || typeof readOnly !== "boolean") return INVALID_CHAIN;
148
- return freezeDeep({
149
- ok: true,
150
- actor: compact({
151
- id,
152
- kind: "support",
153
- sessionId: session,
154
- readOnly,
155
- reason,
156
- chain
157
- })
158
- });
159
- }
160
- case "impersonation": return freezeDeep({
161
- ok: true,
162
- actor: compact({
163
- id,
164
- kind: "impersonation",
165
- reason,
166
- chain
167
- })
168
- });
169
- default: return INVALID_CHAIN;
170
- }
171
- }
172
- function readActor(claims) {
173
- if (Object.hasOwn(claims, "act") && claims["act"] !== void 0) {
174
- let current = claims["act"];
175
- while (current !== void 0) {
176
- const level = isRecord(current) ? current["sub"] : void 0;
177
- if (!isRecord(current) || typeof level !== "string" || level === "") return INVALID_CHAIN;
178
- current = Object.hasOwn(current, "act") ? current["act"] : void 0;
179
- }
180
- const outer = claims["act"];
181
- const sub = isRecord(outer) ? outer["sub"] : void 0;
182
- if (!isRecord(outer) || typeof sub !== "string") return INVALID_CHAIN;
183
- return actingParty(outer, sub);
184
- }
185
- const client = Object.hasOwn(claims, "client_id") ? claims["client_id"] : void 0;
186
- if (typeof client === "string" && client !== "") return freezeDeep({
187
- ok: true,
188
- actor: {
189
- id: client,
190
- kind: "oauth-client"
191
- }
192
- });
193
- return NO_ACTOR;
194
- }
195
- /**
196
- * Who acts for the user: the outermost `sub` of an RFC 8693 `act` chain (the current
197
- * actor; nested levels are prior actors, kept on `chain` for audit), else the
198
- * OAuth `client_id` of a third-party app. The outer level's `kind` names the actor:
199
- * none is `oauth-client`, `support` a support session, `impersonation` an admin acting as the
200
- * user. Reads only `act` and `client_id`; the caller applies the role rule first (`anon` and
201
- * `service_role` are anonymous and carry no actor). An `act` that is not a chain of objects each
202
- * with a non-empty `sub`, that names another `kind`, or a support level without `session_id`,
203
- * is `{ ok: false }` and must deny.
204
- */
205
- function actorOf(claims) {
206
- try {
207
- return isRecord(claims) ? readActor(claims) : NO_ACTOR;
208
- } catch {
209
- return INVALID_CHAIN;
210
- }
211
- }
212
- const IDENTITY_SCOPES = /* @__PURE__ */ new Set([
213
- "openid",
214
- "profile",
215
- "email",
216
- "address",
217
- "phone",
218
- "offline_access"
219
- ]);
220
- /**
221
- * The OAuth `scope` claim (a space-separated string or a list) as `scopes`,
222
- * without the OpenID Connect identity scopes; `undefined` when none is left.
223
- */
224
- function delegationOf(claims) {
225
- try {
226
- if (!isRecord(claims) || !Object.hasOwn(claims, "scope")) return;
227
- const scope = claims["scope"];
228
- const scopes = (typeof scope === "string" ? scope.split(/\s+/u).filter(Boolean) : asStrings(scope)).filter((name) => !IDENTITY_SCOPES.has(name));
229
- return scopes.length > 0 ? freezeDeep({ scopes }) : void 0;
230
- } catch {
231
- return;
232
- }
233
- }
234
- function subjectDelegation(claims, chain) {
235
- const delegation = compact({
236
- scopes: delegationOf(claims)?.scopes,
237
- chain
238
- });
239
- return Object.keys(delegation).length === 0 ? void 0 : delegation;
240
- }
241
- function emit(options, reason, cause) {
242
- try {
243
- options.onAuth?.({
244
- reason,
245
- cause,
246
- source: "supabase"
247
- });
248
- } catch {}
249
- }
250
- function validateClaims(extra, schema) {
251
- const result = schema["~standard"].validate(extra);
252
- if (result instanceof Promise) {
253
- ignoreRejection(result);
254
- return;
255
- }
256
- if ("issues" in result && result.issues !== void 0) return;
257
- const value = result.value;
258
- return isRecord(value) ? value : void 0;
259
- }
260
- function extraClaims(claims) {
261
- const extra = {};
262
- const meta = claims["app_metadata"];
263
- if (isRecord(meta)) for (const [key, value] of Object.entries(meta)) extra[key] = value;
264
- for (const [key, value] of Object.entries(claims)) {
265
- if (REGISTERED.has(key) || key === "user_metadata") continue;
266
- extra[key] = value;
267
- }
268
- return extra;
269
- }
270
- function mapClaims(claims, options) {
271
- const role = claims["role"];
272
- if (role === "anon" || role === "service_role") return anonymousSubject();
273
- const id = claims["sub"];
274
- if (typeof id !== "string" || id === "") return anonymousSubject();
275
- const act = readActor(claims);
276
- if (!act.ok) {
277
- emit(options, "invalid-token", act.reason);
278
- return anonymousSubject();
279
- }
280
- if (options.anonymousSignIns === "deny" && claims["is_anonymous"] === true) return anonymousSubject();
281
- const actor = act.actor === void 0 ? void 0 : act.actor.kind === "support" ? {
282
- id: act.actor.id,
283
- kind: act.actor.kind,
284
- sessionId: act.actor.sessionId,
285
- readOnly: act.actor.readOnly
286
- } : compact({
287
- id: act.actor.id,
288
- kind: act.actor.kind,
289
- client: act.actor.kind === "oauth-client" ? clientNameOf(options.clients, act.actor.id) : void 0
290
- });
291
- const roleClaim = options.roles ?? "user_role";
292
- const tenantClaim = options.tenant ?? "tenant_id";
293
- const membershipsClaim = options.memberships ?? "memberships";
294
- let extra = extraClaims(claims);
295
- if (options.schema !== void 0) extra = validateClaims(extra, options.schema) ?? {};
296
- const include = new Set(options.include ?? []);
297
- const tenantValue = readClaim(claims, tenantClaim);
298
- const version = readClaim(claims, "authz_ver");
299
- const tenant = typeof tenantValue === "string" ? tenantValue : void 0;
300
- const { memberships, dropped } = readMemberships(readClaim(claims, membershipsClaim));
301
- if (dropped.length > 0) emit(options, "schema", "membership-dropped");
302
- const plans = plansFor(claims, options.plans, tenant);
303
- const principal = compact({
304
- id,
305
- kind: "user",
306
- roles: asRoles(readClaim(claims, roleClaim), options.declared),
307
- tenant,
308
- plans: plans.length > 0 ? plans : void 0,
309
- memberships,
310
- membershipsTruncated: readClaim(claims, "memberships_truncated") === true ? true : void 0,
311
- authzVersion: typeof version === "number" && Number.isInteger(version) ? version : void 0,
312
- issuer: typeof claims["iss"] === "string" ? claims["iss"] : void 0,
313
- assurance: typeof claims["aal"] === "string" ? { acr: claims["aal"] } : void 0,
314
- claims: Object.keys(extra).length === 0 ? void 0 : extra,
315
- email: include.has("email") && typeof claims["email"] === "string" ? claims["email"] : void 0,
316
- phone: include.has("phone") && typeof claims["phone"] === "string" ? claims["phone"] : void 0,
317
- is_anonymous: include.has("is_anonymous") && typeof claims["is_anonymous"] === "boolean" ? claims["is_anonymous"] : void 0
318
- });
319
- const session = typeof claims["session_id"] === "string" ? claims["session_id"] : void 0;
320
- const expiresAt = typeof claims["exp"] === "number" ? claims["exp"] : void 0;
321
- return freezeDeep(compact({
322
- principal,
323
- actor,
324
- delegation: act.actor?.kind === "oauth-client" ? subjectDelegation(claims, act.actor.chain) : void 0,
325
- context: {},
326
- session,
327
- expiresAt,
328
- liveSession: options.liveSession === true && session !== void 0 ? true : void 0
329
- }));
330
- }
331
- function subjectFromSupabase(claims, options = {}) {
332
- try {
333
- if (!isRecord(claims)) return anonymousSubject();
334
- const rest = {};
335
- for (const [key, value] of Object.entries(claims)) {
336
- if (key === "user_metadata") continue;
337
- rest[key] = value;
338
- }
339
- return mapClaims(rest, options);
340
- } catch {
341
- return anonymousSubject();
342
- }
343
- }
344
- /**
345
- * A verified session object (`{ kind, claims }`) in, `Subject` out.
346
- * Only `kind: 'user'` sessions map; `anon`, `service`, `invalid` and anything else are anonymous.
347
- */
348
- function subjectFromSupabaseSession(session, options = {}) {
349
- try {
350
- if (session === null || session === void 0 || session.kind !== "user") return anonymousSubject();
351
- return subjectFromSupabase(session.claims, options);
352
- } catch {
353
- return anonymousSubject();
354
- }
355
- }
356
- //#endregion
357
- //#region src/supabase/manifest-schema.ts
358
- /** `schemas/supabase-manifest-v1.json`, which `parseSupabaseManifest` checks against; a test keeps the two equal. */
359
- const supabaseManifestSchema = freezeDeep({
360
- $schema: "https://json-schema.org/draft/2020-12/schema",
361
- $id: "https://permdock.com/schemas/supabase-manifest-v1.json",
362
- title: "PermDock Supabase hook manifest v1",
363
- description: "What `permdock supabase inspect --json` prints and `--out` writes: the generated hook, the SQL helpers, the claims, the membership sources and the columns that decide them. Fields are only added within v1.",
364
- type: "object",
365
- required: [
366
- "$schema",
367
- "version",
368
- "hook",
369
- "helpers",
370
- "tenantClaim",
371
- "budget",
372
- "claims",
373
- "authzVersion",
374
- "memberships",
375
- "rls",
376
- "decidingColumns",
377
- "markers"
378
- ],
379
- properties: {
380
- $schema: { const: "https://permdock.com/schemas/supabase-manifest-v1.json" },
381
- version: { const: 1 },
382
- hook: {
383
- type: "object",
384
- required: [
385
- "schema",
386
- "function",
387
- "out"
388
- ],
389
- properties: {
390
- schema: { $ref: "#/$defs/identifier" },
391
- function: { const: "custom_access_token_hook" },
392
- out: { type: "string" },
393
- before: {
394
- type: "array",
395
- items: {
396
- type: "string",
397
- pattern: "^[A-Za-z_][A-Za-z0-9_]*\\.[A-Za-z_][A-Za-z0-9_]*$"
398
- }
399
- }
400
- }
401
- },
402
- helpers: {
403
- type: "object",
404
- required: ["schema", "functions"],
405
- properties: {
406
- schema: { $ref: "#/$defs/identifier" },
407
- functions: {
408
- type: "array",
409
- items: { $ref: "#/$defs/helperName" }
410
- }
411
- }
412
- },
413
- tenantClaim: { $ref: "#/$defs/identifier" },
414
- budget: {
415
- type: "object",
416
- required: ["bytes", "measure"],
417
- properties: {
418
- bytes: {
419
- type: "integer",
420
- minimum: 1
421
- },
422
- measure: { type: "string" }
423
- }
424
- },
425
- claims: {
426
- type: "array",
427
- items: {
428
- type: "object",
429
- required: [
430
- "name",
431
- "source",
432
- "budget"
433
- ],
434
- properties: {
435
- name: { $ref: "#/$defs/identifier" },
436
- source: {
437
- type: "string",
438
- pattern: "^(permdock|[A-Za-z_][A-Za-z0-9_]*\\.[A-Za-z_][A-Za-z0-9_]*)$"
439
- },
440
- budget: { type: "boolean" }
441
- }
442
- }
443
- },
444
- authzVersion: { type: "boolean" },
445
- authzVersionBump: {
446
- type: "object",
447
- required: [
448
- "schema",
449
- "function",
450
- "args"
451
- ],
452
- properties: {
453
- schema: { $ref: "#/$defs/identifier" },
454
- function: { const: "permdock_bump_authz_version_for" },
455
- args: { const: "p_users uuid[]" }
456
- }
457
- },
458
- memberships: {
459
- type: "array",
460
- items: { $ref: "#/$defs/membership" }
461
- },
462
- rls: {
463
- type: "object",
464
- required: [
465
- "schema",
466
- "mode",
467
- "tenantClaim",
468
- "scopes",
469
- "helpers",
470
- "memberships"
471
- ],
472
- properties: {
473
- schema: { $ref: "#/$defs/identifier" },
474
- mode: { enum: ["jwt", "database"] },
475
- tenantClaim: { $ref: "#/$defs/identifier" },
476
- scopes: {
477
- type: "array",
478
- items: {
479
- type: "object",
480
- required: ["name", "type"],
481
- properties: {
482
- name: {
483
- type: "string",
484
- pattern: "^[a-z][a-z0-9_]*$"
485
- },
486
- type: { type: "string" },
487
- within: {
488
- type: "string",
489
- pattern: "^[a-z][a-z0-9_]*$"
490
- }
491
- }
492
- }
493
- },
494
- helpers: {
495
- type: "array",
496
- items: {
497
- type: "object",
498
- required: [
499
- "name",
500
- "args",
501
- "returns",
502
- "execute"
503
- ],
504
- properties: {
505
- name: { $ref: "#/$defs/helperName" },
506
- args: { type: "string" },
507
- returns: { type: "string" },
508
- execute: {
509
- type: "array",
510
- items: { enum: [
511
- "anon",
512
- "authenticated",
513
- "supabase_auth_admin"
514
- ] }
515
- }
516
- }
517
- }
518
- },
519
- memberships: {
520
- type: "array",
521
- items: { $ref: "#/$defs/membership" }
522
- },
523
- customRoles: { type: "boolean" },
524
- roles: {
525
- type: "object",
526
- required: [
527
- "table",
528
- "user",
529
- "role"
530
- ],
531
- additionalProperties: false,
532
- properties: {
533
- table: { type: "string" },
534
- user: { $ref: "#/$defs/column" },
535
- role: { oneOf: [{ $ref: "#/$defs/role" }, {
536
- type: "array",
537
- minItems: 2,
538
- items: { $ref: "#/$defs/role" }
539
- }] }
540
- }
541
- },
542
- suspension: {
543
- type: "object",
544
- additionalProperties: false,
545
- properties: {
546
- users: { $ref: "#/$defs/activeRow" },
547
- scopes: {
548
- type: "object",
549
- additionalProperties: { $ref: "#/$defs/activeRow" }
550
- },
551
- memberships: {
552
- type: "object",
553
- required: ["keep"],
554
- additionalProperties: false,
555
- properties: { keep: {
556
- description: "The permission keys a membership whose disabledAt column is set still holds.",
557
- type: "array",
558
- items: { type: "string" }
559
- } }
560
- }
561
- }
562
- },
563
- assignments: {
564
- type: "object",
565
- required: ["tables"],
566
- additionalProperties: false,
567
- properties: { tables: {
568
- type: "array",
569
- items: { type: "string" }
570
- } }
571
- },
572
- apiKeys: {
573
- type: "object",
574
- required: [
575
- "claim",
576
- "scopes",
577
- "tenant",
578
- "roles",
579
- "serviceRoles"
580
- ],
581
- additionalProperties: false,
582
- properties: {
583
- claim: { type: "string" },
584
- scopes: { type: "string" },
585
- tenant: { type: "string" },
586
- roles: { type: "string" },
587
- serviceRoles: {
588
- type: "array",
589
- items: { type: "string" }
590
- }
591
- }
592
- }
593
- }
594
- },
595
- decidingColumns: {
596
- type: "array",
597
- items: {
598
- type: "string",
599
- pattern: "^[A-Za-z_][A-Za-z0-9_]*\\.[A-Za-z_][A-Za-z0-9_]*\\.[A-Za-z_][A-Za-z0-9_]*$"
600
- }
601
- },
602
- markers: {
603
- type: "object",
604
- required: ["hook", "grants"],
605
- properties: {
606
- hook: { const: "v1" },
607
- grants: { const: "v1" }
608
- }
609
- },
610
- requires: {
611
- description: "The supabase/sdk capability-matrix feature ids the hook, the helpers and subjectFromSupabase depend on, as of the matrix release tag.",
612
- type: "object",
613
- required: ["matrix", "capabilities"],
614
- additionalProperties: false,
615
- properties: {
616
- matrix: {
617
- type: "string",
618
- pattern: "^capability-matrix-v1\\.[0-9]+\\.[0-9]+$"
619
- },
620
- capabilities: {
621
- type: "array",
622
- uniqueItems: true,
623
- items: {
624
- type: "string",
625
- pattern: "^[a-z][a-z0-9_]*\\.[a-z0-9_]+\\.[a-z0-9_]+$"
626
- }
627
- }
628
- }
629
- }
630
- },
631
- $defs: {
632
- membership: {
633
- type: "object",
634
- required: [
635
- "table",
636
- "user",
637
- "scope",
638
- "id",
639
- "role",
640
- "columns"
641
- ],
642
- properties: {
643
- table: {
644
- type: "string",
645
- pattern: "^[A-Za-z_][A-Za-z0-9_]*\\.[A-Za-z_][A-Za-z0-9_]*$"
646
- },
647
- user: { $ref: "#/$defs/user" },
648
- scope: { $ref: "#/$defs/value" },
649
- id: { $ref: "#/$defs/column" },
650
- role: { oneOf: [{ $ref: "#/$defs/role" }, {
651
- type: "array",
652
- minItems: 2,
653
- items: { $ref: "#/$defs/role" }
654
- }] },
655
- within: { oneOf: [{ $ref: "#/$defs/column" }, {
656
- type: "object",
657
- required: ["columns"],
658
- additionalProperties: false,
659
- properties: { columns: {
660
- type: "object",
661
- additionalProperties: { $ref: "#/$defs/identifier" }
662
- } }
663
- }] },
664
- via: { $ref: "#/$defs/value" },
665
- expiresAt: { $ref: "#/$defs/column" },
666
- disabledAt: { $ref: "#/$defs/column" },
667
- columns: {
668
- type: "array",
669
- items: { $ref: "#/$defs/identifier" }
670
- }
671
- }
672
- },
673
- identifier: {
674
- type: "string",
675
- pattern: "^[A-Za-z_][A-Za-z0-9_]*$"
676
- },
677
- activeRow: {
678
- type: "object",
679
- required: ["table", "id"],
680
- additionalProperties: false,
681
- properties: {
682
- table: { type: "string" },
683
- id: { $ref: "#/$defs/identifier" },
684
- disabledAt: { $ref: "#/$defs/identifier" },
685
- status: { $ref: "#/$defs/identifier" },
686
- active: {
687
- type: "array",
688
- items: { type: "string" }
689
- },
690
- keep: {
691
- description: "A scope only: the permission keys members of a suspended instance still hold.",
692
- type: "array",
693
- items: { type: "string" }
694
- }
695
- }
696
- },
697
- helperName: {
698
- type: "string",
699
- pattern: "^(permdock_has(_for)?|permitted_[a-z][a-z0-9_]*_(ids|permission_keys)(_for)?|member_[a-z][a-z0-9_]*_ids(_for)?|permdock_can_assign(_any|_custom_role)?(_for)?|permdock_api_key_allows|permdock_user_id)$"
700
- },
701
- column: {
702
- type: "object",
703
- required: ["column"],
704
- additionalProperties: false,
705
- properties: { column: { $ref: "#/$defs/identifier" } }
706
- },
707
- role: { oneOf: [{ $ref: "#/$defs/value" }, { $ref: "#/$defs/through" }] },
708
- user: { oneOf: [{ $ref: "#/$defs/column" }, { $ref: "#/$defs/through" }] },
709
- through: {
710
- type: "object",
711
- required: ["column", "through"],
712
- additionalProperties: false,
713
- properties: {
714
- column: { $ref: "#/$defs/identifier" },
715
- through: {
716
- type: "object",
717
- required: [
718
- "table",
719
- "id",
720
- "column"
721
- ],
722
- additionalProperties: false,
723
- properties: {
724
- table: {
725
- type: "string",
726
- pattern: "^[A-Za-z_][A-Za-z0-9_]*\\.[A-Za-z_][A-Za-z0-9_]*$"
727
- },
728
- id: { $ref: "#/$defs/identifier" },
729
- column: { $ref: "#/$defs/identifier" }
730
- }
731
- }
732
- }
733
- },
734
- value: { oneOf: [{ $ref: "#/$defs/column" }, {
735
- type: "object",
736
- required: ["value"],
737
- additionalProperties: false,
738
- properties: { value: { oneOf: [{ type: "string" }, {
739
- type: "array",
740
- items: { type: "string" }
741
- }] } }
742
- }] }
743
- }
744
- });
745
- //#endregion
746
- //#region src/supabase/manifest.ts
747
- /**
748
- * Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
749
- * validates it against `schemas/supabase-manifest-v1.json`. Returns a
750
- * deep-frozen copy built from own keys; throws `PermDockValidationError`
751
- * with every issue, so a manifest of another major is refused.
752
- */
753
- function parseSupabaseManifest(json) {
754
- const issues = [];
755
- let input = json;
756
- if (typeof json === "string") try {
757
- input = JSON.parse(json);
758
- } catch (error) {
759
- invalidManifest([{
760
- message: `Expected JSON text: ${error instanceof Error ? error.message : String(error)}`,
761
- path: []
762
- }]);
763
- }
764
- const copy = copyJson(input, [], issues, /* @__PURE__ */ new Set());
765
- if (issues.length === 0) checkSchema(supabaseManifestSchema, copy, [], issues);
766
- if (issues.length > 0) invalidManifest(issues);
767
- return freezeDeep(copy);
768
- }
769
- function invalidManifest(issues) {
770
- const [first] = issues;
771
- const where = first?.path === void 0 || first.path.length === 0 ? "" : ` at ${first.path.map(String).join(".")}`;
772
- const more = issues.length > 1 ? ` (and ${String(issues.length - 1)} more)` : "";
773
- throw new PermDockValidationError({
774
- code: "invalid-data",
775
- permission: "",
776
- resource: "",
777
- boundary: "supabase-manifest",
778
- issues,
779
- message: `PermDock: invalid Supabase manifest${where}: ${first?.message ?? "unknown"}${more}`
780
- });
781
- }
782
- //#endregion
783
- export { subjectFromSupabase as a, readMemberships as i, actorOf as n, subjectFromSupabaseSession as o, delegationOf as r, parseSupabaseManifest as t };