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,17 +1,23 @@
1
1
  import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-Iy71s7Oj.js";
3
- import { t as createPermDock$1 } from "../permdock-yoZ7EjxX.js";
2
+ import { n as PermDockValidationError } from "../validation-error-CnjZ4t92.js";
3
+ import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-Cz5zn0mW.js";
4
+ import { t as createPermDock$1 } from "../permdock-CzqXjCpU.js";
5
+ import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
6
+ import { n as tenantScope, t as actorFrom } from "../adapter-context-mlWsVGGg.js";
4
7
  //#region src/convex/create.ts
8
+ /** Convex's runtime sends `data` to the client only for an error carrying this symbol. */
9
+ const CONVEX_ERROR = Symbol.for("ConvexError");
5
10
  var ConvexError = class extends Error {
6
11
  name = "ConvexError";
7
12
  data;
8
13
  constructor(data) {
9
14
  super(data.detail);
10
15
  this.data = data;
16
+ Object.defineProperty(this, CONVEX_ERROR, { value: true });
11
17
  }
12
18
  };
13
19
  function toConvexError(error) {
14
- if (error instanceof PermDockDeniedError || error instanceof PermDockApprovalRequiredError) return new ConvexError(error.toProblemDetails());
20
+ if (error instanceof PermDockDeniedError || error instanceof PermDockApprovalRequiredError || error instanceof PermDockValidationError) return new ConvexError(error.toProblemDetails());
15
21
  return error;
16
22
  }
