permdock 0.4.0 → 0.5.0

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