permdock 0.3.1 → 0.5.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 (552) hide show
  1. package/README.md +37 -35
  2. package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
  3. package/dist/a2a/index.d.ts +8 -6
  4. package/dist/a2a/index.js +21 -31
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -23
  10. package/dist/ai-sdk/index.js +38 -21
  11. package/dist/app-data-MuyzVqX8.js +60 -0
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  19. package/dist/arazzo-B6lebmiQ.js +36 -0
  20. package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
  21. package/dist/args-IIolxxKA.js +197 -0
  22. package/dist/astro/index.d.ts +43 -0
  23. package/dist/astro/index.js +27 -0
  24. package/dist/audience-Dg8XsRaO.js +55 -0
  25. package/dist/auth-DRLEizbL.js +178 -0
  26. package/dist/authzen/index.d.ts +26 -6
  27. package/dist/authzen/index.js +228 -75
  28. package/dist/automation-BMZPIVUM.d.ts +114 -0
  29. package/dist/automation-DVjOckjV.js +157 -0
  30. package/dist/better-auth/index.d.ts +8 -6
  31. package/dist/better-auth/index.js +11 -23
  32. package/dist/better-supabase/index.d.ts +438 -86
  33. package/dist/better-supabase/index.js +1027 -184
  34. package/dist/bind--9EFVYWF.d.ts +38 -0
  35. package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
  36. package/dist/body-CH5of8Ne.js +10 -0
  37. package/dist/body-text-QcXok_SI.js +52 -0
  38. package/dist/build-instance-BMnAudHn.js +52 -0
  39. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
  40. package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
  41. package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
  42. package/dist/casbin-Cr7RLtA3.js +30 -0
  43. package/dist/casbin-Dyu2gnUD.js +234 -0
  44. package/dist/casl-64gpT-8x.js +24 -0
  45. package/dist/casl-DjEDhTCP.js +299 -0
  46. package/dist/catalog/index.d.ts +74 -2
  47. package/dist/catalog/index.js +51 -2
  48. package/dist/catalog-BECMPrwc.js +100 -0
  49. package/dist/catalog-DjhMYYCq.js +1 -0
  50. package/dist/catalog-R_A__RsH.js +52 -0
  51. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
  52. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  53. package/dist/chat/index.d.ts +2 -0
  54. package/dist/chat/index.js +224 -0
  55. package/dist/chat-sdk/index.d.ts +87 -0
  56. package/dist/chat-sdk/index.js +197 -0
  57. package/dist/claims-map-7oQ3ue4X.js +13 -0
  58. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  59. package/dist/claude-agent/index.d.ts +7 -14
  60. package/dist/claude-agent/index.js +26 -30
  61. package/dist/clerk/index.d.ts +9 -8
  62. package/dist/clerk/index.js +15 -45
  63. package/dist/cli/bin.js +36 -17
  64. package/dist/cli/index.d.ts +20 -6
  65. package/dist/cli/index.js +164 -4
  66. package/dist/cloud/index.d.ts +102 -63
  67. package/dist/cloud/index.js +240 -347
  68. package/dist/cloud-CIoHNevm.js +87 -0
  69. package/dist/codemod-Bmj9dWMH.js +37 -0
  70. package/dist/codemod-Cxvvc70T.js +2084 -0
  71. package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
  72. package/dist/collect-DloHbDVa.js +55 -0
  73. package/dist/collect-FlXJlhus.js +1 -0
  74. package/dist/command-L8EstFNm.js +6 -0
  75. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  76. package/dist/compile/index.d.ts +1 -1
  77. package/dist/compile/index.js +1 -2
  78. package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
  79. package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  80. package/dist/completion-BqhRBJD8.js +143 -0
  81. package/dist/config-B46rm9sc.js +26 -0
  82. package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
  83. package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
  84. package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
  85. package/dist/constants-DcJABbLW.js +20 -0
  86. package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
  87. package/dist/convex/index.d.ts +11 -10
  88. package/dist/convex/index.js +18 -18
  89. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  90. package/dist/create-BDS7wc3y.d.ts +138 -0
  91. package/dist/create-BFfm17UA.d.ts +110 -0
  92. package/dist/create-BWRSXgOF.js +403 -0
  93. package/dist/create-C3b4B5eF.js +130 -0
  94. package/dist/create-DnrmLnLW.js +323 -0
  95. package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
  96. package/dist/credentials-DPyHmYz5.js +74 -0
  97. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  98. package/dist/delegation-DaXVdDhM.js +286 -0
  99. package/dist/delegation-input-FTxMK3ji.js +19 -0
  100. package/dist/delivery/index.d.ts +5 -0
  101. package/dist/delivery/index.js +5 -0
  102. package/dist/delivery-DCAgNyCn.js +499 -0
  103. package/dist/delivery-event-xX4obB8F.js +40 -0
  104. package/dist/denied-text-D8jDHgsl.d.ts +19 -0
  105. package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
  106. package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
  107. package/dist/device-BARQ8eYG.js +193 -0
  108. package/dist/diff-CxZo9pTq.js +37 -0
  109. package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
  110. package/dist/doctor-CxiwSfqH.js +44 -0
  111. package/dist/doctor-DFjUxf2f.js +2361 -0
  112. package/dist/drizzle/index.d.ts +5 -3
  113. package/dist/drizzle/index.js +6 -14
  114. package/dist/elysia/index.d.ts +16 -13
  115. package/dist/elysia/index.js +14 -13
  116. package/dist/env-DJZrPjRi.js +8 -0
  117. package/dist/errors-BDUwg2qC.js +27 -0
  118. package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
  119. package/dist/errors-BWXBMaKK.d.ts +11 -0
  120. package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  121. package/dist/errors-CWTY6uih.js +143 -0
  122. package/dist/evaluate-_R8QkWaf.js +1732 -0
  123. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  124. package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
  125. package/dist/eve/index.d.ts +12 -16
  126. package/dist/eve/index.js +23 -29
  127. package/dist/event-time-CsegxXxB.js +23 -0
  128. package/dist/expiry-D4_YKRKD.js +52 -0
  129. package/dist/express/index.d.ts +13 -10
  130. package/dist/express/index.js +14 -12
  131. package/dist/fastify/index.d.ts +26 -13
  132. package/dist/fastify/index.js +17 -36
  133. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  134. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  135. package/dist/fields-D9tPVUUS.js +203 -0
  136. package/dist/files-C5ZI27eV.js +124 -0
  137. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  138. package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
  139. package/dist/flags-C3DktBDY.js +86 -0
  140. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
  141. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  142. package/dist/grantee-Cn1HyUsI.js +254 -0
  143. package/dist/grantee-conditions-CcXf8hMM.js +271 -0
  144. package/dist/grantee-match-DHArqY82.js +142 -0
  145. package/dist/h3/index.d.ts +37 -0
  146. package/dist/h3/index.js +35 -0
  147. package/dist/headers-BIjfMaoC.js +8 -0
  148. package/dist/headers-CIbDTUTK.d.ts +7 -0
  149. package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
  150. package/dist/hono/index.d.ts +12 -9
  151. package/dist/hono/index.js +14 -13
  152. package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
  153. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  154. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  155. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  156. package/dist/http-DXJ37RDA.js +46 -0
  157. package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
  158. package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
  159. package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
  160. package/dist/index-BcHcPyIo.d.ts +110 -0
  161. package/dist/index-CaxrMD1A.d.ts +1 -0
  162. package/dist/index-Chrs5fQ-.d.ts +210 -0
  163. package/dist/index-CxGUswIC.d.ts +431 -0
  164. package/dist/index-D8EovfsP.d.ts +91 -0
  165. package/dist/index-DOVf7RJv.d.ts +900 -0
  166. package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
  167. package/dist/index.d.ts +20 -14
  168. package/dist/index.js +33 -23
  169. package/dist/init-DeMYsnYJ.js +96 -0
  170. package/dist/init-GG6Jh8HD.js +95 -0
  171. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  172. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  173. package/dist/instant-BluqDvyS.js +19 -0
  174. package/dist/internals-Dk8A8fX3.js +17 -0
  175. package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
  176. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  177. package/dist/jwt/index.d.ts +18 -11
  178. package/dist/jwt/index.js +166 -145
  179. package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
  180. package/dist/kysely/index.d.ts +5 -3
  181. package/dist/kysely/index.js +6 -14
  182. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  183. package/dist/load-BxEtwlBS.js +1 -0
  184. package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
  185. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  186. package/dist/login-Dfe5RlYk.js +68 -0
  187. package/dist/login-imhuwvn3.js +254 -0
  188. package/dist/manifest-C8IzW3Do.js +42 -0
  189. package/dist/manifest-CtKR3GXL.js +370 -0
  190. package/dist/manifest-json-CAGzls-C.js +9 -0
  191. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  192. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  193. package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
  194. package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
  195. package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
  196. package/dist/mcp/index.d.ts +36 -9
  197. package/dist/mcp/index.js +476 -448
  198. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
  199. package/dist/nest/index.d.ts +12 -9
  200. package/dist/nest/index.js +20 -20
  201. package/dist/next/index.d.ts +40 -20
  202. package/dist/next/index.js +37 -39
  203. package/dist/next/plugin.d.ts +1 -1
  204. package/dist/next/plugin.js +2 -2
  205. package/dist/node/index.d.ts +10 -10
  206. package/dist/node/index.js +7 -9
  207. package/dist/ocsf-BFp-PZZA.js +126 -0
  208. package/dist/openai/index.d.ts +9 -16
  209. package/dist/openai/index.js +18 -25
  210. package/dist/openapi/index.d.ts +3 -3
  211. package/dist/openapi/index.js +1 -1
  212. package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
  213. package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
  214. package/dist/openapi-ahr8rHu3.js +138 -0
  215. package/dist/operation-findings-DgATDpvh.js +36 -0
  216. package/dist/operations-CxybZErY.d.ts +59 -0
  217. package/dist/orpc/index.d.ts +13 -10
  218. package/dist/orpc/index.js +23 -20
  219. package/dist/otel/index.d.ts +3 -2
  220. package/dist/otel/index.js +53 -27
  221. package/dist/output-Dyw8fyPF.js +88 -0
  222. package/dist/output-files-B3IZJksC.js +1 -0
  223. package/dist/output-files-DhRBBE4n.js +138 -0
  224. package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
  225. package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
  226. package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
  227. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
  228. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  229. package/dist/parse-request-D_tUXG6M.js +26 -0
  230. package/dist/paths-DXSHAMIa.js +42 -0
  231. package/dist/pdp/index.d.ts +7 -3
  232. package/dist/pdp/index.js +47 -29
  233. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  234. package/dist/peer-CRvC7Hg1.js +1 -0
  235. package/dist/permdock-B9JxkBwC.js +868 -0
  236. package/dist/permdock-D7eeLJER.d.ts +502 -0
  237. package/dist/permission-registry-Br4jSNVi.js +385 -0
  238. package/dist/permissions-B-wCP5ZC.js +30 -0
  239. package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
  240. package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  241. package/dist/policies-CO1oOymN.js +295 -0
  242. package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  243. package/dist/policy-DLZJ5gAp.js +399 -0
  244. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  245. package/dist/policy-module-CTlwMvLI.js +89 -0
  246. package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
  247. package/dist/postgrest-CW0IqC-U.js +566 -0
  248. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  249. package/dist/powersync-BHfuehf3.js +62 -0
  250. package/dist/powersync-CbzkqL_M.js +1 -0
  251. package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
  252. package/dist/preset/index.d.ts +146 -0
  253. package/dist/preset/index.js +1 -0
  254. package/dist/preset-DZdU0tne.js +1768 -0
  255. package/dist/principal-source-pHneukrx.js +103 -0
  256. package/dist/prisma/index.d.ts +6 -3
  257. package/dist/prisma/index.js +6 -12
  258. package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
  259. package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  260. package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
  261. package/dist/problem-types-CJ2325SZ.js +5 -0
  262. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  263. package/dist/protected-DEPHc2xV.d.ts +38 -0
  264. package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
  265. package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
  266. package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  267. package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
  268. package/dist/pull-BgIfno6w.js +256 -0
  269. package/dist/pull-ByOks_Tg.js +1 -0
  270. package/dist/push-CmFVBOeI.js +116 -0
  271. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  272. package/dist/pushed-policy-DobP7AHI.js +238 -0
  273. package/dist/react/index.d.ts +8 -8
  274. package/dist/react/index.js +6 -6
  275. package/dist/react/provider-client.d.ts +1 -1
  276. package/dist/react/provider-client.js +1 -2
  277. package/dist/react-native/index.d.ts +24 -63
  278. package/dist/react-native/index.js +45 -27
  279. package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
  280. package/dist/relation-walk-3OyDBF0S.js +186 -0
  281. package/dist/relations-BnCWnJGI.js +163 -0
  282. package/dist/renames-CGj7YwcQ.js +175 -0
  283. package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  284. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  285. package/dist/request-context-BTRTG7OT.js +71 -0
  286. package/dist/request-context-C2_1lchh.d.ts +5 -0
  287. package/dist/request-schema-CMreVuFM.js +148 -0
  288. package/dist/resend/index.d.ts +126 -0
  289. package/dist/resend/index.js +379 -0
  290. package/dist/resource-relations-D_jw0BFx.js +243 -0
  291. package/dist/retire-CALjIQ7e.js +240 -0
  292. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  293. package/dist/rls-BA8an5Ap.js +336 -0
  294. package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
  295. package/dist/role-builder-CXbis5-X.js +623 -0
  296. package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
  297. package/dist/run-CNsApDpd.js +1 -0
  298. package/dist/run-DOfMtc9V.js +723 -0
  299. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  300. package/dist/run-ticket-sxFI6LAk.js +337 -0
  301. package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
  302. package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
  303. package/dist/scan-BOI5tJ-6.js +29 -0
  304. package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
  305. package/dist/schema-yLuBWWsh.js +130 -0
  306. package/dist/scim/index.d.ts +2 -2
  307. package/dist/scim/index.js +1 -2
  308. package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
  309. package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
  310. package/dist/server/index.d.ts +13 -134
  311. package/dist/server/index.js +13 -10
  312. package/dist/server-DqCT4CgZ.js +453 -0
  313. package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
  314. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  315. package/dist/shared-CD11nBbC.js +304 -0
  316. package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
  317. package/dist/signals-D3NcTKUS.js +32 -0
  318. package/dist/sink-BEZSlMS_.js +957 -0
  319. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  320. package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
  321. package/dist/skills-CTYwkl44.js +51 -0
  322. package/dist/snapshot-CXUWfsNy.js +269 -0
  323. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  324. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  325. package/dist/solid/index.d.ts +24 -25
  326. package/dist/solid/index.js +41 -11
  327. package/dist/solid-start/index.d.ts +52 -0
  328. package/dist/solid-start/index.js +49 -0
  329. package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
  330. package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
  331. package/dist/sql-B5T1IL83.js +55 -0
  332. package/dist/src-DLfUWFAI.js +1851 -0
  333. package/dist/ssf/index.d.ts +4 -4
  334. package/dist/ssf/index.js +440 -106
  335. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  336. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  337. package/dist/storage-C2bWdvJH.js +132 -0
  338. package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
  339. package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
  340. package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
  341. package/dist/stores-ClZUgeoP.d.ts +30 -0
  342. package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  343. package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
  344. package/dist/style-DiKWnAvn.js +1 -0
  345. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  346. package/dist/subject-BGoM5o8B.js +17 -0
  347. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  348. package/dist/supabase/index.d.ts +23 -106
  349. package/dist/supabase/index.js +5 -4
  350. package/dist/supabase/middleware.d.ts +13 -6
  351. package/dist/supabase/middleware.js +16 -11
  352. package/dist/supabase-9pqI57pW.js +92 -0
  353. package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
  354. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  355. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
  356. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  357. package/dist/support-session-C6xJQYut.js +158 -0
  358. package/dist/svelte/Protected.svelte +11 -4
  359. package/dist/svelte/index.d.ts +7 -7
  360. package/dist/svelte/index.js +26 -12
  361. package/dist/svelte/runtime.d.ts +10 -3
  362. package/dist/svelte/runtime.js +4 -3
  363. package/dist/svelte/source.d.ts +7 -7
  364. package/dist/svelte/source.js +5 -5
  365. package/dist/sveltekit/index.d.ts +51 -0
  366. package/dist/sveltekit/index.js +27 -0
  367. package/dist/tanstack-start/index.d.ts +51 -0
  368. package/dist/tanstack-start/index.js +40 -0
  369. package/dist/target-Bw37TFNA.js +51 -0
  370. package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
  371. package/dist/terminal/index.d.ts +11 -9
  372. package/dist/terminal/index.js +36 -316
  373. package/dist/testing/index.d.ts +391 -106
  374. package/dist/testing/index.js +4574 -1286
  375. package/dist/testing/saas/index.d.ts +9 -8
  376. package/dist/testing/saas/index.js +2 -2
  377. package/dist/testing/saas/permissions.d.ts +1 -1
  378. package/dist/testing/saas/permissions.js +1 -2
  379. package/dist/text-BMFRfBqc.js +8 -0
  380. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  381. package/dist/thenable-yD7SabqG.js +31 -0
  382. package/dist/time-DkWjdL98.js +71 -0
  383. package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
  384. package/dist/tool-refusal-CMLN5xhn.js +41 -0
  385. package/dist/trpc/index.d.ts +12 -9
  386. package/dist/trpc/index.js +18 -17
  387. package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
  388. package/dist/types-BNORmDM8.d.ts +172 -0
  389. package/dist/types-BjV-fqcA.d.ts +57 -0
  390. package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
  391. package/dist/types-C8-KNsFf.d.ts +107 -0
  392. package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  393. package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
  394. package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
  395. package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
  396. package/dist/types-DX0LaKTb.d.ts +157 -0
  397. package/dist/types-DiQjupG2.d.ts +332 -0
  398. package/dist/types-DqzsnlSA.js +67 -0
  399. package/dist/types-_sHy8BQf.d.ts +65 -0
  400. package/dist/types-fbZ7JEXr.d.ts +89 -0
  401. package/dist/types-tIgIeIKJ.d.ts +66 -0
  402. package/dist/unplugin/index.d.ts +1 -1
  403. package/dist/unplugin/index.js +2 -2
  404. package/dist/usage-CHOtwL19.js +1 -0
  405. package/dist/usage-DHtE8j4E.js +32 -0
  406. package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
  407. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  408. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  409. package/dist/validity-CZ7-y0Cj.js +79 -0
  410. package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
  411. package/dist/verify-DbCL9bnB.js +1770 -0
  412. package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
  413. package/dist/version-DXkYUISx.js +1 -0
  414. package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
  415. package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
  416. package/dist/vue/index.d.ts +25 -21
  417. package/dist/vue/index.js +25 -9
  418. package/dist/waiter-BGUtGYoU.js +67 -0
  419. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  420. package/dist/watch-Cb-NcaUw.js +1 -0
  421. package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
  422. package/dist/webmcp/index.d.ts +2 -2
  423. package/dist/webmcp/index.js +13 -37
  424. package/dist/where-scope-Dv-WTP-w.js +306 -0
  425. package/dist/who-can-D0QoYbEb.js +364 -0
  426. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  427. package/dist/wire-denial-C7PaVYEM.js +27 -0
  428. package/dist/workflow/index.d.ts +5 -0
  429. package/dist/workflow/index.js +223 -0
  430. package/dist/workflow-sdk/index.d.ts +56 -0
  431. package/dist/workflow-sdk/index.js +78 -0
  432. package/dist/wrap-Bd1Tejur.d.ts +15 -0
  433. package/dist/wrap-gX61EtpB.js +27 -0
  434. package/package.json +140 -41
  435. package/schemas/access-event-v1.json +118 -0
  436. package/schemas/approval-request-v1.json +34 -1
  437. package/schemas/approval-signature-v1.json +94 -0
  438. package/schemas/automation-event-v1.json +113 -0
  439. package/schemas/capability-v1.json +84 -0
  440. package/schemas/catalog-event-v1.json +87 -0
  441. package/schemas/catalog-v1.json +129 -12
  442. package/schemas/cli-commands-v1.json +164 -0
  443. package/schemas/cli-result-v1.json +96 -0
  444. package/schemas/cloud-api-v1.json +5407 -0
  445. package/schemas/connector-v1.json +408 -0
  446. package/schemas/credential-event-v1.json +81 -0
  447. package/schemas/credential-v1.json +134 -0
  448. package/schemas/decision-event-v1.json +288 -0
  449. package/schemas/delivery-event-v1.json +117 -0
  450. package/schemas/directory-event-v1.json +85 -0
  451. package/schemas/evidence-export-v1.json +54 -0
  452. package/schemas/membership-event-v1.json +93 -0
  453. package/schemas/policy-v1.json +68 -0
  454. package/schemas/pushed-policy-v1.json +236 -0
  455. package/schemas/run-v1.json +162 -0
  456. package/schemas/snapshot-v1.json +138 -0
  457. package/schemas/supabase-claims-v1.json +4 -4
  458. package/schemas/supabase-manifest-v1.json +5 -1
  459. package/schemas/support-session-v1.json +111 -0
  460. package/skills/permdock/SKILL.md +16 -12
  461. package/skills/permdock-agents/SKILL.md +40 -23
  462. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  463. package/skills/permdock-agents/references/runtimes.md +22 -18
  464. package/skills/permdock-approvals/SKILL.md +29 -13
  465. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  466. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  467. package/skills/permdock-audit/SKILL.md +3 -3
  468. package/skills/permdock-credentials/SKILL.md +5 -5
  469. package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
  470. package/skills/permdock-data/SKILL.md +6 -6
  471. package/skills/permdock-data/references/queries-and-rls.md +13 -8
  472. package/skills/permdock-data/references/relationships.md +3 -3
  473. package/skills/permdock-tenancy/SKILL.md +20 -7
  474. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  475. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  476. package/skills/permdock-wire/SKILL.md +18 -12
  477. package/skills/permdock-wire/references/adapters.md +146 -50
  478. package/skills/permdock-wire/references/policy-options.md +15 -6
  479. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  480. package/dist/approvals-DbYAuNkG.js +0 -224
  481. package/dist/arazzo-C9chp3ST.js +0 -54
  482. package/dist/bind-C_ob3LKa.d.ts +0 -25
  483. package/dist/catalog-CRW5Mx_B.js +0 -2
  484. package/dist/catalog-CYj-mX2O.js +0 -48
  485. package/dist/catalog-DWF5cYqB.js +0 -55
  486. package/dist/cloud-CfwZ39Rl.js +0 -50
  487. package/dist/cloud-DWLXO2af.js +0 -118
  488. package/dist/collect-CHB22Sx4.js +0 -83
  489. package/dist/collect-DSWOk19R.js +0 -2
  490. package/dist/commands-BeaGNj_o.js +0 -97
  491. package/dist/config-ir40y8m0.js +0 -36
  492. package/dist/create-CMwIl-w2.js +0 -253
  493. package/dist/delegation-D8pUEuce.js +0 -103
  494. package/dist/diff-C9RDjjhs.js +0 -48
  495. package/dist/doctor-Djh6JDEk.js +0 -53
  496. package/dist/doctor-DvH0IQff.js +0 -1194
  497. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  498. package/dist/duration-xK2jGFVc.js +0 -25
  499. package/dist/errors-CWfoNg9N.js +0 -47
  500. package/dist/errors-DRnGZHzF.js +0 -30
  501. package/dist/evaluation-items-CfCCejQd.js +0 -40
  502. package/dist/expiry-BoBJ8Tvc.js +0 -7
  503. package/dist/fields-BMl1RxoX.js +0 -26
  504. package/dist/grantee-Cv5Sogfv.js +0 -602
  505. package/dist/headers-BZSDieNT.js +0 -6
  506. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  507. package/dist/ids-DC4V4CFu.js +0 -18
  508. package/dist/index-0nNqHspG.d.ts +0 -6
  509. package/dist/index-BNc7Wer_.d.ts +0 -483
  510. package/dist/index-C7Tw7MaW.d.ts +0 -201
  511. package/dist/instance-options-Dhhcnm3y.js +0 -22
  512. package/dist/load-DwJUafYN.js +0 -2
  513. package/dist/manifest-iaoBXHKc.js +0 -783
  514. package/dist/map-AcxK9o_D.js +0 -147
  515. package/dist/may-use-DndQ5tQ-.js +0 -77
  516. package/dist/openapi-CQTsgKoB.js +0 -164
  517. package/dist/permdock-CbgvLnuo.js +0 -3479
  518. package/dist/permissions-DVoF6dMt.js +0 -662
  519. package/dist/policy-xyWg7QdR.js +0 -1122
  520. package/dist/powersync-CrBX8hY6.js +0 -2
  521. package/dist/powersync-DE19b9dT.js +0 -62
  522. package/dist/protected-BdnIEFkY.d.ts +0 -27
  523. package/dist/protected-xAr24FEC.d.ts +0 -40
  524. package/dist/relations-cjOL01hZ.js +0 -505
  525. package/dist/rls-P-BeBx0n.js +0 -238
  526. package/dist/rls-graph-CHwx0V8q.js +0 -435
  527. package/dist/rls-ownership-DcYlZ09B.js +0 -843
  528. package/dist/rls-shared-Cewd_-zI.js +0 -495
  529. package/dist/rls-verify-CMv9H3wV.js +0 -746
  530. package/dist/run-BWc9qqvE.js +0 -174
  531. package/dist/server-DlZ28Oz5.js +0 -268
  532. package/dist/sink-B1fZzIMf.d.ts +0 -104
  533. package/dist/sink-Bd9PSyfq.js +0 -141
  534. package/dist/skills-C5CbhhpG.js +0 -56
  535. package/dist/snapshot-Enxd0n-s.js +0 -975
  536. package/dist/sql-xdg5f4Fi.js +0 -27
  537. package/dist/src-BDwEZWrZ.js +0 -568
  538. package/dist/store-jOBYpiXC.d.ts +0 -36
  539. package/dist/stores-C0IMQrGI.d.ts +0 -52
  540. package/dist/subject-C6dLxqHU.js +0 -24
  541. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  542. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  543. package/dist/supabase-s4o9s1O1.js +0 -83
  544. package/dist/thenable-okc2xDsj.js +0 -10
  545. package/dist/types-BnIEz1sU.d.ts +0 -48
  546. package/dist/types-Bvc4oWT6.d.ts +0 -9
  547. package/dist/types-CKNSyIf_.d.ts +0 -52
  548. package/dist/types-Cq_H8N_X.d.ts +0 -197
  549. package/dist/usage-B0YuTQRO.js +0 -42
  550. package/dist/usage-DorAJiU_.js +0 -2
  551. package/dist/vocabulary-DA8a8zif.d.ts +0 -56
  552. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -0,0 +1,35 @@