17
23
  function createPermDock(policy, options) {
@@ -23,7 +29,11 @@ function createPermDock(policy, options) {
23
29
  } catch {
24
30
  user = null;
25
31
  }
26
- const permdock = await createPermDock$1(policy, user);
32
+ const permdock = await createPermDock$1(policy, user, compact({
33
+ tenant: (await tenantScope(options.tenant, ctx)).tenant,
34
+ ...instanceOptions(options),
35
+ actor: await actorFrom(options.actor, ctx)
36
+ }));
27
37
  const next = {
28
38
  ...ctx,
29
39
  permdock
@@ -0,0 +1,245 @@
1
+ import { C as Policy, Cr as Actor, D as PolicyVocabulary, Nr as Principal, Pr as Subject, Tt as Snapshot, Yn as Decision, jr as JsonWebKeyLike, ln as PermDock, pn as SnapshotOptions } from "./policy-CFZAr_Al.js";
2
+ import { f as Permission } from "./permissions-DttnqqxC.js";
3
+ import { f as ApprovalStore } from "./types-vKyAMtcX.js";
4
+ import { t as ApprovalHint } from "./errors-DAqevpNk.js";
5
+ import { t as InstanceOptions } from "./instance-options-BK_rNOSC.js";
6
+ import { r as PdpFactory } from "./types-BVyImy5I.js";
7
+ import { n as RevocationFeed } from "./revocations-Cy06JNx2.js";
8
+ //#region src/server/connection.d.ts
9
+ type ConnectionData<T> = T | (() => T | null | undefined | Promise<T | null | undefined>);
10
+ type ConnectionOptions<T = unknown> = {
11
+ /** The permission the stream or socket is opened for; re-checked after every revalidation. */
12
+ readonly permission?: Permission;
13
+ /** The row for `permission`, or a loader re-run on every revalidation. */
14
+ readonly data?: ConnectionData<T>;
15
+ /** Milliseconds between periodic revalidations; off by default. */
16
+ readonly revalidate?: number;
17
+ };
18
+ type Connection = {
19
+ /** The current instance; replaced, never mutated, after a revalidation. */
20
+ readonly permdock: PermDock;
21
+ /** Aborts with a `PermDockRevokedError` when the connection must end. */
22
+ readonly signal: AbortSignal;
23
+ /**
24
+ * Per-message decision. Data is validated against the resource schema
25
+ * first unless `{ trusted: true }` marks it as a row the server loaded.
26
+ */
27
+ readonly check: (permission: Permission, data?: unknown, options?: {
28
+ readonly trusted?: boolean;
29
+ }) => Decision;
30
+ readonly filter: <T>(permission: Permission<string, T, "instance">, items: readonly T[]) => T[];
31
+ /** Stops timers and the feed subscription. Call it when the transport closes. */
32
+ readonly close: () => void;
33
+ };
34
+ //#endregion
35
+ //#region src/core/adapter-context.d.ts
36
+ /**
37
+ * The active tenant an adapter resolved from its own framework context.
38
+ * Present means "use this tenant", even when `tenant` is `undefined`.
39
+ */
40
+ type TenantScope = {
41
+ readonly tenant: string | undefined;
42
+ };
43
+ type TenantOption<TContext> = string | ((context: TContext) => string | undefined | Promise<string | undefined>);
44
+ /** Resolves an adapter `tenant` option against its framework context; a throw is no tenant. */
45
+ declare function tenantScope<TContext>(option: TenantOption<TContext> | undefined, context: TContext): Promise<TenantScope>;
46
+ //#endregion
47
+ //#region src/server/web-bot-auth.d.ts
48
+ type WebBotAuthJwk = JsonWebKeyLike & {
49
+ readonly kid?: string;
50
+ readonly crv?: string;
51
+ };
52
+ type WebBotAuthKeyLookup = (input: {
53
+ readonly request: Request;
54
+ readonly keyid: string;
55
+ readonly agent: string | undefined;
56
+ }) => WebBotAuthJwk | undefined | Promise<WebBotAuthJwk | undefined>;
57
+ type WebBotAuthKeys = {
58
+ readonly lookup: WebBotAuthKeyLookup;
59
+ };
60
+ type WebBotAuthOptions = {
61
+ readonly verify?: boolean;
62
+ readonly keys: WebBotAuthKeys | WebBotAuthKeyLookup;
63
+ readonly required?: boolean;
64
+ readonly maxAge?: number;
65
+ /** Unix seconds; defaults to the system clock. */
66
+ readonly now?: () => number;
67
+ };
68
+ /**
69
+ * An adapter's `webBotAuth` option: `(request) => verifyWebBotAuth(request, options)`,
70
+ * so an app without it does not bundle RFC 9421 verification.
71
+ */
72
+ type WebBotAuthVerifier = (request: Request) => Promise<Actor | undefined>;
73
+ type DiscoverViaSignatureAgentOptions = {
74
+ readonly allow: readonly string[];
75
+ readonly fetch?: typeof fetch;
76
+ };
77
+ declare class InvalidSignatureError extends Error {
78
+ override readonly name: "InvalidSignatureError";
79
+ readonly response: Response;
80
+ constructor(response: Response);
81
+ }
82
+ declare function invalidSignatureResponse(error: unknown): Response | undefined;
83
+ declare function invalidSignatureProblem(detail: string): Response;
84
+ declare function discoverViaSignatureAgent(options: DiscoverViaSignatureAgentOptions): WebBotAuthKeys;
85
+ declare function verifyWebBotAuth(request: Request, options: WebBotAuthOptions | undefined): Promise<Actor | undefined>;
86
+ //#endregion
87
+ //#region src/server/evaluations.d.ts
88
+ declare function createEvaluationsHandler(options: {
89
+ readonly policy: Policy;
90
+ readonly resolve?: (request: Request) => Promise<PermDock>;
91
+ readonly getPermDock?: (query?: {
92
+ readonly tenant?: string;
93
+ }) => Promise<PermDock>;
94
+ readonly store?: ApprovalStore;
95
+ readonly adapter?: string;
96
+ /** The most evaluations one POST may carry; a larger batch is a 413 before any instance is resolved. */
97
+ readonly maxEvaluations?: number;
98
+ }): {
99
+ readonly POST: (request: Request) => Promise<Response>;
100
+ readonly GET: (request: Request) => Promise<Response>;
101
+ };
102
+ //#endregion
103
+ //#region src/server/create.d.ts
104
+ type ServerPermDockOptions<TUser = unknown> = InstanceOptions & {
105
+ /** The user, or a full `Subject` (core then skips `policy.subject`); `null` is anonymous. */
106
+ readonly subject: (request: Request) => TUser | Subject | null | Promise<TUser | Subject | null>;
107
+ readonly actor?: (request: Request) => unknown;
108
+ /** `(request) => verifyWebBotAuth(request, options)`; a verified bot becomes the actor. */
109
+ readonly webBotAuth?: WebBotAuthVerifier;
110
+ readonly tenant?: string | ((request: Request) => string | undefined | Promise<string | undefined>);
111
+ readonly store?: ApprovalStore;
112
+ /** Ends or revalidates open connections; never a decision input. */
113
+ readonly revocations?: RevocationFeed;
114
+ /**
115
+ * `createPermDock` from `permdock/pdp`: `protect` then decides delegated
116
+ * permissions through the remote PDP. The instance handlers receive stays
117
+ * synchronous and keeps denying delegated permissions (`pdp-unavailable`).
118
+ */
119
+ readonly pdp?: PdpFactory;
120
+ /** Added as `approval` to every `approval-required` problem. */
121
+ readonly approval?: ApprovalHint;
122
+ readonly operations?: OperationScopes;
123
+ };
124
+ type OperationScopes = {
125
+ oauthScopesForRequest(method: string, path: string): readonly string[] | undefined;
126
+ };
127
+ type Guard<T = unknown, V extends PolicyVocabulary = PolicyVocabulary> = {
128
+ readonly ok: true;
129
+ readonly permdock: PermDock<V>;
130
+ readonly decision: Extract<Decision, {
131
+ readonly outcome: "granted";
132
+ }>;
133
+ readonly data: T;
134
+ } | {
135
+ readonly ok: false;
136
+ readonly response: Response;
137
+ };
138
+ /**
139
+ * What `protect(null, …)` resolves to: the route declares OAuth scopes and no
140
+ * permission, so there is no decision to return.
141
+ */
142
+ type ScopeGuard<T = unknown, V extends PolicyVocabulary = PolicyVocabulary> = {
143
+ readonly ok: true;
144
+ readonly permdock: PermDock<V>;
145
+ readonly decision?: undefined;
146
+ readonly data: T;
147
+ } | {
148
+ readonly ok: false;
149
+ readonly response: Response;
150
+ };
151
+ type Loader<T> = (request: Request) => T | null | undefined | Promise<T | null | undefined>;
152
+ /**
153
+ * `protect(permission, loadData?, options?)`, or `protect(null, loadData?,
154
+ * { oauthScopes })` for a route that needs a signed-in principal and, from a
155
+ * delegated token, one of the OAuth scopes it declares, but no permission.
156
+ */
157
+ type Protect<V extends PolicyVocabulary = PolicyVocabulary, TArgs extends unknown[] = []> = {
158
+ <T = unknown>(permission: Permission, loadData?: Loader<T>, protectOptions?: ProtectOptions): (request: Request, ...args: TArgs) => Promise<Guard<T, V>>;
159
+ <T = unknown>(permission: null, loadData?: Loader<T>, protectOptions?: ProtectOptions): (request: Request, ...args: TArgs) => Promise<ScopeGuard<T, V>>;
160
+ <T = unknown>(permission: Permission | null, loadData?: Loader<T>, protectOptions?: ProtectOptions): (request: Request, ...args: TArgs) => Promise<Guard<T, V> | ScopeGuard<T, V>>;
161
+ };
162
+ type OpenApiHooks = {
163
+ readonly security: (permission: Permission) => {
164
+ readonly security: readonly Record<string, readonly string[]>[];
165
+ readonly "x-permdock-permissions": readonly string[];
166
+ };
167
+ readonly securitySchemes: () => Readonly<Record<string, unknown>>;
168
+ };
169
+ type ProtectOptions = {
170
+ /**
171
+ * `true` when `loadData` returns a row the server loaded itself, to skip
172
+ * schema validation. Anything else is validated against the resource
173
+ * schema before the check.
174
+ */
175
+ readonly trusted?: boolean;
176
+ /**
177
+ * The OAuth scopes that reach the route: a delegated token holding none of
178
+ * them is refused with `insufficient_scope`. Default the `operations` entry
179
+ * for the request. Required, here or there, for `protect(null)`.
180
+ */
181
+ readonly oauthScopes?: readonly string[];
182
+ };
183
+ type ServerKernelOptions<TUser, V extends PolicyVocabulary = PolicyVocabulary> = ServerPermDockOptions<TUser> & {
184
+ /** Wraps each instance the kernel builds, as `withOtel` does. */
185
+ readonly wrap?: (permdock: PermDock<V>) => PermDock<V>;
186
+ /** The `adapter` label on decision events, revocations and approvals. Defaults to `server`. */
187
+ readonly adapter?: string;
188
+ };
189
+ /**
190
+ * What an HTTP adapter builds on: `ServerPermDock` plus an explicit
191
+ * `TenantScope` on every call, so the adapter resolves the tenant from its
192
+ * own framework context.
193
+ */
194
+ type SnapshotQuery = {
195
+ /** The active tenant; defaults to the `tenant` option resolved from the request. */
196
+ readonly tenant?: string;
197
+ readonly include?: SnapshotOptions["include"];
198
+ readonly tenants?: "all";
199
+ };
200
+ type ServerKernel<V extends PolicyVocabulary = PolicyVocabulary> = {
201
+ readonly permdock: (request: Request, scope?: TenantScope) => Promise<PermDock<V>>;
202
+ /**
203
+ * The JSON snapshot for a loader (React Router, TanStack Start, SvelteKit, Nuxt), built from the
204
+ * request's cached subject. Send it with `snapshotHeaders(snapshot)`.
205
+ */
206
+ readonly getSnapshot: (request: Request, query?: SnapshotQuery) => Promise<Snapshot>;
207
+ readonly protect: Protect<V, [scope?: TenantScope]>;
208
+ /**
209
+ * `protect` against an instance the adapter already holds, such as a gateway
210
+ * connection's: the same OAuth scope check, loader, decision and approval resume.
211
+ */
212
+ readonly protectOn: <T = unknown>(instance: PermDock<V>, permission: Permission | null, load?: () => T | null | undefined | Promise<T | null | undefined>, protectOptions?: ProtectOptions, request?: Request) => Promise<Guard<T, V> | ScopeGuard<T, V>>;
213
+ readonly connection: <T = unknown>(request: Request, options?: ConnectionOptions<T>, scope?: TenantScope) => Promise<Connection>;
214
+ /**
215
+ * Lets `to`, a second `Request` an adapter built for the same incoming
216
+ * request (to re-read a body a parser consumed), reuse the subject and
217
+ * actor already resolved for `from`.
218
+ */
219
+ readonly shareSubject: (from: Request, to: Request) => void;
220
+ readonly problem: ServerPermDock<V>["problem"];
221
+ readonly openapi: OpenApiHooks;
222
+ readonly permdockHandler: (scope?: (request: Request) => TenantScope | Promise<TenantScope>) => ReturnType<typeof createEvaluationsHandler>;
223
+ };
224
+ type ServerPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
225
+ readonly permdock: (request: Request) => Promise<PermDock<V>>;
226
+ readonly getSnapshot: ServerKernel<V>["getSnapshot"];
227
+ readonly protect: Protect<V>;
228
+ /** A long-lived connection for a stream or socket opened by `request`. */
229
+ readonly connection: <T = unknown>(request: Request, options?: ConnectionOptions<T>) => Promise<Connection>;
230
+ readonly problem: (decision: Decision, init?: {
231
+ readonly permission?: Permission;
232
+ readonly instance?: string;
233
+ }) => Response;
234
+ readonly openapi: OpenApiHooks;
235
+ readonly permdockHandler: () => ReturnType<typeof createEvaluationsHandler>;
236
+ };
237
+ declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: ServerPermDockOptions<TUser>): ServerPermDock<V>;
238
+ /**
239
+ * The kernel behind every HTTP adapter. The subject and actor are resolved
240
+ * once per `Request`; one instance is cached per `(Request, tenant)`, so a
241
+ * global middleware and a later tenant-scoped `protect` never share a tenant.
242
+ */
243
+ declare function createServerKernel<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: ServerKernelOptions<TUser, V>): ServerKernel<V>;
244
+ //#endregion
245
+ export { ConnectionOptions as A, invalidSignatureResponse as C, tenantScope as D, TenantScope as E, Connection as O, invalidSignatureProblem as S, TenantOption as T, WebBotAuthKeyLookup as _, ScopeGuard as a, WebBotAuthVerifier as b, ServerPermDock as c, createPermDock as d, createServerKernel as f, WebBotAuthJwk as g, InvalidSignatureError as h, ProtectOptions as i, ConnectionData as k, ServerPermDockOptions as l, DiscoverViaSignatureAgentOptions as m, OpenApiHooks as n, ServerKernel as o, createEvaluationsHandler as p, OperationScopes as r, ServerKernelOptions as s, Guard as t, SnapshotQuery as u, WebBotAuthKeys as v, verifyWebBotAuth as w, discoverViaSignatureAgent as x, WebBotAuthOptions as y };
@@ -0,0 +1,253 @@
1
+ import { t as compact } from "./compact-y6vfu2_f.js";
2
+ import { _ as listPermissions } from "./permissions-DVoF6dMt.js";
3
+ import { n as problemDetails } from "./problem-details-_AMOYz-w.js";
4
+ import { r as challengeScope, t as createPermDock$1 } from "./permdock-CzqXjCpU.js";
5
+ import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
6
+ import { n as hasCredentials } from "./http-SO7qGttf.js";
7
+ import { a as notFoundProblem, l as unauthenticatedProblem, o as problemFromDecision, r as decisionResponse } from "./problem-B43ztKIm.js";
8
+ import { n as createEvaluationsHandler, r as InvalidSignatureError, t as applyApprovalResume } from "./evaluations-tz6D9A2G.js";
9
+ import { t as instanceOptions } from "./instance-options-Dhhcnm3y.js";
10
+ import { n as tenantScope, t as actorFrom } from "./adapter-context-mlWsVGGg.js";
11
+ //#region src/server/create.ts
12
+ async function resolveActor(request, options) {
13
+ return (options.webBotAuth === void 0 ? void 0 : await options.webBotAuth(request)) ?? actorFrom(options.actor, request);
14
+ }
15
+ const NO_TENANT = "\0";
16
+ function routeScopes(value) {
17
+ if (value === void 0) return;
18
+ const scopes = Array.isArray(value) ? value : [];
19
+ const names = scopes.filter((scope) => typeof scope === "string" && scope !== "");
20
+ if (names.length === 0 || names.length !== scopes.length) throw new TypeError("PermDock: oauthScopes must be a non-empty list of scope names");
21
+ return names;
22
+ }
23
+ const NOT_DELEGATED = {
24
+ outcome: "denied",
25
+ denials: [{
26
+ role: null,
27
+ reason: "not-delegated"
28
+ }],
29
+ alternatives: []
30
+ };
31
+ /** The `403` `insufficient_scope` for a token that holds none of a route's OAuth scopes. */
32
+ function scopeProblem(permission, subject, credentials, scope) {
33
+ return permission === null ? decisionResponse(problemDetails(compact({
34
+ decision: NOT_DELEGATED,
35
+ detail: `the token holds none of the OAuth scopes this route needs, such as ${String(scope)}`,
36
+ scope
37
+ })), NOT_DELEGATED, compact({
38
+ credentials,
39
+ scope
40
+ })) : problemFromDecision(NOT_DELEGATED, permission, subject, compact({
41
+ credentials,
42
+ scope
43
+ }));
44
+ }
45
+ function createPermDock(policy, options) {
46
+ return createServerKernel(policy, options);
47
+ }
48
+ function problemFor(decision, init, approval) {
49
+ if (init?.permission !== void 0) return problemFromDecision(decision, init.permission, void 0, compact({
50
+ instance: init.instance,
51
+ approval
52
+ }));
53
+ if (decision.outcome === "granted") return new Response(null, { status: 204 });
54
+ return decisionResponse(problemDetails(compact({
55
+ decision,
56
+ detail: decision.outcome,
57
+ instance: init?.instance
58
+ })), decision);
59
+ }
60
+ /**
61
+ * The kernel behind every HTTP adapter. The subject and actor are resolved
62
+ * once per `Request`; one instance is cached per `(Request, tenant)`, so a
63
+ * global middleware and a later tenant-scoped `protect` never share a tenant.
64
+ */
65
+ function createServerKernel(policy, options) {
66
+ const adapter = options.adapter ?? "server";
67
+ const subjects = /* @__PURE__ */ new WeakMap();
68
+ const instances = /* @__PURE__ */ new WeakMap();
69
+ const freshSubject = async (request) => {
70
+ const actor = await resolveActor(request, options);
71
+ try {
72
+ return {
73
+ user: await options.subject(request),
74
+ actor
75
+ };
76
+ } catch {
77
+ return {
78
+ user: null,
79
+ actor
80
+ };
81
+ }
82
+ };
83
+ const resolveSubject = (request) => {
84
+ const hit = subjects.get(request);
85
+ if (hit !== void 0) return hit;
86
+ const resolved = freshSubject(request);
87
+ subjects.set(request, resolved);
88
+ return resolved;
89
+ };
90
+ const instanceFor = async ({ user, actor }, tenant) => {
91
+ const coreOptions = compact({
92
+ tenant,
93
+ ...instanceOptions(options),
94
+ actor
95
+ });
96
+ const permdock = await createPermDock$1(policy, user, coreOptions);
97
+ const remote = options.pdp === void 0 ? void 0 : await options.pdp(policy, user, coreOptions);
98
+ return {
99
+ permdock: options.wrap === void 0 ? permdock : options.wrap(permdock),
100
+ remote
101
+ };
102
+ };
103
+ const build = async (request, scope) => {
104
+ const { tenant } = scope ?? await tenantScope(options.tenant, request);
105
+ let byTenant = instances.get(request);
106
+ if (byTenant === void 0) {
107
+ byTenant = /* @__PURE__ */ new Map();
108
+ instances.set(request, byTenant);
109
+ }
110
+ const key = tenant ?? NO_TENANT;
111
+ const hit = byTenant.get(key);
112
+ if (hit !== void 0) return hit;
113
+ const built = (async () => instanceFor(await resolveSubject(request), tenant))();
114
+ byTenant.set(key, built);
115
+ return built;
116
+ };
117
+ const connection = async (request, connectionOptions = {}, scope) => {
118
+ const { tenant } = scope ?? await tenantScope(options.tenant, request);
119
+ const { openConnection } = await import("./connection-CU8MQxRi.js");
120
+ return openConnection({
121
+ open: async () => (await build(request, { tenant })).permdock,
122
+ rebuild: async () => (await instanceFor(await freshSubject(request), tenant)).permdock,
123
+ tenant,
124
+ ...options.revocations === void 0 ? {} : { feed: options.revocations },
125
+ adapter,
126
+ options: connectionOptions
127
+ });
128
+ };
129
+ const permdock = async (request, scope) => (await build(request, scope)).permdock;
130
+ const getSnapshot = async (request, query = {}) => {
131
+ return (await permdock(request, query.tenant === void 0 ? void 0 : { tenant: query.tenant })).snapshot(compact({
132
+ include: query.include,
133
+ tenants: query.tenants
134
+ }));
135
+ };
136
+ const protectRoute = (permission, loadData, protectOptions = {}) => {
137
+ if (permission === null && routeScopes(protectOptions.oauthScopes) === void 0 && options.operations === void 0) throw new TypeError("PermDock: protect(null) needs oauthScopes, in its options or an operations entry");
138
+ return async (request, scope) => {
139
+ let instance;
140
+ let remote;
141
+ try {
142
+ ({permdock: instance, remote} = await build(request, scope));
143
+ } catch (error) {
144
+ if (error instanceof InvalidSignatureError) return {
145
+ ok: false,
146
+ response: error.response
147
+ };
148
+ throw error;
149
+ }
150
+ return guardOn(instance, remote, request, permission, loadData === void 0 ? void 0 : () => loadData(request), protectOptions);
151
+ };
152
+ };
153
+ const guardOn = async (instance, remote, request, permission, load, protectOptions) => {
154
+ const declared = routeScopes(protectOptions.oauthScopes ?? (request === void 0 ? void 0 : options.operations?.oauthScopesForRequest(request.method, new URL(request.url).pathname)));
155
+ const credentials = request === void 0 ? false : hasCredentials(request);
156
+ if (permission === null) {
157
+ if (declared === void 0) throw new TypeError(request === void 0 ? "PermDock: protect(null) needs oauthScopes" : `PermDock: protect(null) needs oauthScopes, and no operation declares them for ${request.method} ${new URL(request.url).pathname}`);
158
+ if (instance.subject.principal === null) return {
159
+ ok: false,
160
+ response: unauthenticatedProblem(credentials)
161
+ };
162
+ }
163
+ const held = instance.subject.delegation?.scopes;
164
+ if (declared !== void 0 && held !== void 0 && !declared.some((granted) => held.includes(granted))) return {
165
+ ok: false,
166
+ response: scopeProblem(permission, instance.subject, credentials, declared[0])
167
+ };
168
+ let data;
169
+ if (load !== void 0) {
170
+ const loaded = await load();
171
+ if (loaded === null || loaded === void 0) return {
172
+ ok: false,
173
+ response: notFoundProblem()
174
+ };
175
+ data = loaded;
176
+ }
177
+ if (permission === null) return {
178
+ ok: true,
179
+ permdock: instance,
180
+ data
181
+ };
182
+ const decideOptions = compact({
183
+ source: "adapter",
184
+ adapter,
185
+ ...protectOptions.trusted === true ? { trusted: true } : {
186
+ trusted: false,
187
+ boundary: "http-body"
188
+ }
189
+ });
190
+ const raw = remote === void 0 ? instance.decide(permission, data, decideOptions) : await remote.decide(permission, data, decideOptions).catch(() => ({
191
+ outcome: "denied",
192
+ denials: [{
193
+ role: null,
194
+ reason: "pdp-unavailable"
195
+ }],
196
+ alternatives: []
197
+ }));
198
+ const decision = await applyApprovalResume(raw, permission, instance, options.store, request, resourceRef(permission, data), adapter);
199
+ if (decision.outcome === "granted") return {
200
+ ok: true,
201
+ permdock: instance,
202
+ decision,
203
+ data
204
+ };
205
+ return {
206
+ ok: false,
207
+ response: problemFromDecision(decision, permission, instance.subject, compact({
208
+ approval: options.approval,
209
+ credentials,
210
+ scope: declared?.[0] ?? challengeScope(policy, permission),
211
+ disclosure: data === void 0 ? void 0 : policy.resources.get(permission.resource)?.disclosure
212
+ }))
213
+ };
214
+ };
215
+ const protect = protectRoute;
216
+ const openapi = {
217
+ security: (permission) => ({
218
+ security: [{ oauth2: [permission.scope] }],
219
+ "x-permdock-permissions": [permission.key]
220
+ }),
221
+ securitySchemes: () => {
222
+ const scopes = {};
223
+ for (const leaf of listPermissions(policy.permissions)) scopes[leaf.scope] = leaf.meta.title ?? leaf.key;
224
+ return { oauth2: {
225
+ type: "oauth2",
226
+ flows: {},
227
+ scopes
228
+ } };
229
+ }
230
+ };
231
+ const permdockHandler = (scope) => createEvaluationsHandler(compact({
232
+ policy,
233
+ resolve: scope === void 0 ? permdock : async (request) => permdock(request, await scope(request)),
234
+ store: options.store,
235
+ adapter
236
+ }));
237
+ return {
238
+ permdock,
239
+ getSnapshot,
240
+ protect,
241
+ protectOn: (instance, permission, load, protectOptions = {}, request) => guardOn(instance, void 0, request, permission, load, protectOptions),
242
+ connection,
243
+ shareSubject: (from, to) => {
244
+ const resolved = subjects.get(from);
245
+ if (resolved !== void 0 && !subjects.has(to)) subjects.set(to, resolved);
246
+ },
247
+ problem: (decision, init) => problemFor(decision, init, options.approval),
248
+ openapi,
249
+ permdockHandler
250
+ };
251
+ }
252
+ //#endregion
253
+ export { createServerKernel as n, createPermDock as t };