permdock 0.1.0 → 0.3.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 (350) 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-CKwwqFWz.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 +223 -0
  18. package/dist/better-supabase/index.js +648 -0
  19. package/dist/bind-C_ob3LKa.d.ts +25 -0
  20. package/dist/bind-CuzGytRf.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-BDG_nkxt.d.ts → capability-2kYTMWDv.d.ts} +2 -2
  25. package/dist/{capability-B68OFnZx.js → capability-4qPdO9gk.js} +7 -5
  26. package/dist/catalog/index.d.ts +1 -1
  27. package/dist/catalog/index.js +1 -1
  28. package/dist/catalog-CRW5Mx_B.js +2 -0
  29. package/dist/{catalog-H-vFGwWK.js → catalog-DWF5cYqB.js} +4 -4
  30. package/dist/{catalog-B0E6bggc.js → catalog-dFZdWCGN.js} +2 -2
  31. package/dist/{catalog-doc-BSo_Q_-6.js → catalog-doc-DdGm82XT.js} +20 -32
  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-CB_ELYuX.js} +2 -2
  44. package/dist/{cloud-Cuxr6Czw.js → cloud-DWLXO2af.js} +7 -6
  45. package/dist/collect-DClJsheJ.js +83 -0
  46. package/dist/{collect-O-tOtbnk.js → collect-DSTE3ml9.js} +194 -42
  47. package/dist/collect-DSWOk19R.js +2 -0
  48. package/dist/{commands-BMh_Etm2.js → commands-DSxCqG9A.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-BkRyBDBw.d.ts +94 -0
  53. package/dist/config-BJiM-xAm.js +157 -0
  54. package/dist/config-Dnszbv-6.js +36 -0
  55. package/dist/config-report-DMvWKUxL.js +44 -0
  56. package/dist/{connection-JvqwHODC.js → connection-CU8MQxRi.js} +1 -1
  57. package/dist/{context-CKEAabd7.js → context-Bcy85rGi.js} +36 -27
  58. package/dist/convex/index.d.ts +9 -4
  59. package/dist/convex/index.js +14 -4
  60. package/dist/create-B1d519XK.d.ts +245 -0
  61. package/dist/create-CMwIl-w2.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-DMYiCjJV.d.ts} +9 -10
  66. package/dist/{diff-x5Il8LVa.js → diff-2VaeChzX.js} +44 -11
  67. package/dist/{diff-BUzf5Poi.js → diff-DBIhz_f2.js} +2 -2
  68. package/dist/{doctor-Bqo6FwUa.js → doctor-BwCAMLx_.js} +2 -2
  69. package/dist/doctor-collect-CHk6XWOA.js +665 -0
  70. package/dist/doctor-igIiM_Hl.js +1194 -0
  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-DPdqI50v.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-CTLijvdm.js} +66 -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-0nNqHspG.d.ts +6 -0
  105. package/dist/{index-xIxJLwOQ.d.ts → index-BNc7Wer_.d.ts} +75 -7
  106. package/dist/{index-CltcQ4Bf.d.ts → index-C7Tw7MaW.d.ts} +68 -5
  107. package/dist/{index-LF_hS-yn.d.ts → index-C8z4RjQV.d.ts} +1 -1
  108. package/dist/index.d.ts +14 -9
  109. package/dist/index.js +22 -17
  110. package/dist/instance-options-Dhhcnm3y.js +22 -0
  111. package/dist/instance-options-jARdwfPN.d.ts +11 -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-_RRHmnMY.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-DcqM8nU7.js → openapi-BqRBvAng.js} +237 -5
  144. package/dist/{openapi-DWD0Uc_4.js → openapi-CqqEbHsL.js} +5 -5
  145. package/dist/{openapi-import-BWRUNNeW.js → openapi-import-cmwetbzw.js} +1 -1
  146. package/dist/{openapi-CwePaF7C.js → openapi-l0xYHkcv.js} +3 -3
  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-BrMozJCo.js +36 -0
  153. package/dist/parse-local-manifest-JLnaBH0S.d.ts +10 -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-CbgvLnuo.js} +672 -149
  157. package/dist/{permissions-B8vCg_bI.d.ts → permissions-CDgvKG5L.d.ts} +2 -2
  158. package/dist/{permissions-DC7GROPA.js → permissions-DVoF6dMt.js} +77 -15
  159. package/dist/{permissions-B4apnahQ.d.ts → permissions-DttnqqxC.d.ts} +34 -5
  160. package/dist/{permissions-CofRqesP.js → permissions-RJrovw98.js} +3 -3
  161. package/dist/{pins-CqE1jZuF.js → pins-8ILTftC9.js} +2 -2
  162. package/dist/{policy-Cq2fB8Q5.d.ts → policy-D2W7uv19.d.ts} +2 -2
  163. package/dist/{policy-CInmNGkM.d.ts → policy-IB6yxpC3.d.ts} +351 -42
  164. package/dist/{policy-ANp36PnI.js → policy-xyWg7QdR.js} +173 -22
  165. package/dist/powersync-BylawD_U.js +540 -0
  166. package/dist/powersync-DliZK_-y.js +62 -0
  167. package/dist/powersync-e_AZrKbg.js +2 -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-DX075l9V.d.ts +7 -0
  172. package/dist/problem-details-_AMOYz-w.js +144 -0
  173. package/dist/{protected-BuPAycJT.d.ts → protected-BdnIEFkY.d.ts} +5 -4
  174. package/dist/protected-utU-SLuy.js +100 -0
  175. package/dist/protected-xAr24FEC.d.ts +40 -0
  176. package/dist/provider-CSQd7m92.js +52 -0
  177. package/dist/{provider-wTAUda2v.d.ts → provider-DZY281jO.d.ts} +1 -1
  178. package/dist/provider-store-Cfbvo4DE.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-CYyiLiwO.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-BOFU3chG.js → rls-B4ur8nKQ.js} +8 -3
  192. package/dist/rls-DQtdgTHB.js +2521 -0
  193. package/dist/rls-fields-74oZPXWL.js +3582 -0
  194. package/dist/{rls-graph-DxQ39PJj.js → rls-graph-CHwx0V8q.js} +100 -36
  195. package/dist/{rls-import-CXV6LBlS.js → rls-import-BTFVk3jH.js} +7 -6
  196. package/dist/{rls-migrate-DrFPbf8p.js → rls-migrate-CN4TlJTO.js} +6 -5
  197. package/dist/rls-ownership-RuFqaqGz.js +843 -0
  198. package/dist/rls-shared-Cewd_-zI.js +495 -0
  199. package/dist/rls-verify-CVQTHTh5.js +746 -0
  200. package/dist/{row-check-BajTgQZ-.d.ts → row-check-Dt35czLy.d.ts} +12 -15
  201. package/dist/row-conditions-h2HythXQ.js +27 -0
  202. package/dist/rpc-DL9Sqvb1.js +89 -0
  203. package/dist/{run-CJ6UvS3a.js → run-DKDbM4Du.js} +31 -12
  204. package/dist/runtime-CB8gQFvS.js +11 -0
  205. package/dist/{saas-BRrZzJkM.js → saas-DhpJjnBA.js} +17 -7
  206. package/dist/{schema-P8yoma__.js → schema-D3MnDMxa.js} +8 -4
  207. package/dist/scim/index.d.ts +1 -1
  208. package/dist/scim/index.js +1 -1
  209. package/dist/{scim-9NFa0XVZ.js → scim-BFGBBAqR.js} +1 -1
  210. package/dist/{scopes-cKVp_WTw.js → scopes-CVdPrWN-.js} +35 -8
  211. package/dist/server/index.d.ts +22 -11
  212. package/dist/server/index.js +11 -8
  213. package/dist/{credentials-BgRX3WEg.js → server-DlZ28Oz5.js} +1 -1
  214. package/dist/shared-DRu8VFVM.js +123 -0
  215. package/dist/{sink-Cfr9-7YC.d.ts → sink-B1fZzIMf.d.ts} +1 -1
  216. package/dist/skills-Biq5uup3.js +192 -0
  217. package/dist/{skills-C_lpV4Jx.js → skills-Bx-U0irG.js} +10 -4
  218. package/dist/{snapshot-DE8dE_hz.js → snapshot-Enxd0n-s.js} +138 -214
  219. package/dist/snapshot-cache-B-LxUahj.d.ts +45 -0
  220. package/dist/snapshot-cache-D6jLelln.js +44 -0
  221. package/dist/solid/index.d.ts +39 -9
  222. package/dist/solid/index.js +76 -85
  223. package/dist/sources-4p0-4xQm.js +545 -0
  224. package/dist/sources-BdOYLw9j.d.ts +192 -0
  225. package/dist/{sql-Bll1d7y0.js → sql-xdg5f4Fi.js} +6 -1
  226. package/dist/{src-CTNT-PBW.js → src-BDwEZWrZ.js} +149 -11
  227. package/dist/ssf/index.d.ts +3 -2
  228. package/dist/ssf/index.js +3 -29
  229. package/dist/store-DMAWwAJV.js +371 -0
  230. package/dist/{store-Bq90395i.d.ts → store-jOBYpiXC.d.ts} +13 -4
  231. package/dist/store-options-ByhZq1jV.js +716 -0
  232. package/dist/{stores-CkG2HrSg.js → stores-BT2pSCub.js} +10 -63
  233. package/dist/{stores-CvOnu_2T.d.ts → stores-C0IMQrGI.d.ts} +20 -9
  234. package/dist/{stream-BhMfZOwr.d.ts → stream-D1RXubw2.d.ts} +2 -2
  235. package/dist/{stream-Q_xlB6Ko.js → stream-DDpvynSB.js} +16 -2
  236. package/dist/subject-settings-BwBmCdTR.js +128 -0
  237. package/dist/supabase/index.d.ts +133 -6
  238. package/dist/supabase/index.js +4 -3
  239. package/dist/supabase/middleware.d.ts +32 -27
  240. package/dist/supabase/middleware.js +56 -22
  241. package/dist/{supabase-D8UlBA7Z.js → supabase-Boqb9a_Y.js} +3 -3
  242. package/dist/{supabase-DTxGtYdi.js → supabase-C0qESOa-.js} +347 -367
  243. package/dist/supabase-config-BpPXt3x1.js +472 -0
  244. package/dist/supabase-hook-6sYLXg_u.js +2 -0
  245. package/dist/{supabase-hook-D_OqGb_V.js → supabase-hook-CSLQ4zJ3.js} +1037 -705
  246. package/dist/supautils-Cn4R4cJ4.js +91 -0
  247. package/dist/svelte/PermissionBoundary.svelte +37 -0
  248. package/dist/svelte/Protected.svelte +8 -2
  249. package/dist/svelte/index.d.ts +9 -6
  250. package/dist/svelte/index.js +61 -7
  251. package/dist/svelte/runtime.d.ts +4 -3
  252. package/dist/svelte/runtime.js +4 -3
  253. package/dist/svelte/source.d.ts +9 -6
  254. package/dist/svelte/source.js +7 -4
  255. package/dist/terminal/index.d.ts +6 -14
  256. package/dist/terminal/index.js +44 -32
  257. package/dist/testing/index.d.ts +105 -16
  258. package/dist/testing/index.js +504 -40
  259. package/dist/testing/saas/index.d.ts +4 -4
  260. package/dist/testing/saas/index.js +2 -2
  261. package/dist/testing/saas/permissions.d.ts +1 -1
  262. package/dist/testing/saas/permissions.js +1 -1
  263. package/dist/token-CIWxJOCh.js +50 -0
  264. package/dist/trpc/index.d.ts +7 -26
  265. package/dist/trpc/index.js +17 -100
  266. package/dist/types-BnIEz1sU.d.ts +48 -0
  267. package/dist/{types-CxquUByI.d.ts → types-Bvc4oWT6.d.ts} +1 -1
  268. package/dist/{sources-DOpW5Ila.d.ts → types-C97IskBw.d.ts} +86 -127
  269. package/dist/types-CKNSyIf_.d.ts +52 -0
  270. package/dist/types-Cq_H8N_X.d.ts +197 -0
  271. package/dist/{types-D6Z6-rKJ.d.ts → types-DbjRN55U.d.ts} +273 -22
  272. package/dist/{types-BBK-exvJ.d.ts → types-Dnemwd77.d.ts} +7 -1
  273. package/dist/{types-BvBk1wgn.d.ts → types-DxiCGmmd.d.ts} +5 -3
  274. package/dist/{types-B9dmiiab.d.ts → types-QCuYJh4q.d.ts} +1 -1
  275. package/dist/{types-B8w5PFtS.d.ts → types-aqOHTHcp.d.ts} +17 -1
  276. package/dist/unplugin/index.d.ts +1 -1
  277. package/dist/unplugin/index.js +10 -9
  278. package/dist/usage-DorAJiU_.js +2 -0
  279. package/dist/{usage-1ozMubLY.js → usage-GTixvDDU.js} +2 -2
  280. package/dist/{usage-CUnK6Ou9.js → usage-ItS7nLcl.js} +225 -62
  281. package/dist/validation-error-Ba264OaJ.d.ts +26 -0
  282. package/dist/validation-error-CnjZ4t92.js +33 -0
  283. package/dist/{validity-D0uRmJKJ.js → validity-uOp8UpYn.js} +57 -36
  284. package/dist/{verifier-B90agnhl.js → verifier-BxBo6I44.js} +10 -5
  285. package/dist/version-BvacVTZR.js +17 -0
  286. package/dist/views-Soe7bGSC.js +95 -0
  287. package/dist/{vocabulary-Dk0fs-Jk.d.ts → vocabulary-DA8a8zif.d.ts} +1 -1
  288. package/dist/vue/index.d.ts +35 -13
  289. package/dist/vue/index.js +86 -93
  290. package/dist/watch-BwxLTYMZ.js +2 -0
  291. package/dist/watch-DVBJ9cBq.js +128 -0
  292. package/dist/webmcp/index.d.ts +2 -2
  293. package/dist/webmcp/index.js +7 -13
  294. package/package.json +62 -36
  295. package/schemas/approval-request-v1.json +175 -0
  296. package/schemas/catalog-v1.json +29 -1
  297. package/schemas/supabase-claims-v1.json +6 -1
  298. package/schemas/supabase-manifest-v1.json +150 -6
  299. package/skills/permdock/SKILL.md +7 -7
  300. package/skills/permdock-agents/SKILL.md +5 -5
  301. package/skills/permdock-agents/references/runtimes.md +12 -10
  302. package/skills/permdock-approvals/SKILL.md +4 -4
  303. package/skills/permdock-approvals/references/stores-and-resume.md +15 -4
  304. package/skills/permdock-audit/SKILL.md +3 -3
  305. package/skills/permdock-credentials/SKILL.md +4 -4
  306. package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
  307. package/skills/permdock-data/SKILL.md +4 -4
  308. package/skills/permdock-data/references/queries-and-rls.md +14 -6
  309. package/skills/permdock-data/references/relationships.md +5 -3
  310. package/skills/permdock-tenancy/SKILL.md +9 -6
  311. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +14 -8
  312. package/skills/permdock-wire/SKILL.md +4 -4
  313. package/skills/permdock-wire/references/adapters.md +42 -30
  314. package/skills/permdock-wire/references/policy-options.md +5 -3
  315. package/dist/approvers-aH0PJkmf.js +0 -20
  316. package/dist/catalog-idsHc0vo.js +0 -2
  317. package/dist/collect-B7_TIfmg.js +0 -49
  318. package/dist/collect-fRPAQIWb.js +0 -2
  319. package/dist/compile-CQbvyIBr.d.ts +0 -30
  320. package/dist/config-BPYmjTOp.js +0 -26
  321. package/dist/context-gtAwAILx.js +0 -6
  322. package/dist/create-BKF3dgFk.d.ts +0 -162
  323. package/dist/create-CSkhDU9T.js +0 -222
  324. package/dist/doctor-BGle8Gqi.js +0 -1314
  325. package/dist/helpers-DnSOrhB9.js +0 -682
  326. package/dist/index-fG6NSXlc.d.ts +0 -9
  327. package/dist/kernel-YOGCWNLf.js +0 -211
  328. package/dist/load-QOOm1z70.js +0 -2
  329. package/dist/manifest-DDQbC6K0.d.ts +0 -118
  330. package/dist/map-error-RJ3ZsUyA.js +0 -16
  331. package/dist/may-use-CnFEjVEp.js +0 -37
  332. package/dist/pg-4GJWDUxG.js +0 -953
  333. package/dist/plugin-4gr7IxFJ.js +0 -65
  334. package/dist/protected-B4K3BKoX.js +0 -138
  335. package/dist/protected-wY7nXhY9.d.ts +0 -23
  336. package/dist/provider-_wx46HpB.js +0 -48
  337. package/dist/rls-CJVja9Ww.js +0 -2119
  338. package/dist/rls-helpers-BxRuif0l.js +0 -1346
  339. package/dist/runtime-DP9ttFh1.js +0 -27
  340. package/dist/skills-Dx3QLnMY.js +0 -110
  341. package/dist/source-DoBBYJi2.js +0 -6
  342. package/dist/sources-DVHM3Mwq.js +0 -284
  343. package/dist/store-C6hFW6ta.js +0 -508
  344. package/dist/subject-settings-xt7V845g.js +0 -82
  345. package/dist/supabase-hook-DW-xP4hU.js +0 -2
  346. package/dist/types-DbWdEfcm.d.ts +0 -87
  347. package/dist/types-bva3i4Gf.d.ts +0 -98
  348. package/dist/types-i4BAOvdb.d.ts +0 -97
  349. package/dist/usage-PyEor6GA.js +0 -2
  350. package/dist/version-CnSh33Fj.js +0 -16
