permdock 0.1.0 → 0.2.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 (349) hide show
  1. package/README.md +106 -47
  2. package/dist/a2a/index.d.ts +7 -16
  3. package/dist/a2a/index.js +59 -98
  4. package/dist/adapter-context-mlWsVGGg.js +23 -0
  5. package/dist/ai-sdk/index.d.ts +37 -16
  6. package/dist/ai-sdk/index.js +30 -13
  7. package/dist/approvals/index.d.ts +3 -3
  8. package/dist/approvals/index.js +5 -4
  9. package/dist/{approvals-DaxY-Bdg.js → approvals-DbYAuNkG.js} +17 -11
  10. package/dist/approvers-DT4AVyIg.js +52 -0
  11. package/dist/{arazzo-CTeVuXr5.js → arazzo-BAgw9ap6.js} +2 -2
  12. package/dist/{arazzo-aoTkqYsJ.js → arazzo-cmvX2jDe.js} +2 -2
  13. package/dist/authzen/index.d.ts +4 -13
  14. package/dist/authzen/index.js +16 -50
  15. package/dist/better-auth/index.d.ts +20 -3
  16. package/dist/better-auth/index.js +27 -7
  17. package/dist/better-supabase/index.d.ts +206 -0
  18. package/dist/better-supabase/index.js +620 -0
  19. package/dist/bind-CVy3Espv.d.ts +25 -0
  20. package/dist/bind-VnYn2HKq.js +97 -0
  21. package/dist/boundary-BM8a_P6E.js +13 -0
  22. package/dist/boundary-BmHxVH1J.d.ts +15 -0
  23. package/dist/canonical-json-DemiK4Vp.js +26 -0
  24. package/dist/{capability-B68OFnZx.js → capability-4qPdO9gk.js} +7 -5
  25. package/dist/{capability-BDG_nkxt.d.ts → capability-Dq43tT1u.d.ts} +2 -2
  26. package/dist/catalog/index.d.ts +1 -1
  27. package/dist/catalog/index.js +1 -1
  28. package/dist/catalog-BjZSovXQ.js +2 -0
  29. package/dist/{catalog-doc-BSo_Q_-6.js → catalog-doc-Dsc9y7sd.js} +23 -12
  30. package/dist/{catalog-B0E6bggc.js → catalog-h2tlKFkq.js} +2 -2
  31. package/dist/{catalog-H-vFGwWK.js → catalog-z8q6bi_r.js} +4 -4
  32. package/dist/claude-agent/index.d.ts +5 -14
  33. package/dist/claude-agent/index.js +4 -10
  34. package/dist/clerk/index.d.ts +12 -3
  35. package/dist/clerk/index.js +26 -5
  36. package/dist/cli/bin.js +1 -1
  37. package/dist/cli/index.d.ts +3 -3
  38. package/dist/cli/index.js +2 -2
  39. package/dist/clients-C7zLFuWT.d.ts +12 -0
  40. package/dist/clients-DjU5ABMy.js +23 -0
  41. package/dist/cloud/index.d.ts +4 -5
  42. package/dist/cloud/index.js +20 -6
  43. package/dist/{cloud-BNQTrmrr.js → cloud-BGhHS-lY.js} +2 -2
  44. package/dist/{cloud-Cuxr6Czw.js → cloud-Bo3e9Ak3.js} +7 -6
  45. package/dist/{collect-O-tOtbnk.js → collect-DDDv_ESs.js} +194 -42
  46. package/dist/collect-DLlujdHC.js +83 -0
  47. package/dist/collect-rG2IQ3t0.js +2 -0
  48. package/dist/{commands-BMh_Etm2.js → commands-DWOrSQic.js} +16 -12
  49. package/dist/compile/index.d.ts +3 -0
  50. package/dist/compile/index.js +2 -0
  51. package/dist/{compile-D22iwvuV.js → compile-Ba4blROR.js} +85 -30
  52. package/dist/compile-CNnl6uIt.d.ts +94 -0
  53. package/dist/config-BJiM-xAm.js +157 -0
  54. package/dist/config-Bn00Z3ks.js +36 -0
  55. package/dist/config-report-Dw_JcUqT.js +44 -0
  56. package/dist/{connection-JvqwHODC.js → connection-CU8MQxRi.js} +1 -1
  57. package/dist/{context-CKEAabd7.js → context-Ttp0ekMT.js} +36 -27
  58. package/dist/convex/index.d.ts +9 -4
  59. package/dist/convex/index.js +14 -4
  60. package/dist/create-BWyx3jua.d.ts +245 -0
  61. package/dist/create-CPhDL6qx.js +253 -0
  62. package/dist/{credential-B_rkUNlY.js → credential-8P81ff4u.js} +26 -46
  63. package/dist/delegation-D8pUEuce.js +103 -0
  64. package/dist/{describe-Bt1YD5uS.js → describe-B_gVZEVi.js} +10 -15
  65. package/dist/{describe-DernyItf.d.ts → describe-PdoqESvg.d.ts} +9 -10
  66. package/dist/{diff-x5Il8LVa.js → diff-B8Tunc3o.js} +44 -11
  67. package/dist/{diff-BUzf5Poi.js → diff-CzqLxZ77.js} +2 -2
  68. package/dist/doctor-WpvG6p4k.js +1194 -0
  69. package/dist/doctor-collect-ByfYlNv1.js +664 -0
  70. package/dist/{doctor-Bqo6FwUa.js → doctor-rOr-4ZfS.js} +2 -2
  71. package/dist/drizzle/index.d.ts +4 -3
  72. package/dist/drizzle/index.js +3 -3
  73. package/dist/elysia/index.d.ts +6 -28
  74. package/dist/elysia/index.js +16 -60
  75. package/dist/{errors-DSMnAVNa.js → errors-CWfoNg9N.js} +8 -4
  76. package/dist/{errors-Iy71s7Oj.js → errors-Cz5zn0mW.js} +17 -71
  77. package/dist/{errors-DbZ1YOnb.d.ts → errors-DAqevpNk.d.ts} +8 -21
  78. package/dist/{errors-m3u9TmDu.js → errors-DRnGZHzF.js} +4 -1
  79. package/dist/evaluation-items-CfCCejQd.js +40 -0
  80. package/dist/{evaluations-DsAU9ppl.js → evaluations-tz6D9A2G.js} +28 -46
  81. package/dist/eve/index.d.ts +6 -15
  82. package/dist/eve/index.js +7 -12
  83. package/dist/expiry-BoBJ8Tvc.js +7 -0
  84. package/dist/express/index.d.ts +6 -29
  85. package/dist/express/index.js +28 -58
  86. package/dist/fastify/index.d.ts +6 -29
  87. package/dist/fastify/index.js +16 -65
  88. package/dist/fields-BMl1RxoX.js +26 -0
  89. package/dist/{files-B_wAGYmt.js → files-DWUN9PzI.js} +5 -1
  90. package/dist/{fixtures-Cvaw0gDG.js → fixtures-ht28Cplr.js} +5 -2
  91. package/dist/{freeze-y1_jQL4v.js → freeze-CrU8nQeX.js} +31 -2
  92. package/dist/{from-snapshot-BMGnhmgv.js → from-snapshot-C3sHpZNS.js} +65 -48
  93. package/dist/{grantee-Bv04_Vzf.js → grantee-Cv5Sogfv.js} +88 -7
  94. package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
  95. package/dist/{headers-B5RRv3Xm.js → headers-BZSDieNT.js} +1 -1
  96. package/dist/{headers-C8SHQccD.d.ts → headers-Cf-zWvsO.d.ts} +1 -1
  97. package/dist/helpers-H_KARDVC.js +421 -0
  98. package/dist/hono/index.d.ts +6 -28
  99. package/dist/hono/index.js +11 -43
  100. package/dist/{hosted-BwKQ1BTA.js → hosted-DJQw46hn.js} +6 -5
  101. package/dist/{http-GgVApX1k.js → http-BIhmLfCc.js} +4 -20
  102. package/dist/http-SO7qGttf.js +44 -0
  103. package/dist/ids-DC4V4CFu.js +18 -0
  104. package/dist/{index-LF_hS-yn.d.ts → index-A0YNL8jZ.d.ts} +1 -1
  105. package/dist/index-CtE07CBF.d.ts +6 -0
  106. package/dist/{index-xIxJLwOQ.d.ts → index-D3vbkoSI.d.ts} +75 -7
  107. package/dist/{index-CltcQ4Bf.d.ts → index-D6_cSa1z.d.ts} +68 -5
  108. package/dist/index.d.ts +14 -9
  109. package/dist/index.js +22 -17
  110. package/dist/instance-options-BK_rNOSC.d.ts +11 -0
  111. package/dist/instance-options-Dhhcnm3y.js +22 -0
  112. package/dist/{parse-DPfIvFMU.js → json-schema-BsAflUGW.js} +28 -57
  113. package/dist/jwt/index.d.ts +10 -6
  114. package/dist/jwt/index.js +32 -13
  115. package/dist/kernel-GSQnMz3O.js +208 -0
  116. package/dist/kysely/index.d.ts +4 -3
  117. package/dist/kysely/index.js +3 -3
  118. package/dist/live-options-H2eG8dfJ.js +60 -0
  119. package/dist/{load-BZ24CpZP.js → load-DhWEB9P1.js} +16 -10
  120. package/dist/load-DwJUafYN.js +2 -0
  121. package/dist/manifest-iaoBXHKc.js +783 -0
  122. package/dist/manifest-uDS9y5de.d.ts +206 -0
  123. package/dist/{map-DowSO96j.js → map-AcxK9o_D.js} +4 -15
  124. package/dist/{map-claims-B_6I1Rn-.js → map-claims-Z4QZOiFF.js} +13 -4
  125. package/dist/map-error-pgUWNNtG.js +23 -0
  126. package/dist/may-use-DndQ5tQ-.js +77 -0
  127. package/dist/mcp/index.d.ts +54 -22
  128. package/dist/mcp/index.js +218 -178
  129. package/dist/nest/index.d.ts +26 -31
  130. package/dist/nest/index.js +75 -84
  131. package/dist/next/client.d.ts +7 -8
  132. package/dist/next/client.js +11 -9
  133. package/dist/next/index.d.ts +30 -47
  134. package/dist/next/index.js +45 -60
  135. package/dist/next/plugin.d.ts +1 -1
  136. package/dist/next/plugin.js +32 -1
  137. package/dist/node/index.d.ts +9 -28
  138. package/dist/node/index.js +11 -43
  139. package/dist/openai/index.d.ts +6 -15
  140. package/dist/openai/index.js +7 -20
  141. package/dist/openapi/index.d.ts +87 -4
  142. package/dist/openapi/index.js +3 -3
  143. package/dist/{openapi-CwePaF7C.js → openapi-Bbg4wGVL.js} +3 -3
  144. package/dist/{openapi-DcqM8nU7.js → openapi-BqRBvAng.js} +237 -5
  145. package/dist/{openapi-DWD0Uc_4.js → openapi-CqqEbHsL.js} +5 -5
  146. package/dist/{openapi-import-BWRUNNeW.js → openapi-import-cmwetbzw.js} +1 -1
  147. package/dist/{openapi-schema-D8j_T9tO.js → openapi-schema--ARjyfQr.js} +2 -2
  148. package/dist/orpc/index.d.ts +15 -28
  149. package/dist/orpc/index.js +74 -117
  150. package/dist/otel/index.d.ts +2 -2
  151. package/dist/parse-BuyjxhZV.js +53 -0
  152. package/dist/parse-local-manifest-BkGQNzAh.d.ts +10 -0
  153. package/dist/parse-local-manifest-BrMozJCo.js +36 -0
  154. package/dist/pdp/index.d.ts +2 -2
  155. package/dist/pdp/index.js +14 -127
  156. package/dist/{permdock-yoZ7EjxX.js → permdock-CzqXjCpU.js} +641 -126
  157. package/dist/{permissions-B8vCg_bI.d.ts → permissions-CDgvKG5L.d.ts} +2 -2
  158. package/dist/{permissions-CofRqesP.js → permissions-CpZrivYv.js} +3 -3
  159. package/dist/{permissions-DC7GROPA.js → permissions-DVoF6dMt.js} +77 -15
  160. package/dist/{permissions-B4apnahQ.d.ts → permissions-DttnqqxC.d.ts} +34 -5
  161. package/dist/{pins-CqE1jZuF.js → pins-8ILTftC9.js} +2 -2
  162. package/dist/{policy-CInmNGkM.d.ts → policy-CFZAr_Al.d.ts} +330 -37
  163. package/dist/{policy-Cq2fB8Q5.d.ts → policy-D8UFyERw.d.ts} +2 -2
  164. package/dist/{policy-ANp36PnI.js → policy-xyWg7QdR.js} +173 -22
  165. package/dist/powersync-A8x_Yyvh.js +2 -0
  166. package/dist/powersync-C7kLglqX.js +540 -0
  167. package/dist/powersync-yW1UUFzp.js +62 -0
  168. package/dist/prisma/index.d.ts +3 -2
  169. package/dist/prisma/index.js +45 -20
  170. package/dist/{problem-Cgp9-KZA.js → problem-B43ztKIm.js} +74 -109
  171. package/dist/problem-details-CkL50EEf.d.ts +7 -0
  172. package/dist/problem-details-_AMOYz-w.js +144 -0
  173. package/dist/{protected-BuPAycJT.d.ts → protected-CNsMzrVd.d.ts} +5 -4
  174. package/dist/protected-Cs6kTaHo.js +100 -0
  175. package/dist/protected-bZs6rbT1.d.ts +40 -0
  176. package/dist/{provider-wTAUda2v.d.ts → provider-Cjr62YMV.d.ts} +1 -1
  177. package/dist/provider-DLzpb2Xz.js +52 -0
  178. package/dist/provider-store-DNyC1y48.js +43 -0
  179. package/dist/react/index.d.ts +7 -5
  180. package/dist/react/index.js +5 -4
  181. package/dist/react/provider-client.d.ts +1 -1
  182. package/dist/react/provider-client.js +1 -1
  183. package/dist/react-native/index.d.ts +166 -10
  184. package/dist/react-native/index.js +607 -85
  185. package/dist/{refs-ChLSxbST.js → refs-KYb4ntaz.js} +4 -3
  186. package/dist/{relations-r4soIFZB.js → relations-cjOL01hZ.js} +110 -31
  187. package/dist/replay-BsOyTrdV.js +28 -0
  188. package/dist/replay-sqBGMnNs.d.ts +5 -0
  189. package/dist/resource-ref-CaS9yVPi.js +20 -0
  190. package/dist/revocations-Bhr0aMIC.js +27 -0
  191. package/dist/rls-BMNydpHk.js +2521 -0
  192. package/dist/{rls-BOFU3chG.js → rls-CEvs64Kj.js} +8 -3
  193. package/dist/rls-fields-BMasREhR.js +3502 -0
  194. package/dist/{rls-graph-DxQ39PJj.js → rls-graph-pc9fuXYm.js} +100 -36
  195. package/dist/{rls-import-CXV6LBlS.js → rls-import-D8F7j35Q.js} +7 -6
  196. package/dist/{rls-migrate-DrFPbf8p.js → rls-migrate-7wikfrVI.js} +6 -5
  197. package/dist/rls-ownership-B5Lkq62W.js +843 -0
  198. package/dist/rls-shared-aOQ4hGTO.js +493 -0
  199. package/dist/rls-verify-D8B7dOTh.js +745 -0
  200. package/dist/{row-check-BajTgQZ-.d.ts → row-check-Dt35czLy.d.ts} +12 -15
  201. package/dist/rpc-DOK54_CS.js +89 -0
  202. package/dist/{run-CJ6UvS3a.js → run-YXCJDNYk.js} +31 -12
  203. package/dist/runtime-CB8gQFvS.js +11 -0
  204. package/dist/{saas-BRrZzJkM.js → saas-Bj_FFkjN.js} +17 -7
  205. package/dist/{schema-P8yoma__.js → schema-D3MnDMxa.js} +8 -4
  206. package/dist/scim/index.d.ts +1 -1
  207. package/dist/scim/index.js +1 -1
  208. package/dist/{scim-9NFa0XVZ.js → scim-BFGBBAqR.js} +1 -1
  209. package/dist/{scopes-cKVp_WTw.js → scopes-CVdPrWN-.js} +35 -8
  210. package/dist/server/index.d.ts +22 -11
  211. package/dist/server/index.js +11 -8
  212. package/dist/{credentials-BgRX3WEg.js → server-DlZ28Oz5.js} +1 -1
  213. package/dist/shared-DRu8VFVM.js +123 -0
  214. package/dist/{sink-Cfr9-7YC.d.ts → sink-Gs6TTVa-.d.ts} +1 -1
  215. package/dist/skills-Biq5uup3.js +192 -0
  216. package/dist/{skills-C_lpV4Jx.js → skills-JaymNCdK.js} +10 -4
  217. package/dist/{snapshot-DE8dE_hz.js → snapshot-Enxd0n-s.js} +138 -214
  218. package/dist/snapshot-cache-D6jLelln.js +44 -0
  219. package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
  220. package/dist/solid/index.d.ts +39 -9
  221. package/dist/solid/index.js +76 -85
  222. package/dist/sources-B0UvrJ21.js +534 -0
  223. package/dist/sources-BcJgw0lt.d.ts +192 -0
  224. package/dist/{sql-Bll1d7y0.js → sql-xdg5f4Fi.js} +6 -1
  225. package/dist/{src-CTNT-PBW.js → src-CSbUiozF.js} +149 -11
  226. package/dist/ssf/index.d.ts +3 -2
  227. package/dist/ssf/index.js +3 -29
  228. package/dist/store-DMAWwAJV.js +371 -0
  229. package/dist/{store-Bq90395i.d.ts → store-D_pjn91-.d.ts} +13 -4
  230. package/dist/store-options-yO0V6gRn.js +716 -0
  231. package/dist/{stores-CkG2HrSg.js → stores-4_sqiOA1.js} +10 -63
  232. package/dist/{stores-CvOnu_2T.d.ts → stores-DVR5NHLE.d.ts} +20 -9
  233. package/dist/{stream-Q_xlB6Ko.js → stream-DDpvynSB.js} +16 -2
  234. package/dist/{stream-BhMfZOwr.d.ts → stream-DlvG2hs-.d.ts} +2 -2
  235. package/dist/subject-settings-BwBmCdTR.js +128 -0
  236. package/dist/supabase/index.d.ts +122 -6
  237. package/dist/supabase/index.js +4 -3
  238. package/dist/supabase/middleware.d.ts +32 -27
  239. package/dist/supabase/middleware.js +56 -22
  240. package/dist/{supabase-D8UlBA7Z.js → supabase-CwafwxxF.js} +3 -3
  241. package/dist/{supabase-DTxGtYdi.js → supabase-DTBaC20O.js} +345 -367
  242. package/dist/supabase-config-Bs44dare.js +472 -0
  243. package/dist/{supabase-hook-D_OqGb_V.js → supabase-hook-BuxLQLpU.js} +994 -708
  244. package/dist/supabase-hook-D5qVd_D8.js +2 -0
  245. package/dist/supautils-DYZnzRWV.js +91 -0
  246. package/dist/svelte/PermissionBoundary.svelte +37 -0
  247. package/dist/svelte/Protected.svelte +8 -2
  248. package/dist/svelte/index.d.ts +9 -6
  249. package/dist/svelte/index.js +61 -7
  250. package/dist/svelte/runtime.d.ts +4 -3
  251. package/dist/svelte/runtime.js +4 -3
  252. package/dist/svelte/source.d.ts +9 -6
  253. package/dist/svelte/source.js +7 -4
  254. package/dist/terminal/index.d.ts +6 -14
  255. package/dist/terminal/index.js +44 -32
  256. package/dist/testing/index.d.ts +105 -16
  257. package/dist/testing/index.js +504 -40
  258. package/dist/testing/saas/index.d.ts +4 -4
  259. package/dist/testing/saas/index.js +2 -2
  260. package/dist/testing/saas/permissions.d.ts +1 -1
  261. package/dist/testing/saas/permissions.js +1 -1
  262. package/dist/token-CIWxJOCh.js +50 -0
  263. package/dist/trpc/index.d.ts +7 -26
  264. package/dist/trpc/index.js +17 -100
  265. package/dist/types-9AWO9EGt.d.ts +197 -0
  266. package/dist/{types-D6Z6-rKJ.d.ts → types-BPxgszlT.d.ts} +260 -22
  267. package/dist/{types-BvBk1wgn.d.ts → types-BVyImy5I.d.ts} +5 -3
  268. package/dist/{types-CxquUByI.d.ts → types-Bvc4oWT6.d.ts} +1 -1
  269. package/dist/types-C3s9xVJG.d.ts +48 -0
  270. package/dist/{types-BBK-exvJ.d.ts → types-Dnemwd77.d.ts} +7 -1
  271. package/dist/types-kxznc7cn.d.ts +52 -0
  272. package/dist/{types-B8w5PFtS.d.ts → types-vKyAMtcX.d.ts} +17 -1
  273. package/dist/{types-B9dmiiab.d.ts → types-vNSDF7Dq.d.ts} +1 -1
  274. package/dist/{sources-DOpW5Ila.d.ts → types-yF5LmQVD.d.ts} +86 -127
  275. package/dist/unplugin/index.d.ts +1 -1
  276. package/dist/unplugin/index.js +10 -9
  277. package/dist/{usage-1ozMubLY.js → usage-D07N9QJ3.js} +2 -2
  278. package/dist/usage-D82l1CwK.js +2 -0
  279. package/dist/{usage-CUnK6Ou9.js → usage-DG1oeCca.js} +225 -62
  280. package/dist/validation-error-CnjZ4t92.js +33 -0
  281. package/dist/validation-error-CtF23SrC.d.ts +26 -0
  282. package/dist/{validity-D0uRmJKJ.js → validity-uOp8UpYn.js} +57 -36
  283. package/dist/{verifier-B90agnhl.js → verifier-BxBo6I44.js} +10 -5
  284. package/dist/version-BvacVTZR.js +17 -0
  285. package/dist/views-Soe7bGSC.js +95 -0
  286. package/dist/{vocabulary-Dk0fs-Jk.d.ts → vocabulary-DA8a8zif.d.ts} +1 -1
  287. package/dist/vue/index.d.ts +35 -13
  288. package/dist/vue/index.js +86 -93
  289. package/dist/watch-Etoa_Mvr.js +2 -0
  290. package/dist/watch-UihESpsJ.js +128 -0
  291. package/dist/webmcp/index.d.ts +2 -2
  292. package/dist/webmcp/index.js +7 -13
  293. package/package.json +62 -36
  294. package/schemas/approval-request-v1.json +175 -0
  295. package/schemas/catalog-v1.json +29 -1
  296. package/schemas/supabase-claims-v1.json +6 -1
  297. package/schemas/supabase-manifest-v1.json +150 -6
  298. package/skills/permdock/SKILL.md +7 -7
  299. package/skills/permdock-agents/SKILL.md +5 -5
  300. package/skills/permdock-agents/references/runtimes.md +12 -10
  301. package/skills/permdock-approvals/SKILL.md +4 -4
  302. package/skills/permdock-approvals/references/stores-and-resume.md +15 -4
  303. package/skills/permdock-audit/SKILL.md +3 -3
  304. package/skills/permdock-credentials/SKILL.md +4 -4
  305. package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
  306. package/skills/permdock-data/SKILL.md +4 -4
  307. package/skills/permdock-data/references/queries-and-rls.md +14 -6
  308. package/skills/permdock-data/references/relationships.md +5 -3
  309. package/skills/permdock-tenancy/SKILL.md +9 -6
  310. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +14 -8
  311. package/skills/permdock-wire/SKILL.md +4 -4
  312. package/skills/permdock-wire/references/adapters.md +42 -30
  313. package/skills/permdock-wire/references/policy-options.md +5 -3
  314. package/dist/approvers-aH0PJkmf.js +0 -20
  315. package/dist/catalog-idsHc0vo.js +0 -2
  316. package/dist/collect-B7_TIfmg.js +0 -49
  317. package/dist/collect-fRPAQIWb.js +0 -2
  318. package/dist/compile-CQbvyIBr.d.ts +0 -30
  319. package/dist/config-BPYmjTOp.js +0 -26
  320. package/dist/context-gtAwAILx.js +0 -6
  321. package/dist/create-BKF3dgFk.d.ts +0 -162
  322. package/dist/create-CSkhDU9T.js +0 -222
  323. package/dist/doctor-BGle8Gqi.js +0 -1314
  324. package/dist/helpers-DnSOrhB9.js +0 -682
  325. package/dist/index-fG6NSXlc.d.ts +0 -9
  326. package/dist/kernel-YOGCWNLf.js +0 -211
  327. package/dist/load-QOOm1z70.js +0 -2
  328. package/dist/manifest-DDQbC6K0.d.ts +0 -118
  329. package/dist/map-error-RJ3ZsUyA.js +0 -16
  330. package/dist/may-use-CnFEjVEp.js +0 -37
  331. package/dist/pg-4GJWDUxG.js +0 -953
  332. package/dist/plugin-4gr7IxFJ.js +0 -65
  333. package/dist/protected-B4K3BKoX.js +0 -138
  334. package/dist/protected-wY7nXhY9.d.ts +0 -23
  335. package/dist/provider-_wx46HpB.js +0 -48
  336. package/dist/rls-CJVja9Ww.js +0 -2119
  337. package/dist/rls-helpers-BxRuif0l.js +0 -1346
  338. package/dist/runtime-DP9ttFh1.js +0 -27
  339. package/dist/skills-Dx3QLnMY.js +0 -110
  340. package/dist/source-DoBBYJi2.js +0 -6
  341. package/dist/sources-DVHM3Mwq.js +0 -284
  342. package/dist/store-C6hFW6ta.js +0 -508
  343. package/dist/subject-settings-xt7V845g.js +0 -82
  344. package/dist/supabase-hook-DW-xP4hU.js +0 -2
  345. package/dist/types-DbWdEfcm.d.ts +0 -87
  346. package/dist/types-bva3i4Gf.d.ts +0 -98
  347. package/dist/types-i4BAOvdb.d.ts +0 -97
  348. package/dist/usage-PyEor6GA.js +0 -2
  349. package/dist/version-CnSh33Fj.js +0 -16
