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,4 +1,5 @@
1
- import { n as providePermDock, t as getStore } from "./context-CKEAabd7.js";
1
+ import { c as subjectView, i as permissionSet, l as tenantView, n as filterResult, o as rolesView, r as livePermDock, t as approvalHandle } from "./views-Soe7bGSC.js";
2
+ import { n as providePermDock, t as getStore } from "./context-Ttp0ekMT.js";
2
3
  import { readable, toStore } from "svelte/store";
3
4
  //#region src/svelte/stores.ts
4
5
  function fromStore(store, compute) {
@@ -14,9 +15,7 @@ function fromStore(store, compute) {
14
15
  });
15
16
  }
16
17
  function sveltePermDock(store) {
17
- return new Proxy({}, { get(_target, prop, _receiver) {
18
- return Reflect.get(store.get(), prop);
19
- } });
18
+ return livePermDock(() => store.get());
20
19
  }
21
20
  function setPermDock(options) {
22
21
  return sveltePermDock(providePermDock(options));
@@ -34,49 +33,19 @@ function permissions(references, data) {
34
33
  return permissionsFor(getStore(), references, data);
35
34
  }
36
35
  function permissionsFor(store, references, data) {
37
- return fromStore(store, () => {
38
- const granted = [];
39
- const byKey = {};
40
- for (const reference of references()) {
41
- const next = store.permissionState(reference, data?.());
42
- byKey[reference.key] = next;
43
- if (next.allowed) granted.push(reference);
44
- }
45
- return new Proxy({
46
- granted,
47
- get(reference) {
48
- return byKey[reference.key];
49
- }
50
- }, { get(target, prop, receiver) {
51
- if (typeof prop === "string" && Object.hasOwn(byKey, prop)) return byKey[prop];
52
- return Reflect.get(target, prop, receiver);
53
- } });
54
- });
36
+ return fromStore(store, () => permissionSet(store, references(), data?.()));
55
37
  }
56
38
  function filtered(reference, rows) {
57
39
  return filteredFor(getStore(), reference, rows);
58
40
  }
59
41
  function filteredFor(store, reference, rows) {
60
- return fromStore(store, () => {
61
- const permdock = store.get();
62
- const next = permdock.filter(reference, rows());
63
- next.partial = permdock.where(reference).partial;
64
- return next;
65
- });
42
+ return fromStore(store, () => filterResult(store.get(), reference, rows()));
66
43
  }
67
44
  function tenant() {
68
45
  return tenantFor(getStore());
69
46
  }
70
47
  function tenantFor(store) {
71
- return fromStore(store, () => {
72
- const permdock = store.get();
73
- return {
74
- tenant: permdock.subject.principal?.tenant ?? null,
75
- tenants: permdock.tenants(),
76
- switchTo: (id) => permdock.refresh({ tenant: id }),
77
- status: permdock.status()
78
- };
79
- });
48
+ return fromStore(store, () => tenantView(store.get()));
80
49
  }
81
50
  function memberships() {
82
51
  return membershipsFor(getStore());
@@ -88,11 +57,7 @@ function roles(options = () => ({})) {
88
57
  return rolesFor(getStore(), options);
89
58
  }
90
59
  function rolesFor(store, options = () => ({})) {
91
- return fromStore(store, () => {
92
- const next = options();
93
- const permdock = store.get();
94
- return { roles: (next.team === void 0 ? permdock : permdock.team(next.team)).heldRoles(next.tenant === void 0 ? void 0 : { tenant: next.tenant }) };
95
- });
60
+ return fromStore(store, () => rolesView(store.get(), options()));
96
61
  }
97
62
  function assignable() {
98
63
  return assignableFor(getStore());
@@ -104,37 +69,19 @@ function assignablePermissions(options = {}) {
104
69
  return assignablePermissionsFor(getStore(), options);
105
70
  }
106
71
  function assignablePermissionsFor(store, options = {}) {
107
- return fromStore(store, () => store.get().assignablePermissions(options));
72
+ return fromStore(store, () => store.get().assignablePermissions(typeof options === "function" ? options() : options));
108
73
  }
109
74
  function subject() {
110
75
  return subjectFor(getStore());
111
76
  }
112
77
  function subjectFor(store) {
113
- return fromStore(store, () => {
114
- const permdock = store.get();
115
- const snapshot = permdock.snapshot();
116
- const simulated = typeof snapshot === "object" && snapshot !== null && "simulated" in snapshot && snapshot.simulated === true;
117
- return {
118
- principal: permdock.subject.principal,
119
- actor: permdock.subject.actor,
120
- delegation: permdock.subject.delegation,
121
- expiresAt: permdock.subject.expiresAt,
122
- simulated
123
- };
124
- });
78
+ return fromStore(store, () => subjectView(store.get()));
125
79
  }
126
80
  function approval(decision) {
127
81
  return approvalFor(getStore(), decision);
128
82
  }
129
83
  function approvalFor(store, decision) {
130
- return fromStore(store, () => {
131
- const next = decision();
132
- return {
133
- state: store.approvalState(next),
134
- token: next.outcome === "approval-required" ? next.token : void 0,
135
- request: (note) => store.requestApproval(next, note)
136
- };
137
- });
84
+ return fromStore(store, () => approvalHandle(store, decision()));
138
85
  }
139
86
  //#endregion
140
87
  export { getPermDock as a, permissions as c, subject as d, tenant as f, filtered as i, roles as l, assignable as n, memberships as o, assignablePermissions as r, permission as s, approval as t, setPermDock as u };
@@ -1,7 +1,7 @@
1
- import { Et as TokenVerifier, Mn as Decision, gt as Snapshot, pr as Membership } from "./policy-CInmNGkM.js";
2
- import { d as Permission } from "./permissions-B4apnahQ.js";
3
- import { r as Role } from "./vocabulary-Dk0fs-Jk.js";
4
- import { a as FilterResult, c as PermissionState, d as TenantView, f as UseRolesOptions, r as ClientPermDock, s as PermissionSet, t as ApprovalHandle, u as SubjectView } from "./types-DbWdEfcm.js";
1
+ import { Ft as TokenVerifier, Mr as Membership, Tt as Snapshot, Yn as Decision } from "./policy-CFZAr_Al.js";
2
+ import { f as Permission } from "./permissions-DttnqqxC.js";
3
+ import { r as Role } from "./vocabulary-DA8a8zif.js";
4
+ import { a as FilterResult, c as SubjectView, l as TenantView, o as PermissionSet, r as ClientPermDock, s as PermissionState, t as ApprovalHandle, u as UseRolesOptions } from "./types-kxznc7cn.js";
5
5
  import { Readable } from "svelte/store";
6
6
  //#region src/svelte/types.d.ts
7
7
  type PermDockSvelteOptions = {
@@ -11,11 +11,19 @@ type PermDockSvelteOptions = {
11
11
  * settles (render the same promise with `{#await}`).
12
12
  */
13
13
  readonly snapshot: Snapshot | string | (() => Snapshot | string) | Readable<Snapshot | string> | PromiseLike<Snapshot | string>;
14
- readonly endpoint?: string;
14
+ /**
15
+ * The AuthZEN evaluations endpoint for checks the snapshot cannot answer.
16
+ * `false` never calls one: such a check is denied with reason `server-only`.
17
+ */
18
+ readonly endpoint?: string | false;
19
+ /** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
20
+ readonly snapshotUrl?: string;
15
21
  readonly approvals?: string;
16
- readonly tenant?: string;
22
+ /** A getter (`() => page.params.org`) switches the active tenant (`refresh({ tenant })`) when it changes. */
23
+ readonly tenant?: string | (() => string | undefined);
17
24
  readonly fetch?: typeof fetch;
18
- readonly headers?: Readonly<Record<string, string>>;
25
+ /** A getter is read on every request, so a rotated token applies without a new store. */
26
+ readonly headers?: Readonly<Record<string, string>> | (() => Readonly<Record<string, string>> | undefined);
19
27
  readonly maxAge?: number;
20
28
  readonly verifier?: TokenVerifier;
21
29
  };
@@ -32,9 +40,12 @@ declare function roles(options?: () => UseRolesOptions): Readable<{
32
40
  readonly roles: readonly Role[];
33
41
  }>;
34
42
  declare function assignable(): Readable<readonly Role[]>;
35
- declare function assignablePermissions(options?: {
43
+ type AssignableOptions = {
44
+ readonly tenant?: string;
45
+ } | (() => {
36
46
  readonly tenant?: string;
37
- }): Readable<readonly Permission[]>;
47
+ });
48
+ declare function assignablePermissions(options?: AssignableOptions): Readable<readonly Permission[]>;
38
49
  declare function subject(): Readable<SubjectView>;
39
50
  declare function approval(decision: () => Decision): Readable<ApprovalHandle>;
40
51
  //#endregion
@@ -1,4 +1,4 @@
1
- import { r as PermDockRevokedError } from "./errors-Iy71s7Oj.js";
1
+ import { r as PermDockRevokedError } from "./errors-Cz5zn0mW.js";
2
2
  //#region src/server/stream.ts
3
3
  function isAsyncIterable(value) {
4
4
  return value !== null && typeof value === "object" && typeof value[Symbol.asyncIterator] === "function";
@@ -33,6 +33,20 @@ async function* guardIterable(source, connection, options) {
33
33
  if (closing !== void 0) Promise.resolve(closing).catch(() => void 0);
34
34
  }
35
35
  }
36
+ /**
37
+ * The connection loader for a stream `protect` already admitted: the first
38
+ * read returns the row `protect` loaded, and each revalidation reloads it.
39
+ */
40
+ function reloadAfter(loaded, load) {
41
+ let first = true;
42
+ return () => {
43
+ if (first) {
44
+ first = false;
45
+ return loaded;
46
+ }
47
+ return load();
48
+ };
49
+ }
36
50
  /** WebSocket close code for a policy violation (RFC 6455 section 7.4.1). */
37
51
  const POLICY_VIOLATION = 1008;
38
52
  /** The Problem Details for an aborted connection signal. */
@@ -49,4 +63,4 @@ function onRevoked(connection, end) {
49
63
  else connection.signal.addEventListener("abort", fire, { once: true });
50
64
  }
51
65
  //#endregion
52
- export { onRevoked as i, guardIterable as n, isAsyncIterable as r, POLICY_VIOLATION as t };
66
+ export { reloadAfter as a, onRevoked as i, guardIterable as n, isAsyncIterable as r, POLICY_VIOLATION as t };
@@ -1,5 +1,5 @@
1
- import { d as Permission } from "./permissions-B4apnahQ.js";
2
- import { r as ProtectOptions } from "./create-BKF3dgFk.js";
1
+ import { f as Permission } from "./permissions-DttnqqxC.js";
2
+ import { i as ProtectOptions } from "./create-BWyx3jua.js";
3
3
  //#region src/server/stream.d.ts
4
4
  type StreamProtectOptions = ProtectOptions & {
5
5
  /**
@@ -0,0 +1,128 @@
1
+ //#region src/conditions/row-check.ts
2
+ const MISSING = Object.freeze({ found: false });
3
+ const GRANTED = Object.freeze({
4
+ found: true,
5
+ granted: true
6
+ });
7
+ const DENIED = Object.freeze({
8
+ found: true,
9
+ granted: false
10
+ });
11
+ function rowCheckOf(found, granted) {
12
+ return found ? granted ? GRANTED : DENIED : MISSING;
13
+ }
14
+ /** Reads `select <filter> as granted ... where <key> limit 2`; only a boolean `true` or `1` grants. */
15
+ function rowCheckFrom(rows) {
16
+ if (rows.length > 1) throw new Error("PermDock: checkRow key matches more than one row");
17
+ const [row] = rows;
18
+ return rowCheckOf(row !== void 0, row?.granted === true || row?.granted === 1);
19
+ }
20
+ //#endregion
21
+ //#region src/conditions/subject-settings.ts
22
+ const NAME = /^[a-z_][a-z0-9_]*$/u;
23
+ function settingName(name, what) {
24
+ if (!NAME.test(name)) throw new Error(`PermDock: unsafe ${what} '${name}'`);
25
+ return name;
26
+ }
27
+ function isRecord(value) {
28
+ return typeof value === "object" && value !== null && !Array.isArray(value);
29
+ }
30
+ function strings(value) {
31
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
32
+ }
33
+ /**
34
+ * The credential a principal acts through. Entries limited to `ids` are left
35
+ * out of `scopes`: the claim has no per-row form, so the database allows less.
36
+ */
37
+ function heldCredential(principal) {
38
+ const credential = Reflect.get(principal, "credential");
39
+ if (!isRecord(credential) || typeof credential["id"] !== "string" || credential["kind"] !== "user" && credential["kind"] !== "service" || !Array.isArray(credential["permissions"])) return;
40
+ const scopes = credential["permissions"].flatMap((entry) => isRecord(entry) && typeof entry["permission"] === "string" && entry["ids"] === void 0 ? [entry["permission"]] : []);
41
+ const tenant = credential["tenant"];
42
+ return {
43
+ id: credential["id"],
44
+ kind: credential["kind"],
45
+ tenant: typeof tenant === "string" && tenant !== "" ? tenant : void 0,
46
+ roles: strings(credential["roles"]),
47
+ scopes
48
+ };
49
+ }
50
+ function field(name, fallback) {
51
+ return settingName(name ?? fallback, "API-key claim field");
52
+ }
53
+ function apiKeyClaim(held, options = {}) {
54
+ const claim = {
55
+ id: held.id,
56
+ [field(options.scopes, "scopes")]: held.scopes
57
+ };
58
+ if (held.tenant !== void 0) claim[field(options.tenant, "tenant")] = held.tenant;
59
+ if (held.kind === "service") claim[field(options.roles, "roles")] = held.roles;
60
+ return [field(options.claim, "api_key"), claim];
61
+ }
62
+ function setConfigs(settings) {
63
+ if (settings.length === 0) return [];
64
+ const parts = [];
65
+ let open = "select ";
66
+ for (const [name] of settings) {
67
+ parts.push(`${open}set_config('${name}', `);
68
+ open = ", true), ";
69
+ }
70
+ parts.push(", true)");
71
+ return [{
72
+ strings: parts,
73
+ values: settings.map(([, value]) => value)
74
+ }];
75
+ }
76
+ /**
77
+ * The transaction preamble that makes Postgres see `permdock.subject`: one `select set_config(…)`
78
+ * that sets the role, then the claims the generated policies read. Runs inside the caller's
79
+ * transaction, so every setting is local to it.
80
+ */
81
+ function subjectStatements(permdock, options = {}) {
82
+ const principal = permdock.subject.principal;
83
+ const role = options.role ?? (principal === null ? "anon" : "authenticated");
84
+ if (role !== false && role !== "authenticated" && role !== "anon") throw new Error(`PermDock: withSubject sets role authenticated or anon, not '${String(role)}'`);
85
+ const tenantClaim = settingName(options.tenantClaim ?? "tenant_id", "tenant claim");
86
+ const claims = Object.fromEntries(Object.entries(options.claims ?? {}).filter(([name]) => name !== "sub" && name !== "role" && name !== tenantClaim));
87
+ if (principal !== null) {
88
+ const held = heldCredential(principal);
89
+ claims["sub"] = held?.kind === "service" ? "" : principal.id;
90
+ if (principal.tenant !== void 0) claims[tenantClaim] = principal.tenant;
91
+ if (held !== void 0) {
92
+ const [name, value] = apiKeyClaim(held, options.apiKeys);
93
+ claims[name] = value;
94
+ }
95
+ }
96
+ if (role !== false) claims["role"] = role;
97
+ const subjectId = typeof claims["sub"] === "string" ? claims["sub"] : "";
98
+ const settings = role === false ? [] : [["role", role]];
99
+ const dialect = options.dialect ?? "supabase";
100
+ switch (dialect) {
101
+ case "supabase":
102
+ case "neon":
103
+ settings.push(["request.jwt.claims", JSON.stringify(claims)]);
104
+ return setConfigs(settings);
105
+ case "guc": {
106
+ const prefix = settingName(options.gucPrefix ?? "app", "setting prefix");
107
+ settings.push([`${prefix}.user_id`, subjectId]);
108
+ for (const [name, value] of Object.entries(claims)) {
109
+ if (name === "sub") continue;
110
+ settings.push([`${prefix}.${settingName(name, "claim name")}`, typeof value === "string" ? value : JSON.stringify(value)]);
111
+ }
112
+ return setConfigs(settings);
113
+ }
114
+ default: return dialect;
115
+ }
116
+ }
117
+ /** A statement as text with `$1`, `$2` placeholders, for raw executors. */
118
+ function statementText(statement) {
119
+ let text = "";
120
+ for (const [index, part] of statement.strings.entries()) text = index === 0 ? part : `${text}$${String(index)}${part}`;
121
+ return text;
122
+ }
123
+ /** A statement as a template-strings array, for `sql` tags. */
124
+ function statementTemplate(statement) {
125
+ return Object.assign([...statement.strings], { raw: [...statement.strings] });
126
+ }
127
+ //#endregion
128
+ export { rowCheckOf as a, rowCheckFrom as i, statementText as n, subjectStatements as r, statementTemplate as t };
@@ -1,6 +1,8 @@
1
- import { hr as Subject } from "../policy-CInmNGkM.js";
2
- import { a as SupabaseManifestMembership, i as SupabaseManifestHelper, n as SupabaseHookManifest, o as SupabaseManifestRls, r as SupabaseManifestColumn, s as SupabaseManifestValue, t as SupabaseHookClaim } from "../manifest-DDQbC6K0.js";
3
- import { C as SupabaseActClaim, D as SupabaseMembershipClaim, E as SupabaseClaimsSchema, O as SupabasePermDockClaims, S as SupabaseSuspension, T as SupabaseClaimsOptions, _ as SupabasePrincipal, a as SqlMembershipSource, b as SupabaseSessionLike, c as fromJunction, d as SupabaseActiveRow, f as SupabaseActor, g as SupabaseMembershipTable, h as SupabaseInclude, i as MembershipTableOptions, k as supabaseClaims, l as fromTable, m as SupabaseDelegation, n as MembershipJunctionOptions, o as SqlQuery, p as SupabaseActorResult, r as MembershipSql, s as authzVersion, t as AUTHZ_VERSION_TABLE, u as AuthorizeSqlOptions, v as SupabaseRlsConfig, w as SupabaseClaims, x as SupabaseSubjectOptions, y as SupabaseRlsOptions } from "../sources-DOpW5Ila.js";
1
+ import { C as Policy, Dr as CustomRole, Mr as Membership, Pr as Subject, gt as MembershipSource, mt as MemberEntry, xt as RoleSource } from "../policy-CFZAr_Al.js";
2
+ import { c as ApprovalRequest, f as ApprovalStore } from "../types-vKyAMtcX.js";
3
+ import { C as SupabaseClaimsSchema, E as supabaseClaims, S as SupabaseClaimsOptions, T as SupabasePermDockClaims, _ as SupabaseSuspendedMembership, a as SupabaseActorResult, b as SupabaseActClaim, c as SupabaseMembershipTable, d as SupabaseRealtime, f as SupabaseRlsConfig, g as SupabaseSubjectOptions, h as SupabaseStorage, i as SupabaseActor, l as SupabasePermissionRef, m as SupabaseSessionLike, n as RoleThrough, o as SupabaseDelegation, p as SupabaseRlsOptions, r as SupabaseActiveRow, s as SupabaseInclude, t as AuthorizeSqlOptions, u as SupabasePrincipal, v as SupabaseSuspendedScope, w as SupabaseMembershipClaim, x as SupabaseClaims, y as SupabaseSuspension } from "../types-yF5LmQVD.js";
4
+ import { a as SupabaseManifestHelper, c as SupabaseManifestRls, d as SupabaseManifestValue, f as parseSupabaseManifest, i as SupabaseManifestColumn, l as SupabaseManifestRole, n as SupabaseHookManifest, o as SupabaseManifestMembership, r as SupabaseManifestActiveRow, s as SupabaseManifestRequires, t as SupabaseHookClaim, u as SupabaseManifestThrough } from "../manifest-uDS9y5de.js";
5
+ import { a as MembershipTableOptions, c as SupabasePostgres, d as fromSupabasePostgres, f as fromTable, i as MembershipSql, l as authzVersion, n as MembershipHolders, o as SqlMembershipSource, r as MembershipJunctionOptions, s as SqlQuery, t as AUTHZ_VERSION_TABLE, u as fromJunction } from "../sources-BcJgw0lt.js";
4
6
  import { n as supabaseTenantClaim, t as supabaseMembershipsBudget } from "../budget-JqcRqyhK.js";
5
7
  //#region src/supabase/capability.d.ts
6
8
  type ExchangeCapabilityOptions = {
@@ -28,6 +30,117 @@ type ExchangeCapabilityOptions = {
28
30
  */
29
31
  export declare function exchangeCapability(subject: Subject, options: ExchangeCapabilityOptions): Promise<string | undefined>;
30
32
  //#endregion
33
+ //#region src/supabase/postgrest.d.ts
34
+ /** What a supabase-js `rpc` call resolves to: `data` or an `error` with a message. */
35
+ type SupabaseRpcResult = {
36
+ readonly data: unknown;
37
+ readonly error: {
38
+ readonly message: string;
39
+ } | null;
40
+ };
41
+ /**
42
+ * The part of a supabase-js client `postgrestSources` calls:
43
+ * `client.schema(name).rpc(fn, args)`. Pass a client that may execute the
44
+ * function, such as a `service_role` client after the grant the docs show.
45
+ */
46
+ type SupabaseRpcClient = {
47
+ schema(name: string): {
48
+ rpc(fn: string, args: Readonly<Record<string, unknown>>): PromiseLike<SupabaseRpcResult>;
49
+ };
50
+ };
51
+ type SupabaseRpcCaller = {
52
+ schema(name: never): {
53
+ rpc(fn: never, args: never): PromiseLike<SupabaseRpcResult>;
54
+ };
55
+ };
56
+ type PostgrestSourcesOptions = {
57
+ /** Schema of the functions. Default `permdock`, where the hook generates `subject_for` and `members_of`. */
58
+ readonly schema?: string;
59
+ /** Function name, for a wrapper in an exposed schema. Default `subject_for`. */
60
+ readonly fn?: string;
61
+ readonly membersFn?: string;
62
+ /** The version-only function `memberships.version` calls. Default `authz_version_for`. */
63
+ readonly versionFn?: string;
64
+ /**
65
+ * The policy whose declared roles tell custom roles apart. With it,
66
+ * `customRoles` reads nothing while every role the subject holds is
67
+ * declared, and `memberships.version` reads the whole subject in one call
68
+ * when the token claims a custom role, which the custom roles need anyway.
69
+ */
70
+ readonly policy?: Policy;
71
+ };
72
+ /** One user as `subject_for(p_user)` returns it. */
73
+ type SubjectRecord = {
74
+ readonly id: string;
75
+ /** `false` for a suspended user, who holds no roles or memberships. */
76
+ readonly active: boolean;
77
+ readonly roles: readonly string[];
78
+ readonly memberships: readonly Membership[];
79
+ readonly customRoles: readonly CustomRole[];
80
+ readonly authzVersion?: number;
81
+ };
82
+ type PostgrestSources = {
83
+ /**
84
+ * Memberships and the authorization version of any principal, and `list`,
85
+ * the live members of one scope instance through `members_of`, for
86
+ * `countHolders` and `whoCan`. Wrap it in `claimsFirst` to read only when
87
+ * the token was truncated.
88
+ */
89
+ readonly memberships: MembershipSource & {
90
+ list(query: {
91
+ readonly scope: string;
92
+ readonly id: string;
93
+ }): Promise<MemberEntry[]>;
94
+ };
95
+ /** The custom roles `principal` holds, for `createPermDock`'s `customRoles`. */
96
+ customRoles(principal: {
97
+ readonly id: string;
98
+ }): RoleSource;
99
+ /** The subject the hook would mint for `userId`: anonymous when the user is unknown or suspended. */
100
+ subject(userId: string): Promise<Subject>;
101
+ /** The raw record, `undefined` for an unknown user. */
102
+ record(userId: string): Promise<SubjectRecord | undefined>;
103
+ };
104
+ /** Reads `subject_for`'s JSON; anything it cannot read is left out, and a malformed record is no record. */
105
+ export declare function readSubjectRecord(value: unknown): SubjectRecord | undefined;
106
+ /**
107
+ * Membership, custom-role and subject sources over the `subject_for(p_user)`,
108
+ * `authz_version_for(p_user)` and `members_of(p_scope, p_id)` functions
109
+ * `permdock supabase hook generate` writes, for a backend that reaches
110
+ * Postgres only through PostgREST. `memberships.version` reads only the
111
+ * version, so `claimsFirst` with `onStale: 'reread'` reads the full subject
112
+ * only for a stale token; when the version function is missing it falls back
113
+ * to `subject_for`. With `policy`, a token that claims a custom role has its
114
+ * subject read in one `subject_for` call instead, and custom roles are read
115
+ * only for a subject that holds one. Each user and each instance is read once per
116
+ * `postgrestSources` call, so create it per request or per job.
117
+ */
118
+ export declare function postgrestSources(client: SupabaseRpcCaller, options?: PostgrestSourcesOptions): PostgrestSources;
119
+ //#endregion
120
+ //#region src/supabase/approval-store.d.ts
121
+ type SupabaseApprovalStoreOptions = {
122
+ /** Schema of the generated store functions (`rls.schema`). Default `permdock`. */
123
+ readonly schema?: string;
124
+ /** How long a request stays open when the caller sets no `ttl`, in milliseconds. */
125
+ readonly ttl?: number;
126
+ /**
127
+ * Runs once per stored request, after the call that stored it, with the
128
+ * stored request: notify the approvers, or cancel the requests this one
129
+ * replaces. A repeated ask that finds the request still open does not run
130
+ * it again. A throw fails the open, so the caller does not run the action.
131
+ */
132
+ readonly onOpen?: (request: ApprovalRequest) => void | Promise<void>;
133
+ };
134
+ /**
135
+ * An `ApprovalStore` over the table and functions `rls.approvals` generates,
136
+ * called through supabase-js (`client.schema(schema).rpc(...)`) with a
137
+ * client that may execute them, such as a `service_role` client. Each method
138
+ * is one atomic statement in the database: a repeated ask keeps the open
139
+ * request, two racing approvers both count towards a quorum, and two racing
140
+ * resumes never both consume an approval.
141
+ */
142
+ export declare function supabaseApprovalStore(client: SupabaseRpcCaller, options?: SupabaseApprovalStoreOptions): ApprovalStore;
143
+ //#endregion
31
144
  //#region src/supabase/rls.d.ts
32
145
  export declare function supabaseRls(options?: SupabaseRlsOptions): SupabaseRlsConfig;
33
146
  /**
@@ -55,13 +168,16 @@ export declare function authorizeSql(options?: AuthorizeSqlOptions): string;
55
168
  * is `{ ok: false }` and must deny.
56
169
  */
57
170
  export declare function actorOf(claims: unknown): SupabaseActorResult;
58
- /** The OAuth `scope` claim (a space-separated string or a list) as `scopes`; `undefined` when empty. */
171
+ /**
172
+ * The OAuth `scope` claim (a space-separated string or a list) as `scopes`,
173
+ * without the OpenID Connect identity scopes; `undefined` when none is left.
174
+ */
59
175
  export declare function delegationOf(claims: unknown): SupabaseDelegation | undefined;
60
176
  export declare function subjectFromSupabase(claims: unknown, options?: SupabaseSubjectOptions): Subject<SupabasePrincipal>;
61
177
  /**
62
- * A verified session object (for example better-supabase's `AuthSession`) in, `Subject` out.
178
+ * A verified session object (`{ kind, claims }`) in, `Subject` out.
63
179
  * Only `kind: 'user'` sessions map; `anon`, `service`, `invalid` and anything else are anonymous.
64
180
  */
65
181
  export declare function subjectFromSupabaseSession(session: SupabaseSessionLike | null | undefined, options?: SupabaseSubjectOptions): Subject<SupabasePrincipal>;
66
182
  //#endregion
67
- export { AUTHZ_VERSION_TABLE, type AuthorizeSqlOptions, type ExchangeCapabilityOptions, type MembershipJunctionOptions, type MembershipSql, type MembershipTableOptions, type SqlMembershipSource, type SqlQuery, type SupabaseActClaim, type SupabaseActiveRow, type SupabaseActor, type SupabaseActorResult, type SupabaseClaims, type SupabaseClaimsOptions, type SupabaseClaimsSchema, type SupabaseDelegation, type SupabaseHookClaim, type SupabaseHookManifest, type SupabaseInclude, type SupabaseManifestColumn, type SupabaseManifestHelper, type SupabaseManifestMembership, type SupabaseManifestRls, type SupabaseManifestValue, type SupabaseMembershipClaim, type SupabaseMembershipTable, type SupabasePermDockClaims, type SupabasePrincipal, type SupabaseRlsConfig, type SupabaseRlsOptions, type SupabaseSessionLike, type SupabaseSubjectOptions, type SupabaseSuspension, authzVersion, fromJunction, fromTable, supabaseClaims, supabaseMembershipsBudget, supabaseTenantClaim };
183
+ export { AUTHZ_VERSION_TABLE, type AuthorizeSqlOptions, type ExchangeCapabilityOptions, type MembershipHolders, type MembershipJunctionOptions, type MembershipSql, type MembershipTableOptions, type PostgrestSources, type PostgrestSourcesOptions, type RoleThrough, type SqlMembershipSource, type SqlQuery, type SubjectRecord, type SupabaseActClaim, type SupabaseActiveRow, type SupabaseActor, type SupabaseActorResult, type SupabaseApprovalStoreOptions, type SupabaseClaims, type SupabaseClaimsOptions, type SupabaseClaimsSchema, type SupabaseDelegation, type SupabaseHookClaim, type SupabaseHookManifest, type SupabaseInclude, type SupabaseManifestActiveRow, type SupabaseManifestColumn, type SupabaseManifestHelper, type SupabaseManifestMembership, type SupabaseManifestRequires, type SupabaseManifestRls, type SupabaseManifestRole, type SupabaseManifestThrough, type SupabaseManifestValue, type SupabaseMembershipClaim, type SupabaseMembershipTable, type SupabasePermDockClaims, type SupabasePermissionRef, type SupabasePostgres, type SupabasePrincipal, type SupabaseRealtime, type SupabaseRlsConfig, type SupabaseRlsOptions, type SupabaseRpcCaller, type SupabaseRpcClient, type SupabaseRpcResult, type SupabaseSessionLike, type SupabaseStorage, type SupabaseSubjectOptions, type SupabaseSuspendedMembership, type SupabaseSuspendedScope, type SupabaseSuspension, authzVersion, fromJunction, fromSupabasePostgres, fromTable, parseSupabaseManifest, supabaseClaims, supabaseMembershipsBudget, supabaseTenantClaim };
@@ -1,4 +1,5 @@
1
- import { a as subjectFromSupabaseSession, c as supabaseClaims, i as subjectFromSupabase, l as exchangeCapability, n as delegationOf, o as authorizeSql, s as supabaseRls, t as actorOf } from "../supabase-DTxGtYdi.js";
1
+ import { a as readSubjectRecord, i as postgrestSources, n as supabaseRls, o as supabaseClaims, r as supabaseApprovalStore, s as exchangeCapability, t as authorizeSql } from "../supabase-DTBaC20O.js";
2
2
  import { n as supabaseTenantClaim, t as supabaseMembershipsBudget } from "../budget-NbEtbJC_.js";
3
- import { a as fromTable, i as fromJunction, r as authzVersion, t as AUTHZ_VERSION_TABLE } from "../sources-DVHM3Mwq.js";
4
- export { AUTHZ_VERSION_TABLE, actorOf, authorizeSql, authzVersion, delegationOf, exchangeCapability, fromJunction, fromTable, subjectFromSupabase, subjectFromSupabaseSession, supabaseClaims, supabaseMembershipsBudget, supabaseRls, supabaseTenantClaim };
3
+ import { a as fromSupabasePostgres, i as fromJunction, o as fromTable, r as authzVersion, t as AUTHZ_VERSION_TABLE } from "../sources-B0UvrJ21.js";
4
+ import { a as subjectFromSupabase, n as actorOf, o as subjectFromSupabaseSession, r as delegationOf, t as parseSupabaseManifest } from "../manifest-iaoBXHKc.js";
5
+ export { AUTHZ_VERSION_TABLE, actorOf, authorizeSql, authzVersion, delegationOf, exchangeCapability, fromJunction, fromSupabasePostgres, fromTable, parseSupabaseManifest, postgrestSources, readSubjectRecord, subjectFromSupabase, subjectFromSupabaseSession, supabaseApprovalStore, supabaseClaims, supabaseMembershipsBudget, supabaseRls, supabaseTenantClaim };
@@ -1,9 +1,8 @@
1
- import { $ as DecisionSink, C as Policy, E as PolicyVocabulary, Zt as PermDock, at as LimitStore, ct as MembershipSource, ft as RelationSource, hr as Subject, mr as Principal, pt as RoleSource, sn as PolicySource, tt as EntitlementSource, xt as SnapshotSource } from "../policy-CInmNGkM.js";
2
- import { d as Permission } from "../permissions-B4apnahQ.js";
3
- import { f as ApprovalStore } from "../types-B8w5PFtS.js";
4
- import { o as OtelWrap } from "../types-B9dmiiab.js";
5
- import { r as PdpFactory } from "../types-BvBk1wgn.js";
6
- import { h as WebBotAuthVerifier, n as OpenApiHooks } from "../create-BKF3dgFk.js";
1
+ import { C as Policy, D as PolicyVocabulary, Nr as Principal, Pr as Subject, ln as PermDock } from "../policy-CFZAr_Al.js";
2
+ import { f as Permission } from "../permissions-DttnqqxC.js";
3
+ import { t as InstanceOptions } from "../instance-options-BK_rNOSC.js";
4
+ import { n as OpenApiHooks } from "../create-BWyx3jua.js";
5
+ import { n as ServerAdapterServices } from "../bind-CVy3Espv.js";
7
6
  import { Middleware } from "@supabase/middleware";
8
7
  //#region src/supabase/middleware.d.ts
9
8
  /**
@@ -26,37 +25,43 @@ export type SupabaseJwtClaims = {
26
25
  /**
27
26
  * What `withPermDock` requires upstream: a `jwtClaims` contribution. Supabase's
28
27
  * `withClaims`, `withRequiredClaims` and `withSupabase` all provide it; `null`
29
- * is the anonymous caller (no bearer token, an `sb_*` API key, or the `secret`
30
- * auth mode).
28
+ * is the anonymous caller (no bearer token or an `sb_*` API key), unless
29
+ * `secretKeys` names the secret key `withSupabase` matched.
31
30
  */
32
31
  export type SupabaseMiddlewareContext = {
33
32
  readonly jwtClaims: SupabaseJwtClaims | null;
34
33
  };
35
- export type SupabaseMiddlewarePermDockOptions<TUser = unknown> = {
34
+ /**
35
+ * A Supabase secret key that acts as a tenant service principal. `id` is the
36
+ * principal id, `roles` are held in `tenant` only, and `permissions` caps
37
+ * what the key may do, as a `service` credential does.
38
+ */
39
+ export type SupabaseSecretKey = {
40
+ readonly id: string;
41
+ readonly tenant: string;
42
+ readonly roles: readonly string[];
43
+ readonly permissions: readonly Permission[];
44
+ };
45
+ export type SupabaseMiddlewarePermDockOptions<TUser = unknown> = InstanceOptions & ServerAdapterServices & {
46
+ /**
47
+ * Named secret keys (`SUPABASE_SECRET_KEYS`) that act as service
48
+ * principals when `withSupabase` matched one (`authMode: 'secret'` with
49
+ * that `authKeyName`). Any other key, an unnamed `secret` and every
50
+ * `publishable` key stay anonymous.
51
+ */
52
+ readonly secretKeys?: Readonly<Record<string, SupabaseSecretKey>>;
36
53
  readonly subject: (ctx: SupabaseMiddlewareContext, request: Request) => TUser | Subject | null | Promise<TUser | Subject | null>;
37
54
  readonly tenant?: string | ((ctx: SupabaseMiddlewareContext, request: Request) => string | undefined | Promise<string | undefined>);
38
- readonly memberships?: MembershipSource | readonly MembershipSource[];
39
- /** The object graph for relation grants that walk a parent chain; without it they deny. */
40
- readonly relations?: RelationSource;
41
- readonly entitlements?: EntitlementSource;
42
- readonly customRoles?: RoleSource;
43
- /** Hosted grants, read once per instance; see `PolicySource`. */
44
- readonly policies?: PolicySource;
45
- readonly store?: ApprovalStore;
46
- readonly sink?: DecisionSink;
47
- readonly limits?: LimitStore;
48
- /** `createPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
49
- readonly pdp?: PdpFactory;
50
- /** Accepted for adapter parity; not read by this adapter. */
51
- readonly snapshots?: SnapshotSource;
52
- /** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
53
- readonly otel?: OtelWrap;
54
- /** `(request) => verifyWebBotAuth(request, options)`; a verified bot becomes the actor. */
55
- readonly webBotAuth?: WebBotAuthVerifier;
56
55
  };
57
56
  export type WithPermDockConfig = {
58
57
  /** Run `protect` before the handler; a denial short-circuits with Problem Details. */
59
58
  readonly protect?: Permission;
59
+ /**
60
+ * The OAuth scopes that reach the handler: a delegated token holding none
61
+ * of them is refused with `insufficient_scope`. Without `protect`, the
62
+ * handler needs a signed-in principal and checks no permission.
63
+ */
64
+ readonly oauthScopes?: readonly string[];
60
65
  /** Load the row `protect` decides on; `null` or `undefined` yields 404. */
61
66
  readonly data?: (ctx: SupabaseMiddlewareContext, request: Request) => unknown;
62
67
  /** `true` when `data` returns a row the server loaded; anything else is validated before the check. */