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,323 @@
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
+ import { n as problemDetails } from "./problem-details-cn5X30gZ.js";
4
+ import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
5
+ import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
6
+ import { c as withApp, i as challengeScope } from "./permdock-B9JxkBwC.js";
7
+ import { r as hasCredentials } from "./http-BBoKefeS.js";
8
+ import { i as decisionResponse, o as notFoundProblem, s as problemFromDecision, t as ANONYMOUS, u as unauthenticatedProblem } from "./problem-CTviyH5L.js";
9
+ import { n as resolveOrNull } from "./build-instance-BMnAudHn.js";
10
+ import { n as applyApprovalResume, o as evaluationsHandler, u as InvalidSignatureError } from "./evaluations-DZ2CbV5k.js";
11
+ import { n as tenantScope, t as actorFrom } from "./adapter-context-CRhqyzCk.js";
12
+ import { n as requestContext, t as buildReportingInstance } from "./request-context-BTRTG7OT.js";
13
+ //#region src/server/kernel-problems.ts
14
+ const NOT_DELEGATED = freezeDeep({
15
+ outcome: "denied",
16
+ denials: [{
17
+ role: null,
18
+ reason: "not-delegated"
19
+ }],
20
+ alternatives: []
21
+ });
22
+ const LOAD_FAILED = freezeDeep({
23
+ outcome: "denied",
24
+ denials: [{
25
+ role: null,
26
+ reason: "validation"
27
+ }],
28
+ alternatives: []
29
+ });
30
+ /** The `403` for a loader that threw: the check fails closed, as on MCP. */
31
+ function loadFailedProblem(permission) {
32
+ const key = permission?.key ?? "the route";
33
+ return decisionResponse(problemDetails(compact({
34
+ decision: LOAD_FAILED,
35
+ detail: `${key} failed closed: the row could not be loaded`,
36
+ permission: permission?.key
37
+ })), LOAD_FAILED);
38
+ }
39
+ /** The `403` `insufficient_scope` for a token that holds none of a route's OAuth scopes. */
40
+ function scopeProblem(permission, subject, credentials, scope) {
41
+ return permission === null ? decisionResponse(problemDetails(compact({
42
+ decision: NOT_DELEGATED,
43
+ detail: `the token holds none of the OAuth scopes this route needs, such as ${String(scope)}`,
44
+ scope
45
+ })), NOT_DELEGATED, compact({
46
+ credentials,
47
+ scope
48
+ })) : problemFromDecision(NOT_DELEGATED, permission, subject, compact({
49
+ credentials,
50
+ scope
51
+ }));
52
+ }
53
+ function problemFor(decision, init, approval) {
54
+ if (init?.permission !== void 0) return problemFromDecision(decision, init.permission, void 0, compact({
55
+ instance: init.instance,
56
+ approval
57
+ }));
58
+ if (decision.outcome === "granted") return new Response(null, { status: 204 });
59
+ return decisionResponse(problemDetails(compact({
60
+ decision,
61
+ detail: decision.outcome,
62
+ instance: init?.instance
63
+ })), decision);
64
+ }
65
+ //#endregion
66
+ //#region src/server/route-guard.ts
67
+ function routeScopes(value) {
68
+ if (value === void 0) return;
69
+ const scopes = Array.isArray(value) ? value : [];
70
+ const names = scopes.filter((scope) => typeof scope === "string" && scope !== "");
71
+ if (names.length === 0 || names.length !== scopes.length) throw new TypeError("PermDock: oauthScopes must be a non-empty list of scope names");
72
+ return names;
73
+ }
74
+ async function refused(hook, fallback, decision, request, report) {
75
+ if (hook === void 0) return {
76
+ ok: false,
77
+ response: fallback,
78
+ decision
79
+ };
80
+ try {
81
+ const result = await hook({
82
+ decision,
83
+ problem: await fallback.clone().json(),
84
+ request
85
+ });
86
+ if (result === void 0) return {
87
+ ok: false,
88
+ response: fallback,
89
+ decision
90
+ };
91
+ const status = result.status;
92
+ if (typeof status !== "number" || status < 300) throw new TypeError(`PermDock: deniedResponse returned status ${String(status)}; a refusal keeps a status of 300 or more`);
93
+ return {
94
+ ok: false,
95
+ response: result instanceof Response ? result : new Response(JSON.stringify(result), {
96
+ status,
97
+ headers: fallback.headers
98
+ }),
99
+ decision
100
+ };
101
+ } catch (error) {
102
+ report(error);
103
+ return {
104
+ ok: false,
105
+ response: fallback,
106
+ decision
107
+ };
108
+ }
109
+ }
110
+ async function guardOn(deps, instance, remote, report, request, permission, load, protectOptions) {
111
+ const declared = routeScopes(protectOptions.oauthScopes ?? (request === void 0 ? void 0 : deps.options.operations?.oauthScopesForRequest(request.method, new URL(request.url).pathname)));
112
+ const credentials = request === void 0 ? false : hasCredentials(request);
113
+ if (permission === null) {
114
+ if (declared === void 0) throw new TypeError(request === void 0 ? "PermDock: protect(null) needs oauthScopes" : `PermDock: protect(null) needs oauthScopes, and no operation declares them for ${request.method} ${new URL(request.url).pathname}`);
115
+ if (instance.subject.principal === null) return refused(deps.options.deniedResponse, unauthenticatedProblem(credentials), ANONYMOUS, request, report);
116
+ }
117
+ const { actor, delegation } = instance.subject;
118
+ const held = permission === null && (actor !== void 0 || delegation !== void 0) ? delegation?.scopes ?? [] : delegation?.scopes;
119
+ if (declared !== void 0 && held !== void 0 && !declared.some((granted) => held.includes(granted))) return refused(deps.options.deniedResponse, scopeProblem(permission, instance.subject, credentials, declared[0]), NOT_DELEGATED, request, report);
120
+ let data;
121
+ if (load !== void 0) {
122
+ let loaded;
123
+ try {
124
+ loaded = await load();
125
+ } catch (error) {
126
+ report(error);
127
+ return refused(deps.options.deniedResponse, loadFailedProblem(permission), LOAD_FAILED, request, report);
128
+ }
129
+ if (loaded === null || loaded === void 0) return {
130
+ ok: false,
131
+ response: notFoundProblem()
132
+ };
133
+ data = loaded;
134
+ }
135
+ if (permission === null) return {
136
+ ok: true,
137
+ permdock: instance,
138
+ data
139
+ };
140
+ const decideOptions = compact({
141
+ call: "adapter",
142
+ adapter: deps.adapter,
143
+ field: protectOptions.field,
144
+ explain: protectOptions.explain,
145
+ ...protectOptions.trusted === true ? { trusted: true } : {
146
+ trusted: false,
147
+ boundary: "http-body"
148
+ }
149
+ });
150
+ const raw = remote === void 0 ? instance.decide(permission, data, decideOptions) : await remote.decide(permission, data, decideOptions).catch(() => ({
151
+ outcome: "denied",
152
+ denials: [{
153
+ role: null,
154
+ reason: "pdp-unavailable"
155
+ }],
156
+ alternatives: []
157
+ }));
158
+ const decision = await applyApprovalResume(raw, permission, instance, deps.options.store, request, resourceRef(permission, data), deps.adapter);
159
+ if (decision.outcome === "granted") return {
160
+ ok: true,
161
+ permdock: instance,
162
+ decision,
163
+ data
164
+ };
165
+ return refused(deps.options.deniedResponse, problemFromDecision(decision, permission, instance.subject, compact({
166
+ approval: deps.options.approval,
167
+ credentials,
168
+ scope: declared?.[0] ?? challengeScope(deps.policy, permission),
169
+ disclosure: data === void 0 ? void 0 : deps.policy.resources.get(permission.resource)?.disclosure
170
+ })), decision, request, report);
171
+ }
172
+ //#endregion
173
+ //#region src/server/create.ts
174
+ async function resolveActor(request, options) {
175
+ return (options.webBotAuth === void 0 ? void 0 : await options.webBotAuth.verify(request)) ?? actorFrom(options.actor, request);
176
+ }
177
+ const NO_TENANT = "\0";
178
+ /**
179
+ * The Fetch factory behind every HTTP adapter. The subject and actor are
180
+ * resolved once per `Request`; one instance is cached per `(Request, tenant)`,
181
+ * so a global middleware and a later tenant-scoped `protect` never share a
182
+ * tenant.
183
+ */
184
+ function createPermDock(policy, given) {
185
+ const options = withApp(policy, given);
186
+ const adapter = options.adapter ?? "server";
187
+ const subjects = /* @__PURE__ */ new WeakMap();
188
+ const instances = /* @__PURE__ */ new WeakMap();
189
+ const freshSubject = async (request) => {
190
+ const actor = await resolveActor(request, options);
191
+ const errors = [];
192
+ const context = await requestContext(options.context, request, errors);
193
+ return {
194
+ user: await resolveOrNull(() => options.subject(request)),
195
+ actor,
196
+ context,
197
+ errors
198
+ };
199
+ };
200
+ const resolveSubject = (request) => {
201
+ const hit = subjects.get(request);
202
+ if (hit !== void 0) return hit;
203
+ const resolved = freshSubject(request);
204
+ subjects.set(request, resolved);
205
+ return resolved;
206
+ };
207
+ const reporters = /* @__PURE__ */ new WeakMap();
208
+ const instanceFor = async ({ user, actor, context, errors }, tenant) => {
209
+ const built = await buildReportingInstance({
210
+ policy,
211
+ user,
212
+ sources: options,
213
+ scope: {
214
+ tenant,
215
+ actor,
216
+ context
217
+ },
218
+ errors,
219
+ wrap: (created) => options.wrap === void 0 ? created : options.wrap(created)
220
+ });
221
+ const remote = options.pdp === void 0 ? void 0 : await options.pdp(policy, user, built.options);
222
+ reporters.set(built.permdock, built.report);
223
+ return {
224
+ permdock: built.permdock,
225
+ remote,
226
+ report: built.report
227
+ };
228
+ };
229
+ const build = async (request, scope) => {
230
+ const { tenant } = scope ?? await tenantScope(options.tenant, request);
231
+ let byTenant = instances.get(request);
232
+ if (byTenant === void 0) {
233
+ byTenant = /* @__PURE__ */ new Map();
234
+ instances.set(request, byTenant);
235
+ }
236
+ const key = tenant ?? NO_TENANT;
237
+ const hit = byTenant.get(key);
238
+ if (hit !== void 0) return hit;
239
+ const built = (async () => instanceFor(await resolveSubject(request), tenant))();
240
+ byTenant.set(key, built);
241
+ return built;
242
+ };
243
+ const connection = async (request, connectionOptions = {}, scope) => {
244
+ const { tenant } = scope ?? await tenantScope(options.tenant, request);
245
+ const { openConnection } = await import("./connection-DjhIJSs2.js");
246
+ return openConnection({
247
+ open: async () => (await build(request, { tenant })).permdock,
248
+ rebuild: async () => (await instanceFor(await freshSubject(request), tenant)).permdock,
249
+ tenant,
250
+ ...options.revocations === void 0 ? {} : { feed: options.revocations },
251
+ adapter,
252
+ options: connectionOptions
253
+ });
254
+ };
255
+ const getPermDock = async (request, scope) => (await build(request, scope)).permdock;
256
+ const getSnapshot = async (request, query = {}) => {
257
+ return (await getPermDock(request, query.tenant === void 0 ? void 0 : { tenant: query.tenant })).snapshot(compact({
258
+ include: query.include,
259
+ tenants: query.tenants
260
+ }));
261
+ };
262
+ const deps = {
263
+ policy,
264
+ options,
265
+ adapter
266
+ };
267
+ const protectRoute = (permission, data, protectOptions = {}) => {
268
+ if (permission === null && routeScopes(protectOptions.oauthScopes) === void 0 && options.operations === void 0) throw new TypeError("PermDock: protect(null) needs oauthScopes, in its options or an operations entry");
269
+ return async (request, scope) => {
270
+ let instance;
271
+ let remote;
272
+ let report;
273
+ try {
274
+ ({permdock: instance, remote, report} = await build(request, scope));
275
+ } catch (error) {
276
+ if (error instanceof InvalidSignatureError) return {
277
+ ok: false,
278
+ response: error.response
279
+ };
280
+ throw error;
281
+ }
282
+ return guardOn(deps, instance, remote, report, request, permission, data === void 0 ? void 0 : () => data(request), protectOptions);
283
+ };
284
+ };
285
+ const protect = protectRoute;
286
+ const openapi = {
287
+ security: (permission) => ({
288
+ security: [{ oauth2: [permission.scope] }],
289
+ "x-permdock-permissions": [permission.key]
290
+ }),
291
+ securitySchemes: () => {
292
+ const scopes = {};
293
+ for (const leaf of listPermissions(policy.permissions)) scopes[leaf.scope] = leaf.meta.title ?? leaf.key;
294
+ return { oauth2: {
295
+ type: "oauth2",
296
+ flows: {},
297
+ scopes
298
+ } };
299
+ }
300
+ };
301
+ const permdockHandler = (scope) => evaluationsHandler(compact({
302
+ policy,
303
+ resolve: scope === void 0 ? getPermDock : async (request) => getPermDock(request, await scope(request)),
304
+ store: options.store,
305
+ adapter
306
+ }));
307
+ return {
308
+ getPermDock,
309
+ getSnapshot,
310
+ protect,
311
+ protectOn: (instance, permission, load, protectOptions = {}, request) => guardOn(deps, instance, void 0, reporters.get(instance) ?? (() => void 0), request, permission, load, protectOptions),
312
+ connection,
313
+ shareSubject: (from, to) => {
314
+ const resolved = subjects.get(from);
315
+ if (resolved !== void 0 && !subjects.has(to)) subjects.set(to, resolved);
316
+ },
317
+ problem: (decision, init) => problemFor(decision, init, options.approval),
318
+ openapi,
319
+ permdockHandler
320
+ };
321
+ }
322
+ //#endregion
323
+ export { createPermDock as t };
@@ -1,11 +1,20 @@
1
- import { n as isReadonlyArray, t as compact } from "./compact-y6vfu2_f.js";
1
+ import { n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { _ as listPermissions, a as formerKeys } from "./permissions-DVoF6dMt.js";
4
- import { n as sha256, t as bytesToBase64Url } from "./sha256-BO0swRXL.js";
5
- import { t as coveredByDelegation } from "./delegation-D8pUEuce.js";
6
- import { t as anonymousSubject } from "./subject-C6dLxqHU.js";
7
- import { a as ownRecord, n as idList, r as isId } from "./capability-4qPdO9gk.js";
3
+ import { a as ownRecord } from "./paths-DXSHAMIa.js";
4
+ import { a as isId, r as idList } from "./expiry-D4_YKRKD.js";
5
+ import { n as internalsOf } from "./internals-Dk8A8fX3.js";
6
+ import { c as listPermissions, h as formerKeys } from "./permission-registry-Br4jSNVi.js";
7
+ import { g as secondsOf, l as isRfc3339, m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
8
+ import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
9
+ import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
10
+ import { n as coveredByDelegation } from "./delegation-DaXVdDhM.js";
11
+ import { o as flattenGrantee } from "./grantee-Cn1HyUsI.js";
12
+ import { t as anonymousSubject } from "./subject-BGoM5o8B.js";
8
13
  //#region src/core/credential.ts
14
+ /** A feed id: lowercase, so a mail system that lowercases a local part still matches. At most 16 characters, so `pdfeed_<id>_<secret>` fits an email local part. */
15
+ function isFeedId(value) {
16
+ return /^[a-z0-9-]{1,16}$/u.test(value);
17
+ }
9
18
  const MAX_NAME = 256;
10
19
  function policies(policy) {
11
20
  return isReadonlyArray(policy) ? policy : [policy];
@@ -18,10 +27,14 @@ function policies(policy) {
18
27
  function credentialPolicyViolation(credential, policy) {
19
28
  const list = policies(policy);
20
29
  for (const item of list) if (item.kinds !== void 0 && !item.kinds.includes(credential.kind)) return "kind";
21
- if (credential.expiresAt === void 0) return list.some((item) => item.allowNoExpiry === true) && list.every((item) => item.maxTtl === void 0) ? void 0 : "no-expiry";
30
+ if (credential.expiresAt === void 0) {
31
+ if (credential.kind === "feed") return;
32
+ return list.some((item) => item.allowNoExpiry === true) && list.every((item) => item.maxTtl === void 0) ? void 0 : "no-expiry";
33
+ }
34
+ const lifetime = (secondsOf(credential.expiresAt) ?? NaN) - (secondsOf(credential.createdAt) ?? NaN);
22
35
  for (const item of list) {
23
36
  const max = item.maxTtl;
24
- if (max !== void 0 && (typeof max !== "number" || !Number.isFinite(max) || max < 0 || credential.expiresAt - credential.createdAt > max)) return "ttl";
37
+ if (max !== void 0 && (!Number.isSafeInteger(max) || max < 0 || !(lifetime <= max))) return "ttl";
25
38
  }
26
39
  }
27
40
  function parsePermissions(value) {
@@ -39,9 +52,6 @@ function parsePermissions(value) {
39
52
  }
40
53
  return out;
41
54
  }
42
- function isTime(value) {
43
- return typeof value === "number" && Number.isFinite(value);
44
- }
45
55
  /**
46
56
  * Validates an untrusted credential record and returns a frozen copy with
47
57
  * only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
@@ -51,19 +61,30 @@ function isTime(value) {
51
61
  function parseCredential(input) {
52
62
  const value = ownRecord(input);
53
63
  if (value === void 0 || value["v"] !== 1 || !isId(value["id"])) return;
54
- if (value["kind"] !== "user" && value["kind"] !== "service") return;
64
+ if (value["kind"] !== "user" && value["kind"] !== "service" && value["kind"] !== "feed") return;
55
65
  if (!isId(value["principal"]) || !isId(value["createdBy"])) return;
56
66
  const permissions = parsePermissions(value["permissions"]);
57
- if (permissions === void 0 || !isTime(value["createdAt"])) return;
58
- if (value["expiresAt"] !== void 0 && !isTime(value["expiresAt"])) return;
67
+ if (permissions === void 0 || !isRfc3339(value["createdAt"])) return;
68
+ if (value["expiresAt"] !== void 0 && !isRfc3339(value["expiresAt"])) return;
59
69
  if (value["name"] !== void 0 && (typeof value["name"] !== "string" || value["name"].length > MAX_NAME)) return;
60
70
  let tenant;
61
71
  let roles;
72
+ let on;
62
73
  if (value["kind"] === "service") {
63
74
  roles = idList(value["roles"]);
64
- if (!isId(value["tenant"]) || roles === void 0) return;
75
+ if (!isId(value["tenant"]) || roles === void 0 || value["on"] !== void 0) return;
65
76
  tenant = value["tenant"];
66
- } else if (value["roles"] !== void 0 || value["tenant"] !== void 0 && !isId(value["tenant"])) return;
77
+ } else if (value["kind"] === "feed") {
78
+ roles = idList(value["roles"]);
79
+ const target = ownRecord(value["on"]);
80
+ if (roles === void 0 || target === void 0 || !isId(target["resource"]) || !isId(target["id"]) || value["principal"] !== value["id"] || !isFeedId(value["id"])) return;
81
+ if (value["tenant"] !== void 0 && !isId(value["tenant"])) return;
82
+ tenant = typeof value["tenant"] === "string" ? value["tenant"] : void 0;
83
+ on = {
84
+ resource: target["resource"],
85
+ id: target["id"]
86
+ };
87
+ } else if (value["roles"] !== void 0 || value["on"] !== void 0 || value["tenant"] !== void 0 && !isId(value["tenant"])) return;
67
88
  else tenant = value["tenant"];
68
89
  return freezeDeep(compact({
69
90
  v: 1,
@@ -72,6 +93,7 @@ function parseCredential(input) {
72
93
  principal: value["principal"],
73
94
  tenant,
74
95
  roles,
96
+ on,
75
97
  permissions,
76
98
  createdBy: value["createdBy"],
77
99
  createdAt: value["createdAt"],
@@ -120,7 +142,7 @@ function credentialDelegation(credential, permissions) {
120
142
  * owner, passed live as `owner` (roles and memberships as of this request),
121
143
  * with the credential's delegation: every check is the owner's rights
122
144
  * intersected with the key's. One that names a `tenant` makes it the active
123
- * tenant, and `createPermDock` then keeps only the owner's memberships
145
+ * tenant, and `getPermDock` then keeps only the owner's memberships
124
146
  * inside it and no global role. A `service` credential is a `service`
125
147
  * principal whose only membership is `roles` in `tenant`. An owner whose id
126
148
  * is not the credential's `principal`, or who is not a user, is anonymous.
@@ -128,7 +150,20 @@ function credentialDelegation(credential, permissions) {
128
150
  function credentialSubject(credential, options) {
129
151
  const delegation = credentialDelegation(credential, options.permissions);
130
152
  let principal;
131
- if (credential.kind === "user") {
153
+ if (credential.kind === "feed") {
154
+ if (credential.on === void 0 || credential.roles === void 0) return anonymousSubject();
155
+ const membership = compact({
156
+ on: credential.on,
157
+ roles: credential.roles,
158
+ via: "feed"
159
+ });
160
+ principal = compact({
161
+ id: credential.id,
162
+ kind: "feed",
163
+ memberships: [membership],
164
+ credential
165
+ });
166
+ } else if (credential.kind === "user") {
132
167
  const owner = options.owner ?? {
133
168
  id: credential.principal,
134
169
  kind: "user"
@@ -158,11 +193,11 @@ function credentialSubject(credential, options) {
158
193
  principal,
159
194
  delegation,
160
195
  context: {},
161
- expiresAt: credential.expiresAt
196
+ expiresAt: secondsOf(credential.expiresAt)
162
197
  }));
163
198
  }
164
199
  function credentialToken(credential) {
165
- const payload = JSON.stringify({
200
+ const payload = canonicalJson({
166
201
  t: "credential",
167
202
  id: credential.id,
168
203
  kind: credential.kind,
@@ -170,11 +205,12 @@ function credentialToken(credential) {
170
205
  tenant: credential.tenant ?? null,
171
206
  roles: credential.roles ?? null,
172
207
  permissions: credential.permissions,
208
+ ...credential.on === void 0 ? {} : { on: credential.on },
173
209
  createdBy: credential.createdBy,
174
210
  expiresAt: credential.expiresAt ?? null,
175
211
  name: credential.name ?? null
176
212
  });
177
- return `pd1.${bytesToBase64Url(sha256(payload))}`;
213
+ return sha256Digest(payload);
178
214
  }
179
215
  function denied(reason, detail) {
180
216
  return freezeDeep({
@@ -213,28 +249,90 @@ function refuse(reason, detail) {
213
249
  decision: denied(reason, detail)
214
250
  };
215
251
  }
252
+ function oneResource(resource) {
253
+ const names = new Set(listPermissions(resource).map((leaf) => leaf.resource));
254
+ const [name] = names;
255
+ return names.size === 1 && name !== void 0 ? name : void 0;
256
+ }
257
+ function granteeOnResource(to, resource, role) {
258
+ for (const grant of flattenGrantee(to)) if (grant.kind === "role" && grant.role === role && typeof grant.scope === "object" && grant.scope.resource === resource) return true;
259
+ return false;
260
+ }
261
+ function roleDeclaredOn(permdock, resource, resourceName, roleName, id, row) {
262
+ const preview = permdock.simulate({
263
+ roles: [],
264
+ memberships: [{
265
+ on: {
266
+ resource: resourceName,
267
+ id
268
+ },
269
+ roles: [roleName]
270
+ }]
271
+ });
272
+ for (const leaf of listPermissions(resource)) {
273
+ if (leaf.resource !== resourceName) continue;
274
+ const decision = preview.explain(leaf, row, { trusted: true });
275
+ const seen = [
276
+ ..."matched" in decision && decision.matched !== void 0 ? [decision.matched] : [],
277
+ ...decision.trace?.allows ?? [],
278
+ ...decision.trace?.denies ?? [],
279
+ ..."denials" in decision ? decision.denials : []
280
+ ];
281
+ for (const grant of seen) {
282
+ if (grant.role !== roleName) continue;
283
+ if (granteeOnResource(grant.to, resourceName, roleName)) return true;
284
+ }
285
+ }
286
+ return false;
287
+ }
288
+ function feedTarget(permdock, request, entries) {
289
+ const resource = oneResource(request.on.resource);
290
+ if (resource === void 0 || !isFeedId(request.id) || !isId(request.on.id) || request.row === void 0 || request.row === null || request.roles.length === 0) return refuse("validation");
291
+ for (const entry of entries) {
292
+ if (entry.leaf.resource !== resource) return refuse("exceeds-creator", { permission: entry.leaf.key });
293
+ if (entry.ids !== void 0 && (entry.ids.length !== 1 || entry.ids[0] !== request.on.id)) return refuse("exceeds-creator", { permission: entry.leaf.key });
294
+ if (permdock.decide(entry.leaf, request.row, { trusted: true }).outcome !== "granted") return refuse("exceeds-creator", { permission: entry.leaf.key });
295
+ }
296
+ for (const name of request.roles) if (!roleDeclaredOn(permdock, request.on.resource, resource, name, request.on.id, request.row)) return refuse("exceeds-creator", { role: name });
297
+ return {
298
+ ok: true,
299
+ resource
300
+ };
301
+ }
302
+ function feedOn(request, feed) {
303
+ if (request.kind !== "feed" || feed === void 0) return;
304
+ if (feed.ok && "resource" in feed) return {
305
+ resource: feed.resource,
306
+ id: request.on.id
307
+ };
308
+ }
216
309
  function checkRequest(permdock, request, now) {
217
310
  const creator = permdock.subject.principal;
218
311
  if (creator === null) return refuse("anonymous");
219
- if (creator.kind === "link" || "credential" in creator) return refuse("exceeds-creator", { creator: creator.kind === "link" ? "link" : "credential" });
312
+ if (creator.kind === "link" || creator.kind === "feed" || creator.kind === "contact") return refuse("exceeds-creator", { creator: creator.kind });
313
+ if ("credential" in creator) return refuse("exceeds-creator", { creator: "credential" });
220
314
  const entries = permissionEntries(request, leafByKey(permdock.permissions));
221
- if (entries === void 0 || !isId(request.id) || request.expiresAt !== void 0 && (!isTime(request.expiresAt) || request.expiresAt <= now)) return refuse("validation");
315
+ const expires = request.expiresAt === void 0 ? void 0 : secondsOf(request.expiresAt);
316
+ if (entries === void 0 || !isId(request.id) || request.expiresAt !== void 0 && (expires === void 0 || expires <= now)) return refuse("validation");
317
+ const feed = request.kind === "feed" ? feedTarget(permdock, request, entries) : void 0;
318
+ if (feed !== void 0 && !feed.ok) return feed;
222
319
  const subject = permdock.subject;
223
320
  for (const entry of entries) for (const id of entry.ids ?? [void 0]) if (coveredByDelegation(entry.leaf, subject.delegation, id, subject.actor !== void 0) !== void 0) return refuse("exceeds-creator", { permission: entry.leaf.key });
224
321
  const credential = parseCredential(compact({
225
322
  v: 1,
226
323
  id: request.id,
227
324
  kind: request.kind,
228
- principal: request.kind === "service" ? request.principal ?? request.id : creator.id,
229
- tenant: request.tenant,
230
- roles: request.kind === "service" ? request.roles : void 0,
325
+ principal: request.kind === "service" ? request.principal ?? request.id : request.kind === "feed" ? request.id : creator.id,
326
+ tenant: "tenant" in request ? request.tenant : void 0,
327
+ roles: request.kind === "service" || request.kind === "feed" ? request.roles : void 0,
328
+ on: feedOn(request, feed),
231
329
  permissions: entries.map((entry) => compact({
232
330
  permission: entry.leaf.key,
233
- ids: entry.ids
331
+ ids: request.kind === "feed" ? [request.on.id] : entry.ids
234
332
  })),
235
333
  createdBy: creator.id,
236
- createdAt: now,
237
- expiresAt: request.expiresAt === void 0 ? void 0 : Math.floor(request.expiresAt),
334
+ createdAt: rfc3339(now),
335
+ expiresAt: request.expiresAt,
238
336
  name: request.name
239
337
  }));
240
338
  if (credential === void 0) return refuse("validation");
@@ -275,8 +373,31 @@ function credentialTenant(credential, active) {
275
373
  * its token. PermDock never stores the credential; the application does,
276
374
  * after a `granted` result.
277
375
  */
278
- async function decideCredential(permdock, request, options = {}) {
279
- const checked = checkRequest(permdock, request, options.now ?? Math.floor(Date.now() / 1e3));
376
+ /**
377
+ * Decides whether the subject of `permdock` may create the credential in
378
+ * `request`: the creator's own reach, the `credentials` policy of the key's
379
+ * tenant (the call's `settings`, else the instance's), and `approval`.
380
+ * PermDock never stores the credential; the application does, after a
381
+ * `granted` result. An instance built from a snapshot denies with
382
+ * `unsupported`.
383
+ */
384
+ function decideCredential(permdock, request, options = {}) {
385
+ const internals = internalsOf(permdock);
386
+ if (internals === void 0) return Promise.resolve(freezeDeep({
387
+ outcome: "denied",
388
+ denials: [{
389
+ role: null,
390
+ reason: "unsupported"
391
+ }]
392
+ }));
393
+ const settings = options.settings ?? internals.env.settings;
394
+ return decideCredentialWith(internals.instance, request, settings === void 0 ? options : {
395
+ ...options,
396
+ settings
397
+ });
398
+ }
399
+ async function decideCredentialWith(permdock, request, options) {
400
+ const checked = checkRequest(permdock, request, nowSeconds(options.now));
280
401
  if (!checked.ok) return checked.decision;
281
402
  const { credential } = checked;
282
403
  const tenant = credentialTenant(credential, permdock.subject.principal?.tenant);
@@ -303,4 +424,4 @@ async function decideCredential(permdock, request, options = {}) {
303
424
  });
304
425
  }
305
426
  //#endregion
306
- export { decideCredential as a, credentialTenant as i, credentialPolicyViolation as n, parseCredential as o, credentialSubject as r, credentialDelegation as t };
427
+ export { decideCredential as a, credentialTenant as i, credentialPolicyViolation as n, isFeedId as o, credentialSubject as r, parseCredential as s, credentialDelegation as t };