@@ -1,25 +1,35 @@
1
- import { d as isFieldRelation, h as isSelfParented, p as isPrincipalRelation, r as expandRelation, u as isEdgeRelation } from "./permissions-DC7GROPA.js";
2
- import { u as scopeList } from "./scopes-cKVp_WTw.js";
3
- import { f as relationCondition, s as flattenGrantee } from "./grantee-Bv04_Vzf.js";
4
- import { c as relationArmSql } from "./compile-D22iwvuV.js";
5
- import "./sources-DVHM3Mwq.js";
6
- import { F as qualifiedTable, I as quoteIdent, L as quoteLiteral, O as linkHelper, R as quoteTable, T as graphSqlText, g as activeUserSql, m as CLOSURE, t as HELPERS, w as graphHelper } from "./rls-helpers-BxRuif0l.js";
1
+ import { S as restrictedFor, d as isEdgeRelation, f as isFieldRelation, g as isSelfParented, l as groupEntries, m as isPrincipalRelation, r as expandRelation } from "./permissions-DVoF6dMt.js";
2
+ import { d as scopeList } from "./scopes-CVdPrWN-.js";
3
+ import { l as inheritCondition, m as relationCondition, s as flattenGrantee } from "./grantee-Cv5Sogfv.js";
4
+ import { c as relationArmSql, u as restrictedRowsSql } from "./compile-Ba4blROR.js";
5
+ import "./sources-B0UvrJ21.js";
6
+ import { C as graphHelper, G as quoteLiteral, K as quoteTable, M as linkHelper, T as graphSqlText, U as qualifiedTable, W as quoteIdent, g as activeUserSql, n as HELPERS, q as restrictedHelper, u as CLOSURE, w as graphSqlName } from "./rls-shared-aOQ4hGTO.js";
7
7
  //#region src/cli/helper-calls.ts