1
+ import { d as discoverViaSignatureAgent, m as webBotAuthVerifier, u as InvalidSignatureError } from "../evaluations-DZ2CbV5k.js";
2
+ import { i as decorate } from "../bind-CZzhx-Vj.js";
3
+ import { t as fetchAdapter } from "../fetch-adapter-g0ypLkID.js";
4
+ //#region src/h3/create.ts
5
+ function createPermDock(policy, options) {
6
+ const adapter = fetchAdapter(policy, options, "h3", (event) => event.req);
7
+ const middleware = () => async (event, next) => {
8
+ const attached = await adapter.ensure(event.context, event);
9
+ if (!attached.ok) return attached.response;
10
+ return adapter.mapErrors(event, next);
11
+ };
12
+ const protect = ((target, data, protectOptions) => async (event, next) => {
13
+ const guard = await adapter.guard(target, data, event, protectOptions);
14
+ if (!guard.ok) return guard.response;
15
+ decorate(event.context, guard.permdock, guard.data);
16
+ return adapter.mapErrors(event, next);
17
+ });
18
+ const withPermDock = (handler) => async (event) => {
19
+ const attached = await adapter.ensure(event.context, event);
20
+ if (!attached.ok) return attached.response;
21
+ return adapter.mapErrors(event, () => handler(event));
22
+ };
23
+ return {
24
+ middleware,
25
+ protect,
26
+ getPermDock: adapter.getPermDock,
27
+ getSnapshot: adapter.getSnapshot,
28
+ withPermDock,
29
+ connection: adapter.connection,
30
+ permdockHandler: () => adapter.handler(),
31
+ openapi: adapter.kernel.openapi
32
+ };
33
+ }
34
+ //#endregion
35
+ export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent, webBotAuthVerifier };
@@ -0,0 +1,8 @@
1
+ import { t as approvalHeaderValue } from "./approval-header-CJACtHkv.js";
2
+ //#region src/client/headers.ts
3
+ /** The `PermDock-Approval` header for a resume; a `TypeError` for a token that is not an RFC 9651 sf-token. */
4
+ function approvalHeaders(token) {
5
+ return { "PermDock-Approval": approvalHeaderValue(token) };
6
+ }
7
+ //#endregion
8
+ export { approvalHeaders as t };
@@ -0,0 +1,7 @@
1
+ //#region src/client/headers.d.ts
2
+ /** The `PermDock-Approval` header for a resume; a `TypeError` for a token that is not an RFC 9651 sf-token. */
3
+ declare function approvalHeaders(token: string): {
4
+ readonly "PermDock-Approval": string;
5
+ };
6
+ //#endregion
7
+ export { approvalHeaders as t };
@@ -1,12 +1,16 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { i as findPermission, s as getRegistry } from "./permissions-DVoF6dMt.js";
4
- import { r as approverLeaves } from "./approvers-DT4AVyIg.js";
5
- import { t as describe } from "./describe-B_gVZEVi.js";
6
- import { t as parseDuration } from "./duration-xK2jGFVc.js";
7
- import { i as relationReader, n as pendingRelations, o as resolveRelated } from "./relations-cjOL01hZ.js";
8
- import { t as ApprovalError } from "./errors-DRnGZHzF.js";
9
- import { f as approverRelationKey, l as APPROVAL_HEADER, n as assertApprover, s as listAllApprovals } from "./store-DMAWwAJV.js";
3
+ import { r as approverLeaves } from "./approvers-CqPOLD-o.js";
4
+ import { t as describe } from "./describe-BybMRY7A.js";
5
+ import { i as getRegistry, n as findPermission } from "./permission-registry-Br4jSNVi.js";
6
+ import { t as assertAppData } from "./app-data-MuyzVqX8.js";
7
+ import { a as durationOf, i as dateAt, u as isoAt } from "./time-DkWjdL98.js";
8
+ import { r as relationReader, t as pendingRelations } from "./relations-BnCWnJGI.js";
9
+ import { n as resolveRelated } from "./relation-walk-3OyDBF0S.js";
10
+ import { n as toWireDelegation } from "./wire-delegation-Cv3W2eaM.js";
11
+ import { i as approverRelationKey, s as ApprovalError, t as APPROVAL_HEADER } from "./types-DqzsnlSA.js";
12
+ import { c as listAllApprovals, n as assertApprover } from "./store-4u_hxjWa.js";
13
+ import { n as parseApprovalHeader } from "./approval-header-CJACtHkv.js";
10
14
  //#region src/approvals/relations.ts
