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,24 +0,0 @@
1
- //#region src/core/subject.ts
2
- function isPrincipal(value) {
3
- if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
4
- if ("principal" in value && "context" in value) return false;
5
- const record = value;
6
- if (typeof record.id !== "string") return false;
7
- return Array.isArray(record.roles) || Array.isArray(record.memberships) || record.kind === "user" || record.kind === "service" || record.kind === "workload" || record.kind === "link" || typeof record.issuer === "string";
8
- }
9
- function isSubject(value) {
10
- return value !== null && typeof value === "object" && "principal" in value && "context" in value && typeof value.context === "object";
11
- }
12
- function isActor(value) {
13
- if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
14
- const record = value;
15
- return typeof record.id === "string" && typeof record.kind === "string";
16
- }
17
- function anonymousSubject(context = {}) {
18
- return Object.freeze({
19
- principal: null,
20
- context: Object.freeze({ ...context })
21
- });
22
- }
23
- //#endregion
24
- export { isSubject as i, isActor as n, isPrincipal as r, anonymousSubject as t };
@@ -1,472 +0,0 @@
1
- import { i as describeError } from "./errors-CWfoNg9N.js";
2
- import { a as sqlFiles, i as rel } from "./files-DWUN9PzI.js";
3
- import { t as FIELD_VIEWS } from "./rls-fields-CZOMlwHl.js";
4
- import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
5
- import { dirname, join, posix, resolve } from "node:path";
6
- import { createRequire } from "node:module";
7
- import { parse } from "smol-toml";
8
- //#region src/cli/deciding-columns.ts
9
- /** `schema.table`, unquoted and lower case; `public` when unqualified. */
10
- function tableKey(name) {
11
- const parts = name.split(".").map((part) => part.replaceAll("\"", ""));
12
- return (parts.length === 1 ? ["public", ...parts] : parts).join(".").toLowerCase();
13
- }
14
- /**
15
- * The columns of each membership source's table that decide who holds which
16
- * membership (user, scope, id, `within`, role, `via`, expiry), and the id and
17
- * value columns of a table a role or user column references, keyed by
18
- * {@link tableKey}. A client that can write one can give itself a membership.
19
- */
20
- function membershipColumns(config) {
21
- const sources = config.supabase?.hook?.memberships ?? config.rls?.membershipSources ?? [];
22
- const byTable = /* @__PURE__ */ new Map();
23
- for (const source of sources) {
24
- const table = tableKey(source.sql.table);
25
- const columns = byTable.get(table) ?? /* @__PURE__ */ new Set();
26
- for (const column of source.sql.columns) columns.add(column);
27
- byTable.set(table, columns);
28
- for (const through of [...source.sql.throughs, ...source.sql.userThrough === void 0 ? [] : [source.sql.userThrough]]) {
29
- const keys = tableKey(through.table);
30
- byTable.set(keys, /* @__PURE__ */ new Set([
31
- ...byTable.get(keys) ?? [],
32
- through.id,
33
- through.key
34
- ]));
35
- }
36
- }
37
- return byTable;
38
- }
39
- /**
40
- * Every `schema.table.column` a claim or a membership is computed from: the
41
- * membership columns and the `attrs` table columns. Sorted.
42
- */
43
- function decidingColumns(config, attrs) {
44
- const entries = /* @__PURE__ */ new Set();
45
- for (const [table, columns] of membershipColumns(config)) for (const column of columns) entries.add(`${table}.${column}`);
46
- if (attrs?.table !== void 0) {
47
- const table = tableKey(attrs.table);
48
- for (const column of attrs.columns) entries.add(`${table}.${column}`);
49
- }
50
- return [...entries].toSorted();
51
- }
52
- //#endregion
53
- //#region src/cli/sql-statements.ts
54
- function blankComments(sql) {
55
- return sql.replaceAll(/--[^\n]*/gu, (comment) => " ".repeat(comment.length)).replaceAll(/\/\*[\s\S]*?\*\//gu, (comment) => comment.replaceAll(/[^\n]/gu, " "));
56
- }
57
- /** Split on `;` outside string literals and dollar-quoted bodies. */
58
- function sqlStatements(sql) {
59
- const text = blankComments(sql);
60
- const statements = [];
61
- const push = (start, end) => {
62
- const body = text.slice(start, end);
63
- const lead = body.length - body.trimStart().length;
64
- const trimmed = body.trim();
65
- if (trimmed !== "") statements.push({
66
- line: text.slice(0, start + lead).split("\n").length,
67
- text: trimmed
68
- });
69
- };
70
- let start = 0;
71
- let index = 0;
72
- while (index < text.length) {
73
- const char = text[index];
74
- if (char === "'") {
75
- const end = text.indexOf("'", index + 1);
76
- index = end === -1 ? text.length : end + 1;
77
- continue;
78
- }
79
- if (char === "$") {
80
- const tag = /^\$[A-Za-z_]*\$/u.exec(text.slice(index, index + 64));
81
- if (tag !== null) {
82
- const end = text.indexOf(tag[0], index + tag[0].length);
83
- index = end === -1 ? text.length : end + tag[0].length;
84
- continue;
85
- }
86
- }
87
- if (char === ";") {
88
- push(start, index);
89
- start = index + 1;
90
- }
91
- index += 1;
92
- }
93
- push(start, text.length);
94
- return statements;
95
- }
96
- /** Capture group `index` of a match, or '' when an optional group took no part. */
97
- function group(match, index) {
98
- return match[index] ?? "";
99
- }
100
- const VIEW = /^create\s+(?:or\s+replace\s+)?view\s+(?<name>\S+?)(?:\s+with\s*\((?<options>[^)]*)\))?\s+as\b/iu;
101
- const PRIVILEGE = /^(?:grant|revoke)\s[\s\S]*?\son\s+(?<target>[\s\S]+?)\s+(?:to|from)\s/iu;
102
- const UNDIFFED_TARGET = /^(?:schema|function|procedure|routine|all\s+(?:functions|procedures|routines)\s+in\s+schema)\s/iu;
103
- function privilegeTable(target) {
104
- return target.replace(/^table\s+/iu, "").trim();
105
- }
106
- function splitUndiffed(sql) {
107
- const statements = sqlStatements(sql);
108
- const views = /* @__PURE__ */ new Set();
109
- const moved = [];
110
- let kept = sql;
111
- for (const { text } of statements) {
112
- const view = VIEW.exec(text)?.groups;
113
- if (view !== void 0) {
114
- views.add(view["name"] ?? "");
115
- if (view["options"] !== void 0) moved.push(`alter view ${view["name"] ?? ""} set (${view["options"]});`);
116
- continue;
117
- }
118
- const target = PRIVILEGE.exec(text)?.groups?.["target"];
119
- if (target !== void 0 && (UNDIFFED_TARGET.test(target) || views.has(privilegeTable(target)))) {
120
- moved.push(`${text};`);
121
- kept = kept.replace(`${text};\n`, "");
122
- }
123
- }
124
- return {
125
- kept,
126
- moved
127
- };
128
- }
129
- //#endregion
130
- //#region src/cli/doctor-project.ts
131
- /**
132
- * The directories from `cwd` up to the workspace root: the first one with a
133
- * `pnpm-workspace.yaml`, a `package.json` that declares `workspaces`, or a
134
- * `.git`. Skills are often installed once at a monorepo's root.
135
- */
136
- function workspaceDirs(cwd) {
137
- const dirs = [];
138
- let dir = resolve(cwd);
139
- for (;;) {
140
- dirs.push(dir);
141
- if (isWorkspaceRoot(dir)) return dirs;
142
- const parent = dirname(dir);
143
- if (parent === dir) return [resolve(cwd)];
144
- dir = parent;
145
- }
146
- }
147
- function isWorkspaceRoot(dir) {
148
- if (existsSync(join(dir, "pnpm-workspace.yaml")) || existsSync(join(dir, ".git"))) return true;
149
- const manifest = join(dir, "package.json");
150
- if (!existsSync(manifest)) return false;
151
- try {
152
- const parsed = JSON.parse(readFileSync(manifest, "utf8"));
153
- return parsed !== null && typeof parsed === "object" && Object.hasOwn(parsed, "workspaces");
154
- } catch {
155
- return false;
156
- }
157
- }
158
- /** Whether `dir` holds a skills lock: PermDock's own, or the `skills` CLI's naming the `permdock` skill. */
159
- function hasSkillsLock(dir) {
160
- if (existsSync(join(dir, ".permdock/skills-lock.json"))) return true;
161
- const shared = join(dir, "skills-lock.json");
162
- if (!existsSync(shared)) return false;
163
- try {
164
- const parsed = JSON.parse(readFileSync(shared, "utf8"));
165
- const skills = parsed !== null && typeof parsed === "object" ? Reflect.get(parsed, "skills") : void 0;
166
- return skills !== null && typeof skills === "object" && Object.hasOwn(skills, "permdock");
167
- } catch {
168
- return false;
169
- }
170
- }
171
- function pd005(cwd) {
172
- const dirs = workspaceDirs(cwd);
173
- if (!dirs.some((dir) => [
174
- ".agents/skills",
175
- ".claude/skills",
176
- ".cursor/skills"
177
- ].some((folder) => existsSync(join(dir, folder, "permdock/SKILL.md"))))) return [{
178
- code: "PD005",
179
- severity: "warning",
180
- message: "Agent Skills are not installed",
181
- fix: "pnpm exec permdock skills install"
182
- }];
183
- if (!dirs.some(hasSkillsLock)) return [{
184
- code: "PD005",
185
- severity: "warning",
186
- message: "skills lock is missing",
187
- fix: "pnpm exec permdock skills install"
188
- }];
189
- return [];
190
- }
191
- function pd006(cwd) {
192
- try {
193
- const pkg = createRequire(resolve(cwd, "package.json"))("typescript/package.json");
194
- const major = Number(pkg.version.split(".")[0]);
195
- if (major < 5 || major === 5 && Number(pkg.version.split(".")[1]) < 9) return [{
196
- code: "PD006",
197
- severity: "error",
198
- message: `TypeScript ${pkg.version} is below the supported matrix (5.9, 6, 7)`,
199
- fix: "upgrade typescript to 5.9 or later"
200
- }];
201
- if (major > 7) return [{
202
- code: "PD006",
203
- severity: "error",
204
- message: `TypeScript ${pkg.version} is not in the supported matrix (5.9, 6, 7)`,
205
- fix: "use TypeScript 5.9, 6 or 7"
206
- }];
207
- return [];
208
- } catch {
209
- return [{
210
- code: "PD006",
211
- severity: "error",
212
- message: "typescript is not installed",
213
- fix: "add typescript 5.9, 6 or 7"
214
- }];
215
- }
216
- }
217
- function pd009(cwd) {
218
- const copies = [];
219
- function walk(dir, depth) {
220
- if (depth > 6 || !existsSync(dir)) return;
221
- const pkg = join(dir, "node_modules/permdock/package.json");
222
- if (existsSync(pkg)) copies.push(pkg);
223
- if (!existsSync(join(dir, "node_modules"))) return;
224
- for (const name of readdirSync(join(dir, "node_modules"))) {
225
- if (name.startsWith(".")) continue;
226
- const nested = join(dir, "node_modules", name);
227
- try {
228
- if (statSync(nested).isDirectory()) walk(nested, depth + 1);
229
- } catch {}
230
- }
231
- }
232
- walk(cwd, 0);
233
- if (copies.length > 1) return [{
234
- code: "PD009",
235
- severity: "error",
236
- message: `duplicate permdock copies: ${copies.map((item) => rel(cwd, dirname(item))).join(", ")}`,
237
- fix: "dedupe so only one permdock version is installed"
238
- }];
239
- return [];
240
- }
241
- function pd012(cwd, config) {
242
- const docs = config.openapi?.doc ?? [];
243
- const findings = [];
244
- for (const doc of docs) {
245
- const abs = resolve(cwd, doc);
246
- if (!existsSync(abs)) continue;
247
- const text = readFileSync(abs, "utf8");
248
- if (text.includes("\"drafts\"") && !text.includes("overlay")) findings.push({
249
- code: "PD012",
250
- severity: "warning",
251
- message: `${doc} carries a draft pin the CLI no longer emits`,
252
- fix: "regenerate with permdock openapi"
253
- });
254
- }
255
- return findings;
256
- }
257
- const MIGRATION_DIRS = [
258
- "supabase/migrations",
259
- "supabase/schemas",
260
- "migrations",
261
- "drizzle",
262
- "prisma/migrations",
263
- "db/migrations"
264
- ];
265
- const VIEW_NAME = String.raw`((?:"[^"]+"|\w+)(?:\.(?:"[^"]+"|\w+))?)`;
266
- const CREATE_VIEW = new RegExp(String.raw`\bcreate\s+(?:or\s+replace\s+)?(?:temp(?:orary)?\s+)?(?:recursive\s+)?view\s+${VIEW_NAME}([\s\S]*?)\bas\b`, "giu");
267
- const ALTER_VIEW = new RegExp(String.raw`\balter\s+view\s+(?:if\s+exists\s+)?${VIEW_NAME}\s+set\s*\(([^)]*)\)`, "giu");
268
- const INVOKER = /\bsecurity_invoker\s*(?:=\s*(?:true|on|'true'|'on'|1)\b|[,)]|$)/iu;
269
- const COMPANION = new RegExp(String.raw`\bcomment\s+on\s+view\s+${VIEW_NAME}\s+is\s+'${FIELD_VIEWS.comment}\b`, "giu");
270
- /**
271
- * Views run as their owner unless `security_invoker` is set, so they read
272
- * past RLS on the tables beneath them. The `<table>_visible_fields`
273
- * companion `rls generate --revoke-columns` writes reads as its owner on
274
- * purpose and carries a comment that says so.
275
- */
276
- function pd022(cwd, config) {
277
- if (config.rls === void 0 && config.doctor?.migrations === void 0) return [];
278
- const created = /* @__PURE__ */ new Map();
279
- const invoker = /* @__PURE__ */ new Set();
280
- const companions = /* @__PURE__ */ new Set();
281
- for (const file of sqlFiles(cwd, config.doctor?.migrations ?? MIGRATION_DIRS)) {
282
- const raw = readFileSync(file, "utf8");
283
- const text = raw.replaceAll(/--[^\n]*/gu, "").replaceAll(/\/\*[\s\S]*?\*\//gu, "");
284
- for (const [, name = "", options = ""] of text.matchAll(CREATE_VIEW)) {
285
- const key = tableKey(name);
286
- created.set(key, rel(cwd, file));
287
- if (INVOKER.test(options)) invoker.add(key);
288
- else invoker.delete(key);
289
- }
290
- for (const [, name = "", options = ""] of text.matchAll(ALTER_VIEW)) if (INVOKER.test(options)) invoker.add(tableKey(name));
291
- for (const [, name = ""] of raw.matchAll(COMPANION)) companions.add(tableKey(name));
292
- }
293
- return [...created].filter(([key]) => !invoker.has(key) && !companions.has(key)).map(([key, file]) => ({
294
- code: "PD022",
295
- severity: "warning",
296
- message: `view ${key} in ${file} is not security_invoker, so it reads past row level security`,
297
- fix: `create the view with (security_invoker = true), or alter view ${key} set (security_invoker = true); Postgres 15 or later. For column-level reads, generate field views with permdock rls generate --fields views`
298
- }));
299
- }
300
- const AUTH_ROLE = /\bauth\.role\s*\(\s*\)/giu;
301
- /**
302
- * PD040: `auth.role()` in a migration. Supabase deprecated it; a policy
303
- * names its Postgres roles with `to authenticated` instead, and the role
304
- * claim it reads is the one PostgREST already switched to.
305
- */
306
- function pd040(cwd, config) {
307
- const findings = [];
308
- for (const file of sqlFiles(cwd, config.doctor?.migrations ?? MIGRATION_DIRS)) {
309
- const text = readFileSync(file, "utf8").replaceAll(/--[^\n]*/gu, (comment) => " ".repeat(comment.length)).replaceAll(/\/\*[\s\S]*?\*\//gu, (comment) => comment.replaceAll(/[^\n]/gu, " "));
310
- for (const match of text.matchAll(AUTH_ROLE)) {
311
- const line = text.slice(0, match.index).split("\n").length;
312
- findings.push({
313
- code: "PD040",
314
- severity: "warning",
315
- message: `${rel(cwd, file)}:${String(line)} calls auth.role(), which Supabase deprecated`,
316
- fix: "name the roles on the policy (create policy ... to authenticated) and drop the auth.role() = 'authenticated' test; call permdock_has or permitted_<scope>_ids for permissions"
317
- });
318
- }
319
- }
320
- return findings;
321
- }
322
- const GRANT = /\b(grant|revoke)\s+([\s\S]+?)\s+on\s+(?:table\s+)?([\w."]+)\s+(?:to|from)\s+([\w\s,"]+?)(?:\s+with\s+grant\s+option|\s+cascade|\s+restrict)?\s*;/giu;
323
- const CLIENT_ROLES = /* @__PURE__ */ new Set([
324
- "anon",
325
- "authenticated",
326
- "public"
327
- ]);
328
- function applyPrivilege(writable, verb, part) {
329
- const match = /^\s*(all(?:\s+privileges)?|insert|update)\s*(?:\(([^)]*)\))?\s*$/iu.exec(part);
330
- if (match === null) return;
331
- const kind = (match[1] ?? "").toLowerCase();
332
- const sets = kind === "insert" ? [writable.insert] : kind === "update" ? [writable.update] : [writable.insert, writable.update];
333
- const columns = match[2] === void 0 ? ["*"] : match[2].split(",").map((column) => column.trim().replaceAll("\"", ""));
334
- for (const set of sets) for (const column of columns) if (verb.toLowerCase() === "grant") set.add(column);
335
- else if (column === "*") set.clear();
336
- else set.delete(column);
337
- }
338
- const CREATE_TABLE = /^create\s+(?:(?:global|local)\s+)?(?:(?:temp|temporary|unlogged)\s+)?table\s+(?:if\s+not\s+exists\s+)?((?:"[^"]+"|\w+)(?:\.(?:"[^"]+"|\w+))?)\s*\(/iu;
339
- const REVOKE_DEFAULT_TABLES = /^alter\s+default\s+privileges\s+(?:for\s+(?:role|user)\s+[\w\s,"]+?\s+)?in\s+schema\s+"?public"?\s+revoke\s+[\s\S]+?\s+on\s+tables\s+from\s+[\s\S]*\b(?:anon|authenticated)\b/iu;
340
- /**
341
- * Columns of `table` a client role may insert or update, per the migrations
342
- * in order; `*` for every column. On Supabase a table created in `public`
343
- * starts writable: the default privileges grant `anon` and `authenticated`
344
- * everything, until a migration revokes them.
345
- */
346
- function clientWritable(cwd, config, target) {
347
- const writable = {
348
- insert: /* @__PURE__ */ new Set(),
349
- update: /* @__PURE__ */ new Set()
350
- };
351
- let defaults = config.supabase !== void 0 && target.startsWith("public.");
352
- for (const file of sqlFiles(cwd, config.doctor?.migrations ?? MIGRATION_DIRS)) for (const { text } of sqlStatements(readFileSync(file, "utf8"))) {
353
- if (REVOKE_DEFAULT_TABLES.test(text)) {
354
- defaults = false;
355
- continue;
356
- }
357
- const created = CREATE_TABLE.exec(text);
358
- if (created !== null) {
359
- if (defaults && tableKey(created[1] ?? "") === target) {
360
- writable.insert.add("*");
361
- writable.update.add("*");
362
- }
363
- continue;
364
- }
365
- for (const [, verb = "", privileges = "", name = "", roles = ""] of `${text};`.matchAll(GRANT)) {
366
- if (tableKey(name) !== target) continue;
367
- if (!roles.split(",").map((role) => role.trim().replaceAll("\"", "").toLowerCase()).some((role) => CLIENT_ROLES.has(role))) continue;
368
- for (const part of privileges.split(/,(?![^(]*\))/u)) applyPrivilege(writable, verb, part);
369
- }
370
- }
371
- return /* @__PURE__ */ new Set([...writable.insert, ...writable.update]);
372
- }
373
- /** Membership columns a client can write: a user who sets `user_id` or `role` grants themselves access. */
374
- function membershipFindings(cwd, config) {
375
- const findings = [];
376
- for (const [table, columns] of membershipColumns(config)) {
377
- const writable = clientWritable(cwd, config, table);
378
- const exposed = [...columns].filter((column) => writable.has("*") || writable.has(column));
379
- if (exposed.length > 0) findings.push({
380
- code: "PD028",
381
- severity: "warning",
382
- message: `${table}.${exposed.join(", ")} decide${exposed.length === 1 ? "s" : ""} memberships, and the migrations let anon or authenticated insert or update ${exposed.length === 1 ? "it" : "them"}: a user could give themselves a membership`,
383
- fix: `revoke insert, update on ${table} from anon, authenticated, then grant update (<columns clients edit>) on ${table} to authenticated; a column-level revoke alone leaves a table-level grant in place`
384
- });
385
- }
386
- return findings;
387
- }
388
- /**
389
- * `attrs` claims must come from server-owned columns: never `user_metadata`,
390
- * never a column clients can write. Membership sources' deciding columns are
391
- * held to the same rule.
392
- */
393
- function pd028(cwd, config, plan) {
394
- const memberships = membershipFindings(cwd, config);
395
- const attrs = config.supabase?.hook?.attrs;
396
- if (attrs === void 0) return memberships;
397
- const planned = plan(attrs);
398
- const findings = planned.errors.map((message) => ({
399
- code: "PD028",
400
- severity: "error",
401
- message,
402
- fix: "list server-owned columns or app_metadata.<key> entries; user_metadata is user-editable"
403
- }));
404
- if (planned.table !== void 0 && planned.columns.length > 0) {
405
- const writable = clientWritable(cwd, config, tableKey(planned.table));
406
- const exposed = planned.columns.filter((column) => writable.has("*") || writable.has(column));
407
- if (exposed.length > 0) findings.push({
408
- code: "PD028",
409
- severity: "warning",
410
- message: `attrs reads ${exposed.join(", ")} from ${tableKey(planned.table)}, which the migrations let anon or authenticated insert or update: a user could set their own attribute`,
411
- fix: `revoke insert, update on ${tableKey(planned.table)} from anon, authenticated, and grant column-level update only on columns that are not attributes; the generated hook migration refuses to install otherwise`
412
- });
413
- }
414
- return [...findings, ...memberships];
415
- }
416
- //#endregion
417
- //#region src/cli/supabase-config.ts
418
- const SUPABASE_CONFIG = "supabase/config.toml";
419
- function table(value) {
420
- if (value === null || typeof value !== "object" || Array.isArray(value)) return;
421
- return value;
422
- }
423
- function strings(value) {
424
- return Array.isArray(value) ? value.filter((item) => typeof item === "string") : void 0;
425
- }
426
- /** `supabase/config.toml`, parsed; `undefined` when the project has none. */
427
- function readSupabaseConfig(cwd) {
428
- const file = join(cwd, SUPABASE_CONFIG);
429
- if (!existsSync(file)) return;
430
- let root;
431
- try {
432
- root = parse(readFileSync(file, "utf8"));
433
- } catch (error) {
434
- return {
435
- ok: false,
436
- error: describeError(error)
437
- };
438
- }
439
- const expiry = table(root["auth"])?.["jwt_expiry"];
440
- const paths = table(table(root["db"])?.["migrations"])?.["schema_paths"];
441
- const schemaPaths = strings(paths);
442
- const apiSchemas = strings(table(root["api"])?.["schemas"]);
443
- const pgDelta = table(table(root["experimental"])?.["pgdelta"]);
444
- const schemaPath = pgDelta?.["declarative_schema_path"];
445
- return {
446
- ok: true,
447
- config: {
448
- ...typeof expiry === "number" ? { jwtExpiry: expiry } : {},
449
- ...schemaPaths === void 0 ? {} : { schemaPaths },
450
- ...apiSchemas === void 0 ? {} : { apiSchemas },
451
- ...pgDelta?.["enabled"] === true ? { pgDelta: { schemaDir: posix.join("supabase", typeof schemaPath === "string" ? schemaPath : "schemas").replace(/\/$/u, "") } } : {}
452
- }
453
- };
454
- }
455
- /** The parsed config, or `{}` when it is missing or does not parse (PD045 reports that). */
456
- function supabaseConfig(cwd) {
457
- const read = readSupabaseConfig(cwd);
458
- return read?.ok === true ? read.config : {};
459
- }
460
- /** PD045: a `supabase/config.toml` the CLI cannot parse, so every check that reads it falls back to defaults. */
461
- function pd045(cwd) {
462
- const read = readSupabaseConfig(cwd);
463
- if (read === void 0 || read.ok) return [];
464
- return [{
465
- code: "PD045",
466
- severity: "warning",
467
- message: `${SUPABASE_CONFIG} does not parse: ${read.error.replace(/\n[\s\S]*/u, "")}`,
468
- fix: `fix the TOML syntax in ${SUPABASE_CONFIG}; until then doctor assumes Supabase's defaults for jwt_expiry and schema_paths`
469
- }];
470
- }
471
- //#endregion
472
- export { pd006 as a, pd022 as c, group as d, splitUndiffed as f, tableKey as h, pd005 as i, pd028 as l, decidingColumns as m, supabaseConfig as n, pd009 as o, sqlStatements as p, MIGRATION_DIRS as r, pd012 as s, pd045 as t, pd040 as u };
@@ -1,2 +0,0 @@
1
- import { i as runSupabase } from "./supabase-hook-ntETYCQu.js";
2
- export { runSupabase };
@@ -1,83 +0,0 @@
1
- import { i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BeaGNj_o.js";
2
- import { defineCommand } from "citty";
3
- //#region src/cli/commands/supabase.ts
4
- function supabase(ctx) {
5
- return defineCommand({
6
- meta: {
7
- name: "supabase",
8
- description: COMMAND_DESCRIPTIONS.supabase
9
- },
10
- args: {
11
- ...globalArgs,
12
- area: {
13
- type: "positional",
14
- required: false,
15
- description: "hook or inspect"
16
- },
17
- verb: {
18
- type: "positional",
19
- required: false,
20
- description: "hook: generate"
21
- },
22
- out: {
23
- type: "string",
24
- description: "File to write; a bare --out on inspect writes permdock.manifest.json",
25
- valueHint: "file"
26
- },
27
- check: {
28
- type: "boolean",
29
- description: "Exit 1 when the file on disk is stale; write nothing"
30
- },
31
- db: {
32
- type: "string",
33
- description: "Postgres connection string",
34
- valueHint: "url"
35
- },
36
- "active-from": {
37
- type: "string",
38
- description: "Where the hook reads the active tenant",
39
- valueHint: "source"
40
- },
41
- budget: {
42
- type: "string",
43
- description: "Byte budget for the memberships claim",
44
- valueHint: "bytes"
45
- },
46
- schema: {
47
- type: "string",
48
- description: "Schema for the hook function",
49
- valueHint: "name"
50
- },
51
- "grants-out": {
52
- type: "string",
53
- description: "File for the privileges db diff drops",
54
- valueHint: "file"
55
- }
56
- },
57
- async run({ args: parsed }) {
58
- const out = parsed.out === "" ? true : stringArg(parsed.out);
59
- const db = stringArg(parsed.db);
60
- const activeFrom = stringArg(parsed["active-from"]);
61
- const budget = stringArg(parsed.budget);
62
- const schema = stringArg(parsed.schema);
63
- const grantsOut = stringArg(parsed["grants-out"]);
64
- const { runSupabase } = await import("./supabase-hook-gd3s8bxB.js");
65
- ctx.report(await runSupabase({
66
- cwd: ctx.cwd,
67
- config: ctx.config,
68
- rest: parsed._,
69
- check: parsed.check === true,
70
- json: ctx.json,
71
- io: ctx.io,
72
- ...out === void 0 ? {} : { out },
73
- ...db === void 0 ? {} : { db },
74
- ...activeFrom === void 0 ? {} : { activeFrom },
75
- ...budget === void 0 ? {} : { budget },
76
- ...schema === void 0 ? {} : { schema },
77
- ...grantsOut === void 0 ? {} : { grantsOut }
78
- }));
79
- }
80
- });
81
- }
82
- //#endregion
83
- export { supabase };
@@ -1,10 +0,0 @@
1
- //#region src/core/thenable.ts
2
- function isThenable(value) {
3
- return value !== null && typeof value === "object" && "then" in value && typeof value.then === "function";
4
- }
5
- /** Settles a promise nobody awaits, so its rejection is not reported as unhandled. */
6
- function ignoreRejection(value) {
7
- Promise.resolve(value).then(void 0, () => void 0);
8
- }
9
- //#endregion
10
- export { isThenable as n, ignoreRejection as t };
@@ -1,48 +0,0 @@
1
- import { Ft as TokenVerifier, Tt as Snapshot, Yn as Decision } from "./policy-IB6yxpC3.js";
2
- import { f as Permission } from "./permissions-DttnqqxC.js";
3
- import { ReactNode } from "react";
4
- //#region src/react/types.d.ts
5
- type PermDockProviderProps = ({
6
- readonly snapshot: Snapshot | string;
7
- readonly snapshotPromise?: never;
8
- } | {
9
- /**
10
- * An unawaited snapshot from a Server Component. Hooks never suspend on it: until it
11
- * resolves they deny with `status: 'pending'`, then re-render. A rejection fails closed
12
- * (`server-only`). Set `suspend` to suspend readers through `use()` instead.
13
- */
14
- readonly snapshotPromise: PromiseLike<Snapshot | string>;
15
- readonly snapshot?: never;
16
- }) & {
17
- /**
18
- * With `snapshotPromise`: `true` suspends every hook to the nearest Suspense boundary until it
19
- * resolves, and a rejection reaches the nearest error boundary. Defaults to `false`.
20
- */
21
- readonly suspend?: boolean;
22
- /**
23
- * The AuthZEN evaluations endpoint for checks the snapshot cannot answer. `false` never
24
- * fetches: those checks answer `denied` with reason `server-only`.
25
- */
26
- readonly endpoint?: string | false;
27
- /** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
28
- readonly snapshotUrl?: string;
29
- readonly approvals?: string;
30
- readonly tenant?: string;
31
- readonly fetch?: typeof fetch;
32
- readonly headers?: Readonly<Record<string, string>>;
33
- readonly maxAge?: number;
34
- readonly verifier?: TokenVerifier;
35
- readonly children: ReactNode;
36
- };
37
- type ProtectedProps = {
38
- readonly permission: Permission;
39
- readonly data?: unknown;
40
- readonly tenant?: string;
41
- readonly pending?: ReactNode;
42
- readonly fallback?: ReactNode | ((decision: Decision) => ReactNode);
43
- readonly children: ReactNode | ((decision: Extract<Decision, {
44
- readonly outcome: "granted";
45
- }>) => ReactNode);
46
- };
47
- //#endregion
48
- export { ProtectedProps as n, PermDockProviderProps as t };
@@ -1,9 +0,0 @@
1
- import { f as Permission } from "./permissions-DttnqqxC.js";
2
- //#region src/agent/types.d.ts
3
- type ToolBinding = {
4
- readonly permission: Permission;
5
- readonly data?: (args: unknown) => unknown;
6
- };
7
- type ToolMap = Readonly<Record<string, ToolBinding>>;
8
- //#endregion
9
- export { ToolMap as t };