8
8
  /**
9
- * Tables whose policies other packages write (better-supabase `defineBucket`
10
- * and `defineTopic` in `permdock` mode) by calling the SQL helpers directly.
9
+ * Tables whose policies other packages write by calling the SQL helpers
10
+ * directly (storage buckets and realtime topics).
11
11
  */
12
12
  const HELPER_TABLES = ["storage.objects", "realtime.messages"];
13
- const HELPER_CALL = new RegExp(String.raw`\b(?:${HELPERS.has}|permitted_[a-z][a-z0-9_]*_ids)\s*\(\s*'((?:[^']|'')+)'`, "giu");
14
- const ANY_HELPER = new RegExp(String.raw`\b(?:${HELPERS.has}|permitted_[a-z][a-z0-9_]*_ids|member_[a-z][a-z0-9_]*_ids)\s*\(`, "iu");
13
+ const HELPER_CALL = new RegExp(String.raw`\b(${HELPERS.has}(?:_permission)?|permitted_[a-z][a-z0-9_]*_ids(?:_by_permission)?)\s*\(\s*'((?:[^']|'')+)'(\s*,\s*(false\b)?)?`, "giu");
14
+ const ANY_HELPER = new RegExp(String.raw`\b(?:${HELPERS.has}(?:_permission)?(?:_for)?|permitted_[a-z][a-z0-9_]*_ids(?:_by_permission)?(?:_for)?|member_[a-z][a-z0-9_]*_ids(?:_for)?)\s*\(`, "iu");
15
15
  /** Whether a policy expression calls any generated helper, the key-less `member_<scope>_ids` included. */
