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,7 +1,7 @@
1
- import { Qt as PermDockOptions, at as LimitStore, cr as CustomRole, ft as RelationSource, hr as Subject, ir as Actor, mr as Principal, pr as Membership, ur as Delegation } from "../../policy-CInmNGkM.js";
2
- import { d as Permission } from "../../permissions-B4apnahQ.js";
3
- import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-B8vCg_bI.js";
4
- import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-Cq2fB8Q5.js";
1
+ import { Cr as Actor, Dr as CustomRole, Mr as Membership, Nr as Principal, Pr as Subject, bt as RelationSource, dt as LimitStore, kr as Delegation, un as PermDockOptions } from "../../policy-IB6yxpC3.js";
2
+ import { f as Permission } from "../../permissions-DttnqqxC.js";
3
+ import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-CDgvKG5L.js";
4
+ import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-D2W7uv19.js";
5
5
  import { StandardSchemaV1 } from "@standard-schema/spec";
6
6
  //#region src/testing/saas/schema.d.ts
7
7
  type FieldKind = "string" | "boolean" | "nullable-string";
@@ -1,3 +1,3 @@
1
- import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-CofRqesP.js";
2
- import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-BRrZzJkM.js";
1
+ import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-RJrovw98.js";
2
+ import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-DhpJjnBA.js";
3
3
  export { SAAS_API_KEY_LIMIT, SAAS_EXPIRED_AT, SAAS_TOKEN_TTL_SECONDS, SaasDocSchema, SaasFolderSchema, SaasProjectSchema, rowSchema, saasAudience, saasCustomRoles, saasDoc, saasFolder, saasFolderScenarios, saasIssuer, saasJwks, saasLimitStore, saasMemberships, saasOrg, saasPermissions, saasPlans, saasPolicy, saasPrincipal, saasPrivateJwk, saasProject, saasPublicJwk, saasRelations, saasRoles, saasScenarioOptions, saasScenarios, saasSchemaSql, saasSeed, saasSeedSql, saasTenantRoleNames, saasUser, saasUsers, signSaasToken, verifySaasSession, verifySaasToken };
