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
@@ -1,3 +1,5 @@
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { n as isForbiddenKey } from "./paths-DXSHAMIa.js";
1
3
  //#region src/core/json-schema.ts
2
4
  function issue(issues, path, message) {
3
5
  issues.push({
@@ -5,9 +7,6 @@ function issue(issues, path, message) {
5
7
  path: [...path]
6
8
  });
7
9
  }
8
- function isRecord(value) {
9
- return value !== null && typeof value === "object" && !Array.isArray(value);
10
- }
11
10
  /**
12
11
  * A plain-data copy built from own enumerable keys, so `__proto__` stays an
13
12
  * ordinary key and nothing the input inherits is read. Anything JSON cannot
@@ -40,6 +39,12 @@ function copyJson(value, path, issues, ancestors) {
40
39
  ancestors.delete(value);
41
40
  }
42
41
  }
42
+ /** JSON Schema counts string length in code points, not UTF-16 units. */
43
+ function codePoints(value) {
44
+ let count = 0;
45
+ for (const _ of value) count += 1;
46
+ return count;
47
+ }
43
48
  function typeMatches(type, value) {
44
49
  switch (type) {
45
50
  case "object": return isRecord(value);
@@ -47,6 +52,8 @@ function typeMatches(type, value) {
47
52
  case "string": return typeof value === "string";
48
53
  case "boolean": return typeof value === "boolean";
49
54
  case "integer": return Number.isInteger(value);
55
+ case "number": return typeof value === "number" && Number.isFinite(value);
56
+ case "null": return value === null;
50
57
  default: return type;
51
58
  }
52
59
  }
@@ -71,12 +78,32 @@ function checkSchema(node, value, path, issues, root = node) {
71
78
  issue(issues, path, `Expected one of ${node.enum.map((item) => JSON.stringify(item)).join(", ")}`);
72
79
  return;
73
80
  }
74
- if (node.type !== void 0 && !typeMatches(node.type, value)) {
75
- issue(issues, path, `Expected ${node.type}`);
76
- return;
81
+ if (node.type !== void 0) {
82
+ const types = typeof node.type === "string" ? [node.type] : node.type;
83
+ if (!types.some((type) => typeMatches(type, value))) {
84
+ issue(issues, path, `Expected ${types.join(" or ")}`);
85
+ return;
86
+ }
87
+ }
88
+ if (typeof value === "string") {
89
+ if (node.pattern !== void 0 && !new RegExp(node.pattern, "u").test(value)) issue(issues, path, `Expected a string matching ${node.pattern}`);
90
+ if (node.minLength !== void 0 && value.length < node.minLength) issue(issues, path, `Expected at least ${String(node.minLength)} characters`);
91
+ if (node.maxLength !== void 0 && codePoints(value) > node.maxLength) issue(issues, path, `Expected at most ${String(node.maxLength)} characters`);
92
+ }
93
+ if (typeof value === "number") {
94
+ if (node.minimum !== void 0 && value < node.minimum) issue(issues, path, `Expected at least ${String(node.minimum)}`);
95
+ if (node.maximum !== void 0 && value > node.maximum) issue(issues, path, `Expected at most ${String(node.maximum)}`);
96
+ if (node.exclusiveMinimum !== void 0 && value <= node.exclusiveMinimum) issue(issues, path, `Expected more than ${String(node.exclusiveMinimum)}`);
97
+ if (node.exclusiveMaximum !== void 0 && value >= node.exclusiveMaximum) issue(issues, path, `Expected less than ${String(node.exclusiveMaximum)}`);
77
98
  }
78
- if (node.pattern !== void 0 && typeof value === "string" && !new RegExp(node.pattern, "u").test(value)) issue(issues, path, `Expected a string matching ${node.pattern}`);
79
- if (node.minimum !== void 0 && typeof value === "number" && value < node.minimum) issue(issues, path, `Expected at least ${String(node.minimum)}`);
99
+ if (node.anyOf !== void 0) {
100
+ if (!node.anyOf.some((option) => {
101
+ const scratch = [];
102
+ checkSchema(option, value, path, scratch, root);
103
+ return scratch.length === 0;
104
+ })) issue(issues, path, "Expected at least one matching form");
105
+ }
106
+ for (const option of node.allOf ?? []) checkSchema(option, value, path, issues, root);
80
107
  if (node.oneOf !== void 0) {
81
108
  if (node.oneOf.filter((option) => {
82
109
  const scratch = [];
@@ -86,6 +113,7 @@ function checkSchema(node, value, path, issues, root = node) {
86
113
  }
87
114
  if (Array.isArray(value)) {
88
115
  if (node.minItems !== void 0 && value.length < node.minItems) issue(issues, path, `Expected at least ${String(node.minItems)} items`);
116
+ if (node.maxItems !== void 0 && value.length > node.maxItems) issue(issues, path, `Expected at most ${String(node.maxItems)} items`);
89
117
  if (node.uniqueItems === true && new Set(value.map((item) => JSON.stringify(item))).size !== value.length) issue(issues, path, "Expected unique items");
90
118
  if (node.items !== void 0) for (const [index, item] of value.entries()) checkSchema(node.items, item, [...path, index], issues, root);
91
119
  }
@@ -102,5 +130,14 @@ function checkSchema(node, value, path, issues, root = node) {
102
130
  else if (node.additionalProperties !== void 0) checkSchema(node.additionalProperties, value[key], [...path, key], issues, root);
103
131
  }
104
132
  }
133
+ /** The path of the first `__proto__`, `constructor` or `prototype` key in `value`, if any. */
134
+ function forbiddenKeyPath(value, path = []) {
135
+ if (value === null || typeof value !== "object") return;
136
+ for (const [key, child] of Object.entries(value)) {
137
+ if (isForbiddenKey(key)) return [...path, key];
138
+ const found = forbiddenKeyPath(child, [...path, key]);
139
+ if (found !== void 0) return found;
140
+ }
141
+ }
105
142
  //#endregion
106
- export { copyJson as n, checkSchema as t };
143
+ export { copyJson as n, forbiddenKeyPath as r, checkSchema as t };
@@ -0,0 +1,40 @@
1
+ import { StandardSchemaV1 } from "@standard-schema/spec";
2
+ //#region src/core/json-schema.d.ts
3
+ /**
4
+ * The JSON Schema 2020-12 keywords the package's own schemas use;
5
+ * `checkSchema` interprets exactly these. `$ref` resolves only `#/$defs/<name>`
6
+ * against the root node. Annotations (`title`, `description`, `format`) are
7
+ * ignored, so a `format` always sits next to a `pattern` that enforces it.
8
+ */
9
+ type JsonSchemaNode = {
10
+ readonly $schema?: string;
11
+ readonly $id?: string;
12
+ readonly $ref?: string;
13
+ readonly $defs?: Readonly<Record<string, JsonSchemaNode>>;
14
+ readonly title?: string;
15
+ readonly description?: string;
16
+ readonly type?: JsonSchemaType | readonly JsonSchemaType[];
17
+ readonly format?: string;
18
+ readonly const?: unknown;
19
+ readonly enum?: readonly unknown[];
20
+ readonly pattern?: string;
21
+ readonly minLength?: number;
22
+ readonly maxLength?: number;
23
+ readonly minimum?: number;
24
+ readonly maximum?: number;
25
+ readonly exclusiveMinimum?: number;
26
+ readonly exclusiveMaximum?: number;
27
+ readonly minItems?: number;
28
+ readonly maxItems?: number;
29
+ readonly uniqueItems?: boolean;
30
+ readonly required?: readonly string[];
31
+ readonly properties?: Readonly<Record<string, JsonSchemaNode>>;
32
+ readonly additionalProperties?: JsonSchemaNode | false;
33
+ readonly items?: JsonSchemaNode;
34
+ readonly oneOf?: readonly JsonSchemaNode[];
35
+ readonly anyOf?: readonly JsonSchemaNode[];
36
+ readonly allOf?: readonly JsonSchemaNode[];
37
+ };
38
+ type JsonSchemaType = "object" | "array" | "string" | "boolean" | "integer" | "number" | "null";
39
+ //#endregion
40
+ export { JsonSchemaNode as t };
@@ -1,7 +1,7 @@
1
- import { Ft as TokenVerifier, Nr as Principal, Nt as TokenFailureCause, Pr as Subject, Pt as TokenSigner, ct as JwtClaims, et as AuthEvent } from "../policy-IB6yxpC3.js";
2
- import { a as JsonWebKeySet, c as JwtJwks, d as MappedSubject, g as ReplayStore, i as JoseTokenVerifierOptions, l as JwtPrincipal, n as DpopProofResult, o as JwtAlgorithm, r as JoseTokenSignerOptions, s as JwtClaimPaths, t as DiscoveryInput, u as JwtSubjectOptions } from "../types-Cq_H8N_X.js";
3
- import { i as LinkPolicy, o as LinkPrincipal, t as Capability } from "../capability-2kYTMWDv.js";
4
- import { t as memoryReplayStore } from "../replay-CYyiLiwO.js";
1
+ import { Y as JwtClaims, dt as TokenVerifier, ir as Subject, lt as TokenFailureCause, qt as AuthEvent, rr as Principal, ut as TokenSigner } from "../policy-types-DzwivBgR.js";
2
+ import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-BSslw1QV.js";
3
+ import { B as JwtAlgorithm, F as DpopProofResult, H as JwtPrincipal, I as IntrospectionPrincipal, L as JoseTokenSignerOptions, P as DiscoveryInput, R as JoseTokenVerifierOptions, U as JwtSubjectOptions, V as JwtJwks, W as MappedSubject, l as ReplayStore, z as JsonWebKeySet } from "../types-DiQjupG2.js";
4
+ import { t as memoryReplayStore } from "../replay-D7iKcLFe.js";
5
5
  import { StandardSchemaV1 } from "@standard-schema/spec";
6
6
  //#region src/jwt/capability.d.ts
7
7
  /** `on('auth')` causes: a verification failure, or one of the three capability checks. */
@@ -23,16 +23,23 @@ type CapabilitySubjectOptions = Omit<JoseTokenVerifierOptions, "typ" | "issuer"
23
23
  readonly replay?: ReplayStore;
24
24
  /** The request's own verified subject, checked against the capability's `redeemer`. */
25
25
  readonly viewer?: Subject;
26
+ /**
27
+ * The incoming request. A capability with `cnf` resolves only when the
28
+ * request carries a DPoP proof (RFC 9449) signed by the bound key;
29
+ * without one it is refused.
30
+ */
31
+ readonly request?: Request;
26
32
  readonly onAuth?: (event: AuthEvent) => void;
27
33
  readonly requestId?: string;
28
34
  };
29
35
  /**
30
- * Resolves a `permdock-capability+jwt` into the `link` subject it acts as.
36
+ * Resolves a `vnd.permdock.capability+jwt` into the `link` subject it acts as.
31
37
  * Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim,
32
38
  * a revoked link, a replayed one-time token, a redeemer the viewer does not
33
- * satisfy, a throwing store) is the anonymous subject, never a throw.
39
+ * satisfy, a `cnf` without a matching DPoP proof, a throwing store) is the
40
+ * anonymous subject, never a throw.
34
41
  */
35
- export declare function subjectFromCapability(token: string | undefined | null, options: CapabilitySubjectOptions): Promise<Subject<LinkPrincipal> | Subject>;
42
+ export declare function subjectFromCapability(token: string | undefined | null, options: CapabilitySubjectOptions): Promise<Subject<CapabilityPrincipal>>;
36
43
  //#endregion
37
44
  //#region src/jwt/ci-oidc.d.ts
38
45
  type CiOidcProvider = "github" | "gitlab" | "buildkite";
@@ -76,16 +83,16 @@ type DpopProofOptions = {
76
83
  export declare function verifyDpopProof(request: Request, claims: JwtClaims, accessToken?: string, options?: DpopProofOptions): Promise<DpopProofResult>;
77
84
  //#endregion
78
85
  //#region src/jwt/introspection.d.ts
79
- export declare function subjectFromIntrospection(response: unknown, options?: JwtSubjectOptions): MappedSubject;
86
+ export declare function subjectFromIntrospection(response: unknown, options?: JwtSubjectOptions): Subject<IntrospectionPrincipal>;
80
87
  //#endregion
81
88
  //#region src/jwt/signer.d.ts
82
89
  export declare function joseTokenSigner(options: JoseTokenSignerOptions): TokenSigner;
83
90
  //#endregion
84
91
  //#region src/jwt/subject.d.ts
85
- export declare function subjectFromJwt(token: string | undefined | null, options: JwtSubjectOptions, request?: Request): Promise<MappedSubject>;
86
- export declare function createJwtSubjectResolver(options: JwtSubjectOptions): (token: string | undefined | null, request?: Request) => Promise<MappedSubject>;
92
+ export declare function subjectFromJwt(token: string | undefined | null, options: JwtSubjectOptions, request?: Request): Promise<Subject<JwtPrincipal>>;
93
+ export declare function jwtSubjectResolver(options: JwtSubjectOptions): (token: string | undefined | null, request?: Request) => Promise<MappedSubject>;
87
94
  //#endregion
88
95
  //#region src/jwt/verifier.d.ts
89
96
  export declare function joseTokenVerifier(options: JoseTokenVerifierOptions): TokenVerifier;
90
97
  //#endregion
91
- export { type CapabilityFailureCause, type CapabilitySubjectOptions, type CiOidcPrincipal, type CiOidcProvider, type CiOidcSubjectOptions, type DiscoveryInput, type DpopProofOptions, type DpopProofResult, type JoseTokenSignerOptions, type JoseTokenVerifierOptions, type JsonWebKeySet, type JwtAlgorithm, type JwtClaimPaths, type JwtJwks, type JwtPrincipal, type JwtSubjectOptions, type MappedSubject, type ReplayStore, memoryReplayStore };
98
+ export { type CapabilityFailureCause, type CapabilitySubjectOptions, type CiOidcPrincipal, type CiOidcProvider, type CiOidcSubjectOptions, type DiscoveryInput, type DpopProofOptions, type DpopProofResult, type IntrospectionPrincipal, type JoseTokenSignerOptions, type JoseTokenVerifierOptions, type JsonWebKeySet, type JwtAlgorithm, type JwtJwks, type JwtPrincipal, type JwtSubjectOptions, type ReplayStore, memoryReplayStore };
package/dist/jwt/index.js CHANGED
@@ -1,12 +1,114 @@
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 { n as sha256, t as bytesToBase64Url } from "../sha256-BO0swRXL.js";
4
- import { t as anonymousSubject } from "../subject-C6dLxqHU.js";
5
- import { i as linkPolicyViolation, o as parseCapability, s as redeemerAllows, t as capabilitySubject } from "../capability-4qPdO9gk.js";
6
- import { a as decodeHeader, i as issuerFromDiscovery, n as assertSubjectConfig, o as normalizeTyp, r as fail, t as joseTokenVerifier } from "../verifier-BxBo6I44.js";
7
- import { t as loadJose } from "../load-jose-BL6LH4bL.js";
8
- import { n as mapClaimsToSubject, r as validateCustomClaims, t as acceptMismatch } from "../map-claims-Z4QZOiFF.js";
9
- import { t as memoryReplayStore } from "../replay-BsOyTrdV.js";
3
+ import { o as epochSeconds, p as nowSeconds } from "../time-DkWjdL98.js";
4
+ import { n as sha256, t as bytesToBase64Url } from "../sha256-D9ihqmvd.js";
5
+ import { t as anonymousSubject } from "../subject-BGoM5o8B.js";
6
+ import { i as linkPolicyViolation, r as capabilitySubject, s as redeemerAllows, t as capabilityFromClaims } from "../capability-N1K9IpqS.js";
7
+ import { a as verifierOptions, i as issuerFromDiscovery, n as assertSubjectConfig, o as decodeHeader, r as fail, s as normalizeTyp, t as joseTokenVerifier } from "../verifier-DHuh-okk.js";
8
+ import { t as loadJose } from "../load-jose-DZ4dnjri.js";
9
+ import { n as mapClaimsToSubject, r as validateCustomClaims, t as acceptMismatch } from "../map-claims-D3oRmTk0.js";
10
+ import { t as memoryReplayStore } from "../replay-Du1tJjG7.js";
11
+ //#region src/jwt/dpop.ts
12
+ const DPOP_WINDOW_SECONDS = 60;
13
+ const PROOF_ALGS = /* @__PURE__ */ new Set([
14
+ "ES256",
15
+ "PS256",
16
+ "Ed25519",
17
+ "EdDSA",
18
+ "RS256"
19
+ ]);
20
+ const PRIVATE_MEMBERS = [
21
+ "d",
22
+ "p",
23
+ "q",
24
+ "dp",
25
+ "dq",
26
+ "qi",
27
+ "k"
28
+ ];
29
+ function headerOf(request) {
30
+ return request.headers.get("DPoP") ?? request.headers.get("dpop");
31
+ }
32
+ function withoutQuery(value) {
33
+ if (typeof value !== "string" || !URL.canParse(value)) return null;
34
+ const url = new URL(value);
35
+ url.search = "";
36
+ url.hash = "";
37
+ return url.href;
38
+ }
39
+ async function claimJti(replay, key, expiresAt) {
40
+ if (replay.claim !== void 0) return replay.claim(key, expiresAt);
41
+ if (await replay.seen(key)) return false;
42
+ await replay.remember(key, expiresAt);
43
+ return true;
44
+ }
45
+ function verifyDpopProof(request, claims, accessToken, options = {}) {
46
+ return verify(request, claims, accessToken, options);
47
+ }
48
+ async function verify(request, claims, accessToken, options) {
49
+ const proof = headerOf(request);
50
+ if (proof === null || proof.length === 0) return {
51
+ ok: false,
52
+ cause: "dpop-proof-invalid"
53
+ };
54
+ const expectedJkt = claims["cnf"] !== null && typeof claims["cnf"] === "object" && !Array.isArray(claims["cnf"]) && typeof claims["cnf"].jkt === "string" ? claims["cnf"].jkt : void 0;
55
+ if (expectedJkt === void 0) return {
56
+ ok: false,
57
+ cause: "dpop-proof-invalid"
58
+ };
59
+ const header = decodeHeader(proof);
60
+ if (header?.typ?.toLowerCase() !== "dpop+jwt") return {
61
+ ok: false,
62
+ cause: "dpop-proof-invalid"
63
+ };
64
+ const jwk = header["jwk"];
65
+ if (!PROOF_ALGS.has(header.alg ?? "") || jwk === null || typeof jwk !== "object" || Array.isArray(jwk) || PRIVATE_MEMBERS.some((member) => member in jwk)) return {
66
+ ok: false,
67
+ cause: "dpop-proof-invalid"
68
+ };
69
+ try {
70
+ const jose = await loadJose();
71
+ const key = await jose.importJWK(jwk, header.alg);
72
+ const result = await jose.jwtVerify(proof, key, {
73
+ typ: "dpop+jwt",
74
+ maxTokenAge: DPOP_WINDOW_SECONDS
75
+ });
76
+ const jkt = await jose.calculateJwkThumbprint(jwk, "sha256");
77
+ if (jkt !== expectedJkt) return {
78
+ ok: false,
79
+ cause: "dpop-proof-invalid"
80
+ };
81
+ const htm = result.payload["htm"];
82
+ const htu = result.payload["htu"];
83
+ const expectedHtu = withoutQuery(request.url);
84
+ if (htm !== request.method || expectedHtu === null || withoutQuery(htu) !== expectedHtu) return {
85
+ ok: false,
86
+ cause: "dpop-proof-invalid"
87
+ };
88
+ if (accessToken !== void 0) {
89
+ const ath = bytesToBase64Url(sha256(accessToken));
90
+ if (result.payload["ath"] !== ath) return {
91
+ ok: false,
92
+ cause: "dpop-proof-invalid"
93
+ };
94
+ }
95
+ if (options.replay !== void 0) {
96
+ const jti = result.payload.jti;
97
+ const iat = result.payload.iat;
98
+ if (typeof jti !== "string" || jti === "" || typeof iat !== "number" || !await claimJti(options.replay, `dpop\u0000${jkt}\u0000${jti}`, iat + DPOP_WINDOW_SECONDS)) return {
99
+ ok: false,
100
+ cause: "dpop-proof-invalid"
101
+ };
102
+ }
103
+ return { ok: true };
104
+ } catch {
105
+ return {
106
+ ok: false,
107
+ cause: "dpop-proof-invalid"
108
+ };
109
+ }
110
+ }
111
+ //#endregion
10
112
  //#region src/jwt/capability.ts
11
113
  function emit(options, reason, cause, token) {
12
114
  if (options.onAuth === void 0) return;
@@ -44,10 +146,11 @@ async function stores(options, capability, issuedAt, once) {
44
146
  }
45
147
  }
46
148
  /**
47
- * Resolves a `permdock-capability+jwt` into the `link` subject it acts as.
149
+ * Resolves a `vnd.permdock.capability+jwt` into the `link` subject it acts as.
48
150
  * Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim,
49
151
  * a revoked link, a replayed one-time token, a redeemer the viewer does not
50
- * satisfy, a throwing store) is the anonymous subject, never a throw.
152
+ * satisfy, a `cnf` without a matching DPoP proof, a throwing store) is the
153
+ * anonymous subject, never a throw.
51
154
  */
52
155
  async function subjectFromCapability(token, options) {
53
156
  if (token === void 0 || token === null || token.length === 0) return anonymousSubject();
@@ -61,7 +164,7 @@ async function subjectFromCapability(token, options) {
61
164
  try {
62
165
  verifier = options.verifier ?? joseTokenVerifier({
63
166
  ...options,
64
- typ: "permdock-capability+jwt"
167
+ typ: "vnd.permdock.capability+jwt"
65
168
  });
66
169
  } catch {
67
170
  return deny("malformed");
@@ -69,7 +172,7 @@ async function subjectFromCapability(token, options) {
69
172
  let verified;
70
173
  try {
71
174
  verified = await verifier.verify(token, compact({
72
- typ: "permdock-capability+jwt",
175
+ typ: "vnd.permdock.capability+jwt",
73
176
  issuer: options.issuer,
74
177
  audience: options.audience,
75
178
  clockTolerance: options.clockTolerance
@@ -78,16 +181,14 @@ async function subjectFromCapability(token, options) {
78
181
  return deny("malformed");
79
182
  }
80
183
  if (!verified.ok) return deny(verified.cause);
81
- if (normalizeTyp(verified.header.typ) !== "permdock-capability+jwt") return deny("wrong-token-type");
82
- const parsed = parseCapability(verified.claims["capability"]);
83
- const exp = verified.claims.exp;
84
- if (parsed?.holder !== "link" || verified.claims.sub !== parsed.id || typeof exp !== "number") return deny("invalid-claims");
85
- const capability = {
86
- ...parsed,
87
- expiresAt: Math.min(parsed.expiresAt, exp)
88
- };
89
- const now = Date.now() / 1e3;
184
+ if (normalizeTyp(verified.header.typ) !== "vnd.permdock.capability+jwt") return deny("wrong-token-type");
185
+ const capability = capabilityFromClaims(verified.claims);
186
+ if (capability?.holder !== "link" || verified.claims["cnf"] !== void 0 && capability.cnf === void 0) return deny("invalid-claims");
187
+ const now = epochSeconds();
90
188
  if (capability.expiresAt <= now) return deny("expired");
189
+ if (capability.cnf !== void 0) {
190
+ if (!(options.request === void 0 ? { ok: false } : await verifyDpopProof(options.request, verified.claims, token, compact({ replay: options.replay }))).ok) return deny("dpop-proof-invalid");
191
+ }
91
192
  if (!redeemerAllows(capability.redeemer, options.viewer, now)) return deny("redeemer-mismatch");
92
193
  const jti = verified.claims["jti"];
93
194
  if (capability.once === true && (options.replay === void 0 || typeof jti !== "string" || jti === "")) return deny("invalid-claims");
@@ -217,107 +318,6 @@ async function subjectFromCiOidc(token, options) {
217
318
  });
218
319
  }
219
320
  //#endregion
220
- //#region src/jwt/dpop.ts
221
- const DPOP_WINDOW_SECONDS = 60;
222
- const PROOF_ALGS = /* @__PURE__ */ new Set([
223
- "ES256",
224
- "PS256",
225
- "Ed25519",
226
- "EdDSA",
227
- "RS256"
228
- ]);
229
- const PRIVATE_MEMBERS = [
230
- "d",
231
- "p",
232
- "q",
233
- "dp",
234
- "dq",
235
- "qi",
236
- "k"
237
- ];
238
- function headerOf(request) {
239
- return request.headers.get("DPoP") ?? request.headers.get("dpop");
240
- }
241
- function withoutQuery(value) {
242
- if (typeof value !== "string" || !URL.canParse(value)) return null;
243
- const url = new URL(value);
244
- url.search = "";
245
- url.hash = "";
246
- return url.href;
247
- }
248
- async function claimJti(replay, key, expiresAt) {
249
- if (replay.claim !== void 0) return replay.claim(key, expiresAt);
250
- if (await replay.seen(key)) return false;
251
- await replay.remember(key, expiresAt);
252
- return true;
253
- }
254
- function verifyDpopProof(request, claims, accessToken, options = {}) {
255
- return verify(request, claims, accessToken, options);
256
- }
257
- async function verify(request, claims, accessToken, options) {
258
- const proof = headerOf(request);
259
- if (proof === null || proof.length === 0) return {
260
- ok: false,
261
- cause: "dpop-proof-invalid"
262
- };
263
- const expectedJkt = claims["cnf"] !== null && typeof claims["cnf"] === "object" && !Array.isArray(claims["cnf"]) && typeof claims["cnf"].jkt === "string" ? claims["cnf"].jkt : void 0;
264
- if (expectedJkt === void 0) return {
265
- ok: false,
266
- cause: "dpop-proof-invalid"
267
- };
268
- const header = decodeHeader(proof);
269
- if (header?.typ?.toLowerCase() !== "dpop+jwt") return {
270
- ok: false,
271
- cause: "dpop-proof-invalid"
272
- };
273
- const jwk = header["jwk"];
274
- if (!PROOF_ALGS.has(header.alg ?? "") || jwk === null || typeof jwk !== "object" || Array.isArray(jwk) || PRIVATE_MEMBERS.some((member) => member in jwk)) return {
275
- ok: false,
276
- cause: "dpop-proof-invalid"
277
- };
278
- try {
279
- const jose = await loadJose();
280
- const key = await jose.importJWK(jwk, header.alg);
281
- const result = await jose.jwtVerify(proof, key, {
282
- typ: "dpop+jwt",
283
- maxTokenAge: DPOP_WINDOW_SECONDS
284
- });
285
- const jkt = await jose.calculateJwkThumbprint(jwk, "sha256");
286
- if (jkt !== expectedJkt) return {
287
- ok: false,
288
- cause: "dpop-proof-invalid"
289
- };
290
- const htm = result.payload["htm"];
291
- const htu = result.payload["htu"];
292
- const expectedHtu = withoutQuery(request.url);
293
- if (htm !== request.method || expectedHtu === null || withoutQuery(htu) !== expectedHtu) return {
294
- ok: false,
295
- cause: "dpop-proof-invalid"
296
- };
297
- if (accessToken !== void 0) {
298
- const ath = bytesToBase64Url(sha256(accessToken));
299
- if (result.payload["ath"] !== ath) return {
300
- ok: false,
301
- cause: "dpop-proof-invalid"
302
- };
303
- }
304
- if (options.replay !== void 0) {
305
- const jti = result.payload.jti;
306
- const iat = result.payload.iat;
307
- if (typeof jti !== "string" || jti === "" || typeof iat !== "number" || !await claimJti(options.replay, `dpop\u0000${jkt}\u0000${jti}`, iat + DPOP_WINDOW_SECONDS)) return {
308
- ok: false,
309
- cause: "dpop-proof-invalid"
310
- };
311
- }
312
- return { ok: true };
313
- } catch {
314
- return {
315
- ok: false,
316
- cause: "dpop-proof-invalid"
317
- };
318
- }
319
- }
320
- //#endregion
321
321
  //#region src/jwt/introspection.ts
322
322
  function emitAuth$1(options, cause) {
323
323
  if (options.onAuth === void 0) return;
@@ -329,12 +329,9 @@ function emitAuth$1(options, cause) {
329
329
  requestId: options.requestId
330
330
  }));
331
331
  }
332
- function isRecord$1(value) {
333
- return value !== null && typeof value === "object" && !Array.isArray(value);
334
- }
335
332
  function keyToCnf(key) {
336
- if (!isRecord$1(key)) return;
337
- if (isRecord$1(key["jwk"])) return { jwk: key["jwk"] };
333
+ if (!isRecord(key)) return;
334
+ if (isRecord(key["jwk"])) return { jwk: key["jwk"] };
338
335
  return { jwk: key };
339
336
  }
340
337
  function introspectionToClaims(body) {
@@ -401,7 +398,7 @@ function boundToConfig(body, options) {
401
398
  }
402
399
  function subjectFromIntrospection(response, options = {}) {
403
400
  try {
404
- if (!isRecord$1(response) || response["active"] !== true || !boundToConfig(response, options)) return anonymousSubject();
401
+ if (!isRecord(response) || response["active"] !== true || !boundToConfig(response, options)) return anonymousSubject();
405
402
  const mapped = mapClaimsToSubject(introspectionToClaims(response), options);
406
403
  if (mapped.invalidChain) {
407
404
  emitAuth$1(options, "invalid-chain");
@@ -421,9 +418,6 @@ const SIGNING_ALGS = /* @__PURE__ */ new Set([
421
418
  "Ed25519",
422
419
  "RS256"
423
420
  ]);
424
- function isRecord(value) {
425
- return value !== null && typeof value === "object" && !Array.isArray(value);
426
- }
427
421
  function publicJwk(key) {
428
422
  const { d: _d, p: _p, q: _q, dp: _dp, dq: _dq, qi: _qi, k: _k, ...pub } = key;
429
423
  return pub;
@@ -432,6 +426,8 @@ function joseTokenSigner(options) {
432
426
  if (options.alg === "HS256" || options.alg === "EdDSA") throw new Error("PermDock: joseTokenSigner refuses HS* and polymorphic EdDSA on outputs.");
433
427
  if (!SIGNING_ALGS.has(options.alg)) throw new Error(`PermDock: unsupported signing alg '${options.alg}'.`);
434
428
  if (options.kid.length === 0) throw new Error("PermDock: joseTokenSigner requires kid.");
429
+ if (typeof options.issuer !== "string" || options.issuer.length === 0) throw new Error("PermDock: joseTokenSigner requires issuer.");
430
+ const issuer = options.issuer;
435
431
  const importKey = async () => {
436
432
  if (options.key instanceof Uint8Array) throw new TypeError("PermDock: HMAC keys cannot sign PermDock outputs.");
437
433
  return (await loadJose()).importJWK(options.key, options.alg);
@@ -447,20 +443,24 @@ function joseTokenSigner(options) {
447
443
  }
448
444
  };
449
445
  async function signJwt(payload, signOptions) {
446
+ const audience = signOptions.audience ?? options.audience;
447
+ if (audience === void 0 || audience.length === 0) throw new Error("PermDock: joseTokenSigner requires an audience.");
448
+ const issuedAt = signOptions.issuedAt ?? nowSeconds();
449
+ if (!Number.isSafeInteger(issuedAt)) throw new TypeError("PermDock: iat must be a whole NumericDate.");
450
450
  const jose = await loadJose();
451
451
  const key = await importKey();
452
- const now = Math.floor(Date.now() / 1e3);
453
- const jwt = new jose.SignJWT({ ...payload });
452
+ const { iss: _iss, aud: _aud, exp: _exp, iat: _iat, nbf: _nbf, jti: _jti, ...claims } = payload;
453
+ const jwt = new jose.SignJWT(claims);
454
454
  jwt.setProtectedHeader({
455
455
  alg: options.alg,
456
456
  kid: options.kid,
457
457
  typ: signOptions.typ
458
458
  });
459
- jwt.setIssuedAt(now);
460
- jwt.setJti(globalThis.crypto.randomUUID());
461
- if (options.issuer !== void 0) jwt.setIssuer(options.issuer);
462
- if (signOptions.audience !== void 0) jwt.setAudience(signOptions.audience);
463
- jwt.setExpirationTime(signOptions.expiresAt ?? now + 3600);
459
+ jwt.setIssuedAt(issuedAt);
460
+ jwt.setJti(signOptions.jti ?? globalThis.crypto.randomUUID());
461
+ jwt.setIssuer(issuer);
462
+ jwt.setAudience(audience);
463
+ jwt.setExpirationTime(signOptions.expiresAt ?? issuedAt + 3600);
464
464
  return jwt.sign(key);
465
465
  }
466
466
  }
@@ -490,6 +490,20 @@ function mtlsThumbprint(claims) {
490
490
  const value = cnf["x5t#S256"];
491
491
  return typeof value === "string" ? value : void 0;
492
492
  }
493
+ /**
494
+ * The sender constraint to enforce. Without a configured `sender`, a token
495
+ * whose `cnf` binds it to a key or a certificate is held to that binding,
496
+ * never accepted as a bearer token (RFC 9449 section 7.1, RFC 8705
497
+ * section 3). An explicit `sender: "none"` is the opt-out for a gateway
498
+ * that verified the binding upstream.
499
+ */
500
+ function senderFor(options, cnf) {
501
+ if (options.sender !== void 0) return options.sender;
502
+ if (options.profile === "fapi2") return "dpop";
503
+ if (cnf === null || typeof cnf !== "object" || Array.isArray(cnf)) return "none";
504
+ if (Object.hasOwn(cnf, "jkt")) return "dpop";
505
+ return Object.hasOwn(cnf, "x5t#S256") ? "mtls" : "none";
506
+ }
493
507
  async function extraMemberships(options, subject, tenant) {
494
508
  if (options.memberships === void 0 || subject.principal === null) return subject;
495
509
  try {
@@ -507,15 +521,21 @@ async function extraMemberships(options, subject, tenant) {
507
521
  }
508
522
  });
509
523
  } catch {
524
+ options.onAuth?.(compact({
525
+ reason: "source-threw",
526
+ source: "memberships",
527
+ issuer: options.issuer,
528
+ requestId: options.requestId
529
+ }));
510
530
  return subject;
511
531
  }
512
532
  }
513
533
  function subjectFromJwt(token, options, request) {
514
534
  return resolveSubject(token, options, request);
515
535
  }
516
- function createJwtSubjectResolver(options) {
536
+ function jwtSubjectResolver(options) {
517
537
  assertSubjectConfig(options);
518
- const verifier = options.verifier ?? joseTokenVerifier(options);
538
+ const verifier = options.verifier ?? joseTokenVerifier(verifierOptions(options));
519
539
  return (token, request) => resolveSubject(token, {
520
540
  ...options,
521
541
  verifier
@@ -528,12 +548,13 @@ async function resolveSubject(token, options, request) {
528
548
  emitAuth(options, "token-in-query", token);
529
549
  return anonymousSubject();
530
550
  }
531
- const verifier = options.verifier ?? joseTokenVerifier(options);
551
+ const verifier = options.verifier ?? joseTokenVerifier(verifierOptions(options));
552
+ const audience = options.audience === false ? void 0 : options.audience;
532
553
  const issuer = options.issuer ?? (options.discovery === void 0 ? void 0 : issuerFromDiscovery(options.discovery));
533
554
  let verified;
534
555
  try {
535
556
  verified = await verifier.verify(token, compact({
536
- audience: options.audience,
557
+ audience,
537
558
  issuer,
538
559
  clockTolerance: options.clockTolerance,
539
560
  typ: options.accept === "id-token" ? ["JWT"] : options.profile === "fapi2" ? "at+jwt" : ["at+jwt", "JWT"]
@@ -545,13 +566,13 @@ async function resolveSubject(token, options, request) {
545
566
  emitAuth(options, verified.cause, token);
546
567
  return anonymousSubject();
547
568
  }
548
- if (acceptMismatch(verified.claims, verified.header.typ, options, options.audience)) {
569
+ if (acceptMismatch(verified.claims, verified.header.typ, options, audience)) {
549
570
  emitAuth(options, "wrong-token-type", token);
550
571
  return anonymousSubject();
551
572
  }
552
- const sender = options.sender ?? (options.profile === "fapi2" ? "dpop" : "none");
553
573
  const cnf = verified.claims["cnf"];
554
574
  const hasCnf = cnf !== null && typeof cnf === "object";
575
+ const sender = senderFor(options, cnf);
555
576
  if (options.profile === "fapi2" && !hasCnf) {
556
577
  emitAuth(options, "sender-constraint-required", token);
557
578
  return anonymousSubject();
@@ -587,4 +608,4 @@ async function resolveSubject(token, options, request) {
587
608
  return extraMemberships(options, mapped.subject, mapped.subject.principal.tenant);
588
609
  }
589
610
  //#endregion
590
- export { createJwtSubjectResolver, joseTokenSigner, joseTokenVerifier, memoryReplayStore, subjectFromCapability, subjectFromCiOidc, subjectFromIntrospection, subjectFromJwt, verifyDpopProof };
611
+ export { joseTokenSigner, joseTokenVerifier, jwtSubjectResolver, memoryReplayStore, subjectFromCapability, subjectFromCiOidc, subjectFromIntrospection, subjectFromJwt, verifyDpopProof };