11
15
  const DEFAULT_PARENT_DEPTH = 16;
12
16
  /** Every approver a request names: `by`, each stage and its escalation, and `escalation.to`, inside `anyOf` groups too. */
@@ -70,7 +74,7 @@ async function approverRelations(request, subject, options) {
70
74
  const registry = getRegistry(options.permissions);
71
75
  const cache = /* @__PURE__ */ new Map();
72
76
  const reader = relationReader(options.relations, cache, registry);
73
- const now = (options.now ?? /* @__PURE__ */ new Date()).getTime() / 1e3;
77
+ const now = dateAt(options.now).getTime() / 1e3;
74
78
  const holds = async (item) => {
75
79
  const start = await startOf(item, request.resource.type, id, reader, cache, registry);
76
80
  if (start === void 0) return false;
@@ -132,7 +136,7 @@ function permissionMeta(permission) {
132
136
  resource: permission.resource
133
137
  };
134
138
  }
135
- function summariseSubject(subject) {
139
+ function summarizeSubject(subject) {
136
140
  const principal = subject.principal;
137
141
  return compact({
138
142
  principal: principal === null ? null : compact({
@@ -145,10 +149,10 @@ function summariseSubject(subject) {
145
149
  kind: subject.actor.kind
146
150
  },
147
151
  session: subject.session,
148
- delegation: subject.delegation === void 0 ? void 0 : compact({
152
+ delegation: toWireDelegation(subject.delegation === void 0 ? void 0 : compact({
149
153
  scopes: subject.delegation.scopes,
150
154
  authorizationDetails: subject.delegation.authorizationDetails
151
- })
155
+ }))
152
156
  });
153
157
  }
154
158
  /**
@@ -157,13 +161,14 @@ function summariseSubject(subject) {
157
161
  * extends it.
158
162
  */
159
163
  function approvalTtl(storeTtl, approval) {
160
- if (storeTtl !== void 0 && (!Number.isSafeInteger(storeTtl) || storeTtl <= 0)) throw new RangeError(`PermDock: approval ttl must be a positive whole number of milliseconds, got ${String(storeTtl)}`);
161
- const base = storeTtl ?? 36e5;
162
- const grant = approval === void 0 || approval === "human" ? void 0 : parseDuration(approval.ttl);
163
- return grant === void 0 ? base : Math.min(base, grant * 1e3);
164
+ if (storeTtl !== void 0 && durationOf(storeTtl) === void 0) throw new RangeError(`PermDock: approval ttl must be a whole number of seconds above 0, got ${String(storeTtl)}`);
165
+ const base = storeTtl ?? 3600;
166
+ const grant = approval === void 0 || approval === "human" ? void 0 : durationOf(approval.ttl);
167
+ return grant === void 0 ? base : Math.min(base, grant);
164
168
  }
165
169
  async function requestApproval(store, decision, meta) {
166
- const now = meta.now ?? /* @__PURE__ */ new Date();
170
+ if (meta.x !== void 0) assertAppData(meta.x, "x of an approval request");
171
+ const now = dateAt(meta.now);
167
172
  const leaf = permissionMeta(meta.permission);
168
173
  const approval = decision.grant.approval;
169
174
  const approvers = approval === void 0 || approval === "human" ? void 0 : compact({
@@ -178,18 +183,20 @@ async function requestApproval(store, decision, meta) {
178
183
  const ttl = approvalTtl(meta.ttl ?? store.ttl, approval);
179
184
  const request = freezeDeep(compact({
180
185
  v: 1,
186
+ id: globalThis.crypto.randomUUID(),
181
187
  token: decision.token,
182
188
  permission: leaf.key,
183
189
  scope: leaf.scope,
184
190
  resource: meta.resource ?? { type: leaf.resource },
185
- subject: summariseSubject(meta.subject),
191
+ subject: summarizeSubject(meta.subject),
186
192
  membership: meta.membership,
187
193
  approvers,
188
194
  detail: meta.detail ?? describe(decision).detail,
189
195
  adapter: meta.adapter,
190
196
  createdAt: now.toISOString(),
191
- expiresAt: new Date(now.getTime() + ttl).toISOString(),
192
- status: "pending"
197
+ expiresAt: isoAt(now.getTime() + ttl * 1e3),
198
+ status: "pending",
199
+ x: meta.x
193
200
  }));
194
201
  await store.create(request);
195
202
  return request;
@@ -219,28 +226,29 @@ async function vouchApproval(store, token, verdict) {
219
226
  vouched: verdict.rule
220
227
  }));
221
228
  }
222
- async function inspectApproval(store, token, now = /* @__PURE__ */ new Date()) {
223
- await store.expire(now);
229
+ async function inspectApproval(store, token, at) {
230
+ const now = dateAt(at).getTime();
231
+ await store.expire({ epochMilliseconds: now });
224
232
  const request = await store.get(token);
225
233
  if (request === null) return {
226
234
  ok: false,
227
- detail: "approval-not-found"
235
+ cause: "approval-not-found"
228
236
  };
229
237
  if (request.status === "pending") return {
230
238
  ok: false,
231
- detail: "approval-pending"
239
+ cause: "approval-pending"
232
240
  };
233
241
  if (request.status === "rejected") return {
234
242
  ok: false,
235
- detail: "approval-rejected"
243
+ cause: "approval-rejected"
236
244
  };
237
245
  if (request.consumedAt !== void 0) return {
238
246
  ok: false,
239
- detail: "approval-consumed"
247
+ cause: "approval-consumed"
240
248
  };
241
- if (request.status === "expired" || Date.parse(request.expiresAt) <= now.getTime()) return {
249
+ if (request.status === "expired" || Date.parse(request.expiresAt) <= now) return {
242
250
  ok: false,
243
- detail: "approval-expired"
251
+ cause: "approval-expired"
244
252
  };
245
253
  return {
246
254
  ok: true,
@@ -248,17 +256,18 @@ async function inspectApproval(store, token, now = /* @__PURE__ */ new Date()) {
248
256
  };
249
257
  }
250
258
  /** Inspects `token` and, when it is approved, consumes it so it resumes once. */
251
- async function consumeApproval(store, token, now = /* @__PURE__ */ new Date()) {
259
+ async function consumeApproval(store, token, at) {
260
+ const now = { epochMilliseconds: dateAt(at).getTime() };
252
261
  const inspected = await inspectApproval(store, token, now);
253
262
  if (!inspected.ok) return inspected;
254
263
  if (typeof store.consume !== "function") return {
255
264
  ok: false,
256
- detail: "approval-not-found"
265
+ cause: "approval-not-found"
257
266
  };
258
267
  const consumed = await store.consume(token, now);
259
268
  if (consumed === null) return {
260
269
  ok: false,
261
- detail: "approval-consumed"
270
+ cause: "approval-consumed"
262
271
  };
263
272
  return {
264
273
  ok: true,
@@ -331,13 +340,13 @@ async function resumeDecision(input) {
331
340
  inspected = await inspectApproval(store, token, input.now);
332
341
  if (inspected.ok) {
333
342
  const { request } = inspected;
334
- if (request.permission !== input.permission.key || request.resource.id !== void 0 && request.resource.id !== input.resource.id) return approvalDenied("approval-mismatch");
343
+ if (request.permission !== input.permission.key || request.resource.id !== void 0 && request.resource.id !== input.resource.id || request.subject.principal?.id !== input.subject.principal?.id) return approvalDenied("approval-mismatch");
335
344
  if (input.consume !== false) inspected = await consumeApproval(store, token, input.now);
336
345
  }
337
346
  } catch {
338
347
  return approvalDenied("approval-not-found");
339
348
  }
340
- if (!inspected.ok) return approvalDenied(inspected.detail);
349
+ if (!inspected.ok) return approvalDenied(inspected.cause);
341
350
  const principal = input.subject.principal;
342
351
  if (principal === null) return approvalDenied("approval-mismatch");
343
352
  return {
@@ -382,16 +391,15 @@ async function cancelApprovals(store, filter, meta) {
382
391
  }
383
392
  }))).filter(Boolean).length;
384
393
  }
394
+ /** The token of a `PermDock-Approval` field: one RFC 9651 sf-token Item with no parameters, else `undefined`. */
385
395
  function readApprovalHeader(headers) {
386
- const value = headers.get(APPROVAL_HEADER);
387
- if (value === null || value.trim() === "") return;
388
- return value.trim();
396
+ return parseApprovalHeader(headers.get(APPROVAL_HEADER));
389
397
  }
390
398
  function resumeFromHeader(store, headers, now) {
391
399
  const token = readApprovalHeader(headers);
392
400
  if (token === void 0) return Promise.resolve({
393
401
  ok: false,
394
- detail: "approval-not-found"
402
+ cause: "approval-not-found"
395
403
  });
396
404
  return inspectApproval(store, token, now);
397
405
  }
@@ -408,7 +416,7 @@ function resumeFromHeader(store, headers, now) {
408
416
  */
409
417
  async function storedApprovalToken(store, decision, options = {}) {
410
418
  if (store === void 0 || decision.outcome !== "approval-required") return;
411
- const now = (options.now ?? /* @__PURE__ */ new Date()).getTime();
419
+ const now = dateAt(options.now).getTime();
412
420
  try {
413
421
  const record = await store.get(decision.token);
414
422
  if (record === null || record.status === "pending" && options.denyPending !== true || record.status === "expired" || Date.parse(record.expiresAt) <= now) return;
@@ -418,4 +426,4 @@ async function storedApprovalToken(store, decision, options = {}) {
418
426
  }
419
427
  }
420
428
  //#endregion
421
- export { requestApproval as a, resumeFromHeader as c, vouchApproval as d, approverPermissions as f, readApprovalHeader as i, storedApprovalToken as l, approverRelations as m, consumeApproval as n, resolveApproval as o, heldPermissions as p, inspectApproval as r, resumeDecision as s, cancelApprovals as t, summariseSubject as u };
429
+ export { requestApproval as a, resumeFromHeader as c, vouchApproval as d, approverPermissions as f, readApprovalHeader as i, storedApprovalToken as l, approverRelations as m, consumeApproval as n, resolveApproval as o, heldPermissions as p, inspectApproval as r, resumeDecision as s, cancelApprovals as t, summarizeSubject as u };
@@ -1,8 +1,9 @@
1
- import { C as Policy, D as PolicyVocabulary, Nr as Principal, ln as PermDock } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
3
- import { n as RevocationFeed } from "../revocations-Cy06JNx2.js";
4
- import { A as ConnectionOptions, O as Connection, h as InvalidSignatureError, i as ProtectOptions, n as OpenApiHooks, w as verifyWebBotAuth, x as discoverViaSignatureAgent } from "../create-B1d519XK.js";
5
- import { t as ServerAdapterOptions } from "../bind-C_ob3LKa.js";
1
+ import { T as Policy, j as PolicyVocabulary, rr as Principal } from "../policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
3
+ import { r as PermDock } from "../permdock-D7eeLJER.js";
4
+ import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
5
+ import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-BLd4MnBX.js";
6
+ import { t as ServerAdapterOptions } from "../bind--9EFVYWF.js";
6
7
  import { Context, Hono, MiddlewareHandler } from "hono";
7
8
  import { SSEMessage, SSEStreamingApi } from "hono/streaming";
8
9
  import { WSEvents } from "hono/ws";
@@ -12,15 +13,17 @@ type HonoPermDockOptions<TUser = unknown> = ServerAdapterOptions<Context, TUser>
12
13
  readonly revocations?: RevocationFeed;
13
14
  };
14
15
  /** The `Variables` both middlewares set; Hono merges them into the route's Env. */
15
- type PermDockEnv<TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = {
16
+ type HonoPermDockEnv<TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = {
16
17
  readonly Variables: {
17
18
  readonly permdock: PermDock<V>;
18
19
  readonly permdockData: TData;
19
20
  };
20
21
  };
21
22
  type HonoPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
22
- readonly permdock: () => MiddlewareHandler<PermDockEnv<unknown, V>>;
23
- readonly protect: <TData = unknown>(permission: Permission | null, loadData?: (c: Context) => TData | Promise<TData>, protectOptions?: ProtectOptions) => MiddlewareHandler<PermDockEnv<NonNullable<TData>, V>>;
23
+ /** The `PermDock` for one request, for code the middleware does not run before. */
24
+ readonly getPermDock: (c: Context) => Promise<PermDock<V>>;
25
+ readonly middleware: () => MiddlewareHandler<HonoPermDockEnv<unknown, V>>;
26
+ readonly protect: <TData = unknown>(permission: Permission | null, data?: (c: Context) => TData | Promise<TData>, protectOptions?: ProtectOptions) => MiddlewareHandler<HonoPermDockEnv<NonNullable<TData>, V>>;
24
27
  /** A long-lived connection for the request behind `c`. */
25
28
  readonly connection: (c: Context, connectionOptions?: ConnectionOptions) => Promise<Connection>;
26
29
  /** `upgradeWebSocket` events that close with `1008` when the connection aborts. */
@@ -45,4 +48,4 @@ type SseOptions<T> = {
45
48
  };
46
49
  export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: HonoPermDockOptions<TUser>): HonoPermDock<V>;
47
50
  //#endregion
48
- export { type HonoPermDock, type HonoPermDockOptions, InvalidSignatureError, type PermDockEnv, type SseOptions, discoverViaSignatureAgent, verifyWebBotAuth };
51
+ export { type HonoPermDock, type HonoPermDockEnv, type HonoPermDockOptions, InvalidSignatureError, type SseOptions, discoverViaSignatureAgent, webBotAuthVerifier };
@@ -1,9 +1,9 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { r as PermDockRevokedError } from "../errors-Cz5zn0mW.js";
3
- import { i as discoverViaSignatureAgent, r as InvalidSignatureError, s as verifyWebBotAuth } from "../evaluations-tz6D9A2G.js";
4
- import { t as problemFromError } from "../map-error-pgUWNNtG.js";
5
- import { r as bindKernel } from "../bind-CuzGytRf.js";
6
- import { i as onRevoked, n as guardIterable, t as POLICY_VIOLATION } from "../stream-DDpvynSB.js";
1
+ import { t as compact } from "../compact-CAf557ZB.js";
2
+ import { r as PermDockRevokedError } from "../errors-BKy0EfhN.js";
3
+ import { d as discoverViaSignatureAgent, m as webBotAuthVerifier, u as InvalidSignatureError } from "../evaluations-DZ2CbV5k.js";
4
+ import { t as problemFromError } from "../map-error-TCAdw-eW.js";
5
+ import { r as bindKernel } from "../bind-CZzhx-Vj.js";
6
+ import { a as onRevoked, n as closeReason, r as guardIterable, t as POLICY_VIOLATION } from "../stream-CvdUS9V1.js";
7
7
  import { Hono } from "hono";
8
8
  //#region src/hono/create.ts
9
9
  function socket(connection, events) {
@@ -11,7 +11,7 @@ function socket(connection, events) {
11
11
  ...events,
12
12
  onOpen: (evt, ws) => {
13
13
  onRevoked(connection, (problem) => {
14
- ws.close(POLICY_VIOLATION, problem.type);
14
+ ws.close(POLICY_VIOLATION, closeReason(problem));
15
15
  });
16
16
  if (!connection.signal.aborted) events.onOpen?.(evt, ws);
17
17
  },
@@ -61,16 +61,16 @@ function mapDownstream(c) {
61
61
  }
62
62
  }
63
63
  function createPermDock(policy, options) {
64
- const { kernel, bind, scopeOf, handlerScope, attach } = bindKernel(policy, options, "hono", (c) => c.req.raw);
65
- const permdock = () => async (c, next) => {
64
+ const { kernel, bind, scopeOf, handlerScope, getPermDock, attach, guard: runGuard } = bindKernel(policy, options, "hono", (c) => c.req.raw);
65
+ const middleware = () => async (c, next) => {
66
66
  const attached = await attach(c);
67
67
  if (!attached.ok) return attached.response;
68
68
  c.set("permdock", attached.permdock);
69
69
  await next();
70
70
  mapDownstream(c);
71
71
  };
72
- const protect = (permission, loadData, protectOptions) => async (c, next) => {
73
- const guard = await kernel.protect(permission, loadData === void 0 ? void 0 : () => loadData(c), protectOptions)(bind(c), await scopeOf(c));
72
+ const protect = (permission, data, protectOptions) => async (c, next) => {
73
+ const guard = await runGuard(permission, data, c, protectOptions);
74
74
  if (!guard.ok) return guard.response;
75
75
  c.set("permdock", guard.permdock);
76
76
  c.set("permdockData", guard.data);
@@ -86,7 +86,8 @@ function createPermDock(policy, options) {
86
86
  return app;
87
87
  };
88
88
  return {
89
- permdock,
89
+ getPermDock,
90
+ middleware,
90
91
  protect,
91
92
  connection,
92
93
  socket,
@@ -96,4 +97,4 @@ function createPermDock(policy, options) {
96
97
  };
97
98
  }
98
99
  //#endregion
99
- export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent, verifyWebBotAuth };
100
+ export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent, webBotAuthVerifier };
@@ -1,10 +1,13 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
1
+ import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { T as isForbiddenKey, c as getResource, g as isSelfParented, i as findPermission, k as splitPath } from "./permissions-DVoF6dMt.js";
4
- import { c as indexPolicy, i as declaredRoleNames, m as role, o as deny, r as completeGrant, t as allow, v as normalizeWhere } from "./policy-xyWg7QdR.js";
5
- import { t as parseDuration } from "./duration-xK2jGFVc.js";
6
- import { S as findRole, T as listPlans, s as flattenGrantee } from "./grantee-Cv5Sogfv.js";
7
- import { n as sha256, t as bytesToBase64Url } from "./sha256-BO0swRXL.js";
3
+ import { n as isForbiddenKey, s as splitPath } from "./paths-DXSHAMIa.js";
4
+ import { a as deny, i as completeGrant, n as role, p as normalizeWhere, r as allow } from "./role-builder-CXbis5-X.js";
5
+ import { a as getResource, n as findPermission } from "./permission-registry-Br4jSNVi.js";
6
+ import { d as isSelfParented } from "./resource-relations-D_jw0BFx.js";
7
+ import { a as durationOf, l as isRfc3339, m as rfc3339 } from "./time-DkWjdL98.js";
8
+ import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
9
+ import { _ as listPlans, m as findRole, o as flattenGrantee } from "./grantee-Cn1HyUsI.js";
10
+ import { i as indexPolicy, t as declaredRoleNames } from "./policy-DLZJ5gAp.js";
8
11
  //#region src/core/hosted.ts
9
12
  function memoryPolicySource(document = null) {
10
13
  const current = document === null ? null : parsePolicyDocument(document);
@@ -13,9 +16,6 @@ function memoryPolicySource(document = null) {
13
16
  refresh: () => Promise.resolve()
14
17
  });
15
18
  }
16
- function isRecord(value) {
17
- return value !== null && typeof value === "object" && !Array.isArray(value);
18
- }
19
19
  function rejectUnsafe(value) {
20
20
  if (value === null || typeof value !== "object") return;
21
21
  if (Array.isArray(value)) {
@@ -34,9 +34,21 @@ function parsePolicyDocument(json) {
34
34
  const copy = JSON.parse(JSON.stringify(input));
35
35
  rejectUnsafe(copy);
36
36
  if (copy["v"] !== 1) throw new Error(`PermDock: unsupported policy document version '${String(copy["v"])}'`);
37
- if (typeof copy["id"] !== "string" || typeof copy["fingerprint"] !== "string" || typeof copy["catalog"] !== "string" || typeof copy["issuedAt"] !== "number" || !Array.isArray(copy["grants"])) throw new TypeError("PermDock: malformed policy document");
37
+ if (typeof copy["id"] !== "string" || typeof copy["fingerprint"] !== "string" || typeof copy["catalog"] !== "string" || !isRfc3339(copy["issuedAt"]) || !Array.isArray(copy["grants"])) throw new TypeError("PermDock: malformed policy document");
38
38
  return freezeDeep(copy);
39
39
  }
40
+ /** The document verified `vnd.permdock.policy+jwt` claims carry: `policy`, with `jti` as `id` and `iat` as `issuedAt`. Throws like `parsePolicyDocument`. */
41
+ function policyDocumentFromClaims(claims) {
42
+ const claim = claims["policy"];
43
+ const jti = claims["jti"];
44
+ const iat = claims["iat"];
45
+ if (!isRecord(claim) || typeof jti !== "string" || typeof iat !== "number") throw new TypeError("PermDock: malformed policy document");
46
+ return parsePolicyDocument({
47
+ ...claim,
48
+ id: jti,
49
+ issuedAt: rfc3339(iat)
50
+ });
51
+ }
40
52
  const COMPARISONS = /* @__PURE__ */ new Set([
41
53
  "eq",
42
54
  "ne",
@@ -89,7 +101,7 @@ function approvalRank(approval) {
89
101
  distinct: approval.distinct !== false,
90
102
  stale: approval.staleOn === "resource-change",
91
103
  quorum: approval.quorum ?? 1,
92
- ttl: parseDuration(approval.ttl) ?? Number.POSITIVE_INFINITY,
104
+ ttl: durationOf(approval.ttl) ?? Number.POSITIVE_INFINITY,
93
105
  escalates: approval.escalation !== void 0
94
106
  };
95
107
  }
@@ -133,9 +145,9 @@ function approvalAcceptable(policy, approval, permissionResource) {
133
145
  if (approval["distinct"] !== void 0 && typeof approval["distinct"] !== "boolean") return false;
134
146
  if (approval["staleOn"] !== void 0 && (approval["staleOn"] !== "resource-change" || getResource(policy.permissions, permissionResource)?.version === void 0)) return false;
135
147
  if (approval["quorum"] !== void 0 && (!Number.isInteger(approval["quorum"]) || approval["quorum"] < 1)) return false;
136
- if (approval["ttl"] !== void 0 && (typeof approval["ttl"] !== "string" || parseDuration(approval["ttl"]) === void 0)) return false;
148
+ if (approval["ttl"] !== void 0 && durationOf(approval["ttl"]) === void 0) return false;
137
149
  const escalation = approval["escalation"];
138
- if (escalation !== void 0 && (!isRecord(escalation) || typeof escalation["after"] !== "string" || parseDuration(escalation["after"]) === void 0 || !granteesAcceptable(policy, escalation["to"], permissionResource))) return false;
150
+ if (escalation !== void 0 && (!isRecord(escalation) || durationOf(escalation["after"]) === void 0 || !granteesAcceptable(policy, escalation["to"], permissionResource))) return false;
139
151
  if (approval["by"] === void 0) return true;
140
152
  return granteesAcceptable(policy, approval["by"], permissionResource);
141
153
  }
@@ -222,6 +234,18 @@ function buildGrant(policy, document, raw) {
222
234
  })
223
235
  };
224
236
  }
237
+ /** The grants of `document` that `policy` drops, in document order; `permdock/catalog` turns them into drift findings. */
238
+ function hostedGrantDrops(policy, document) {
239
+ return document.grants.flatMap((raw) => {
240
+ const result = buildGrant(policy, document, raw);
241
+ if (result.ok) return [];
242
+ return [freezeDeep({
243
+ grant: isRecord(raw) && typeof raw.id === "string" ? raw.id : "",
244
+ permission: isRecord(raw) && typeof raw.permission === "string" ? raw.permission : "",
245
+ reason: result.reason
246
+ })];
247
+ });
248
+ }
225
249
  /**
226
250
  * The code policy plus the hosted grants that pass every rule. Hosted
227
251
  * allows OR with code allows and any deny still wins, so a hosted grant can
@@ -257,10 +281,35 @@ function mergeHostedGrants(policy, document) {
257
281
  ...policy,
258
282
  grants,
259
283
  index: indexPolicy(policy.roles, grants, policy.vocabulary),
260
- fingerprint: bytesToBase64Url(sha256(`${policy.fingerprint}:${document.fingerprint}`))
284
+ fingerprint: sha256Digest(`${policy.fingerprint}:${document.fingerprint}`)
261
285
  }),
262
286
  dropped
263
287
  };
264
288
  }
289
+ function hostedPolicies(source) {
290
+ return Object.freeze({
291
+ feature: "hosted-policies",
292
+ apply(policy) {
293
+ if (policy.hostable.length === 0) return {
294
+ policy,
295
+ errors: []
296
+ };
297
+ let document;
298
+ try {
299
+ document = source.current();
300
+ } catch (error) {
301
+ return {
302
+ policy,
303
+ errors: [error]
304
+ };
305
+ }
306
+ const merged = mergeHostedGrants(policy, document);
307
+ return {
308
+ policy: merged.policy,
309
+ errors: merged.dropped
310
+ };
311
+ }
312
+ });
313
+ }
265
314
  //#endregion
266
- export { parsePolicyDocument as i, memoryPolicySource as n, mergeHostedGrants as r, isPortableCondition as t };
315
+ export { mergeHostedGrants as a, memoryPolicySource as i, hostedPolicies as n, parsePolicyDocument as o, isPortableCondition as r, policyDocumentFromClaims as s, hostedGrantDrops as t };
@@ -0,0 +1,78 @@
1
+ import { T as Policy, a as ApprovalRequirement, bn as Grantee, lr as Condition } from "./policy-types-DzwivBgR.js";
2
+ //#region src/core/hosted.d.ts
3
+ /** One grant authored in PermDock Cloud; its grantee is a declared role, plan or relation. */
4
+ type HostedGrant = {
5
+ readonly id: string;
6
+ readonly permission: string;
7
+ readonly effect?: "allow" | "deny";
8
+ readonly to: Grantee | readonly Grantee[];
9
+ readonly where?: Condition;
10
+ readonly check?: Condition;
11
+ readonly approval?: "human" | ApprovalRequirement;
12
+ readonly fields?: readonly string[];
13
+ };
14
+ /**
15
+ * PolicyDocument v1. Signed as a `vnd.permdock.policy+jwt`, the `policy`
16
+ * claim carries every field but `id` and `issuedAt`, which are the token's
17
+ * `jti` and `iat` (`policyDocumentFromClaims`).
18
+ */
19
+ type PolicyDocument = {
20
+ readonly v: 1;
21
+ readonly id: string;
22
+ readonly fingerprint: string;
23
+ /** The catalog fingerprint the document was authored against. */
24
+ readonly catalog: string;
25
+ /** RFC 3339. */
26
+ readonly issuedAt: string;
27
+ readonly grants: readonly HostedGrant[];
28
+ };
29
+ /**
30
+ * The channel for hosted grants. `getPermDock` reads `current()` once;
31
+ * the application calls `refresh()` on its own schedule, never a check.
32
+ */
33
+ type PolicySource = {
34
+ /** Names the implementation in errors and events. */
35
+ readonly name?: string;
36
+ current(): PolicyDocument | null;
37
+ refresh(): Promise<void>;
38
+ };
39
+ type HostedGrantDropReason = "not-hostable" | "unknown-permission" | "unknown-grantee" | "non-portable" | "weaker-approval" | "invalid";
40
+ /** Reported through `on('error')` when a hosted grant is not merged; never thrown. */
41
+ type HostedGrantDropped = {
42
+ readonly kind: "hosted-grant-dropped";
43
+ readonly document: string;
44
+ readonly grant: string;
45
+ readonly reason: HostedGrantDropReason;
46
+ };
47
+ declare function memoryPolicySource(document?: PolicyDocument | null): PolicySource;
48
+ /** Validates the document envelope; per-grant checks happen at merge time. */
49
+ declare function parsePolicyDocument(json: unknown): PolicyDocument;
50
+ /** The document verified `vnd.permdock.policy+jwt` claims carry: `policy`, with `jti` as `id` and `iat` as `issuedAt`. Throws like `parsePolicyDocument`. */
51
+ declare function policyDocumentFromClaims(claims: Readonly<Record<string, unknown>>): PolicyDocument;
52
+ /** True for the portable subset only: no `opaque`, no `sqlFunction`, no unknown op. */
53
+ declare function isPortableCondition(value: unknown): value is Condition;
54
+ /**
55
+ * The code policy plus the hosted grants that pass every rule. Hosted
56
+ * allows OR with code allows and any deny still wins, so a hosted grant can
57
+ * never override a code deny; one that fails a rule is dropped, not thrown.
58
+ */
59
+ declare function mergeHostedGrants(policy: Policy, document: PolicyDocument | null): {
60
+ readonly policy: Policy;
61
+ readonly dropped: readonly HostedGrantDropped[];
62
+ };
63
+ /**
64
+ * Hosted grants as an instance option: `policies: hostedPolicies(source)`.
65
+ * The merge code ships only with an app that imports this function.
66
+ * `source.current()` is read once per instance; a throw keeps the code
67
+ * policy and is reported as an error event.
68
+ */
69
+ type HostedPolicies = {
70
+ readonly feature: "hosted-policies";
71
+ readonly apply: (policy: Policy) => {
72
+ readonly policy: Policy;
73
+ readonly errors: readonly unknown[];
74
+ };
75
+ };
76
+ declare function hostedPolicies(source: PolicySource): HostedPolicies;
77
+ //#endregion
78
+ export { PolicyDocument as a, isPortableCondition as c, parsePolicyDocument as d, policyDocumentFromClaims as f, HostedPolicies as i, memoryPolicySource as l, HostedGrantDropReason as n, PolicySource as o, HostedGrantDropped as r, hostedPolicies as s, HostedGrant as t, mergeHostedGrants as u };
@@ -26,6 +26,39 @@ function parsedBody(body, headers) {
26
26
  if (!headers.has("content-type")) headers.set("content-type", "application/json");
27
27
  return JSON.stringify(body);
28
28
  }
29
+ /**
30
+ * A Fetch `Request` for a framework request. A `GET` or `HEAD` carries no
31
+ * body; otherwise the body the framework parsed, or else `stream()`.
32
+ */
33
+ function fetchRequest(url, method, headers, body, stream) {
34
+ if (method === "GET" || method === "HEAD") return new Request(url, {
35
+ method,
36
+ headers
37
+ });
38
+ const parsed = parsedBody(body, headers);
39
+ if (parsed !== void 0) return new Request(url, {
40
+ method,
41
+ headers,
42
+ body: parsed
43
+ });
44
+ if (stream === void 0) return new Request(url, {
45
+ method,
46
+ headers
47
+ });
48
+ const init = {
49
+ method,
50
+ headers,
51
+ body: stream(),
52
+ duplex: "half"
53
+ };
54
+ return new Request(url, init);
55
+ }
56
+ /** Writes `response` to a Fastify-style reply. */
57
+ async function writeReply(reply, response) {
58
+ reply.code(response.status);
59
+ for (const [key, value] of response.headers.entries()) reply.header(key, value);
60
+ await reply.send(await response.text());
61
+ }
29
62
  /** The Fetch `Request` an RPC context carries as `request` or `req`. */
30
63
  function requestFromContext(context) {
31
64
  if ("request" in context && context.request instanceof Request) return context.request;
@@ -33,7 +66,7 @@ function requestFromContext(context) {
33
66
  }
34
67
  /** Whether the caller sent credentials, which turns a `401` into a `WWW-Authenticate` challenge. */
35
68
  function hasCredentials(request) {
36
- return request.headers.has("authorization");
69
+ return request instanceof Request ? request.headers.has("authorization") : request.headers.authorization !== void 0;
37
70
  }
38
71
  /** The Problem Details `detail` of `cause`, or `fallback` when it has none. */
39
72
  function problemMessage(cause, fallback) {
@@ -41,4 +74,4 @@ function problemMessage(cause, fallback) {
41
74
  return fallback;
42
75
  }
43
76
  //#endregion
44
- export { problemMessage as a, parsedBody as i, hasCredentials as n, requestFromContext as o, headersFrom as r, firstHeader as t };
77
+ export { parsedBody as a, writeReply as c, headersFrom as i, firstHeader as n, problemMessage as o, hasCredentials as r, requestFromContext as s, fetchRequest as t };
@@ -7,7 +7,6 @@ type NodeRequest = IncomingMessage & {
7
7
  };
8
8
  declare function toRequest(req: NodeRequest, stream?: IncomingMessage | null): Request;
9
9
  declare function sendResponse(res: ServerResponse, response: Response): Promise<void>;
10
- declare const fromResponse: typeof sendResponse;
11
10
  declare function isServerResponse(value: unknown): value is ServerResponse;
12
11
  //#endregion
13
- export { toRequest as a, sendResponse as i, fromResponse as n, isServerResponse as r, NodeRequest as t };
12
+ export { toRequest as i, isServerResponse as n, sendResponse as r, NodeRequest as t };