permdock 0.4.0 → 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 (514) hide show
  1. package/README.md +37 -35
  2. package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
  3. package/dist/a2a/index.d.ts +6 -6
  4. package/dist/a2a/index.js +14 -17
  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 -35
  10. package/dist/ai-sdk/index.js +37 -23
  11. package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
  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/arazzo-B6lebmiQ.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.js} +20 -14
  20. package/dist/args-IIolxxKA.js +197 -0
  21. package/dist/astro/index.d.ts +43 -0
  22. package/dist/astro/index.js +27 -0
  23. package/dist/audience-Dg8XsRaO.js +55 -0
  24. package/dist/auth-DRLEizbL.js +178 -0
  25. package/dist/authzen/index.d.ts +26 -6
  26. package/dist/authzen/index.js +94 -79
  27. package/dist/automation-BMZPIVUM.d.ts +114 -0
  28. package/dist/automation-DVjOckjV.js +157 -0
  29. package/dist/better-auth/index.d.ts +8 -6
  30. package/dist/better-auth/index.js +9 -8
  31. package/dist/better-supabase/index.d.ts +357 -30
  32. package/dist/better-supabase/index.js +936 -194
  33. package/dist/{bind-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
  34. package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -10
  35. package/dist/body-CH5of8Ne.js +10 -0
  36. package/dist/body-text-QcXok_SI.js +52 -0
  37. package/dist/{build-instance-DIIV9DbC.js → build-instance-BMnAudHn.js} +4 -3
  38. package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
  39. package/dist/{capability-CksyCWDH.d.ts → capability-BSslw1QV.d.ts} +44 -25
  40. package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
  41. package/dist/casbin-Cr7RLtA3.js +30 -0
  42. package/dist/casbin-Dyu2gnUD.js +234 -0
  43. package/dist/casl-64gpT-8x.js +24 -0
  44. package/dist/casl-DjEDhTCP.js +299 -0
  45. package/dist/catalog/index.d.ts +74 -2
  46. package/dist/catalog/index.js +51 -2
  47. package/dist/{catalog-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
  48. package/dist/catalog-DjhMYYCq.js +1 -0
  49. package/dist/catalog-R_A__RsH.js +52 -0
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.js} +45 -23
  51. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  52. package/dist/chat/index.d.ts +2 -0
  53. package/dist/chat/index.js +224 -0
  54. package/dist/chat-sdk/index.d.ts +87 -0
  55. package/dist/chat-sdk/index.js +197 -0
  56. package/dist/claims-map-7oQ3ue4X.js +13 -0
  57. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  58. package/dist/claude-agent/index.d.ts +7 -14
  59. package/dist/claude-agent/index.js +24 -27
  60. package/dist/clerk/index.d.ts +9 -8
  61. package/dist/clerk/index.js +9 -14
  62. package/dist/cli/bin.js +36 -17
  63. package/dist/cli/index.d.ts +19 -5
  64. package/dist/cli/index.js +164 -4
  65. package/dist/cloud/index.d.ts +102 -63
  66. package/dist/cloud/index.js +239 -340
  67. package/dist/cloud-CIoHNevm.js +87 -0
  68. package/dist/codemod-Bmj9dWMH.js +37 -0
  69. package/dist/codemod-Cxvvc70T.js +2084 -0
  70. package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
  71. package/dist/collect-DloHbDVa.js +55 -0
  72. package/dist/collect-FlXJlhus.js +1 -0
  73. package/dist/command-L8EstFNm.js +6 -0
  74. package/dist/compile/index.d.ts +1 -1
  75. package/dist/compile/index.js +1 -2
  76. package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  77. package/dist/{compile-CtTP7eur.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  78. package/dist/completion-BqhRBJD8.js +143 -0
  79. package/dist/config-B46rm9sc.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  87. package/dist/create-BDS7wc3y.d.ts +138 -0
  88. package/dist/create-BFfm17UA.d.ts +110 -0
  89. package/dist/create-BWRSXgOF.js +403 -0
  90. package/dist/create-C3b4B5eF.js +130 -0
  91. package/dist/{create-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
  92. package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-DaXVdDhM.js +286 -0
  95. package/dist/delivery/index.d.ts +5 -0
  96. package/dist/delivery/index.js +5 -0
  97. package/dist/delivery-DCAgNyCn.js +499 -0
  98. package/dist/delivery-event-xX4obB8F.js +40 -0
  99. package/dist/{denied-text-DfRk15uw.d.ts → denied-text-D8jDHgsl.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.d.ts} +2 -2
  101. package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
  102. package/dist/device-BARQ8eYG.js +193 -0
  103. package/dist/diff-CxZo9pTq.js +37 -0
  104. package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
  105. package/dist/doctor-CxiwSfqH.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.js} +245 -50
  107. package/dist/drizzle/index.d.ts +5 -3
  108. package/dist/drizzle/index.js +2 -2
  109. package/dist/elysia/index.d.ts +16 -13
  110. package/dist/elysia/index.js +13 -12
  111. package/dist/env-DJZrPjRi.js +8 -0
  112. package/dist/errors-BDUwg2qC.js +27 -0
  113. package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
  114. package/dist/errors-BWXBMaKK.d.ts +11 -0
  115. package/dist/{errors-OD_4c__H.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  116. package/dist/errors-CWTY6uih.js +143 -0
  117. package/dist/evaluate-_R8QkWaf.js +1732 -0
  118. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-DZ2CbV5k.js} +145 -34
  120. package/dist/eve/index.d.ts +12 -16
  121. package/dist/eve/index.js +22 -28
  122. package/dist/event-time-CsegxXxB.js +23 -0
  123. package/dist/expiry-D4_YKRKD.js +52 -0
  124. package/dist/express/index.d.ts +13 -10
  125. package/dist/express/index.js +12 -11
  126. package/dist/fastify/index.d.ts +25 -22
  127. package/dist/fastify/index.js +13 -12
  128. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  129. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  130. package/dist/fields-D9tPVUUS.js +203 -0
  131. package/dist/files-C5ZI27eV.js +124 -0
  132. package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
  133. package/dist/flags-C3DktBDY.js +86 -0
  134. package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-D2lZt4Dd.js} +55 -52
  135. package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
  136. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.js} +5 -4
  138. package/dist/h3/index.d.ts +37 -0
  139. package/dist/h3/index.js +35 -0
  140. package/dist/headers-BIjfMaoC.js +8 -0
  141. package/dist/headers-CIbDTUTK.d.ts +7 -0
  142. package/dist/{helpers-C9YmyBIa.js → helpers-DTcZOzhF.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-BZIAYvon.js +315 -0
  146. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  147. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  148. package/dist/http-DXJ37RDA.js +46 -0
  149. package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
  150. package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
  151. package/dist/{import-BFIlhetD.js → import-DMmOG27O.js} +190 -53
  152. package/dist/index-BcHcPyIo.d.ts +110 -0
  153. package/dist/index-CaxrMD1A.d.ts +1 -0
  154. package/dist/index-Chrs5fQ-.d.ts +210 -0
  155. package/dist/index-CxGUswIC.d.ts +431 -0
  156. package/dist/index-D8EovfsP.d.ts +91 -0
  157. package/dist/{index-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
  158. package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
  159. package/dist/index.d.ts +19 -15
  160. package/dist/index.js +31 -21
  161. package/dist/init-DeMYsnYJ.js +96 -0
  162. package/dist/init-GG6Jh8HD.js +95 -0
  163. package/dist/{instance-options-plkrsAog.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  164. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  165. package/dist/instant-BluqDvyS.js +19 -0
  166. package/dist/internals-Dk8A8fX3.js +17 -0
  167. package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
  168. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  169. package/dist/jwt/index.d.ts +18 -11
  170. package/dist/jwt/index.js +156 -135
  171. package/dist/{kernel-CB3LrIJM.js → kernel-5JatXyND.js} +52 -24
  172. package/dist/kysely/index.d.ts +5 -3
  173. package/dist/kysely/index.js +2 -2
  174. package/dist/load-BxEtwlBS.js +1 -0
  175. package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
  176. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  177. package/dist/login-Dfe5RlYk.js +68 -0
  178. package/dist/login-imhuwvn3.js +254 -0
  179. package/dist/manifest-C8IzW3Do.js +42 -0
  180. package/dist/manifest-CtKR3GXL.js +370 -0
  181. package/dist/manifest-json-CAGzls-C.js +9 -0
  182. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  183. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  184. package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
  185. package/dist/{map-error-BE27PYkE.js → map-error-TCAdw-eW.js} +3 -3
  186. package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
  187. package/dist/mcp/index.d.ts +22 -12
  188. package/dist/mcp/index.js +57 -39
  189. package/dist/{migrate-BwlB5-Wk.js → migrate-BShP7Vf4.js} +53 -14
  190. package/dist/nest/index.d.ts +12 -9
  191. package/dist/nest/index.js +15 -14
  192. package/dist/next/index.d.ts +18 -21
  193. package/dist/next/index.js +13 -11
  194. package/dist/next/plugin.d.ts +1 -1
  195. package/dist/next/plugin.js +2 -2
  196. package/dist/node/index.d.ts +10 -10
  197. package/dist/node/index.js +7 -9
  198. package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
  199. package/dist/openai/index.d.ts +9 -16
  200. package/dist/openai/index.js +17 -24
  201. package/dist/openapi/index.d.ts +3 -3
  202. package/dist/openapi/index.js +1 -1
  203. package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
  204. package/dist/{openapi-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
  205. package/dist/openapi-ahr8rHu3.js +138 -0
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-CxybZErY.d.ts +59 -0
  208. package/dist/orpc/index.d.ts +13 -10
  209. package/dist/orpc/index.js +20 -15
  210. package/dist/otel/index.d.ts +3 -2
  211. package/dist/otel/index.js +30 -7
  212. package/dist/output-Dyw8fyPF.js +88 -0
  213. package/dist/output-files-B3IZJksC.js +1 -0
  214. package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
  215. package/dist/{permission-keys-B26jeyUv.js → ownership-BatFgAA4.js} +1698 -869
  216. package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
  217. package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
  218. package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
  219. package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  220. package/dist/parse-request-D_tUXG6M.js +26 -0
  221. package/dist/paths-DXSHAMIa.js +42 -0
  222. package/dist/pdp/index.d.ts +7 -3
  223. package/dist/pdp/index.js +45 -26
  224. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  225. package/dist/peer-CRvC7Hg1.js +1 -0
  226. package/dist/permdock-B9JxkBwC.js +868 -0
  227. package/dist/permdock-D7eeLJER.d.ts +502 -0
  228. package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
  229. package/dist/permissions-B-wCP5ZC.js +30 -0
  230. package/dist/{permissions-CCJ6lmxB.js → permissions-CZKiUfFM.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  232. package/dist/policies-CO1oOymN.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
  235. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
  238. package/dist/postgrest-CW0IqC-U.js +566 -0
  239. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  240. package/dist/powersync-BHfuehf3.js +62 -0
  241. package/dist/powersync-CbzkqL_M.js +1 -0
  242. package/dist/{powersync-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
  243. package/dist/preset/index.d.ts +146 -0
  244. package/dist/preset/index.js +1 -0
  245. package/dist/preset-DZdU0tne.js +1768 -0
  246. package/dist/principal-source-pHneukrx.js +103 -0
  247. package/dist/prisma/index.d.ts +6 -3
  248. package/dist/prisma/index.js +2 -2
  249. package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
  250. package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  251. package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
  252. package/dist/problem-types-CJ2325SZ.js +5 -0
  253. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  254. package/dist/{protected-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
  255. package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
  256. package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
  259. package/dist/pull-BgIfno6w.js +256 -0
  260. package/dist/pull-ByOks_Tg.js +1 -0
  261. package/dist/push-CmFVBOeI.js +116 -0
  262. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  263. package/dist/pushed-policy-DobP7AHI.js +238 -0
  264. package/dist/react/index.d.ts +8 -8
  265. package/dist/react/index.js +6 -6
  266. package/dist/react/provider-client.d.ts +1 -1
  267. package/dist/react/provider-client.js +1 -2
  268. package/dist/react-native/index.d.ts +24 -72
  269. package/dist/react-native/index.js +24 -22
  270. package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
  271. package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
  272. package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
  273. package/dist/renames-CGj7YwcQ.js +175 -0
  274. package/dist/{replay-COpmZUfx.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.js} +3 -3
  277. package/dist/request-schema-CMreVuFM.js +148 -0
  278. package/dist/resend/index.d.ts +126 -0
  279. package/dist/resend/index.js +379 -0
  280. package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
  281. package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
  282. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  283. package/dist/rls-BA8an5Ap.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
  287. package/dist/run-CNsApDpd.js +1 -0
  288. package/dist/run-DOfMtc9V.js +723 -0
  289. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  290. package/dist/run-ticket-sxFI6LAk.js +337 -0
  291. package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
  292. package/dist/{saas-DtaA4JuW.js → saas-FO-Q8oj0.js} +16 -14
  293. package/dist/scan-BOI5tJ-6.js +29 -0
  294. package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
  295. package/dist/schema-yLuBWWsh.js +130 -0
  296. package/dist/scim/index.d.ts +2 -2
  297. package/dist/scim/index.js +1 -2
  298. package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
  299. package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
  300. package/dist/server/index.d.ts +12 -143
  301. package/dist/server/index.js +12 -9
  302. package/dist/server-DqCT4CgZ.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-BEZSlMS_.js +957 -0
  309. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  310. package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
  311. package/dist/skills-CTYwkl44.js +51 -0
  312. package/dist/snapshot-CXUWfsNy.js +269 -0
  313. package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  314. package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  315. package/dist/solid/index.d.ts +11 -12
  316. package/dist/solid/index.js +7 -7
  317. package/dist/solid-start/index.d.ts +52 -0
  318. package/dist/solid-start/index.js +49 -0
  319. package/dist/{sources-Dljy06zL.d.ts → sources-BV9j0DeZ.d.ts} +7 -13
  320. package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
  321. package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
  322. package/dist/src-DLfUWFAI.js +1851 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  326. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
  330. package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
  331. package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  333. package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
  334. package/dist/style-DiKWnAvn.js +1 -0
  335. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  336. package/dist/subject-BGoM5o8B.js +17 -0
  337. package/dist/supabase/index.d.ts +23 -106
  338. package/dist/supabase/index.js +5 -4
  339. package/dist/supabase/middleware.d.ts +7 -6
  340. package/dist/supabase/middleware.js +13 -11
  341. package/dist/supabase-9pqI57pW.js +92 -0
  342. package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
  343. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  344. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
  345. package/dist/support-session-C6xJQYut.js +158 -0
  346. package/dist/svelte/Protected.svelte +4 -4
  347. package/dist/svelte/index.d.ts +7 -7
  348. package/dist/svelte/index.js +10 -10
  349. package/dist/svelte/runtime.d.ts +3 -3
  350. package/dist/svelte/runtime.js +3 -3
  351. package/dist/svelte/source.d.ts +7 -7
  352. package/dist/svelte/source.js +4 -4
  353. package/dist/sveltekit/index.d.ts +51 -0
  354. package/dist/sveltekit/index.js +27 -0
  355. package/dist/tanstack-start/index.d.ts +51 -0
  356. package/dist/tanstack-start/index.js +40 -0
  357. package/dist/target-Bw37TFNA.js +51 -0
  358. package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
  359. package/dist/terminal/index.d.ts +11 -9
  360. package/dist/terminal/index.js +23 -287
  361. package/dist/testing/index.d.ts +311 -38
  362. package/dist/testing/index.js +3475 -201
  363. package/dist/testing/saas/index.d.ts +9 -8
  364. package/dist/testing/saas/index.js +2 -2
  365. package/dist/testing/saas/permissions.d.ts +1 -1
  366. package/dist/testing/saas/permissions.js +1 -2
  367. package/dist/text-BMFRfBqc.js +8 -0
  368. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  369. package/dist/thenable-yD7SabqG.js +31 -0
  370. package/dist/time-DkWjdL98.js +71 -0
  371. package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
  372. package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
  373. package/dist/trpc/index.d.ts +12 -9
  374. package/dist/trpc/index.js +16 -14
  375. package/dist/{types-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
  376. package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
  377. package/dist/types-BjV-fqcA.d.ts +57 -0
  378. package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
  379. package/dist/types-C8-KNsFf.d.ts +107 -0
  380. package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  381. package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
  382. package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
  383. package/dist/{types-CIlTojhq.d.ts → types-ClZaWzfb.d.ts} +9 -6
  384. package/dist/types-DX0LaKTb.d.ts +157 -0
  385. package/dist/types-DiQjupG2.d.ts +332 -0
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/types-_sHy8BQf.d.ts +65 -0
  388. package/dist/{types-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
  389. package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CHOtwL19.js +1 -0
  393. package/dist/usage-DHtE8j4E.js +32 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  396. package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
  397. package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
  398. package/dist/{verify-BztUB3GX.js → verify-DbCL9bnB.js} +645 -50
  399. package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
  400. package/dist/version-DXkYUISx.js +1 -0
  401. package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
  402. package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-D6lPdb4Z.d.ts} +65 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-BGUtGYoU.js +67 -0
  406. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  407. package/dist/watch-Cb-NcaUw.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-CszoTJMq.js} +44 -5
  409. package/dist/webmcp/index.d.ts +2 -2
  410. package/dist/webmcp/index.js +3 -3
  411. package/dist/where-scope-Dv-WTP-w.js +306 -0
  412. package/dist/who-can-D0QoYbEb.js +364 -0
  413. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  414. package/dist/wire-denial-C7PaVYEM.js +27 -0
  415. package/dist/workflow/index.d.ts +5 -0
  416. package/dist/workflow/index.js +223 -0
  417. package/dist/workflow-sdk/index.d.ts +56 -0
  418. package/dist/workflow-sdk/index.js +78 -0
  419. package/dist/{wrap-Cr93qqdP.d.ts → wrap-Bd1Tejur.d.ts} +2 -1
  420. package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
  421. package/package.json +136 -37
  422. package/schemas/access-event-v1.json +118 -0
  423. package/schemas/approval-request-v1.json +34 -1
  424. package/schemas/approval-signature-v1.json +94 -0
  425. package/schemas/automation-event-v1.json +113 -0
  426. package/schemas/capability-v1.json +84 -0
  427. package/schemas/catalog-event-v1.json +87 -0
  428. package/schemas/catalog-v1.json +123 -12
  429. package/schemas/cli-commands-v1.json +164 -0
  430. package/schemas/cli-result-v1.json +96 -0
  431. package/schemas/cloud-api-v1.json +5407 -0
  432. package/schemas/connector-v1.json +408 -0
  433. package/schemas/credential-event-v1.json +81 -0
  434. package/schemas/credential-v1.json +134 -0
  435. package/schemas/decision-event-v1.json +288 -0
  436. package/schemas/delivery-event-v1.json +117 -0
  437. package/schemas/directory-event-v1.json +85 -0
  438. package/schemas/evidence-export-v1.json +54 -0
  439. package/schemas/membership-event-v1.json +93 -0
  440. package/schemas/policy-v1.json +68 -0
  441. package/schemas/pushed-policy-v1.json +236 -0
  442. package/schemas/run-v1.json +162 -0
  443. package/schemas/snapshot-v1.json +138 -0
  444. package/schemas/supabase-claims-v1.json +4 -4
  445. package/schemas/supabase-manifest-v1.json +5 -1
  446. package/schemas/support-session-v1.json +111 -0
  447. package/skills/permdock/SKILL.md +16 -12
  448. package/skills/permdock-agents/SKILL.md +40 -23
  449. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  450. package/skills/permdock-agents/references/runtimes.md +22 -18
  451. package/skills/permdock-approvals/SKILL.md +29 -13
  452. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  453. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  454. package/skills/permdock-audit/SKILL.md +3 -3
  455. package/skills/permdock-credentials/SKILL.md +5 -5
  456. package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
  457. package/skills/permdock-data/SKILL.md +6 -6
  458. package/skills/permdock-data/references/queries-and-rls.md +9 -8
  459. package/skills/permdock-data/references/relationships.md +3 -3
  460. package/skills/permdock-tenancy/SKILL.md +20 -7
  461. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  462. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +5 -4
  463. package/skills/permdock-wire/SKILL.md +17 -11
  464. package/skills/permdock-wire/references/adapters.md +139 -51
  465. package/skills/permdock-wire/references/policy-options.md +5 -5
  466. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  467. package/dist/approvals-DZL76lKW.js +0 -240
  468. package/dist/arazzo-CD8d0WLb.js +0 -54
  469. package/dist/catalog-6yWAX6Ps.js +0 -2
  470. package/dist/catalog-WHG4kBq7.js +0 -48
  471. package/dist/cloud-C7bSDgX4.js +0 -50
  472. package/dist/cloud-PeBN3IEn.js +0 -118
  473. package/dist/collect-Bw2Jdq1q.js +0 -2
  474. package/dist/collect-CQx4hX4N.js +0 -83
  475. package/dist/commands-Cpip4ULx.js +0 -97
  476. package/dist/config-DLt6BvV7.js +0 -36
  477. package/dist/diff-Cnghh_Ip.js +0 -48
  478. package/dist/doctor-CuVJvhV_.js +0 -53
  479. package/dist/duration-xK2jGFVc.js +0 -25
  480. package/dist/errors-CWfoNg9N.js +0 -47
  481. package/dist/errors-DRnGZHzF.js +0 -30
  482. package/dist/expiry-BoBJ8Tvc.js +0 -7
  483. package/dist/fields-fwfXN01n.js +0 -1016
  484. package/dist/headers-BZSDieNT.js +0 -6
  485. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  486. package/dist/ids-DC4V4CFu.js +0 -18
  487. package/dist/index-DgM7w96K.d.ts +0 -6
  488. package/dist/index-Dz7didpC.d.ts +0 -201
  489. package/dist/load-B_shHrmd.js +0 -2
  490. package/dist/manifest-BngWKryL.js +0 -770
  491. package/dist/may-use-BOn_dR_w.js +0 -78
  492. package/dist/openapi-DcQ1Kg40.js +0 -164
  493. package/dist/ownership-BgnbOJFT.js +0 -851
  494. package/dist/permdock-L26udHSk.js +0 -3646
  495. package/dist/powersync-BFSbSElQ.js +0 -62
  496. package/dist/powersync-DCDgZgfZ.js +0 -2
  497. package/dist/rls-55DQTuf5.js +0 -250
  498. package/dist/run-DMcNW_8T.js +0 -174
  499. package/dist/server-ZYEHtNHS.js +0 -268
  500. package/dist/sink-BTtmfPnE.js +0 -141
  501. package/dist/sink-CPN4zLfs.d.ts +0 -104
  502. package/dist/skills-Dle4ZoLF.js +0 -56
  503. package/dist/snapshot-Dc9CHPME.js +0 -1078
  504. package/dist/src-Bb7no-hS.js +0 -639
  505. package/dist/subject-C6dLxqHU.js +0 -24
  506. package/dist/supabase-Dbqr141s.js +0 -83
  507. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  508. package/dist/thenable-QSmvt-vZ.js +0 -65
  509. package/dist/types-C0dee0Qf.d.ts +0 -197
  510. package/dist/types-DvupZE0w.d.ts +0 -9
  511. package/dist/usage-4G6t643F.js +0 -42
  512. package/dist/usage-iFLJ0-rr.js +0 -2
  513. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  514. package/dist/watch-C8TpsAl4.js +0 -2
@@ -1,15 +1,15 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { n as problemDetails } from "./problem-details-DECUnXAn.js";
4
- import { c as listPermissions } from "./permission-registry-BsblpB-z.js";
5
- import { r as challengeScope } from "./permdock-L26udHSk.js";
3
+ import { n as problemDetails } from "./problem-details-cn5X30gZ.js";
4
+ import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
6
5
  import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
6
+ import { c as withApp, i as challengeScope } from "./permdock-B9JxkBwC.js";
7
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-CnWraVhC.js";
9
- import { n as resolveOrNull } from "./build-instance-DIIV9DbC.js";
10
- import { n as createEvaluationsHandler, r as InvalidSignatureError, t as applyApprovalResume } from "./evaluations-C9YJsv3H.js";
11
- import { n as tenantScope, t as actorFrom } from "./adapter-context-mlWsVGGg.js";
12
- import { n as requestContext, t as buildReportingInstance } from "./request-context-BVM7aWNs.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
13
  //#region src/server/kernel-problems.ts
14
14
  const NOT_DELEGATED = freezeDeep({
15
15
  outcome: "denied",
@@ -89,7 +89,7 @@ async function refused(hook, fallback, decision, request, report) {
89
89
  decision
90
90
  };
91
91
  const status = result.status;
92
- if (typeof status !== "number" || status < 300) throw new TypeError(`PermDock: onDenied returned status ${String(status)}; a refusal keeps a status of 300 or more`);
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
93
  return {
94
94
  ok: false,
95
95
  response: result instanceof Response ? result : new Response(JSON.stringify(result), {
@@ -112,11 +112,11 @@ async function guardOn(deps, instance, remote, report, request, permission, load
112
112
  const credentials = request === void 0 ? false : hasCredentials(request);
113
113
  if (permission === null) {
114
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.onDenied, unauthenticatedProblem(credentials), ANONYMOUS, request, report);
115
+ if (instance.subject.principal === null) return refused(deps.options.deniedResponse, unauthenticatedProblem(credentials), ANONYMOUS, request, report);
116
116
  }
117
117
  const { actor, delegation } = instance.subject;
118
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.onDenied, scopeProblem(permission, instance.subject, credentials, declared[0]), NOT_DELEGATED, request, report);
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
120
  let data;
121
121
  if (load !== void 0) {
122
122
  let loaded;
@@ -124,7 +124,7 @@ async function guardOn(deps, instance, remote, report, request, permission, load
124
124
  loaded = await load();
125
125
  } catch (error) {
126
126
  report(error);
127
- return refused(deps.options.onDenied, loadFailedProblem(permission), LOAD_FAILED, request, report);
127
+ return refused(deps.options.deniedResponse, loadFailedProblem(permission), LOAD_FAILED, request, report);
128
128
  }
129
129
  if (loaded === null || loaded === void 0) return {
130
130
  ok: false,
@@ -138,7 +138,7 @@ async function guardOn(deps, instance, remote, report, request, permission, load
138
138
  data
139
139
  };
140
140
  const decideOptions = compact({
141
- source: "adapter",
141
+ call: "adapter",
142
142
  adapter: deps.adapter,
143
143
  field: protectOptions.field,
144
144
  explain: protectOptions.explain,
@@ -162,7 +162,7 @@ async function guardOn(deps, instance, remote, report, request, permission, load
162
162
  decision,
163
163
  data
164
164
  };
165
- return refused(deps.options.onDenied, problemFromDecision(decision, permission, instance.subject, compact({
165
+ return refused(deps.options.deniedResponse, problemFromDecision(decision, permission, instance.subject, compact({
166
166
  approval: deps.options.approval,
167
167
  credentials,
168
168
  scope: declared?.[0] ?? challengeScope(deps.policy, permission),
@@ -172,18 +172,17 @@ async function guardOn(deps, instance, remote, report, request, permission, load
172
172
  //#endregion
173
173
  //#region src/server/create.ts
174
174
  async function resolveActor(request, options) {
175
- return (options.webBotAuth === void 0 ? void 0 : await options.webBotAuth(request)) ?? actorFrom(options.actor, request);
175
+ return (options.webBotAuth === void 0 ? void 0 : await options.webBotAuth.verify(request)) ?? actorFrom(options.actor, request);
176
176
  }
177
177
  const NO_TENANT = "\0";
178
- function createPermDock(policy, options) {
179
- return createServerKernel(policy, options);
180
- }
181
178
  /**
182
- * The kernel behind every HTTP adapter. The subject and actor are resolved
183
- * once per `Request`; one instance is cached per `(Request, tenant)`, so a
184
- * global middleware and a later tenant-scoped `protect` never share a tenant.
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.
185
183
  */
186
- function createServerKernel(policy, options) {
184
+ function createPermDock(policy, given) {
185
+ const options = withApp(policy, given);
187
186
  const adapter = options.adapter ?? "server";
188
187
  const subjects = /* @__PURE__ */ new WeakMap();
189
188
  const instances = /* @__PURE__ */ new WeakMap();
@@ -217,7 +216,7 @@ function createServerKernel(policy, options) {
217
216
  context
218
217
  },
219
218
  errors,
220
- wrap: options.wrap
219
+ wrap: (created) => options.wrap === void 0 ? created : options.wrap(created)
221
220
  });
222
221
  const remote = options.pdp === void 0 ? void 0 : await options.pdp(policy, user, built.options);
223
222
  reporters.set(built.permdock, built.report);
@@ -243,7 +242,7 @@ function createServerKernel(policy, options) {
243
242
  };
244
243
  const connection = async (request, connectionOptions = {}, scope) => {
245
244
  const { tenant } = scope ?? await tenantScope(options.tenant, request);
246
- const { openConnection } = await import("./connection-DUsczpB5.js");
245
+ const { openConnection } = await import("./connection-DjhIJSs2.js");
247
246
  return openConnection({
248
247
  open: async () => (await build(request, { tenant })).permdock,
249
248
  rebuild: async () => (await instanceFor(await freshSubject(request), tenant)).permdock,
@@ -253,9 +252,9 @@ function createServerKernel(policy, options) {
253
252
  options: connectionOptions
254
253
  });
255
254
  };
256
- const permdock = async (request, scope) => (await build(request, scope)).permdock;
255
+ const getPermDock = async (request, scope) => (await build(request, scope)).permdock;
257
256
  const getSnapshot = async (request, query = {}) => {
258
- return (await permdock(request, query.tenant === void 0 ? void 0 : { tenant: query.tenant })).snapshot(compact({
257
+ return (await getPermDock(request, query.tenant === void 0 ? void 0 : { tenant: query.tenant })).snapshot(compact({
259
258
  include: query.include,
260
259
  tenants: query.tenants
261
260
  }));
@@ -265,7 +264,7 @@ function createServerKernel(policy, options) {
265
264
  options,
266
265
  adapter
267
266
  };
268
- const protectRoute = (permission, loadData, protectOptions = {}) => {
267
+ const protectRoute = (permission, data, protectOptions = {}) => {
269
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");
270
269
  return async (request, scope) => {
271
270
  let instance;
@@ -280,7 +279,7 @@ function createServerKernel(policy, options) {
280
279
  };
281
280
  throw error;
282
281
  }
283
- return guardOn(deps, instance, remote, report, request, permission, loadData === void 0 ? void 0 : () => loadData(request), protectOptions);
282
+ return guardOn(deps, instance, remote, report, request, permission, data === void 0 ? void 0 : () => data(request), protectOptions);
284
283
  };
285
284
  };
286
285
  const protect = protectRoute;
@@ -299,14 +298,14 @@ function createServerKernel(policy, options) {
299
298
  } };
300
299
  }
301
300
  };
302
- const permdockHandler = (scope) => createEvaluationsHandler(compact({
301
+ const permdockHandler = (scope) => evaluationsHandler(compact({
303
302
  policy,
304
- resolve: scope === void 0 ? permdock : async (request) => permdock(request, await scope(request)),
303
+ resolve: scope === void 0 ? getPermDock : async (request) => getPermDock(request, await scope(request)),
305
304
  store: options.store,
306
305
  adapter
307
306
  }));
308
307
  return {
309
- permdock,
308
+ getPermDock,
310
309
  getSnapshot,
311
310
  protect,
312
311
  protectOn: (instance, permission, load, protectOptions = {}, request) => guardOn(deps, instance, void 0, reporters.get(instance) ?? (() => void 0), request, permission, load, protectOptions),
@@ -321,4 +320,4 @@ function createServerKernel(policy, options) {
321
320
  };
322
321
  }
323
322
  //#endregion
324
- export { createServerKernel as n, createPermDock as t };
323
+ export { createPermDock as t };
@@ -1,11 +1,20 @@
1
1
  import { n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { s as coveredByDelegation } from "./snapshot-Dc9CHPME.js";
4
- import { c as listPermissions, h as formerKeys } from "./permission-registry-BsblpB-z.js";
5
- import { n as sha256, t as bytesToBase64Url } from "./sha256-BO0swRXL.js";
6
- import { t as anonymousSubject } from "./subject-C6dLxqHU.js";
7
- import { a as ownRecord, n as idList, r as isId } from "./capability-txATtKV4.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 };
@@ -0,0 +1,74 @@
1
+ import { n as CliError } from "./errors-CWTY6uih.js";
2
+ //#region src/cli/core/io.ts
3
+ const FRAMES = [
4
+ "⠋",
5
+ "⠙",
6
+ "⠹",
7
+ "⠸",
8
+ "⠼",
9
+ "⠴",
10
+ "⠦",
11
+ "⠧",
12
+ "⠇",
13
+ "⠏"
14
+ ];
15
+ const FRAME_MS = 80;
16
+ /**
17
+ * A spinner on a terminal stderr; a plain line elsewhere, so logs and CI
18
+ * output stay readable. `done` replaces the spinner with a final line.
19
+ */
20
+ function progressReporter(input) {
21
+ return (message) => {
22
+ if (!input.tty) {
23
+ input.write(`${message}\n`);
24
+ return { done: (final) => {
25
+ if (final !== void 0) input.write(`${final}\n`);
26
+ } };
27
+ }
28
+ let frame = 0;
29
+ const draw = () => {
30
+ input.write(`\r${input.style.paint("cyan", FRAMES[frame % FRAMES.length] ?? "")} ${message}`);
31
+ frame += 1;
32
+ };
33
+ draw();
34
+ const timer = setInterval(draw, FRAME_MS);
35
+ timer.unref();
36
+ return { done: (final) => {
37
+ clearInterval(timer);
38
+ input.write(`\r\u001B[2K${final === void 0 ? "" : `${input.style.okMark} ${final}\n`}`);
39
+ } };
40
+ };
41
+ }
42
+ /** The value of a `--*-stdin` secret: stdin up to the first newline, trimmed. */
43
+ async function readSecret(readStdin) {
44
+ if (readStdin === void 0) return;
45
+ const text = (await readStdin()).split(/\r?\n/u, 1)[0]?.trim() ?? "";
46
+ return text === "" ? void 0 : text;
47
+ }
48
+ //#endregion
49
+ //#region src/cli/core/credentials.ts
50
+ const URL_PASSWORD = /\b([a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:)([^\s@/]+)@/giu;
51
+ /** `text` with every registered secret and every URL password masked. */
52
+ function redact(text, secrets) {
53
+ let out = text.replace(URL_PASSWORD, "$1***@");
54
+ for (const secret of secrets) if (secret.length >= 4) out = out.replaceAll(secret, "***");
55
+ return out;
56
+ }
57
+ /**
58
+ * The secret piped in for `--<flag>-stdin`, when it was passed, registered
59
+ * for redaction.
60
+ */
61
+ async function secretInput(ctx, input) {
62
+ let value;
63
+ if (input.stdin) {
64
+ value = await readSecret(ctx.io.readStdin);
65
+ if (value === void 0) throw new CliError("usage", `${ctx.command}: --${input.flag}-stdin read nothing from stdin`, {
66
+ code: "missing_value",
67
+ extensions: { flag: `--${input.flag}-stdin` }
68
+ });
69
+ }
70
+ if (value !== void 0) ctx.addSecret(value);
71
+ return value;
72
+ }
73
+ //#endregion
74
+ export { secretInput as n, progressReporter as r, redact as t };