16
16
  function callsHelper(sql) {
17
17
  return ANY_HELPER.test(sql);
18
18
  }
19
- /** The permission keys a policy expression passes to `permdock_has` or `permitted_<scope>_ids`, `#n` stripped. */
20
- function helperCallKeys(sql) {
19
+ /**
20
+ * The permission keys a policy expression passes to `permdock_has`,
21
+ * `permitted_<scope>_ids` or their permission-key forms, `#n` stripped. With
22
+ * `blind`, only the calls that ignore row conditions: the grant-key forms,
23
+ * and a permission-key form asked for conditioned allows. A plain
24
+ * `permdock_has_permission(key)` or `permitted_<scope>_ids_by_permission(key)`
25
+ * counts only allows without a row condition, so it never grants more than
26
+ * the application does.
27
+ */
28
+ function helperCallKeys(sql, blind = false) {
21
29
  const keys = /* @__PURE__ */ new Set();
22
- for (const [, literal = ""] of sql.matchAll(HELPER_CALL)) {
30
+ for (const [, name = "", literal = "", extra, falsy] of sql.matchAll(HELPER_CALL)) {
31
+ const byPermission = /_permission$/iu.test(name);
32
+ if (blind && byPermission && (extra === void 0 || falsy !== void 0)) continue;
23
33
  const key = literal.replaceAll("''", "'").split("#")[0] ?? "";
24
34
  if (key !== "") keys.add(key);
25
35
  }
@@ -33,13 +43,13 @@ function helperTable(name) {
33
43
  const table = tableName(name);
34
44
  return HELPER_TABLES.find((candidate) => candidate === table);
35
45
  }
36
- /** `create policy` statements on {@link HELPER_TABLES} in migration SQL, with the keys their helper calls pass. */
46
+ /** `create policy` statements on {@link HELPER_TABLES} in migration SQL, with the keys their condition-blind helper calls pass. */
37
47
  function helperTablePolicies(sql) {
38
48
  const text = sql.replaceAll(/--[^\n]*/gu, "").replaceAll(/\/\*[\s\S]*?\*\//gu, "");
39
49
  const found = [];
40
50
  for (const [, name = "", target = "", body = ""] of text.matchAll(CREATE_POLICY)) {
41
51
  const table = helperTable(target);
42
- const keys = helperCallKeys(body);
52
+ const keys = helperCallKeys(body, true);
43
53
  if (table !== void 0 && keys.length > 0) found.push({
44
54
  table,
45
55
  name: name.replaceAll("\"", ""),
@@ -57,7 +67,7 @@ function helperTablePoliciesFromRows(rows) {
57
67
  const found = [];
58
68
  for (const row of rows) {
59
69
  const table = helperTable(String(row["target"] ?? ""));
60
- const keys = helperCallKeys(String(row["body"] ?? ""));
70
+ const keys = helperCallKeys(String(row["body"] ?? ""), true);
61
71
  if (table !== void 0 && keys.length > 0) found.push({
62
72
  table,
63
73
  name: String(row["policyname"] ?? ""),
@@ -70,7 +80,7 @@ function helperTablePoliciesFromRows(rows) {
70
80
  function rowConditionMessage(policy, keys) {
71
81
  return `${policy.table} policy '${policy.name}' calls the SQL helpers with ${keys.join(", ")}, whose grants carry row conditions the helpers do not check: the policy grants more than the application does`;
72
82
  }
73
- const ROW_CONDITION_FIX = "use permissions whose catalog entry has rowConditions: false for storage and realtime policies, or write the condition into the policy yourself";
83
+ const ROW_CONDITION_FIX = "call permitted_<scope>_ids_by_permission('<key>') or permdock_has_permission('<key>'), which count only the allows without a row condition (a relationship grant never reaches a topic or a folder), or use a permission whose catalog entry has rowConditions: false";
74
84
  //#endregion
75
85
  //#region src/cli/rls-graph.ts
76
86
  function qualified(ctx, name) {
@@ -99,15 +109,35 @@ function graphPlan(policy) {
99
109
  for (const name of expandRelation(node, relation)) {
100
110
  const spec = node.relations[name];
101
111
  if (!isEdgeRelation(spec) || spec.groups === void 0) continue;
102
- for (const [resource, groupRelation] of Object.entries(spec.groups.resources)) {
112
+ for (const { resource, relation: groupRelation } of groupEntries(spec)) {
103
113
  const target = policy.resources.get(resource);
104
114
  if (target !== void 0 && target.name !== node.name) addRelation(target, groupRelation);
105
115
  }
106
116
  }
107
117
  };
118
+ const addLinks = (hops) => {
119
+ for (let index = 1; index < hops.length; index += 1) {
120
+ const from = policy.resources.get(hops[index - 1]?.resource ?? "");
121
+ const hop = hops[index];
122
+ if (from !== void 0 && hop !== void 0) entryFor(from).links.add(hop.link);
123
+ }
124
+ };
125
+ const addAbove = (above) => {
126
+ const node = above === void 0 ? void 0 : policy.resources.get(above.resource);
127
+ if (above === void 0 || node === void 0) return;
128
+ const entry = entryFor(node);
129
+ entry.closure = Math.max(entry.closure ?? 0, above.depth);
130
+ entry.restrictedAncestors = above;
131
+ };
108
132
  for (const grant of policy.grants) {
109
133
  const row = policy.resources.get(grant.permission.resource);
110
134
  for (const item of flattenGrantee(grant.to)) {
135
+ if (item.kind === "inherit") {
136
+ const inherited = inheritCondition(item, row, policy.resources);
137
+ addLinks(inherited?.hops ?? []);
138
+ addAbove(inherited?.restrictedAncestors);
139
+ continue;
140
+ }
111
141
  if (item.kind !== "relation") continue;
112
142
  const condition = relationCondition(item, row, scopes, { resources: policy.resources });
113
143
  if (condition?.op !== "related") continue;
@@ -116,12 +146,8 @@ function graphPlan(policy) {
116
146
  addRelation(node, condition.relation);
117
147
  const entry = entryFor(node);
118
148
  if (condition.depth > 0 && isSelfParented(node)) entry.closure = Math.max(entry.closure ?? 0, condition.depth);
119
- const hops = condition.hops ?? [];
120
- for (let index = 1; index < hops.length; index += 1) {
121
- const from = policy.resources.get(hops[index - 1]?.resource ?? "");
122
- const hop = hops[index];
123
- if (from !== void 0 && hop !== void 0) entryFor(from).links.add(hop.link);
124
- }
149
+ addLinks(condition.hops ?? []);
150
+ addAbove(condition.restrictedAncestors);
125
151
  }
126
152
  }
127
153
  return plan;
@@ -210,20 +236,22 @@ function closureObjectsSql(ctx, entry, depth, tables) {
210
236
  const parent = node.parent;
211
237
  if (parent === void 0) return "";
212
238
  const name = node.name;
239
+ const sqlName = graphSqlName(name) ?? name;
213
240
  const closure = qualified(ctx, CLOSURE.table);
214
241
  const table = tableSql(tableFor(name, tables));
215
242
  const id = quoteIdent(node.id);
216
243
  const up = quoteIdent(parent.field);
217
- const stop = node.restricted === void 0 ? "false" : `coalesce(t.${quoteIdent(node.restricted)}, false)`;
218
- const stopParent = node.restricted === void 0 ? "false" : `coalesce(p.${quoteIdent(node.restricted)}, false)`;
219
- const refresh = qualified(ctx, `${CLOSURE.table}_${name}`);
220
- const changed = qualified(ctx, `${CLOSURE.table}_${name}_changed`);
244
+ const restricted = restrictedFor(node, "parent");
245
+ const stop = restricted === void 0 ? "false" : `coalesce(t.${quoteIdent(restricted)}, false)`;
246
+ const stopParent = restricted === void 0 ? "false" : `coalesce(p.${quoteIdent(restricted)}, false)`;
247
+ const refresh = qualified(ctx, `${CLOSURE.table}_${sqlName}`);
248
+ const changed = qualified(ctx, `${CLOSURE.table}_${sqlName}_changed`);
221
249
  const literal = quoteLiteral(name);
222
- const restrictedChanged = node.restricted === void 0 ? "" : ` or n.${quoteIdent(node.restricted)} is distinct from o.${quoteIdent(node.restricted)}`;
223
- const trigger = (suffix) => quoteIdent(`${CLOSURE.table}_${name}_${suffix}`);
224
- return `-- ${name}: rows reach their ancestors up to depth ${String(depth)}, stopping at a restricted row
225
- drop policy if exists ${quoteIdent(`${CLOSURE.table}_${name}`)} on ${closure};
226
- create policy ${quoteIdent(`${CLOSURE.table}_${name}`)} on ${closure}
250
+ const restrictedChanged = restricted === void 0 ? "" : ` or n.${quoteIdent(restricted)} is distinct from o.${quoteIdent(restricted)}`;
251
+ const trigger = (suffix) => quoteIdent(`${CLOSURE.table}_${sqlName}_${suffix}`);
252
+ return `-- ${name}: ${restricted === void 0 ? `rows reach their ancestors up to depth ${String(depth)}` : `rows reach their ancestors up to depth ${String(depth)}, stopping at a restricted row`}
253
+ drop policy if exists ${quoteIdent(`${CLOSURE.table}_${sqlName}`)} on ${closure};
254
+ create policy ${quoteIdent(`${CLOSURE.table}_${sqlName}`)} on ${closure}
227
255
  for select to authenticated
228
256
  using (resource = ${literal} and ancestor in (select ${qualified(ctx, graphHelper(name))}(null)));
229
257
  create or replace function ${refresh}(p_ids text[])
@@ -326,12 +354,36 @@ create trigger ${trigger("truncate")} after truncate on ${table}
326
354
  for each statement execute function ${changed}();
327
355
  select ${refresh}(array(select t.${id}::text from ${table} t));`;
328
356
  }
357
+ function restrictedRowsHelperSql(ctx, plan, entry, tables) {
358
+ const above = entry.restrictedAncestors;
359
+ if (above === void 0) return "";
360
+ const fn = qualified(ctx, restrictedHelper(entry.node.name));
361
+ const body = graphSqlText(restrictedRowsSql(above, {
362
+ resources: new Map([...plan].map(([name, item]) => [name, item.node])),
363
+ ...tables === void 0 ? {} : { tables },
364
+ qualify: qualifiedTable,
365
+ closure: `${ctx.schema ?? "permdock"}.${CLOSURE.table}`,
366
+ closureDepths: closureDepths(plan)
367
+ }), ctx);
368
+ return `-- ${entry.node.name}: rows a stopped link does not reach below: restricted, under a restricted row within ${String(above.depth - 1)} levels, or deeper
369
+ create or replace function ${fn}()
370
+ returns setof text
371
+ language sql
372
+ stable
373
+ security definer
374
+ set search_path = ''
375
+ as $$
376
+ ${body}
377
+ $$;
378
+ revoke execute on function ${fn}() from public, anon;
379
+ grant execute on function ${fn}() to authenticated;`;
380
+ }
329
381
  /** Group resources a resource's asked relations name, other than itself. */
330
382
  function groupTargets(entry) {
331
383
  const out = /* @__PURE__ */ new Set();
332
384
  for (const asked of entry.relations) for (const name of expandRelation(entry.node, asked)) {
333
385
  const spec = entry.node.relations[name];
334
- const resources = isEdgeRelation(spec) ? Object.keys(spec.groups?.resources ?? {}) : [];
386
+ const resources = isEdgeRelation(spec) ? groupEntries(spec).map((group) => group.resource) : [];
335
387
  for (const resource of resources) if (resource !== entry.node.name) out.add(resource);
336
388
  }
337
389
  return [...out].toSorted();
@@ -357,13 +409,25 @@ function dependencyOrder(plan) {
357
409
  */
358
410
  function graphSql(ctx, plan, tables) {
359
411
  if (plan.size === 0) return "";
360
- for (const name of plan.keys()) if (ctx.scopes.some((scope) => scope.name === name)) throw new Error(`PermDock CLI: resource '${name}' has graph relations and shares its name with the ${name} scope, so ${graphHelper(name)} would replace the scope helper; rename the resource (permdock doctor PD032)`);
412
+ const sqlNames = /* @__PURE__ */ new Map();
413
+ for (const name of plan.keys()) {
414
+ const helper = graphHelper(name);
415
+ const sql = graphSqlName(name) ?? name;
416
+ if (ctx.scopes.some((scope) => scope.name === sql)) throw new Error(`PermDock CLI: resource '${name}' has graph relations and shares its SQL name with the ${sql} scope, so ${helper} would replace the scope helper; rename the resource (permdock doctor PD032)`);
417
+ const other = sqlNames.get(sql);
418
+ if (other !== void 0) throw new Error(`PermDock CLI: resources '${other}' and '${name}' both name the SQL helper ${helper}; rename one (permdock doctor PD032)`);
419
+ sqlNames.set(sql, name);
420
+ }
361
421
  const entries = dependencyOrder(plan);
362
- const chunks = entries.flatMap((entry) => [...entry.relations.size === 0 ? [] : [permittedSql(ctx, plan, entry, tables)], ...[...entry.links].toSorted().map((link) => linkSql(ctx, entry.node, link, tables))]);
422
+ const chunks = entries.flatMap((entry) => [...entry.relations.size === 0 && entry.closure === void 0 ? [] : [permittedSql(ctx, plan, entry, tables)], ...[...entry.links].toSorted().map((link) => linkSql(ctx, entry.node, link, tables))]);
363
423
  const walked = entries.filter((entry) => entry.closure !== void 0);
364
424
  if (walked.length > 0) {
365
425
  chunks.push(closureTableSql(ctx));
366
426
  for (const entry of walked) chunks.push(closureObjectsSql(ctx, entry, entry.closure ?? 0, tables));
427
+ for (const entry of walked) {
428
+ const helper = restrictedRowsHelperSql(ctx, plan, entry, tables);
429
+ if (helper !== "") chunks.push(helper);
430
+ }
367
431
  }
368
432
  return `${chunks.join("\n\n")}\n`;
369
433
  }
@@ -1,7 +1,7 @@
1
- import { i as quoteSqlLiteral, n as escapeSqlIdent } from "./sql-Bll1d7y0.js";
2
- import { a as usageResult } from "./errors-DSMnAVNa.js";
3
- import { N as parseMembershipsFlag, t as HELPERS } from "./rls-helpers-BxRuif0l.js";
4
- import { r as FIELD_VIEWS, t as connectPg } from "./pg-4GJWDUxG.js";
1
+ import { o as usageResult } from "./errors-CWfoNg9N.js";
2
+ import { i as quoteSqlLiteral, n as escapeSqlIdent } from "./sql-xdg5f4Fi.js";
3
+ import { B as parseMembershipsFlag, n as HELPERS } from "./rls-shared-aOQ4hGTO.js";
4
+ import { t as FIELD_VIEWS, w as connectPg } from "./rls-fields-BMasREhR.js";
5
5
  import { n as emptySchema, r as isSchemaKind, t as emitPermissionsModule } from "./generate-CH7ThJ14.js";
6
6
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
7
7
  import { dirname, resolve } from "node:path";
@@ -49,7 +49,7 @@ function isAuthUid(value) {
49
49
  const inner = scalarSubselect(value);
50
50
  if (inner !== void 0) return isAuthUid(inner);
51
51
  const name = funcName(value);
52
- return name === "auth.uid" || name === "auth.user_id" || name === "uid" || name === "user_id";
52
+ return name === "auth.uid" || name === "auth.user_id" || name === "uid" || name === "user_id" || name?.split(".").at(-1) === "permdock_user_id";
53
53
  }
54
54
  function isCurrentSettingUserId(value) {
55
55
  const inner = scalarSubselect(value);
@@ -326,7 +326,7 @@ async function helperGrants(sql, memberships, functions, seeds) {
326
326
  conditions: rest
327
327
  };
328
328
  for (const call of calls) {
329
- const permission = seeds.find((seed) => seed.grantKey === call.key)?.permission ?? call.key.replace(/#\d+$/u, "");
329
+ const permission = seeds.find((seed) => seed.grantKey === call.key)?.permission ?? call.key.replace(/#[a-z0-9][a-z0-9_-]*$/u, "");
330
330
  grants.push({
331
331
  key: call.key,
332
332
  permission,
@@ -404,6 +404,7 @@ function mapNode(value, ctx) {
404
404
  };
405
405
  const helper = helperCall(node);
406
406
  if (helper !== void 0) return helperCondition(helper, ctx.seeds);
407
+ if (funcName(scalarSubselect(node) ?? node)?.split(".").at(-1) === "permdock_session_live") return { op: "liveSession" };
407
408
  const nullTest = asNode$1(node["NullTest"]);
408
409
  if (nullTest !== void 0) {
409
410
  const field = columnName(nullTest["arg"]);
@@ -1,7 +1,8 @@
1
- import { i as sqlFiles } from "./files-B_wAGYmt.js";
2
- import { i as quoteSqlLiteral, n as escapeSqlIdent } from "./sql-Bll1d7y0.js";
3
- import "./sources-DVHM3Mwq.js";
4
- import { t as HELPERS } from "./rls-helpers-BxRuif0l.js";
1
+ import { i as describeError } from "./errors-CWfoNg9N.js";
2
+ import { a as sqlFiles } from "./files-DWUN9PzI.js";
3
+ import { i as quoteSqlLiteral, n as escapeSqlIdent } from "./sql-xdg5f4Fi.js";
4
+ import "./sources-B0UvrJ21.js";
5
+ import { n as HELPERS } from "./rls-shared-aOQ4hGTO.js";
5
6
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
6
7
  import { relative, resolve } from "node:path";
7
8
  import { parse } from "pgsql-parser";
@@ -241,7 +242,7 @@ async function migrateSql(file, text, config, target) {
241
242
  line: 1,
242
243
  call: "",
243
244
  reason: "unparsed",
244
- detail: `the file does not parse: ${cause instanceof Error ? cause.message : String(cause)}`
245
+ detail: `the file does not parse: ${describeError(cause)}`
245
246
  });
246
247
  return {
247
248
  rewrites,