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,32 @@
1
+ import { T as Policy } from "./policy-types-DzwivBgR.js";
2
+ import { r as PermDock } from "./permdock-D7eeLJER.js";
3
+ import { m as ApprovalStore } from "./types-CCpc2Dcv.js";
4
+ //#region src/server/evaluations.d.ts
5
+ /** AuthZEN 1.0 section 7.1.2.1 `options.evaluations_semantic` values. */
6
+ declare const EVALUATIONS_SEMANTICS: readonly ["execute_all", "deny_on_first_deny", "permit_on_first_permit"];
7
+ type EvaluationsSemantic = (typeof EVALUATIONS_SEMANTICS)[number];
8
+ /** The batch's `evaluations_semantic`: `execute_all` when absent, `undefined` for an unknown value. */
9
+ declare function evaluationsSemantic(body: Readonly<Record<string, unknown>>): EvaluationsSemantic | undefined;
10
+ /**
11
+ * Evaluates `items` under `semantic`: all at once for `execute_all`, else in
12
+ * order, stopping after the first deny or permit.
13
+ */
14
+ declare function evaluateBatch<T extends {
15
+ readonly decision: boolean;
16
+ }>(items: readonly unknown[], semantic: EvaluationsSemantic, rowOf: (item: unknown) => Promise<T>): Promise<T[]>;
17
+ declare function evaluationsHandler(options: {
18
+ readonly policy: Policy;
19
+ readonly resolve?: (request: Request) => Promise<PermDock>;
20
+ readonly getPermDock?: (query?: {
21
+ readonly tenant?: string;
22
+ }) => Promise<PermDock>;
23
+ readonly store?: ApprovalStore;
24
+ readonly adapter?: string;
25
+ /** The most evaluations one POST may carry; a larger batch is a 413 before any instance is resolved. */
26
+ readonly maxEvaluations?: number;
27
+ }): {
28
+ readonly POST: (request: Request) => Promise<Response>;
29
+ readonly GET: (request: Request) => Promise<Response>;
30
+ };
31
+ //#endregion
32
+ export { evaluationsSemantic as a, evaluationsHandler as i, EvaluationsSemantic as n, evaluateBatch as r, EVALUATIONS_SEMANTICS as t };
@@ -1,11 +1,14 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
2
- import { t as PROBLEM_BASE } from "./validation-error-CnjZ4t92.js";
3
- import { a as wireDenials } from "./problem-details-_AMOYz-w.js";
1
+ import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
+ import { t as PROBLEM_BASE } from "./validation-error-ZfUHbKvf.js";
3
+ import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
4
+ import { c as listPermissions, g as formerScopes, h as formerKeys } from "./permission-registry-Br4jSNVi.js";
5
+ import { h as secondsAt } from "./time-DkWjdL98.js";
4
6
  import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
5
- import { s as problemResponse, t as batchTooLarge, u as validationProblem } from "./problem-B43ztKIm.js";
6
- import { i as readApprovalHeader, s as resumeDecision } from "./helpers-H_KARDVC.js";
7
+ import { n as readBodyText } from "./body-text-QcXok_SI.js";
8
+ import { c as problemResponse, d as validationProblem, n as batchTooLarge } from "./problem-CTviyH5L.js";
9
+ import { i as readApprovalHeader, s as resumeDecision } from "./helpers-DTcZOzhF.js";
10
+ import { t as bodyTooLarge } from "./body-CH5of8Ne.js";
7
11
  import { t as timeoutSignal } from "./timeout-D51niuQP.js";
8
- import { n as permissionLookup, t as itemResourceData } from "./evaluation-items-CfCCejQd.js";
9
12
  //#region src/core/decision.ts
10
13
  /** The denial for a check that failed or named no declared permission. */