@@ -1,5 +1,5 @@
1
- import { h as ResourceInit, l as InferPermissionTree } from "./permissions-B4apnahQ.js";
2
- import { r as Role, t as Plan } from "./vocabulary-Dk0fs-Jk.js";
1
+ import { g as ResourceInit, u as InferPermissionTree } from "./permissions-DttnqqxC.js";
2
+ import { r as Role, t as Plan } from "./vocabulary-DA8a8zif.js";
3
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
4
  //#region src/testing/saas/permissions.d.ts
5
5
  declare const SaasProjectSchema: StandardSchemaV1<SaasProject>;
@@ -1,5 +1,5 @@
1
1
  import { n as isReadonlyArray, t as compact } from "./compact-y6vfu2_f.js";
2
- import { n as freezeDeep } from "./freeze-y1_jQL4v.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
3
  //#region src/core/paths.ts
4
4
  const FORBIDDEN_KEYS = /* @__PURE__ */ new Set([
5
5
  "__proto__",
@@ -40,6 +40,28 @@ const TREE_REGISTRY = Symbol.for("permdock.registry");
40
40
  const NODE_RESOURCE = Symbol.for("permdock.resource");
41
41
  const TREE_LEAVES = Symbol.for("permdock.leaves");
42
42
  const LEAF_FORMER = Symbol.for("permdock.former");
43
+ /** The edge's group resources with their relation and id column. */
44
+ function groupEntries(spec) {
45
+ const groups = spec.groups;
46
+ if (groups === void 0) return [];
47
+ return Object.entries(groups.resources).map(([resource, group]) => typeof group === "string" ? {
48
+ resource,
49
+ relation: group,
50
+ subject: spec.subject ?? "user_id",
51
+ typed: false
52
+ } : {
53
+ resource,
54
+ relation: group.relation,
55
+ subject: group.subject ?? spec.subject ?? "user_id",
56
+ typed: group.subject !== void 0
57
+ });
58
+ }
59
+ function restrictedStops(node, path) {
60
+ return node?.restricted !== void 0 && (node.restrictedStops === void 0 || node.restrictedStops.includes(path));
61
+ }
62
+ function restrictedFor(node, path) {
63
+ return restrictedStops(node, path) ? node?.restricted : void 0;
64
+ }
43
65
  function isFieldRelation(relation) {
44
66
  return relation !== void 0 && "field" in relation;
45
67
  }
@@ -187,7 +209,20 @@ function resource(schemaOrOptions, options) {
187
209
  throw new Error("PermDock: resource() first argument must be a schema or options");
188
210
  }
189
211
  const RESOURCE_NAME = /^[A-Za-z][A-Za-z0-9_-]*$/u;
212
+ /** Level names ride claims and grant keys (`key@level`), so they stay SQL- and claim-safe. */
213
+ const LEVEL_NAME = /^[a-z][a-z0-9_]*$/u;
190
214
  const EDGE_TABLE = /^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)?$/u;
215
+ function restrictedStopsOf(name, option, parent, links) {
216
+ if (option.stops === void 0) return;
217
+ if (!Array.isArray(option.stops) || option.stops.length === 0) throw new Error(`PermDock: resource "${name}" restricted.stops must list 'parent' or link names`);
218
+ const stops = /* @__PURE__ */ new Set();
219
+ for (const path of option.stops) {
220
+ if (typeof path !== "string") throw new TypeError(`PermDock: resource "${name}" restricted.stops must list 'parent' or link names`);
221
+ if (path === "parent" ? parent === void 0 : !Object.hasOwn(links, path)) throw new Error(`PermDock: resource "${name}" restricted.stops names '${path}', which it does not declare`);
222
+ stops.add(path);
223
+ }
224
+ return Object.freeze([...stops].toSorted());
225
+ }
191
226
  function normaliseRelation(resourceName, relationName, spec) {
192
227
  if (typeof spec === "string") {
193
228
  assertSafeKey(spec, "relation field");
@@ -265,25 +300,38 @@ function normaliseMatch(label, match) {
265
300
  return out;
266
301
  }
267
302
  function normaliseGroups(label, groups) {
268
- assertSafeKey(groups.column, "edge groups column");
303
+ if (groups.column !== void 0) assertSafeKey(groups.column, "edge groups column");
269
304
  const resources = {};
270
305
  const names = Object.keys(groups.resources);
271
306
  if (names.length === 0) throw new Error(`PermDock: ${label} groups needs at least one resource`);
272
307
  for (const name of names) {
273
308
  assertSafeKey(name, "group resource");
274
- const relationName = groups.resources[name];
309
+ const group = groups.resources[name];
310
+ if (typeof group === "string") {
311
+ assertSafeKey(group, "group relation");
312
+ if (groups.column === void 0) throw new Error(`PermDock: ${label} groups '${name}' needs its own subject column, or groups needs a column naming the resource`);
313
+ resources[name] = group;
314
+ continue;
315
+ }
316
+ if (group === null || typeof group !== "object") throw new TypeError(`PermDock: ${label} groups '${name}' must name a relation`);
317
+ const relationName = "relation" in group ? group.relation : void 0;
275
318
  if (typeof relationName !== "string") throw new TypeError(`PermDock: ${label} groups '${name}' must name a relation`);
276
319
  assertSafeKey(relationName, "group relation");
277
- resources[name] = relationName;
320
+ const subject = "subject" in group ? group.subject : void 0;
321
+ if (subject !== void 0 && typeof subject !== "string") throw new TypeError(`PermDock: ${label} groups '${name}' subject must be a column name`);
322
+ if (subject !== void 0) assertSafeKey(subject, "group subject column");
323
+ else if (groups.column === void 0) throw new Error(`PermDock: ${label} groups '${name}' needs its own subject column, or groups needs a column naming the resource`);
324
+ resources[name] = subject === void 0 ? { relation: relationName } : {
325
+ relation: relationName,
326
+ subject
327
+ };
278
328
  }
329
+ if (groups.direct !== void 0 && groups.column === void 0) throw new Error(`PermDock: ${label} groups direct needs a column to compare it with`);
279
330
  if (groups.direct !== void 0 && groups.direct in resources) throw new Error(`PermDock: ${label} groups direct '${groups.direct}' is also a group resource`);
280
- return groups.direct === void 0 ? {
281
- column: groups.column,
282
- resources
283
- } : {
284
- column: groups.column,
331
+ return {
332
+ ...groups.column === void 0 ? {} : { column: groups.column },
285
333
  resources,
286
- direct: groups.direct
334
+ ...groups.direct === void 0 ? {} : { direct: groups.direct }
287
335
  };
288
336
  }
289
337
  /** An included relation must exist on the same resource, be tenancy-free and never include itself back. */
@@ -322,7 +370,7 @@ function assertGraphTargets(registry) {
322
370
  for (const [linkName, link] of Object.entries(node.links)) if (!registry.has(link.resource)) throw new Error(`PermDock: link '${linkName}' on '${node.name}' names the undeclared resource '${link.resource}'`);
323
371
  for (const [relationName, spec] of Object.entries(node.relations)) {
324
372
  if (!isEdgeRelation(spec) || spec.groups === void 0) continue;
325
- for (const [target, targetRelation] of Object.entries(spec.groups.resources)) {
373
+ for (const { resource: target, relation: targetRelation } of groupEntries(spec)) {
326
374
  assertGroupTarget(registry, node, relationName, spec, target, targetRelation);
327
375
  if (target !== node.name) {
328
376
  const out = edges.get(node.name) ?? /* @__PURE__ */ new Set();
@@ -381,8 +429,12 @@ function materialiseResource(init, path, registry, leaves, former) {
381
429
  }
382
430
  const version = init.options.version;
383
431
  if (version !== void 0) assertSafeKey(version, "version field");
384
- const restricted = init.options.restricted;
385
- if (restricted !== void 0) assertSafeKey(restricted, "restricted field");
432
+ const restrictedOption = init.options.restricted;
433
+ const restricted = typeof restrictedOption === "string" ? restrictedOption : restrictedOption?.field;
434
+ if (restrictedOption !== void 0) {
435
+ if (typeof restricted !== "string") throw new TypeError(`PermDock: resource "${name}" restricted must name a field`);
436
+ assertSafeKey(restricted, "restricted field");
437
+ }
386
438
  const disclosure = init.options.disclosure ?? "reveal";
387
439
  if (disclosure !== "hide" && disclosure !== "reveal") throw new Error(`PermDock: resource "${name}" disclosure must be 'hide' or 'reveal'`);
388
440
  const relations = {};
@@ -401,6 +453,14 @@ function materialiseResource(init, path, registry, leaves, former) {
401
453
  resource: link.resource
402
454
  });
403
455
  }
456
+ const restrictedStopList = typeof restrictedOption === "object" ? restrictedStopsOf(name, restrictedOption, parent, links) : void 0;
457
+ const levels = {};
458
+ for (const [levelName, condition] of Object.entries(init.options.levels ?? {})) {
459
+ if (!LEVEL_NAME.test(levelName)) throw new Error(`PermDock: level '${levelName}' on '${name}' must match ^[a-z][a-z0-9_]*$`);
460
+ if (condition === null || typeof condition !== "object" || Array.isArray(condition)) throw new Error(`PermDock: level '${levelName}' on '${name}' must be a condition object`);
461
+ levels[levelName] = freezeDeep({ ...condition });
462
+ }
463
+ if (Object.keys(levels).length > 0 && instanceSet.size === 0) throw new Error(`PermDock: resource '${name}' declares levels but no instance actions`);
404
464
  const resourceNode = Object.freeze({
405
465
  name,
406
466
  path: prefix,
@@ -411,9 +471,11 @@ function materialiseResource(init, path, registry, leaves, former) {
411
471
  relations: freezeDeep(relations),
412
472
  version,
413
473
  restricted,
474
+ ...restrictedStopList === void 0 ? {} : { restrictedStops: restrictedStopList },
414
475
  disclosure,
415
476
  instanceActions: instanceSet,
416
- collectionActions: collectionSet
477
+ collectionActions: collectionSet,
478
+ levels: Object.freeze(levels)
417
479
  });
418
480
  assertIncludes(resourceNode);
419
481
  registry.set(name, resourceNode);
@@ -597,4 +659,4 @@ function mergePermissions(...trees) {
597
659
  return freezeDeep(attachRegistry(merged, registry, leaves));
598
660
  }
599
661
  //#endregion
600
- export { ownGet as C, splitPath as E, isForbiddenKey as S, readPath as T, mergePermissions as _, formerKeys as a, resourceOfNode as b, getResource as c, isFieldRelation as d, isPermission as f, listPermissions as g, isSelfParented as h, findPermission as i, isComputedRelation as l, isRegistryTree as m, definePermissions as n, formerScopes as o, isPrincipalRelation as p, expandRelation as r, getRegistry as s, annotationsFor as t, isEdgeRelation as u, renamedKeys as v, ownKeys as w, assertSafeKey as x, resource as y };
662
+ export { restrictedStops as C, ownKeys as D, ownGet as E, readPath as O, restrictedFor as S, isForbiddenKey as T, listPermissions as _, formerKeys as a, resource as b, getResource as c, isEdgeRelation as d, isFieldRelation as f, isSelfParented as g, isRegistryTree as h, findPermission as i, splitPath as k, groupEntries as l, isPrincipalRelation as m, definePermissions as n, formerScopes as o, isPermission as p, expandRelation as r, getRegistry as s, annotationsFor as t, isComputedRelation as u, mergePermissions as v, assertSafeKey as w, resourceOfNode as x, renamedKeys as y };
@@ -63,15 +63,28 @@ type FieldRelation = RelationIncludes & {
63
63
  };
64
64
  /** Literal values an edge row's columns must hold, so one table backs several relations. */
65
65
  type EdgeMatch = Readonly<Record<string, string | number | boolean>>;
66
+ /**
67
+ * One group resource of an edge: the relation whoever the row names must
68
+ * hold on the group, and, when the group's id has its own typed column, that
69
+ * column in place of the edge's `subject`.
70
+ */
71
+ type EdgeGroup = string | {
72
+ readonly relation: string;
73
+ readonly subject?: string;
74
+ };
66
75
  /**
67
76
  * Edge rows that name a group instead of a principal: `column` holds the
68
77
  * resource name, `subject` the group's id, and the row holds for whoever
69
78
  * holds `resources[<name>]` on that group. A null `column` (or `direct`)
70
- * names a principal; any other value matches nothing.
79
+ * names a principal; any other value matches nothing. A group with its own
80
+ * `subject` column reads the group's id from it; without `column`, a row
81
+ * names that group when the column is not null, and a principal when the
82
+ * edge's `subject` is not null.
71
83
  */
72
84
  type EdgeGroups = {
73
- readonly column: string;
74
- readonly resources: Readonly<Record<string, string>>;
85
+ /** Required unless every group names its own `subject` column. */
86
+ readonly column?: string;
87
+ readonly resources: Readonly<Record<string, EdgeGroup>>;
75
88
  /** The `column` value of a row naming a principal, besides `null`. */
76
89
  readonly direct?: string;
77
90
  };
@@ -107,6 +120,10 @@ type ResourceLink = {
107
120
  readonly field: string;
108
121
  readonly resource: string;
109
122
  };
123
+ type ResourceRestricted = {
124
+ readonly field: string;
125
+ readonly stops?: readonly string[];
126
+ };
110
127
  type ActionList = readonly string[] | Record<string, ActionMeta>;
111
128
  type ResourceOptions<A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined> = {
112
129
  /**
@@ -129,13 +146,22 @@ type ResourceOptions<A extends ActionList | undefined = ActionList | undefined,
129
146
  * A boolean column: a row where it is `true` is reached only by grants on
130
147
  * itself, never by relations held on its ancestors.
131
148
  */
132
- readonly restricted?: string;
149
+ readonly restricted?: string | ResourceRestricted;
133
150
  /**
134
151
  * `'hide'`: a denied check on a loaded row answers as if the row did not
135
152
  * exist (HTTP `404`), so an id never confirms a row the caller cannot read.
136
153
  */
137
154
  readonly disclosure?: "hide" | "reveal";
155
+ /**
156
+ * Named grant levels a custom role may pick per permission, each a row
157
+ * condition (`where` shorthand or a `Condition`), such as `own`, `team` and
158
+ * `all`. A level narrows the ceiling grant it applies to and never widens
159
+ * it; it reaches only instance actions. Names match `^[a-z][a-z0-9_]*$`.
160
+ */
161
+ readonly levels?: Readonly<Record<string, ResourceLevel>>;
138
162
  };
163
+ /** A level's row condition: `where` shorthand or a normalised `Condition`, checked by `definePolicy`. */
164
+ type ResourceLevel = Readonly<Record<string, unknown>>;
139
165
  type ResourceInit<T = unknown, A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined> = {
140
166
  readonly [RESOURCE_BRAND]: true;
141
167
  readonly schema: StandardSchemaV1<unknown, T> | undefined;
@@ -151,9 +177,12 @@ type ResourceNode<T = unknown> = {
151
177
  readonly relations: Readonly<Record<string, ResourceRelation>>;
152
178
  readonly version: string | undefined;
153
179
  readonly restricted: string | undefined;
180
+ readonly restrictedStops?: readonly string[];
154
181
  readonly disclosure: "hide" | "reveal";
155
182
  readonly instanceActions: ReadonlySet<string>;
156
183
  readonly collectionActions: ReadonlySet<string>;
184
+ /** Declared level names to their raw condition; `definePolicy` normalises them. */
185
+ readonly levels?: Readonly<Record<string, ResourceLevel>>;
157
186
  };
158
187
  type PermissionTree = {
159
188
  readonly [key: string]: PermissionTree | Permission;
@@ -182,4 +211,4 @@ declare function findPermission(tree: PermissionTree, keyOrScope: string): Permi
182
211
  declare function isPermission(value: unknown): value is Permission;
183
212
  declare function mergePermissions<const Trees extends readonly PermissionTree[]>(...trees: Trees): PermissionTree;
184
213
  //#endregion
185
- export { findPermission as C, listPermissions as D, isPermission as E, mergePermissions as O, definePermissions as S, getResource as T, ResourceNode as _, EdgeGroups as a, ResourceRelation as b, FieldRelation as c, Permission as d, PermissionKind as f, ResourceLink as g, ResourceInit as h, DefinePermissionsOptions as i, resource as k, InferPermissionTree as l, PrincipalRelation as m, ActionMeta as n, EdgeMatch as o, PermissionTree as p, ComputedRelation as r, EdgeRelation as s, ActionList as t, MetaValue as u, ResourceOptions as v, formerKeys as w, ResourceRelationInput as x, ResourceParent as y };
214
+ export { listPermissions as A, ResourceRelationInput as C, formerKeys as D, findPermission as E, resource as M, getResource as O, ResourceRelation as S, definePermissions as T, ResourceLevel as _, EdgeGroup as a, ResourceOptions as b, EdgeRelation as c, MetaValue as d, Permission as f, ResourceInit as g, PrincipalRelation as h, DefinePermissionsOptions as i, mergePermissions as j, isPermission as k, FieldRelation as l, PermissionTree as m, ActionMeta as n, EdgeGroups as o, PermissionKind as p, ComputedRelation as r, EdgeMatch as s, ActionList as t, InferPermissionTree as u, ResourceLink as v, ResourceRestricted as w, ResourceParent as x, ResourceNode as y };
@@ -1,6 +1,6 @@
1
- import { n as definePermissions, y as resource } from "./permissions-DC7GROPA.js";
2
- import { s as crud } from "./src-CTNT-PBW.js";
3
- import { v as definePlans, y as defineRoles } from "./grantee-Bv04_Vzf.js";
1
+ import { b as resource, n as definePermissions } from "./permissions-DVoF6dMt.js";
2
+ import { s as crud } from "./src-BDwEZWrZ.js";
3
+ import { b as definePlans, x as defineRoles } from "./grantee-Cv5Sogfv.js";
4
4
  //#region src/testing/saas/schema.ts
5
5
  function accepts(kind, value) {
6
6
  switch (kind) {
@@ -6,7 +6,7 @@ const DRAFT_PINS = {
6
6
  };
7
7
  const PROFILE_NAMES = { fapi2: "fapi-20-security-profile" };
8
8
  /** PermDock's published `supportedParametersSchema` per profile, stable across pins. */
9
- const PROFILE_PARAMETERS = { fapi2: "https://permdock.dev/schemas/security-profiles/fapi2.json" };
10
- const GNAP_RESERVED = "scheme.type 'gnap' is reserved and emits nothing. See https://permdock.dev/docs/standards/watch-list#gnap";
9
+ const PROFILE_PARAMETERS = { fapi2: "https://permdock.com/schemas/security-profiles/fapi2.json" };
10
+ const GNAP_RESERVED = "scheme.type 'gnap' is reserved and emits nothing. See https://permdock.com/docs/standards/watch-list#gnap";
11
11
  //#endregion
12
12
  export { PROFILE_PARAMETERS as i, GNAP_RESERVED as n, PROFILE_NAMES as r, DRAFT_PINS as t };
@@ -1,5 +1,5 @@
1
- import { C as Policy, hr as Subject, mr as Principal } from "./policy-CInmNGkM.js";
2
- import { c as saasPlans, l as saasRoles, s as saasPermissions } from "./permissions-B8vCg_bI.js";
1
+ import { C as Policy, Nr as Principal, Pr as Subject } from "./policy-IB6yxpC3.js";
2
+ import { c as saasPlans, l as saasRoles, s as saasPermissions } from "./permissions-CDgvKG5L.js";
3
3
  //#region src/testing/saas/policy.d.ts
4
4
  /** Daily API-key quota per subject; the bucket should be per tenant too. */
5
5
  declare const SAAS_API_KEY_LIMIT = 5;