@@ -1,2 +1,2 @@
1
- import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-B8vCg_bI.js";
1
+ import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-CDgvKG5L.js";
2
2
  export { SaasDoc, SaasDocSchema, SaasFolder, SaasFolderSchema, SaasProject, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
@@ -1,2 +1,2 @@
1
- import { a as saasPlans, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-CofRqesP.js";
1
+ import { a as saasPlans, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-RJrovw98.js";
2
2
  export { SaasDocSchema, SaasFolderSchema, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
@@ -0,0 +1,50 @@
1
+ import { t as canonicalJson } from "./canonical-json-DemiK4Vp.js";
2
+ import { n as sha256, t as bytesToBase64Url } from "./sha256-BO0swRXL.js";
3
+ //#region src/core/token.ts
4
+ /**
5
+ * Only stable identity goes into the token, so refreshing a session (new
6
+ * roles, assurance or claims) does not orphan an outstanding approval.
7
+ */
8
+ function principalIdentity(principal) {
9
+ if (principal === null) return null;
10
+ return {
11
+ id: principal.id,
12
+ tenant: principal.tenant ?? null,
13
+ issuer: principal.issuer ?? null
14
+ };
15
+ }
16
+ /** A row's `version` field as token input; `null` when it is missing or not a scalar. */
17
+ function versionOf(row, field) {
18
+ if (row === null || typeof row !== "object" || !Object.hasOwn(row, field)) return null;
19
+ const value = row[field];
20
+ if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value.toISOString();
21
+ return typeof value === "string" || typeof value === "number" || typeof value === "bigint" || typeof value === "boolean" ? String(value) : null;
22
+ }
23
+ /** The digest that binds a token to the call's data when no row id does. */
24
+ function payloadDigest(data) {
25
+ return bytesToBase64Url(sha256(canonicalJson(data)));
26
+ }
27
+ /**
28
+ * `version` is set only for an approval that goes stale on a resource
29
+ * change; without it the payload, and so every other token, is unchanged.
30
+ * `payload` is set when `resourceId` is `*` (a collection action or a row
31
+ * without an id), so an approval covers the arguments it was given and no
32
+ * others.
33
+ */
34
+ function decisionToken(input) {
35
+ const payload = JSON.stringify({
36
+ key: input.key,
37
+ resourceId: input.resourceId,
38
+ principal: principalIdentity(input.principal),
39
+ actor: input.actor === void 0 ? null : {
40
+ id: input.actor.id,
41
+ kind: input.actor.kind
42
+ },
43
+ fingerprint: input.fingerprint,
44
+ ...input.version === void 0 ? {} : { version: input.version },
45
+ ...input.payload === void 0 ? {} : { payload: input.payload }
46
+ });
47
+ return `pd1.${bytesToBase64Url(sha256(payload))}`;
48
+ }
49
+ //#endregion
50
+ export { payloadDigest as n, versionOf as r, decisionToken as t };
@@ -1,10 +1,9 @@
1
- import { $ as DecisionSink, C as Policy, at as LimitStore, ct as MembershipSource, ft as RelationSource, 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";
1
+ import { C as Policy, Nr as Principal } from "../policy-IB6yxpC3.js";
2
+ import { f as Permission } from "../permissions-DttnqqxC.js";
4
3
  import { n as RevocationFeed } from "../revocations-Cy06JNx2.js";
5
- import { r as PdpFactory } from "../types-BvBk1wgn.js";
6
- import { S as ConnectionOptions, b as Connection, h as WebBotAuthVerifier, n as OpenApiHooks, o as TenantOption } from "../create-BKF3dgFk.js";
7
- import { t as StreamProtectOptions } from "../stream-BhMfZOwr.js";
4
+ import { A as ConnectionOptions, O as Connection, n as OpenApiHooks } from "../create-B1d519XK.js";
5
+ import { t as ServerAdapterOptions } from "../bind-C_ob3LKa.js";
6
+ import { t as StreamProtectOptions } from "../stream-D1RXubw2.js";
8
7
  import { AnyTRPCMiddlewareFunction } from "@trpc/server";
9
8
  //#region src/trpc/create.d.ts
10
9
  type TrpcMiddlewareOpts<TCtx = object, TInput = unknown> = {
@@ -17,27 +16,9 @@ type TrpcMiddlewareOpts<TCtx = object, TInput = unknown> = {
17
16
  }) => Promise<unknown>;
18
17
  };
19
18
  type TrpcMiddleware = AnyTRPCMiddlewareFunction;
20
- type TrpcPermDockOptions<TCtx = object, TUser = unknown> = {
21
- readonly subject: (opts: TrpcMiddlewareOpts<TCtx>) => TUser | Promise<TUser>;
22
- readonly tenant?: TenantOption<TrpcMiddlewareOpts<TCtx>>;
19
+ type TrpcPermDockOptions<TCtx = object, TUser = unknown> = ServerAdapterOptions<TrpcMiddlewareOpts<TCtx>, TUser> & {
23
20
  /** The Web `Request` behind a context; defaults to `ctx.request` or `ctx.req`. */
24
21
  readonly request?: (ctx: TCtx) => Request | null | undefined;
25
- readonly memberships?: MembershipSource | readonly MembershipSource[];
26
- /** The object graph for relation grants that walk a parent chain; without it they deny. */
27
- readonly relations?: RelationSource;
28
- readonly entitlements?: EntitlementSource;
29
- readonly customRoles?: RoleSource;
30
- /** Hosted grants, read once per instance; see `PolicySource`. */
31
- readonly policies?: PolicySource;
32
- readonly store?: ApprovalStore;
33
- readonly sink?: DecisionSink;
34
- readonly limits?: LimitStore;
35
- /** `createPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
36
- readonly pdp?: PdpFactory;
37
- /** Accepted for adapter parity; not read by this adapter. */
38
- readonly snapshots?: SnapshotSource;
39
- /** `(request) => verifyWebBotAuth(request, options)`; a verified bot becomes the actor. */
40
- readonly webBotAuth?: WebBotAuthVerifier;
41
22
  /** Ends or revalidates open subscriptions. */
42
23
  readonly revocations?: RevocationFeed;
43
24
  };
@@ -53,7 +34,7 @@ type TrpcOpenApiHooks = {
53
34
  };
54
35
  type TrpcPermDock<TCtx = object> = {
55
36
  readonly permdock: () => TrpcMiddleware;
56
- readonly protect: (permission: Permission, loadData?: (opts: TrpcMiddlewareOpts<TCtx>) => unknown, protectOptions?: StreamProtectOptions) => TrpcMiddleware;
37
+ readonly protect: (permission: Permission | null, loadData?: (opts: TrpcMiddlewareOpts<TCtx>) => unknown, protectOptions?: StreamProtectOptions) => TrpcMiddleware;
57
38
  /** A long-lived connection for the request behind `ctx`. */
58
39
  readonly connection: (opts: TrpcMiddlewareOpts<TCtx>, connectionOptions?: ConnectionOptions) => Promise<Connection>;
59
40
  readonly permdockHandler: (request: Request) => Promise<Response>;
@@ -1,29 +1,11 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { o as invalidSignatureResponse } from "../evaluations-DsAU9ppl.js";
3
- import { r as tenantScope, t as createKernel } from "../create-CSkhDU9T.js";
4
- import { t as problemFromError } from "../map-error-RJ3ZsUyA.js";
5
- import { n as guardIterable, r as isAsyncIterable } from "../stream-Q_xlB6Ko.js";
1
+ import { a as problemMessage } from "../http-SO7qGttf.js";
2
+ import { t as problemFromError } from "../map-error-pgUWNNtG.js";
3
+ import { n as attached } from "../bind-CuzGytRf.js";
4
+ import { a as reloadAfter, r as isAsyncIterable } from "../stream-DDpvynSB.js";
5
+ import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-DL9Sqvb1.js";
6
6
  import { TRPCError, isTrackedEnvelope } from "@trpc/server";
7
7
  //#region src/trpc/create.ts
8
- function requestFromCtx(ctx) {
9
- if ("request" in ctx && ctx.request instanceof Request) return ctx.request;
10
- if ("req" in ctx && ctx.req instanceof Request) return ctx.req;
11
- }
12
- function problemMessage(cause, fallback) {
13
- if (cause !== null && typeof cause === "object" && "detail" in cause && typeof cause.detail === "string" && cause.detail.length > 0) return cause.detail;
14
- return fallback;
15
- }
16
8
  const PROBLEM = Symbol.for("permdock.problem");
17
- function trpcCode(status) {
18
- switch (status) {
19
- case 400: return "BAD_REQUEST";
20
- case 401: return "UNAUTHORIZED";
21
- case 404: return "NOT_FOUND";
22
- case 429: return "TOO_MANY_REQUESTS";
23
- case 503: return "SERVICE_UNAVAILABLE";
24
- default: return "FORBIDDEN";
25
- }
26
- }
27
9
  /** A `TRPCError` for a revoked subscription; the Problem Details body rides on `cause`. */
28
10
  function trpcErrorFrom(error) {
29
11
  const problem = error.toProblemDetails();
@@ -33,23 +15,18 @@ function trpcErrorFrom(error) {
33
15
  enumerable: true
34
16
  });
35
17
  return new TRPCError({
36
- code: trpcCode(problem.status),
18
+ code: rpcCode(problem.status),
37
19
  message: error.code,
38
20
  cause
39
21
  });
40
22
  }
41
23
  async function throwTrpcError(response) {
42
- let cause;
43
- try {
44
- cause = await response.json();
45
- } catch {
46
- cause = { status: response.status };
47
- }
24
+ const cause = await problemBody(response);
48
25
  if (cause !== null && typeof cause === "object") Object.defineProperty(cause, PROBLEM, {
49
26
  value: true,
50
27
  enumerable: true
51
28
  });
52
- const code = trpcCode(response.status);
29
+ const code = rpcCode(response.status);
53
30
  throw new TRPCError({
54
31
  code,
55
32
  message: problemMessage(cause, code),
@@ -80,84 +57,27 @@ function errorFormatter(opts) {
80
57
  };
81
58
  }
82
59
  function createPermDock(policy, options) {
83
- const optsByRequest = /* @__PURE__ */ new WeakMap();
84
- const requestByCtx = /* @__PURE__ */ new WeakMap();
85
- const kernel = createKernel(policy, compact({
86
- subject: (request) => {
87
- const opts = optsByRequest.get(request);
88
- return opts === void 0 ? null : options.subject(opts);
89
- },
90
- memberships: options.memberships,
91
- relations: options.relations,
92
- entitlements: options.entitlements,
93
- customRoles: options.customRoles,
94
- policies: options.policies,
95
- store: options.store,
96
- sink: options.sink,
97
- limits: options.limits,
98
- pdp: options.pdp,
99
- webBotAuth: options.webBotAuth,
100
- revocations: options.revocations,
101
- adapter: "trpc"
102
- }));
103
- const requestOf = (ctx) => {
104
- if (options.request !== void 0) try {
105
- return options.request(ctx) ?? void 0;
106
- } catch {
107
- return;
108
- }
109
- return requestFromCtx(ctx);
110
- };
111
- /**
112
- * One `Request` per HTTP request, shared by every procedure in a batch. The
113
- * subject reads the first procedure's opts; the tenant is resolved from each
114
- * procedure's own opts in `scopeOf`, never through the shared `Request`.
115
- */
116
- const bind = (opts) => {
117
- const ctx = opts.ctx;
118
- const hit = requestByCtx.get(ctx);
119
- if (hit !== void 0) return hit;
120
- const request = requestOf(opts.ctx) ?? new Request(`http://localhost/trpc/${opts.path}`, { method: "POST" });
121
- requestByCtx.set(ctx, request);
122
- if (!optsByRequest.has(request)) optsByRequest.set(request, opts);
123
- return request;
124
- };
125
- const scopeOf = (opts) => tenantScope(options.tenant, opts);
126
- const attach = (ctx, request) => {
127
- requestByCtx.set(ctx, request);
128
- };
60
+ const { kernel, bind, attach, scopeOf, connection, evaluate } = bindRpcKernel(policy, options, "trpc", (opts) => opts.ctx, (opts) => opts.path);
129
61
  const permdock = () => (async (opts) => {
130
62
  const request = bind(opts);
131
- let instance;
132
- try {
133
- instance = await kernel.permdock(request, await scopeOf(opts));
134
- } catch (error) {
135
- const response = invalidSignatureResponse(error);
136
- if (response !== void 0) return throwTrpcError(response);
137
- throw error;
138
- }
63
+ const instance = await attached(async () => kernel.permdock(request, await scopeOf(opts)));
64
+ if (!instance.ok) return throwTrpcError(instance.response);
139
65
  const nextCtx = {
140
66
  ...opts.ctx,
141
- permdock: instance
67
+ permdock: instance.permdock
142
68
  };
143
69
  attach(nextCtx, request);
144
70
  return mapDownstream(await opts.next({ ctx: nextCtx }));
145
71
  });
146
- const connection = async (opts, connectionOptions) => kernel.connection(bind(opts), connectionOptions, await scopeOf(opts));
147
72
  /** Wraps a subscription's iterable so revocation ends it and unreadable items drop. */
148
73
  const guardSubscription = async (result, opts, permission, loadData, protectOptions) => {
149
74
  if (result === null || typeof result !== "object" || result.ok !== true || !isAsyncIterable(result.data)) return result;
150
- const conn = await connection(opts, compact({
151
- permission,
152
- data: loadData
153
- }));
154
75
  return {
155
76
  ...result,
156
- data: guardIterable(result.data, conn, compact({
157
- items: protectOptions?.items,
77
+ data: await guardStream(result.data, (connectionOptions) => connection(opts, connectionOptions), permission, loadData, protectOptions, {
158
78
  unwrap: (item) => isTrackedEnvelope(item) ? item[1] : item,
159
79
  onRevoked: trpcErrorFrom
160
- }))
80
+ })
161
81
  };
162
82
  };
163
83
  const protect = (permission, loadData, protectOptions) => (async (opts) => {
@@ -170,20 +90,17 @@ function createPermDock(policy, options) {
170
90
  permdockData: guard.data
171
91
  };
172
92
  attach(nextCtx, request);
173
- return guardSubscription(await mapDownstream(await opts.next({ ctx: nextCtx })), opts, permission, loadData === void 0 ? void 0 : () => loadData(opts), protectOptions);
93
+ return guardSubscription(await mapDownstream(await opts.next({ ctx: nextCtx })), opts, permission, loadData === void 0 ? void 0 : reloadAfter(guard.data, () => loadData(opts)), protectOptions);
174
94
  }
175
95
  return throwTrpcError(guard.response);
176
96
  });
177
97
  const permdockHandler = (request) => {
178
- const opts = {
98
+ return evaluate(request, {
179
99
  ctx: { req: request },
180
100
  path: "permdock",
181
101
  type: "unknown",
182
102
  next: (nextOpts) => Promise.resolve(nextOpts ?? { ctx: { req: request } })
183
- };
184
- bind(opts);
185
- const { POST, GET } = kernel.permdockHandler(() => scopeOf(opts));
186
- return Promise.resolve(request.method === "GET" ? GET(request) : POST(request));
103
+ });
187
104
  };
188
105
  const kernelOpenApi = kernel.openapi;
189
106
  return {
@@ -0,0 +1,48 @@
1
+ import { Ft as TokenVerifier, Tt as Snapshot, Yn as Decision } from "./policy-IB6yxpC3.js";
2
+ import { f as Permission } from "./permissions-DttnqqxC.js";
3
+ import { ReactNode } from "react";
4
+ //#region src/react/types.d.ts
5
+ type PermDockProviderProps = ({
6
+ readonly snapshot: Snapshot | string;
7
+ readonly snapshotPromise?: never;
8
+ } | {
9
+ /**
10
+ * An unawaited snapshot from a Server Component. Hooks never suspend on it: until it
11
+ * resolves they deny with `status: 'pending'`, then re-render. A rejection fails closed
12
+ * (`server-only`). Set `suspend` to suspend readers through `use()` instead.
13
+ */
14
+ readonly snapshotPromise: PromiseLike<Snapshot | string>;
15
+ readonly snapshot?: never;
16
+ }) & {
17
+ /**
18
+ * With `snapshotPromise`: `true` suspends every hook to the nearest Suspense boundary until it
19
+ * resolves, and a rejection reaches the nearest error boundary. Defaults to `false`.
20
+ */
21
+ readonly suspend?: boolean;
22
+ /**
23
+ * The AuthZEN evaluations endpoint for checks the snapshot cannot answer. `false` never
24
+ * fetches: those checks answer `denied` with reason `server-only`.
25
+ */
26
+ readonly endpoint?: string | false;
27
+ /** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
28
+ readonly snapshotUrl?: string;
29
+ readonly approvals?: string;
30
+ readonly tenant?: string;
31
+ readonly fetch?: typeof fetch;
32
+ readonly headers?: Readonly<Record<string, string>>;
33
+ readonly maxAge?: number;
34
+ readonly verifier?: TokenVerifier;
35
+ readonly children: ReactNode;
36
+ };
37
+ type ProtectedProps = {
38
+ readonly permission: Permission;
39
+ readonly data?: unknown;
40
+ readonly tenant?: string;
41
+ readonly pending?: ReactNode;
42
+ readonly fallback?: ReactNode | ((decision: Decision) => ReactNode);
43
+ readonly children: ReactNode | ((decision: Extract<Decision, {
44
+ readonly outcome: "granted";
45
+ }>) => ReactNode);
46
+ };
47
+ //#endregion
48
+ export { ProtectedProps as n, PermDockProviderProps as t };
@@ -1,4 +1,4 @@
1
- import { d as Permission } from "./permissions-B4apnahQ.js";
1
+ import { f as Permission } from "./permissions-DttnqqxC.js";
2
2
  //#region src/agent/types.d.ts
3
3
  type ToolBinding = {
4
4
  readonly permission: Permission;
@@ -1,5 +1,5 @@
1
- import { J as AuthEvent, ct as MembershipSource, mr as Principal } from "./policy-CInmNGkM.js";
2
- import { a as SupabaseManifestMembership } from "./manifest-DDQbC6K0.js";
1
+ import { Nr as Principal, et as AuthEvent } from "./policy-IB6yxpC3.js";
2
+ import { t as ClientNames } from "./clients-C7zLFuWT.js";
3
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
4
  //#region src/supabase/claims.d.ts
5
5
  /** One entry of the `memberships` claim, as `schemas/supabase-claims-v1.json` defines it. */
@@ -27,6 +27,8 @@ type SupabaseMembershipClaim = {
27
27
  };
28
28
  readonly managedBy?: "idp";
29
29
  readonly entitlements?: readonly string[];
30
+ /** The instance or an ancestor is suspended: the permission keys the membership still grants. */
31
+ readonly keep?: readonly string[];
30
32
  /** Custom roles in compact form, read by the RLS helpers in `jwt` mode. */
31
33
  readonly grants?: Readonly<Record<string, unknown>>;
32
34
  };
@@ -96,16 +98,36 @@ type SupabasePrincipal = Principal & {
96
98
  readonly is_anonymous?: boolean;
97
99
  };
98
100
  type SupabaseInclude = "email" | "phone" | "is_anonymous";
101
+ /**
102
+ * A column that holds a foreign key: the value is `column` of `through`,
103
+ * joined on `on`. A role reads its key from a roles table
104
+ * (`{ through: 'roles', on: { role_id: 'id' }, column: 'key' }`); a
105
+ * membership source's user can read its user id from a profile table
106
+ * (`{ through: 'contact_profiles', on: { contact_profile_id: 'id' }, column: 'user_id' }`).
107
+ */
108
+ type RoleThrough = {
109
+ /** The referenced table; unqualified, it is in the schema of the table that references it. */
110
+ readonly through: string;
111
+ /** One entry: the referencing column to the column of `through` it references. */
112
+ readonly on: Readonly<Record<string, string>>;
113
+ /** The column of `through` that holds the value: the role key, or the user id. */
114
+ readonly column: string;
115
+ };
99
116
  type SupabaseMembershipTable = {
100
117
  readonly table: string;
101
118
  readonly user: string;
102
- readonly role: string;
119
+ /**
120
+ * The role key column, a reference to a roles table that holds the key, or
121
+ * several of them: the row holds every non-null key.
122
+ */
123
+ readonly role: string | RoleThrough | readonly (string | RoleThrough)[];
103
124
  /** Per scope name, the column holding that scope's id: the table's own scope and its ancestors. */
104
125
  readonly columns?: Readonly<Record<string, string>>;
105
126
  readonly tenant?: string;
106
127
  readonly team?: string;
107
128
  readonly id?: string;
108
129
  readonly expiresAt?: string;
130
+ readonly disabledAt?: string;
109
131
  };
110
132
  /** A table whose row says whether a user or a scope instance is active. A missing row counts as suspended. */
111
133
  type SupabaseActiveRow = {
@@ -118,11 +140,28 @@ type SupabaseActiveRow = {
118
140
  readonly status?: string;
119
141
  readonly active?: readonly string[];
120
142
  };
143
+ /** A scope's active-row table, with the permissions its suspended instances keep. */
144
+ type SupabaseSuspendedScope = SupabaseActiveRow & {
145
+ /**
146
+ * Permissions (references or keys) members of a suspended instance, and of
147
+ * every instance nested in it, still hold; such a membership carries them
148
+ * as `keep`.
149
+ */
150
+ readonly keep?: readonly (string | {
151
+ readonly key: string;
152
+ })[];
153
+ };
154
+ type SupabaseSuspendedMembership = {
155
+ readonly keep?: readonly (string | {
156
+ readonly key: string;
157
+ })[];
158
+ };
121
159
  type SupabaseSuspension = {
122
160
  /** A suspended user holds no role and no membership. */
123
161
  readonly users?: SupabaseActiveRow;
124
- /** Per scope name: a suspended instance voids its memberships and every membership nested under it. */
125
- readonly scopes?: Readonly<Record<string, SupabaseActiveRow>>;
162
+ /** Per scope name: a suspended instance voids its memberships and every membership nested under it, except for `keep`. */
163
+ readonly scopes?: Readonly<Record<string, SupabaseSuspendedScope>>;
164
+ readonly memberships?: SupabaseSuspendedMembership;
126
165
  };
127
166
  type SupabaseMemberships = {
128
167
  /** The membership table of each named scope. */
@@ -147,10 +186,38 @@ type AuthorizeSqlOptions = {
147
186
  */
148
187
  readonly customRoles?: {
149
188
  readonly declared: readonly string[];
189
+ /** Stored allows may carry a level (`custom_role_permissions.level`). */
190
+ readonly levels?: true;
150
191
  };
151
192
  /** A suspended user, or a suspended instance of `scope` for a tenant request, answers `false`. */
152
193
  readonly suspension?: SupabaseSuspension;
153
194
  };
195
+ /** A permission reference; `rls generate` reads only its `key`. */
196
+ type SupabasePermissionRef = {
197
+ readonly key: string;
198
+ };
199
+ /**
200
+ * Private Realtime channels: topic patterns such as `org:{organization}:chat`,
201
+ * with one `{<scope>}` segment that holds a scope instance id.
202
+ */
203
+ type SupabaseRealtime = {
204
+ readonly topics: Readonly<Record<string, {
205
+ /** Receive broadcast and presence: `select` on `realtime.messages`. */
206
+ readonly read: SupabasePermissionRef;
207
+ /** Send broadcast and track presence: `insert`. */
208
+ readonly write?: SupabasePermissionRef;
209
+ }>>;
210
+ };
211
+ /** Storage buckets whose object paths hold a scope instance id in folder `folder` (default 1). */
212
+ type SupabaseStorage = {
213
+ readonly buckets: Readonly<Record<string, {
214
+ readonly scope: string;
215
+ readonly folder?: number;
216
+ readonly read?: SupabasePermissionRef;
217
+ readonly write?: SupabasePermissionRef;
218
+ readonly delete?: SupabasePermissionRef;
219
+ }>>;
220
+ };
154
221
  type SupabaseRlsOptions = {
155
222
  readonly roleClaim?: string;
156
223
  readonly tenantClaim?: string;
@@ -158,6 +225,8 @@ type SupabaseRlsOptions = {
158
225
  readonly tenantType?: string;
159
226
  readonly memberships?: SupabaseMembershipTable | SupabaseMemberships;
160
227
  readonly suspension?: SupabaseSuspension;
228
+ readonly realtime?: SupabaseRealtime;
229
+ readonly storage?: SupabaseStorage;
161
230
  };
162
231
  type SupabaseRlsConfig = {
163
232
  readonly dialect: "supabase";
@@ -166,10 +235,12 @@ type SupabaseRlsConfig = {
166
235
  readonly tenantType?: string;
167
236
  readonly memberships?: SupabaseMemberships;
168
237
  readonly suspension?: SupabaseSuspension;
238
+ readonly realtime?: SupabaseRealtime;
239
+ readonly storage?: SupabaseStorage;
169
240
  };
170
241
  /**
171
242
  * The structural shape `subjectFromSupabaseSession` reads: a discriminant and the verified JWT claims.
172
- * Matches better-supabase's `AuthSession` and similar session objects without importing them.
243
+ * Matches any session object of that shape without importing its library.
173
244
  */
174
245
  type SupabaseSessionLike = {
175
246
  readonly kind: string;
@@ -184,8 +255,16 @@ type SupabaseSubjectOptions = {
184
255
  readonly declared?: readonly string[];
185
256
  /** Claim holding plan names per tenant id; the active tenant's entry becomes `principal.plans`. */
186
257
  readonly plans?: string;
258
+ /** Names for OAuth client ids: an `oauth-client` actor gets `client` set to the name of its id, which a policy delegation matches with `to: { kind: 'oauth-client', client }`. */
259
+ readonly clients?: ClientNames;
187
260
  /** `'deny'` maps a token with `is_anonymous: true` (`signInAnonymously()`) to the anonymous subject, as `rls.anonymousSignIns: 'deny'` does in RLS. */
188
261
  readonly anonymousSignIns?: "deny";
262
+ /**
263
+ * `true` once the caller checked the session against the Auth server for this request
264
+ * (`auth.getUser()` or an equivalent session check): a token with a `session_id` gets
265
+ * `subject.liveSession`, which `{ subject: { session: { live: true } } }` requires. Never read from claims.
266
+ */
267
+ readonly liveSession?: boolean;
189
268
  /** Audit hook: `membership-dropped` for a `memberships` entry that could not be read, `invalid-chain` for a malformed `act`. */
190
269
  readonly onAuth?: (event: AuthEvent) => void;
191
270
  };
@@ -224,124 +303,4 @@ type SupabaseDelegation = {
224
303
  readonly scopes: readonly string[];
225
304
  };
226
305
  //#endregion
227
- //#region src/supabase/sources.d.ts
228
- /**
229
- * Runs one parameterised statement: `pg`'s `client.query` (which resolves
230
- * `{ rows }`) and `postgres`'s `sql.unsafe` (which resolves the rows) both fit.
231
- */
232
- type SqlQuery = (text: string, values: readonly unknown[]) => Promise<readonly Record<string, unknown>[] | {
233
- readonly rows: readonly Record<string, unknown>[];
234
- }>;
235
- type Common = {
236
- readonly table: string;
237
- /** Runs the lookups; without it the source only describes SQL (for `permdock supabase hook generate`). */
238
- readonly query?: SqlQuery;
239
- /** Drop suspended users and memberships under suspended instances, like `rls.suspension`. */
240
- readonly suspension?: SupabaseSuspension;
241
- };
242
- type MembershipTableOptions = Common & {
243
- /** Column names; `user`, `scope`, `id` and `role` default to `user_id`, `scope`, `scope_id`, `role`. */
244
- readonly columns?: {
245
- readonly user?: string;
246
- readonly scope?: string;
247
- readonly id?: string;
248
- /** A `jsonb` column of ancestor ids keyed by scope name. */
249
- readonly within?: string;
250
- readonly role?: string;
251
- readonly via?: string;
252
- readonly expiresAt?: string;
253
- /** The principal id that wrote the membership (`grantedBy`). */
254
- readonly grantedBy?: string;
255
- /** Free-text justification recorded on the membership (`reason`). */
256
- readonly reason?: string;
257
- /** A subgroup column filling `member.group`. */
258
- readonly group?: string;
259
- /** A text column; the value `idp` marks the row as owned by the identity provider. */
260
- readonly managedBy?: string;
261
- /** A `text[]` column of seats. */
262
- readonly seats?: string;
263
- };
264
- };
265
- type MembershipJunctionOptions = Common & {
266
- /** The declared scope every row is a membership of. */
267
- readonly scope: string;
268
- /** Default `user_id`. */
269
- readonly user?: string;
270
- /** The column holding the scope instance id. Default `<scope>_id`. */
271
- readonly id?: string;
272
- /** Ancestor id columns keyed by scope name. */
273
- readonly within?: Readonly<Record<string, string>>;
274
- /** A role column, or fixed roles every row holds (a contact table with no role column). */
275
- readonly roles: string | readonly string[];
276
- /** The membership kind every row has (`contact`, `staff`, `partner`). */
277
- readonly via?: string;
278
- readonly expiresAt?: string;
279
- /** The principal id that wrote the membership (`grantedBy`). */
280
- readonly grantedBy?: string;
281
- /** Free-text justification recorded on the membership (`reason`). */
282
- readonly reason?: string;
283
- /** A subgroup filling `member.group`: a fixed name every row has, or a column. */
284
- readonly group?: string | {
285
- readonly column: string;
286
- };
287
- /** `idp` when the identity provider owns every row, or a text column holding `idp` per row. */
288
- readonly managedBy?: "idp" | {
289
- readonly column: string;
290
- };
291
- /** A `text[]` column of seats. */
292
- readonly seats?: string;
293
- };
294
- /** What `permdock supabase hook generate` compiles; the same SQL the source runs. */
295
- type MembershipSql = {
296
- readonly table: string;
297
- /** Columns of the table that decide a membership; triggers bump the authorization version on them. */
298
- readonly user: string;
299
- /** `<table>.<user>%type`: the PL/pgSQL type of the user column, for a variable `select` compares with. */
300
- readonly userType: string;
301
- /**
302
- * The `select` of claim rows for one user, with every filter applied.
303
- * `user` must have the column's type (a `userType` variable, or an untyped
304
- * `$1` Postgres infers): the column is compared uncast so its index applies.
305
- */
306
- select(user: string): string;
307
- /** The `select` of member rows for one scope instance (`$1` scope, `$2` id). */
308
- list(): string;
309
- /** A text column holding `idp` for rows the identity provider owns; `''` when every row is owned. */
310
- readonly managed?: string;
311
- /** Other tables the `select` reads (suspension tables). */
312
- readonly reads: readonly string[];
313
- /** Every column that decides who holds which membership: user, scope, id, `within`, role, `via` and expiry. */
314
- readonly columns: readonly string[];
315
- /** For a single-scope source: its scope and the scopes whose ids each row carries. */
316
- readonly scope?: string;
317
- readonly holds?: readonly string[];
318
- /** The source's entry in the hook manifest's `memberships`. */
319
- readonly manifest: SupabaseManifestMembership;
320
- };
321
- type SqlMembershipSource = MembershipSource & {
322
- readonly sql: MembershipSql;
323
- };
324
- /**
325
- * Memberships from one table holding every scope: a row per user, scope,
326
- * instance and role (`user_id, scope, scope_id, role`), with optional
327
- * `within`, `via`, expiry, owner and seat columns. Rows of the same instance
328
- * merge into one membership.
329
- */
330
- declare function fromTable(options: MembershipTableOptions): SqlMembershipSource;
331
- /**
332
- * Memberships from a table of one scope (`customer_contacts`): every row is a
333
- * membership of `scope`, with roles from a column or fixed (`['contact']`), a
334
- * fixed `via`, and ancestor ids from `within` columns.
335
- */
336
- declare function fromJunction(options: MembershipJunctionOptions): SqlMembershipSource;
337
- declare const AUTHZ_VERSION_TABLE = "permdock_authz_version";
338
- /**
339
- * Reads the authorization version `permdock supabase hook generate` keeps in
340
- * `<schema>.permdock_authz_version`: pass it to `claimsFirst(sources, { version })`.
341
- */
342
- declare function authzVersion(options: {
343
- readonly query: SqlQuery;
344
- readonly schema?: string;
345
- }): NonNullable<MembershipSource["version"]>;
346
- //#endregion
347
- export { SupabaseActClaim as C, SupabaseMembershipClaim as D, SupabaseClaimsSchema as E, SupabasePermDockClaims as O, SupabaseSuspension as S, SupabaseClaimsOptions as T, SupabasePrincipal as _, SqlMembershipSource as a, SupabaseSessionLike as b, fromJunction as c, SupabaseActiveRow as d, SupabaseActor as f, SupabaseMembershipTable as g, SupabaseInclude as h, MembershipTableOptions as i, supabaseClaims as k, fromTable as l, SupabaseDelegation as m, MembershipJunctionOptions as n, SqlQuery as o, SupabaseActorResult as p, MembershipSql as r, authzVersion as s, AUTHZ_VERSION_TABLE as t, AuthorizeSqlOptions as u, SupabaseRlsConfig as v, SupabaseClaims as w, SupabaseSubjectOptions as x, SupabaseRlsOptions as y };
306
+ export { SupabaseClaimsSchema as C, supabaseClaims as E, SupabaseClaimsOptions as S, SupabasePermDockClaims as T, SupabaseSuspendedMembership as _, SupabaseActorResult as a, SupabaseActClaim as b, SupabaseMembershipTable as c, SupabaseRealtime as d, SupabaseRlsConfig as f, SupabaseSubjectOptions as g, SupabaseStorage as h, SupabaseActor as i, SupabasePermissionRef as l, SupabaseSessionLike as m, RoleThrough as n, SupabaseDelegation as o, SupabaseRlsOptions as p, SupabaseActiveRow as r, SupabaseInclude as s, AuthorizeSqlOptions as t, SupabasePrincipal as u, SupabaseSuspendedScope as v, SupabaseMembershipClaim as w, SupabaseClaims as x, SupabaseSuspension as y };