11
14
  const NO_GRANT = Object.freeze({
@@ -17,12 +20,59 @@ const NO_GRANT = Object.freeze({
17
20
  alternatives: Object.freeze([])
18
21
  });
19
22
  //#endregion
23
+ //#region src/server/evaluation-items.ts
24
+ function firstWins(map, name, leaf) {
25
+ if (!map.has(name)) map.set(name, leaf);
26
+ }
27
+ /**
28
+ * Indexes `tree` once. The lookup tries `action` as a permission key or
29
+ * scope, then `<resource.type>.<action>`, then the leaf with that resource
30
+ * and action; current names win over former ones and earlier leaves over
31
+ * later ones. Anything else is `undefined`, which the caller denies.
32
+ */
33
+ function permissionLookup(tree) {
34
+ const current = /* @__PURE__ */ new Map();
35
+ const former = /* @__PURE__ */ new Map();
36
+ const byPair = /* @__PURE__ */ new Map();
37
+ for (const leaf of listPermissions(tree)) {
38
+ firstWins(current, leaf.key, leaf);
39
+ firstWins(current, leaf.scope, leaf);
40
+ for (const name of [...formerKeys(leaf), ...formerScopes(leaf)]) firstWins(former, name, leaf);
41
+ firstWins(byPair, `${leaf.resource}\u0000${leaf.action}`, leaf);
42
+ }
43
+ const named = (name) => current.get(name) ?? former.get(name);
44
+ return (action, resource) => {
45
+ if (action === void 0) return;
46
+ const byKey = named(action);
47
+ if (byKey !== void 0) return byKey;
48
+ const type = typeof resource?.type === "string" ? resource.type : void 0;
49
+ if (type === void 0) return;
50
+ return named(`${type}.${action}`) ?? byPair.get(`${type}\u0000${action}`);
51
+ };
52
+ }
53
+ /** AuthZEN's sentinel resource id for a collection: the type as a whole, no row. */
54
+ const COLLECTION_ID = "*";
55
+ /** A resource id as a row id: `undefined` for none, a non-scalar or the collection sentinel `*`. */
56
+ function wireResourceId(id) {
57
+ if (typeof id !== "string" && typeof id !== "number") return;
58
+ const text = String(id);
59
+ return text === COLLECTION_ID ? void 0 : text;
60
+ }
61
+ /** The row an item's resource describes: its `properties`, else `{ id }`, else none for `id: "*"`. */
62
+ function itemResourceData(resource) {
63
+ const properties = resource?.properties;
64
+ if (properties !== null && typeof properties === "object") return properties;
65
+ const id = wireResourceId(resource?.id);
66
+ return id === void 0 ? void 0 : { id };
67
+ }
68
+ //#endregion
20
69
  //#region src/server/web-bot-auth.ts
21
70
  /** Milliseconds a key directory fetch may take before the signature counts as unverifiable. */
22
71
  const DIRECTORY_TIMEOUT_MS = 5e3;
23
72
  const DEFAULT_MAX_AGE = 300;
24
73
  const FUTURE_SKEW = 60;
25
74
  const DIRECTORY_PATH = "/.well-known/http-message-signatures-directory";
75
+ const WEB_BOT_AUTH_TAG = "web-bot-auth";
26
76
  var InvalidSignatureError = class extends Error {
27
77
  name = "InvalidSignatureError";
28
78
  response;
@@ -72,7 +122,18 @@ function discoverViaSignatureAgent(options) {
72
122
  };
73
123
  return { lookup };
74
124
  }
75
- async function verifyWebBotAuth(request, options) {
125
+ /**
126
+ * Verifies Web Bot Auth requests: an RFC 9421 signature tagged `web-bot-auth`
127
+ * that covers `@authority`, and `signature-agent` when the request sends
128
+ * `Signature-Agent` (draft-meunier-webbotauth-httpsig-protocol).
129
+ */
130
+ function webBotAuthVerifier(options) {
131
+ return Object.freeze({
132
+ name: "web-bot-auth",
133
+ verify: (request) => verifySignature(request, options, true)
134
+ });
135
+ }
136
+ async function verifySignature(request, options, profile) {
76
137
  if (options === void 0 || options.verify === false) return;
77
138
  const signatureInput = request.headers.get("Signature-Input");
78
139
  if (signatureInput === null) {
@@ -84,13 +145,15 @@ async function verifyWebBotAuth(request, options) {
84
145
  if (parsed === void 0 || signatureHeader === null) throw reject("Signature-Input could not be parsed");
85
146
  const signature = parseSignature(signatureHeader, parsed.label);
86
147
  if (signature === void 0) throw reject("Signature could not be parsed");
87
- const now = options.now?.() ?? Math.floor(Date.now() / 1e3);
148
+ const now = secondsAt(options.now?.());
88
149
  const maxAge = options.maxAge ?? DEFAULT_MAX_AGE;
89
150
  if (typeof parsed.created !== "number") throw reject("Signature-Input created is required");
90
151
  if (parsed.created > now + FUTURE_SKEW) throw reject("Signature-Input created is in the future");
91
152
  if (now - parsed.created > maxAge) throw reject("Signature-Input created is too old");
92
153
  if (typeof parsed.expires === "number" && parsed.expires < now) throw reject("Signature-Input expires is in the past");
93
154
  if (parsed.keyid === void 0) throw reject("Signature-Input keyid is required");
155
+ const violation = profile ? profileViolation(request, parsed) : void 0;
156
+ if (violation !== void 0) throw reject(violation);
94
157
  const agent = parseSignatureAgent(request.headers.get("Signature-Agent"), parsed.label);
95
158
  const lookup = typeof options.keys === "function" ? options.keys : options.keys.lookup;
96
159
  let key;
@@ -114,6 +177,11 @@ async function verifyWebBotAuth(request, options) {
114
177
  kind: "web-bot-auth"
115
178
  });
116
179
  }
180
+ function profileViolation(request, parsed) {
181
+ if (parsed.tag !== WEB_BOT_AUTH_TAG) return `Signature-Input tag must be "${WEB_BOT_AUTH_TAG}"`;
182
+ if (!parsed.components.includes("@authority")) return "Signature-Input must cover @authority";
183
+ if (request.headers.has("Signature-Agent") && !parsed.components.includes("signature-agent")) return "Signature-Input must cover signature-agent";
184
+ }
117
185
  function reject(detail) {
118
186
  return new InvalidSignatureError(invalidSignatureProblem(detail));
119
187
  }
@@ -129,6 +197,7 @@ function parseSignatureInput(header) {
129
197
  expires: inner.expires,
130
198
  keyid: inner.keyid,
131
199
  alg: inner.alg,
200
+ tag: inner.tag,
132
201
  innerListAndParams: member.value.trim()
133
202
  });
134
203
  }
@@ -175,7 +244,8 @@ function parseInnerListAndParams(value) {
175
244
  created: asUnix(params["created"]),
176
245
  expires: asUnix(params["expires"]),
177
246
  keyid: typeof params["keyid"] === "string" ? params["keyid"] : void 0,
178
- alg: typeof params["alg"] === "string" ? params["alg"] : void 0
247
+ alg: typeof params["alg"] === "string" ? params["alg"] : void 0,
248
+ tag: typeof params["tag"] === "string" ? params["tag"] : void 0
179
249
  });
180
250
  }
181
251
  function parseQuotedList(inner) {
@@ -329,10 +399,83 @@ function decodeSfBytes(value) {
329
399
  }
330
400
  //#endregion
331
401
  //#region src/server/evaluations.ts
402
+ /** AuthZEN 1.0 section 7.1.2.1 `options.evaluations_semantic` values. */
403
+ const EVALUATIONS_SEMANTICS = [
404
+ "execute_all",
405
+ "deny_on_first_deny",
406
+ "permit_on_first_permit"
407
+ ];
408
+ /** The batch's `evaluations_semantic`: `execute_all` when absent, `undefined` for an unknown value. */
409
+ function evaluationsSemantic(body) {
410
+ const options = body["options"];
411
+ const value = isRecord(options) ? options["evaluations_semantic"] : void 0;
412
+ if (value === void 0) return "execute_all";
413
+ return EVALUATIONS_SEMANTICS.find((semantic) => semantic === value);
414
+ }
415
+ function unknownSemanticProblem() {
416
+ return validationProblem(`options.evaluations_semantic must be one of ${EVALUATIONS_SEMANTICS.join(", ")}`);
417
+ }
418
+ /**
419
+ * Evaluates `items` under `semantic`: all at once for `execute_all`, else in
420
+ * order, stopping after the first deny or permit.
421
+ */
422
+ async function evaluateBatch(items, semantic, rowOf) {
423
+ if (semantic === "execute_all") return Promise.all(items.map(rowOf));
424
+ const stopOn = semantic === "permit_on_first_permit";
425
+ const rows = [];
426
+ for (const item of items) {
427
+ const row = await rowOf(item);
428
+ rows.push(row);
429
+ if (row.decision === stopOn) break;
430
+ }
431
+ return rows;
432
+ }
433
+ /** AuthZEN 1.0 section 10.1.1: a response echoes the request's `X-Request-ID`. */
434
+ function withRequestId(request, response) {
435
+ const id = request.headers.get("x-request-id");
436
+ if (id === null || id === "") return response;
437
+ const headers = new Headers(response.headers);
438
+ headers.set("X-Request-ID", id);
439
+ return new Response(response.body, {
440
+ status: response.status,
441
+ statusText: response.statusText,
442
+ headers
443
+ });
444
+ }
445
+ /** AuthZEN 1.0 section 9.1 PDP metadata for the PDP at `pdp`. */
446
+ function authzenMetadata(pdp, search = {}) {
447
+ return compact({
448
+ policy_decision_point: pdp,
449
+ access_evaluation_endpoint: `${pdp}/access/v1/evaluation`,
450
+ access_evaluations_endpoint: `${pdp}/access/v1/evaluations`,
451
+ search_subject_endpoint: search.subject === true ? `${pdp}/access/v1/search/subject` : void 0,
452
+ search_resource_endpoint: search.resource === true ? `${pdp}/access/v1/search/resource` : void 0,
453
+ search_action_endpoint: search.action === true ? `${pdp}/access/v1/search/action` : void 0
454
+ });
455
+ }
456
+ /**
457
+ * `reason_admin` and `reason_user` for a decision that is not granted, from
458
+ * the denial roles and reasons the context already carries. The user reason
459
+ * names no role, grant or subject.
460
+ */
461
+ function evaluationReasons(decision, permission) {
462
+ switch (decision.outcome) {
463
+ case "granted": return {};
464
+ case "denied": return {
465
+ reason_admin: { en: `${permission} denied: ${decision.denials.map((denial) => `${denial.role ?? "none"} (${denial.reason})`).join(", ")}.` },
466
+ reason_user: { en: `${permission} is not permitted.` }
467
+ };
468
+ case "approval-required": return {
469
+ reason_admin: { en: `${permission} requires human approval (${decision.reason}).` },
470
+ reason_user: { en: `${permission} requires approval.` }
471
+ };
472
+ default: return decision;
473
+ }
474
+ }
332
475
  function permissionOf(lookup, item) {
333
476
  return lookup(typeof item.action?.name === "string" ? item.action.name : void 0, item.resource);
334
477
  }
335
- function evaluationRow(decision) {
478
+ function evaluationRow(decision, permission) {
336
479
  switch (decision.outcome) {
337
480
  case "granted": return {
338
481
  decision: true,
@@ -348,14 +491,16 @@ function evaluationRow(decision) {
348
491
  permdock: {
349
492
  ...decision,
350
493
  denials: wireDenials(decision.denials)
351
- }
494
+ },
495
+ ...evaluationReasons(decision, permission)
352
496
  }
353
497
  };
354
498
  case "approval-required": return {
355
499
  decision: false,
356
500
  context: {
357
501
  outcome: "approval-required",
358
- permdock: decision
502
+ permdock: decision,
503
+ ...evaluationReasons(decision, permission)
359
504
  }
360
505
  };
361
506
  default: return decision;
@@ -374,11 +519,14 @@ function applyApprovalResume(decision, permission, permdock, store, request, res
374
519
  }
375
520
  function evaluateOne(lookup, permdock, item, store, header, adapter) {
376
521
  const permission = permissionOf(lookup, item);
377
- if (permission === void 0) return Promise.resolve(NO_GRANT);
522
+ if (permission === void 0) return Promise.resolve({
523
+ decision: NO_GRANT,
524
+ permission: typeof item.action?.name === "string" ? item.action.name : "unknown"
525
+ });
378
526
  const data = itemResourceData(item.resource);
379
527
  const decide = permdock.decide;
380
528
  const decision = decide(permission, data, compact({
381
- source: "endpoint",
529
+ call: "endpoint",
382
530
  adapter,
383
531
  trusted: false,
384
532
  boundary: "decision-endpoint"
@@ -388,11 +536,14 @@ function evaluateOne(lookup, permdock, item, store, header, adapter) {
388
536
  permission,
389
537
  subject: permdock.subject,
390
538
  store,
391
- resource: resourceRef(permission, data, item.resource?.id),
539
+ resource: resourceRef(permission, data, wireResourceId(item.resource?.id)),
392
540
  adapter,
393
541
  token: header,
394
542
  consume: false
395
- });
543
+ }).then((resumed) => ({
544
+ decision: resumed,
545
+ permission: permission.key
546
+ }));
396
547
  }
397
548
  async function resolvePermdock(options, request, tenant) {
398
549
  if (options.resolve !== void 0) {
@@ -402,14 +553,16 @@ async function resolvePermdock(options, request, tenant) {
402
553
  if (options.getPermDock !== void 0) return options.getPermDock(tenant === void 0 ? void 0 : { tenant });
403
554
  throw new TypeError("evaluations handler needs resolve or getPermDock");
404
555
  }
405
- function createEvaluationsHandler(options) {
556
+ function evaluationsHandler(options) {
406
557
  const adapter = options.adapter ?? "server";
407
558
  const lookup = permissionLookup(options.policy.permissions);
408
559
  const maxEvaluations = options.maxEvaluations ?? 256;
409
560
  const POST = async (request) => {
561
+ const read = await readBodyText(request);
562
+ if (!read.ok) return read.cause === "too-large" ? bodyTooLarge() : validationProblem("evaluations body was not valid JSON");
410
563
  let body;
411
564
  try {
412
- body = await request.json();
565
+ body = JSON.parse(read.text);
413
566
  } catch {
414
567
  return validationProblem("evaluations body was not valid JSON");
415
568
  }
@@ -418,6 +571,8 @@ function createEvaluationsHandler(options) {
418
571
  if (evaluations === void 0) return validationProblem("evaluations array is required");
419
572
  if (!Array.isArray(evaluations)) return validationProblem("evaluations must be an array");
420
573
  if (evaluations.length > maxEvaluations) return batchTooLarge(maxEvaluations);
574
+ const semantic = evaluationsSemantic(body);
575
+ if (semantic === void 0) return unknownSemanticProblem();
421
576
  const header = readApprovalHeader(request.headers);
422
577
  let permdock;
423
578
  try {
@@ -426,21 +581,15 @@ function createEvaluationsHandler(options) {
426
581
  if (error instanceof InvalidSignatureError) return error.response;
427
582
  throw error;
428
583
  }
429
- const rows = await Promise.all(evaluations.map(async (item) => {
430
- return evaluationRow(await evaluateOne(lookup, permdock, item !== null && typeof item === "object" ? item : {}, options.store, header, adapter));
431
- }));
584
+ const rows = await evaluateBatch(evaluations, semantic, async (item) => {
585
+ const evaluated = await evaluateOne(lookup, permdock, item !== null && typeof item === "object" ? item : {}, options.store, header, adapter);
586
+ return evaluationRow(evaluated.decision, evaluated.permission);
587
+ });
432
588
  return Response.json({ evaluations: rows });
433
589
  };
434
590
  const GET = async (request) => {
435
591
  const url = new URL(request.url);
436
- if (url.pathname.includes("authzen-configuration")) {
437
- const origin = url.origin;
438
- return Response.json({
439
- policy_decision_point: origin,
440
- access_evaluation_endpoint: `${origin}/access/v1/evaluation`,
441
- access_evaluations_endpoint: `${origin}/access/v1/evaluations`
442
- });
443
- }
592
+ if (url.pathname.includes("authzen-configuration")) return Response.json(authzenMetadata(url.origin));
444
593
  const tenant = url.searchParams.get("tenant") ?? void 0;
445
594
  let permdock;
446
595
  try {
@@ -453,9 +602,9 @@ function createEvaluationsHandler(options) {
453
602
  return Response.json(await Promise.resolve(snapshot));
454
603
  };
455
604
  return {
456
- POST,
457
- GET
605
+ POST: async (request) => withRequestId(request, await POST(request)),
606
+ GET: async (request) => withRequestId(request, await GET(request))
458
607
  };
459
608
  }
460
609
  //#endregion
461
- export { invalidSignatureProblem as a, NO_GRANT as c, discoverViaSignatureAgent as i, createEvaluationsHandler as n, invalidSignatureResponse as o, InvalidSignatureError as r, verifyWebBotAuth as s, applyApprovalResume as t };
610
+ export { wireResourceId as _, evaluationReasons as a, unknownSemanticProblem as c, discoverViaSignatureAgent as d, invalidSignatureProblem as f, permissionLookup as g, itemResourceData as h, evaluateBatch as i, withRequestId as l, webBotAuthVerifier as m, applyApprovalResume as n, evaluationsHandler as o, invalidSignatureResponse as p, authzenMetadata as r, evaluationsSemantic as s, EVALUATIONS_SEMANTICS as t, InvalidSignatureError as u, NO_GRANT as v };
@@ -1,8 +1,8 @@
1
- import { C as Policy, D as PolicyVocabulary, Nr as Principal, kr as Delegation, ln as PermDock } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
3
- import { c as ApprovalRequest, f as ApprovalStore } from "../types-aqOHTHcp.js";
4
- import { t as InstanceOptions } from "../instance-options-jARdwfPN.js";
5
- import { t as ToolMap } from "../types-Bvc4oWT6.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 { u as ApprovalRequest } from "../types-CCpc2Dcv.js";
5
+ import { o as AgentAdapterOptions, t as AgentPermDock } from "../create-BDS7wc3y.js";
6
6
  //#region src/eve/create.d.ts
7
7
  /** Structural `SessionAuthContext` from `eve`. */
8
8
  type EvePrincipal = {
@@ -49,14 +49,10 @@ type EveContext = Pick<EveApprovalContext, "session" | "callId">;
49
49
  type EveApprovers = {
50
50
  readonly roles: readonly string[];
51
51
  } | ((responder: EvePrincipal, request: ApprovalRequest) => boolean);
52
- type EvePermDockOptions<TUser = unknown> = InstanceOptions & {
52
+ type EvePermDockOptions<TUser = unknown> = Omit<AgentAdapterOptions<EveContext, TUser>, "subject"> & {
53
+ /** Defaults to `subjectFromEve`: the session initiator's id and `roles` attribute. */
53
54
  readonly subject?: (context: EveContext) => TUser | Promise<TUser>;
54
- readonly actor?: (context: EveContext) => unknown;
55
- readonly delegation?: (context: EveContext) => Delegation | undefined | Promise<Delegation | undefined>;
56
- readonly tenant?: string | ((context: EveContext) => string | undefined | Promise<string | undefined>);
57
- readonly tools: ToolMap;
58
55
  readonly approvers?: EveApprovers;
59
- readonly store?: ApprovalStore;
60
56
  };
61
57
  type EveRequestResult = "not-applicable" | "user-approval" | {
62
58
  readonly type: "denied";
@@ -73,14 +69,14 @@ type EveApprovalPair = {
73
69
  readonly request: (ctx: EveApprovalContext) => Promise<EveRequestResult>;
74
70
  readonly response: (ctx: EveResponseContext) => Promise<EveResponseResult>;
75
71
  };
76
- type EvePermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
72
+ type EvePermDock<V extends PolicyVocabulary = PolicyVocabulary> = AgentPermDock<EveContext, V> & {
77
73
  readonly approval: EveApprovalPair;
78
74
  readonly approvalFor: (permission: Permission, data?: (input: unknown) => unknown) => EveApprovalPair;
79
- readonly permdock: (ctx: EveContext) => Promise<PermDock<V>>;
75
+ readonly getPermDock: (ctx: EveContext) => Promise<PermDock<V>>;
80
76
  };
81
77
  export declare function rolesOf(principal: EvePrincipal | null | undefined): string[];
82
- export declare function subjectFromSession(context: EveContext): unknown;
83
- export declare function actorFromSession(context: EveContext): unknown;
84
- export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: EvePermDockOptions<TUser>): EvePermDock<V>;
78
+ export declare function subjectFromEve(context: EveContext): unknown;
79
+ export declare function actorFromEve(context: EveContext): unknown;
80
+ export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: EvePermDockOptions<TUser>): EvePermDock<V>;
85
81
  //#endregion
86
82
  export type { EveApprovalContext, EveApprovalPair, EveApprovers, EveContext, EvePermDock, EvePermDockOptions, EvePrincipal, EveRequestResult, EveResponseContext, EveResponseResult };
package/dist/eve/index.js CHANGED
@@ -1,9 +1,8 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as isApprovalError } from "../errors-DRnGZHzF.js";
3
- import { r as memoryApprovalStore } from "../store-DMAWwAJV.js";
4
- import { o as resolveApproval } from "../helpers-H_KARDVC.js";
5
- import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
6
- import { n as createAgentKernel } from "../kernel-_RRHmnMY.js";
1
+ import { t as compact } from "../compact-CAf557ZB.js";
2
+ import { c as withApp } from "../permdock-B9JxkBwC.js";
3
+ import { c as isApprovalError } from "../types-DqzsnlSA.js";
4
+ import { o as resolveApproval } from "../helpers-DTcZOzhF.js";
5
+ import { t as agentRuntime } from "../create-C3b4B5eF.js";
7
6
  import { t as boundedMap } from "../lru-8q4WZjBV.js";
8
7
  //#region src/eve/create.ts
9
8
  const TOKENS_PER_PROCESS = 1e3;
@@ -13,7 +12,7 @@ function rolesOf(principal) {
13
12
  if (!Array.isArray(roles)) return [];
14
13
  return roles.filter((role) => typeof role === "string");
15
14
  }
16
- function subjectFromSession(context) {
15
+ function subjectFromEve(context) {
17
16
  const initiator = context.session?.auth?.initiator;
18
17
  if (initiator === void 0 || initiator === null) return null;
19
18
  return {
@@ -21,7 +20,7 @@ function subjectFromSession(context) {
21
20
  roles: rolesOf(initiator)
22
21
  };
23
22
  }
24
- function actorFromSession(context) {
23
+ function actorFromEve(context) {
25
24
  const auth = context.session?.auth;
26
25
  const initiator = auth?.initiator;
27
26
  const current = auth?.current;
@@ -51,21 +50,15 @@ function mayApprove(approvers, responder, request) {
51
50
  function callKey(sessionId, callId) {
52
51
  return JSON.stringify([sessionId ?? null, callId]);
53
52
  }
54
- function createPermDock(policy, options) {
55
- const store = options.store ?? memoryApprovalStore();
53
+ function createPermDock(policy, given) {
54
+ const options = withApp(policy, given);
55
+ const store = options.store;
56
56
  const tokensByCall = boundedMap(TOKENS_PER_PROCESS);
57
- const kernel = createAgentKernel(policy, {
58
- ...compact({
59
- tenant: options.tenant,
60
- delegation: options.delegation
61
- }),
62
- ...instanceOptions(options),
63
- subject: options.subject ?? subjectFromSession,
64
- actor: options.actor ?? actorFromSession,
65
- tools: options.tools,
66
- store,
67
- adapter: "eve"
68
- });
57
+ const { agent, kernel } = agentRuntime(policy, {
58
+ ...options,
59
+ subject: options.subject ?? subjectFromEve,
60
+ actor: options.actor ?? actorFromEve
61
+ }, "eve");
69
62
  const approverOf = async (responder, sessionId) => {
70
63
  try {
71
64
  return (await kernel.instance({ session: {
@@ -82,6 +75,7 @@ function createPermDock(policy, options) {
82
75
  const pairFor = (bindingFor) => {
83
76
  const request = async (ctx) => {
84
77
  const binding = bindingFor(ctx.toolName);
78
+ if (binding === void 0 && options.unmapped === "allow") return "not-applicable";
85
79
  const verdict = binding === void 0 ? await kernel.decideTool(ctx.toolName, ctx.toolInput, ctx) : await kernel.evaluate(binding, ctx.toolName, ctx.toolInput, ctx, { denyPending: true });
86
80
  if (verdict.outcome === "approval-required" && ctx.callId !== void 0) tokensByCall.set(callKey(ctx.session?.id, ctx.callId), verdict.token);
87
81
  return mapVerdict(verdict);
@@ -105,7 +99,7 @@ function createPermDock(policy, options) {
105
99
  };
106
100
  const response = async (ctx) => {
107
101
  const token = await tokenOf(ctx);
108
- if (token === void 0) return {
102
+ if (token === void 0 || store === void 0) return {
109
103
  status: "rejected",
110
104
  reason: "approval-not-found"
111
105
  };
@@ -158,7 +152,7 @@ function createPermDock(policy, options) {
158
152
  response
159
153
  };
160
154
  };
161
- const approval = pairFor((toolName) => Object.hasOwn(options.tools, toolName) ? options.tools[toolName] : void 0);
155
+ const approval = pairFor((toolName) => Object.hasOwn(options.operations, toolName) ? options.operations[toolName] : void 0);
162
156
  const approvalFor = (permission, data) => {
163
157
  const binding = compact({
164
158
  permission,
@@ -166,11 +160,11 @@ function createPermDock(policy, options) {
166
160
  });
167
161
  return pairFor(() => binding);
168
162
  };
169
- return {
163
+ return Object.freeze({
164
+ ...agent,
170
165
  approval,
171
- approvalFor,
172
- permdock: (ctx) => kernel.instance(ctx)
173
- };
166
+ approvalFor
167
+ });
174
168
  }
175
169
  //#endregion
176
- export { actorFromSession, createPermDock, rolesOf, subjectFromSession };
170
+ export { actorFromEve, createPermDock, rolesOf, subjectFromEve };
@@ -0,0 +1,23 @@
1
+ import { l as isRfc3339, u as isoAt } from "./time-DkWjdL98.js";
2
+ //#region src/core/event-time.ts
3
+ const MAX_TIME_VALUE = 864e13;
4
+ /**
5
+ * An event time as RFC 3339, or `undefined` when there is none or it is not a
6
+ * time: NumericDate seconds are converted and an RFC 3339 string passes through.
7
+ * Never throws, so a decision event never fails on a malformed expiry.
8
+ */
9
+ function eventInstant(value) {
10
+ if (typeof value === "string") return isRfc3339(value) ? value : void 0;
11
+ if (typeof value !== "number") return;
12
+ const millis = value * 1e3;
13
+ return Math.abs(millis) <= MAX_TIME_VALUE ? isoAt(millis) : void 0;
14
+ }
15
+ /** `eventInstant` for a builder input, where a malformed time is the caller's error. */
16
+ function requireEventInstant(value, field) {
17
+ if (value === void 0) return;
18
+ const instant = eventInstant(value);
19
+ if (instant === void 0) throw new RangeError(`PermDock: ${field} is not an RFC 3339 instant`);
20
+ return instant;
21
+ }
22
+ //#endregion
23
+ export { requireEventInstant as n, eventInstant as t };
@@ -0,0 +1,52 @@
1
+ import { c as instantOf } from "./time-DkWjdL98.js";
2
+ //#region src/core/ids.ts
3
+ /**
4
+ * The canonical text of a scope or object id: a non-empty string as is, a
5
+ * finite number or a bigint as its decimal text (a `bigint` key column read
6
+ * through supabase-js arrives as a number), anything else none.
7
+ */
8
+ function idText(value) {
9
+ if (typeof value === "string") return value === "" ? void 0 : value;
10
+ if (typeof value === "number" && Number.isFinite(value)) return String(value);
11
+ if (typeof value === "bigint") return String(value);
12
+ }
13
+ const MAX_ID = 256;
14
+ const MAX_ENTRIES = 64;
15
+ /** A wire id: a non-empty string of at most 256 characters. */
16
+ function isId(value) {
17
+ return typeof value === "string" && value.length > 0 && value.length <= MAX_ID;
18
+ }
19
+ /** A non-empty list of at most 64 wire ids, deduplicated, else `undefined`. */
20
+ function idList(value) {
21
+ if (!Array.isArray(value) || value.length === 0 || value.length > MAX_ENTRIES || !value.every(isId)) return;
22
+ return [...new Set(value)];
23
+ }
24
+ /** Whether two ids are the same id once both are read as text; a missing id matches nothing. */
25
+ function sameId(left, right) {
26
+ const text = idText(left);
27
+ return text !== void 0 && text === idText(right);
28
+ }
29
+ //#endregion
30
+ //#region src/core/expiry.ts
31
+ /**
32
+ * `expiresAt` is Unix seconds; a membership with none never expires. One that
33
+ * is not a number below infinity (`NaN`) has already expired: fail closed.
34
+ */
35
+ function expiredAt(item, now) {
36
+ return item.expiresAt !== void 0 && !(item.expiresAt > now);
37
+ }
38
+ /**
39
+ * Unix seconds of a stored expiry: finite Unix seconds, an RFC 3339 string
40
+ * (the Postgres `timestamptz` JSON form), a `Date` or an `Instant`.
41
+ * `undefined` for anything else, which the caller treats as already expired.
42
+ */
43
+ function expirySeconds(value) {
44
+ if (typeof value === "number") return Number.isFinite(value) ? value : void 0;
45
+ if (value instanceof Date) {
46
+ const millis = value.getTime();
47
+ return Number.isFinite(millis) ? Math.floor(millis / 1e3) : void 0;
48
+ }
49
+ return instantOf(value);
50
+ }
51
+ //#endregion
52
+ export { isId as a, idText as i, expirySeconds as n, sameId as o, idList as r, expiredAt as t };
@@ -1,23 +1,26 @@
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 { h as InvalidSignatureError, i as ProtectOptions, n as OpenApiHooks, w as verifyWebBotAuth, x as discoverViaSignatureAgent } from "../create-B1d519XK.js";
4
- import { t as ServerAdapterOptions } from "../bind-C_ob3LKa.js";
5
- import { a as toRequest, i as sendResponse } from "../http-DPuDaChb.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 { f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-BLd4MnBX.js";
5
+ import { t as ServerAdapterOptions } from "../bind--9EFVYWF.js";
6
+ import { i as toRequest, r as sendResponse } from "../http-B_LphE5Y.js";
6
7
  import { ErrorRequestHandler, Request, RequestHandler, Response, Router } from "express";
7
8
  //#region src/express/create.d.ts
8
9
  type ExpressPermDockOptions<TUser = unknown> = ServerAdapterOptions<Request, TUser>;
9
- type PermDockRequest<T = unknown, V extends PolicyVocabulary = PolicyVocabulary> = Request & {
10
+ type ExpressPermDockRequest<T = unknown, V extends PolicyVocabulary = PolicyVocabulary> = Request & {
10
11
  permdock: PermDock<V>;
11
12
  permdockData?: T;
12
13
  };
13
14
  type ExpressPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
14
- readonly permdock: () => RequestHandler;
15
- readonly protect: (permission: Permission | null, loadData?: (req: Request) => unknown, protectOptions?: ProtectOptions) => RequestHandler;
15
+ /** The `PermDock` for one request, for code the middleware does not run before. */
16
+ readonly getPermDock: (req: Request) => Promise<PermDock<V>>;
17
+ readonly middleware: () => RequestHandler;
18
+ readonly protect: (permission: Permission | null, data?: (req: Request) => unknown, protectOptions?: ProtectOptions) => RequestHandler;
16
19
  readonly errorHandler: () => ErrorRequestHandler;
17
20
  readonly permdockHandler: () => Router;
18
- readonly withPermDock: (fn: (req: PermDockRequest<unknown, V>, res: Response) => unknown) => RequestHandler;
21
+ readonly withPermDock: (fn: (req: ExpressPermDockRequest<unknown, V>, res: Response) => unknown) => RequestHandler;
19
22
  readonly openapi: OpenApiHooks;
20
23
  };
21
24
  export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: ExpressPermDockOptions<TUser>): ExpressPermDock<V>;
22
25
  //#endregion
23
- export { type ExpressPermDock, type ExpressPermDockOptions, InvalidSignatureError, type PermDockRequest, discoverViaSignatureAgent, sendResponse, toRequest, verifyWebBotAuth };
26
+ export { type ExpressPermDock, type ExpressPermDockOptions, type ExpressPermDockRequest, InvalidSignatureError, discoverViaSignatureAgent, sendResponse, toRequest, webBotAuthVerifier };