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,499 @@
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
+ import { a as ownRecord } from "./paths-DXSHAMIa.js";
4
+ import { n as loadPrincipalByIdentity } from "./principal-source-pHneukrx.js";
5
+ import { t as deliveryEvent } from "./delivery-event-xX4obB8F.js";
6
+ import { n as CLOUDEVENTS_CONTENT_TYPE } from "./sink-BEZSlMS_.js";
7
+ import { a as isWebhookAddress, i as isDeliveryTarget, n as isAddrSpec, r as isChatAddress, t as idempotencyKeyFor } from "./target-Bw37TFNA.js";
8
+ //#region src/delivery/memory-transport.ts
9
+ /** An in-process transport for tests and examples: it records what it would have sent. */
10
+ function memoryDeliveryTransport(channel, options = {}) {
11
+ const deliveries = [];
12
+ return Object.freeze({
13
+ channel,
14
+ name: "memory",
15
+ deliveries,
16
+ deliver(target, message, transportOptions) {
17
+ if (!isDeliveryTarget(target, channel)) return {
18
+ status: "failed",
19
+ cause: "invalid-recipient",
20
+ retryable: false
21
+ };
22
+ const result = options.respond?.(target, message) ?? { status: "sent" };
23
+ if (result.status === "sent") deliveries.push(Object.freeze({
24
+ target,
25
+ message,
26
+ options: transportOptions
27
+ }));
28
+ return result;
29
+ }
30
+ });
31
+ }
32
+ //#endregion
33
+ //#region src/delivery/email.ts
34
+ /** RFC 5322 `field-name`: printable US-ASCII except the colon. */
35
+ const FIELD_NAME = /^[!-9;-~]{1,76}$/u;
36
+ const NAME_ADDR = /^([^<>]*)<([^<>]+)>$/u;
37
+ /** Fields the router owns, compared lower-cased. */
38
+ const ROUTER_FIELDS = /* @__PURE__ */ new Set([
39
+ "auto-submitted",
40
+ "list-unsubscribe",
41
+ "list-unsubscribe-post"
42
+ ]);
43
+ /** Fields that would add recipients or rewrite the envelope past the recipient check. */
44
+ const ENVELOPE_FIELDS = /* @__PURE__ */ new Set([
45
+ "to",
46
+ "cc",
47
+ "bcc",
48
+ "from",
49
+ "sender",
50
+ "reply-to",
51
+ "subject",
52
+ "return-path",
53
+ "resent-to",
54
+ "resent-cc",
55
+ "resent-bcc"
56
+ ]);
57
+ /** An unfolded field body: no CR, LF or other control character but tab. */
58
+ function isFieldBody(value) {
59
+ for (const char of value) {
60
+ const code = char.codePointAt(0) ?? 0;
61
+ if (code < 32 && code !== 9 || code === 127) return false;
62
+ }
63
+ return true;
64
+ }
65
+ function fail(reason) {
66
+ return {
67
+ ok: false,
68
+ reason
69
+ };
70
+ }
71
+ function isMailbox(value) {
72
+ const named = NAME_ADDR.exec(value.trim());
73
+ return named === null ? isAddrSpec(value) : isAddrSpec(named[2]?.trim() ?? "");
74
+ }
75
+ function unsubscribeFor(message, target) {
76
+ const unsubscribe = message.unsubscribe;
77
+ return typeof unsubscribe === "function" ? unsubscribe(target) : unsubscribe;
78
+ }
79
+ function unsubscribeHeaders(unsubscribe) {
80
+ let url;
81
+ try {
82
+ url = new URL(unsubscribe?.url ?? "");
83
+ } catch {
84
+ return "a notification needs an https unsubscribe url (RFC 8058)";
85
+ }
86
+ if (url.protocol !== "https:") return "a notification needs an https unsubscribe url (RFC 8058)";
87
+ const mailto = unsubscribe?.mailto;
88
+ if (mailto !== void 0 && !isAddrSpec(mailto)) return "unsubscribe mailto is not an addr-spec";
89
+ return {
90
+ "List-Unsubscribe": mailto === void 0 ? `<${url.href}>` : `<${url.href}>, <mailto:${mailto}>`,
91
+ "List-Unsubscribe-Post": "List-Unsubscribe=One-Click"
92
+ };
93
+ }
94
+ /**
95
+ * The email a transport sends to `target`: `from` resolved, the caller's
96
+ * headers checked, `Auto-Submitted: auto-generated` (RFC 3834) on every
97
+ * message, and the RFC 2369 / RFC 8058 unsubscribe pair on `notification`
98
+ * only. A message that cannot be sent as given returns the reason.
99
+ */
100
+ function outgoingEmail(message, target, defaultFrom) {
101
+ const from = message.from ?? defaultFrom;
102
+ if (from === void 0 || !isFieldBody(from) || !isMailbox(from)) return fail("from is not a mailbox");
103
+ if (message.replyTo !== void 0 && !isAddrSpec(message.replyTo)) return fail("replyTo is not an addr-spec");
104
+ if (typeof message.subject !== "string" || message.subject.trim() === "" || !isFieldBody(message.subject)) return fail("subject is empty or has a line break");
105
+ if (typeof message.text !== "string" || message.text === "") return fail("text is empty");
106
+ const headers = { "Auto-Submitted": "auto-generated" };
107
+ for (const [name, value] of Object.entries(message.headers ?? {})) {
108
+ const lower = name.toLowerCase();
109
+ if (!FIELD_NAME.test(name) || typeof value !== "string" || !isFieldBody(value)) return fail(`header ${JSON.stringify(name)} is not a single-line field`);
110
+ if (ENVELOPE_FIELDS.has(lower)) return fail(`header ${name} is set through the message, not headers`);
111
+ if (!ROUTER_FIELDS.has(lower)) headers[name] = value;
112
+ }
113
+ if (message.category === "notification") {
114
+ const pair = unsubscribeHeaders(unsubscribeFor(message, target));
115
+ if (typeof pair === "string") return fail(pair);
116
+ Object.assign(headers, pair);
117
+ }
118
+ return {
119
+ ok: true,
120
+ email: Object.freeze(compact({
121
+ from,
122
+ replyTo: message.replyTo,
123
+ subject: message.subject,
124
+ text: message.text,
125
+ html: message.html,
126
+ category: message.category,
127
+ headers: Object.freeze(headers)
128
+ }))
129
+ };
130
+ }
131
+ //#endregion
132
+ //#region src/delivery/router.ts
133
+ const CHANNELS = /* @__PURE__ */ new Set([
134
+ "email",
135
+ "chat",
136
+ "webhook"
137
+ ]);
138
+ function optionalString(value) {
139
+ if (value === void 0) return;
140
+ return typeof value === "string" && value !== "" ? value : null;
141
+ }
142
+ /** The recipient in the form its channel compares, or `null` when it is malformed. */
143
+ function checkRecipient(value) {
144
+ const record = ownRecord(value);
145
+ const channel = record?.["channel"];
146
+ const raw = record?.["address"];
147
+ if (record === void 0 || typeof channel !== "string" || !CHANNELS.has(channel) || typeof raw !== "string") return null;
148
+ const principal = optionalString(record["principal"]);
149
+ const provider = optionalString(record["provider"]);
150
+ const workspace = optionalString(record["workspace"]);
151
+ if (principal === null || provider === null || workspace === null) return null;
152
+ const typed = channel;
153
+ const address = typed === "email" ? raw.trim().toLowerCase() : raw;
154
+ if (!(typed === "email" ? isAddrSpec(address) : typed === "chat" ? isChatAddress(address) && (principal !== void 0 || provider !== void 0) : isWebhookAddress(address) && principal !== void 0)) return null;
155
+ return compact({
156
+ channel: typed,
157
+ address,
158
+ principal,
159
+ provider,
160
+ workspace,
161
+ trusted: principal === void 0 && record["trusted"] === true
162
+ });
163
+ }
164
+ function denialReason(decision) {
165
+ switch (decision.outcome) {
166
+ case "granted": return "granted";
167
+ case "approval-required": return "approval-required";
168
+ case "denied": return decision.denials[0]?.reason ?? "no-grant";
169
+ default: return decision;
170
+ }
171
+ }
172
+ const TRANSPORT_CAUSES = /* @__PURE__ */ new Set([
173
+ "invalid-recipient",
174
+ "invalid-message",
175
+ "rate-limited",
176
+ "quota-exceeded",
177
+ "unauthorized",
178
+ "unavailable",
179
+ "suppressed",
180
+ "rejected"
181
+ ]);
182
+ function isTransportCause(value) {
183
+ return typeof value === "string" && TRANSPORT_CAUSES.has(value);
184
+ }
185
+ function resultOf(value) {
186
+ const record = ownRecord(value);
187
+ if (record?.["status"] === "sent") {
188
+ const providerId = record["providerId"];
189
+ return typeof providerId === "string" && providerId !== "" ? {
190
+ status: "sent",
191
+ providerId
192
+ } : { status: "sent" };
193
+ }
194
+ if (record?.["status"] === "failed") {
195
+ const cause = record["cause"];
196
+ const reason = record["reason"];
197
+ return compact({
198
+ cause: isTransportCause(cause) ? cause : "rejected",
199
+ retryable: record["retryable"] === true,
200
+ reason: typeof reason === "string" ? reason : void 0
201
+ });
202
+ }
203
+ return {
204
+ cause: "unavailable",
205
+ retryable: true,
206
+ reason: "transport returned no result"
207
+ };
208
+ }
209
+ const THREW = Object.freeze({
210
+ cause: "unavailable",
211
+ retryable: true,
212
+ reason: "transport threw"
213
+ });
214
+ async function sendOne(ready) {
215
+ try {
216
+ return ready.finish(resultOf(await ready.transport.deliver(ready.item.target, ready.item.message, ready.item.options)));
217
+ } catch {
218
+ return ready.finish(THREW);
219
+ }
220
+ }
221
+ async function sendBatch(transport, batch) {
222
+ let results = [];
223
+ try {
224
+ results = await transport.deliverBatch?.(batch.map((ready) => ready.item)) ?? [];
225
+ } catch {
226
+ return batch.map((ready) => ready.finish(THREW));
227
+ }
228
+ return batch.map((ready, index) => ready.finish(results.length === batch.length ? resultOf(results[index]) : {
229
+ cause: "unavailable",
230
+ retryable: true,
231
+ reason: "batch returned the wrong number of results"
232
+ }));
233
+ }
234
+ /**
235
+ * Sends every ready item: one batch call per `batchSize` items for a
236
+ * transport with `deliverBatch`, one `deliver` call each otherwise. Events
237
+ * keep recipient order.
238
+ */
239
+ async function send(prepared) {
240
+ const events = prepared.map((entry) => "transport" in entry ? void 0 : entry);
241
+ const groups = /* @__PURE__ */ new Map();
242
+ for (const [index, entry] of prepared.entries()) if ("transport" in entry) {
243
+ const group = groups.get(entry.transport) ?? [];
244
+ group.push(index);
245
+ groups.set(entry.transport, group);
246
+ }
247
+ const ready = (index) => prepared[index];
248
+ await Promise.all([...groups].map(async ([transport, indexes]) => {
249
+ if (transport.deliverBatch === void 0 || indexes.length < 2) {
250
+ await Promise.all(indexes.map(async (index) => {
251
+ events[index] = await sendOne(ready(index));
252
+ }));
253
+ return;
254
+ }
255
+ const size = Math.max(1, Math.min(transport.batchSize ?? 100, 1e3));
256
+ for (let start = 0; start < indexes.length; start += size) {
257
+ const chunk = indexes.slice(start, start + size);
258
+ const sent = await sendBatch(transport, chunk.map(ready));
259
+ for (const [offset, index] of chunk.entries()) events[index] = sent[offset];
260
+ }
261
+ }));
262
+ return events;
263
+ }
264
+ /** Routes checked recipients to channel transports and records a delivery event for each. */
265
+ function createPermDock(_policy, options) {
266
+ const source = options.source ?? "permdock";
267
+ const decideRecipient = async (permdock, checked, permission, row) => {
268
+ if (checked.principal !== void 0) return {
269
+ decision: await permdock.decideFor(checked.principal, permission, row),
270
+ principal: checked.principal
271
+ };
272
+ const kind = checked.channel;
273
+ const linked = await loadPrincipalByIdentity(options.principals, compact({
274
+ kind,
275
+ provider: kind === "chat" ? checked.provider : void 0,
276
+ value: checked.address,
277
+ workspace: kind === "chat" ? checked.workspace : void 0
278
+ }));
279
+ if (linked !== null) return {
280
+ decision: await permdock.decideFor(linked.id, permission, row),
281
+ principal: linked.id
282
+ };
283
+ if (!checked.trusted) return {
284
+ cause: "unlinked",
285
+ retryable: false,
286
+ reason: "no principal is linked to the address"
287
+ };
288
+ return { decision: permdock.decide(permission, row, {
289
+ call: "can",
290
+ adapter: "delivery"
291
+ }) };
292
+ };
293
+ const prepare = async (permdock, recipient, permission, row, messages, id, base) => {
294
+ const checked = checkRecipient(recipient);
295
+ const rawChannel = ownRecord(recipient)?.["channel"];
296
+ const channel = checked?.channel ?? (rawChannel === "chat" || rawChannel === "webhook" ? rawChannel : "email");
297
+ const key = idempotencyKeyFor(id, channel, JSON.stringify([
298
+ checked?.principal ?? null,
299
+ checked?.provider ?? null,
300
+ checked?.workspace ?? null,
301
+ checked?.address ?? null
302
+ ]));
303
+ const category = channel === "email" ? messages.email?.category : void 0;
304
+ let principal = checked?.principal;
305
+ let trusted = false;
306
+ let provider;
307
+ const event = (operation, extra = {}) => deliveryEvent(compact({
308
+ source,
309
+ operation,
310
+ channel,
311
+ delivery: {
312
+ id,
313
+ key
314
+ },
315
+ recipient: principal === void 0 && !trusted ? void 0 : compact({
316
+ principal: principal === void 0 ? void 0 : { id: principal },
317
+ trusted: trusted ? true : void 0
318
+ }),
319
+ ...base,
320
+ category,
321
+ provider,
322
+ ...extra
323
+ }));
324
+ const fail = (failure) => event("failed", compact({
325
+ cause: failure.cause,
326
+ retryable: failure.retryable,
327
+ reason: failure.reason
328
+ }));
329
+ if (checked === null) return fail({
330
+ cause: "invalid-recipient",
331
+ retryable: false,
332
+ reason: "recipient is malformed"
333
+ });
334
+ const transport = options.transports[checked.channel];
335
+ if (transport === void 0) return fail({
336
+ cause: "no-transport",
337
+ retryable: false
338
+ });
339
+ const message = messages[checked.channel];
340
+ if (message === void 0) return fail({
341
+ cause: "no-message",
342
+ retryable: false
343
+ });
344
+ let decided;
345
+ try {
346
+ decided = await decideRecipient(permdock, checked, permission, row);
347
+ } catch {
348
+ return fail({
349
+ cause: "denied",
350
+ retryable: false,
351
+ reason: "closure-error"
352
+ });
353
+ }
354
+ if (!("decision" in decided)) return fail(decided);
355
+ principal = decided.principal;
356
+ trusted = decided.principal === void 0;
357
+ if (decided.decision.outcome !== "granted") return fail({
358
+ cause: "denied",
359
+ retryable: false,
360
+ reason: denialReason(decided.decision)
361
+ });
362
+ const target = Object.freeze(compact({
363
+ channel: checked.channel,
364
+ address: checked.address,
365
+ principal,
366
+ provider: checked.provider,
367
+ workspace: checked.workspace,
368
+ trusted: trusted ? true : void 0,
369
+ decision: decided.decision
370
+ }));
371
+ let outgoing;
372
+ if (checked.channel === "email") try {
373
+ const built = outgoingEmail(message, target, options.from ?? options.transports.email?.from);
374
+ if (!built.ok) return fail({
375
+ cause: "invalid-message",
376
+ retryable: false,
377
+ reason: built.reason
378
+ });
379
+ outgoing = built.email;
380
+ } catch {
381
+ return fail({
382
+ cause: "invalid-message",
383
+ retryable: false,
384
+ reason: "unsubscribe threw"
385
+ });
386
+ }
387
+ else outgoing = message;
388
+ provider = { name: transport.name };
389
+ return {
390
+ transport,
391
+ item: Object.freeze({
392
+ target,
393
+ message: outgoing,
394
+ options: Object.freeze({
395
+ idempotencyKey: key,
396
+ delivery: id
397
+ })
398
+ }),
399
+ finish(result) {
400
+ if ("status" in result && result.status === "sent") {
401
+ provider = compact({
402
+ name: transport.name,
403
+ id: result.providerId
404
+ });
405
+ return event("sent");
406
+ }
407
+ return fail(result);
408
+ }
409
+ };
410
+ };
411
+ return Object.freeze({ async deliver(permdock, target, row, recipients, messages, deliverOptions = {}) {
412
+ const permission = "permission" in target ? target.permission : target;
413
+ const id = deliverOptions.id ?? `dlv_${globalThis.crypto.randomUUID()}`;
414
+ const base = compact({
415
+ permission: permission.key,
416
+ tenant: permdock.subject.principal?.tenant,
417
+ approval: deliverOptions.approval
418
+ });
419
+ const events = await send(await Promise.all(recipients.map((recipient) => prepare(permdock, recipient, permission, row, messages, id, base))));
420
+ try {
421
+ await options.sink?.write(events);
422
+ } catch {}
423
+ const sent = events.filter((entry) => entry.operation === "sent").length;
424
+ return freezeDeep({
425
+ id,
426
+ events,
427
+ sent,
428
+ failed: events.length - sent
429
+ });
430
+ } });
431
+ }
432
+ //#endregion
433
+ //#region src/delivery/webhook-transport.ts
434
+ function failed(cause, retryable, reason) {
435
+ return {
436
+ status: "failed",
437
+ cause,
438
+ retryable,
439
+ reason
440
+ };
441
+ }
442
+ function fromStatus(status) {
443
+ if (status >= 200 && status < 300) return { status: "sent" };
444
+ if (status === 429) return failed("rate-limited", true, `HTTP ${status}`);
445
+ if (status === 408 || status >= 500) return failed("unavailable", true, `HTTP ${status}`);
446
+ if (status === 401 || status === 403) return failed("unauthorized", false, `HTTP ${status}`);
447
+ return failed("rejected", false, `HTTP ${status}`);
448
+ }
449
+ /**
450
+ * Posts each CloudEvent to the target's https endpoint as
451
+ * `application/cloudevents+json`, signed with the Standard Webhooks
452
+ * headers. `webhook-id` is the idempotency key, so a retry repeats it and
453
+ * the receiver drops the duplicate. Redirects are not followed.
454
+ */
455
+ function webhookTransport(signer, options = {}) {
456
+ const timeout = options.timeout ?? 1e4;
457
+ return Object.freeze({
458
+ channel: "webhook",
459
+ name: "webhook",
460
+ async deliver(target, message, transportOptions) {
461
+ if (!isDeliveryTarget(target, "webhook") || !isWebhookAddress(target.address)) return {
462
+ status: "failed",
463
+ cause: "invalid-recipient",
464
+ retryable: false
465
+ };
466
+ let body;
467
+ try {
468
+ body = JSON.stringify(message.event);
469
+ } catch {
470
+ return {
471
+ status: "failed",
472
+ cause: "invalid-message",
473
+ retryable: false
474
+ };
475
+ }
476
+ const headers = await signer.sign({
477
+ id: transportOptions.idempotencyKey,
478
+ body
479
+ });
480
+ const send = options.fetch ?? globalThis.fetch;
481
+ try {
482
+ return fromStatus((await send(target.address, {
483
+ method: "POST",
484
+ headers: {
485
+ ...headers,
486
+ "content-type": CLOUDEVENTS_CONTENT_TYPE
487
+ },
488
+ body,
489
+ redirect: "manual",
490
+ signal: AbortSignal.timeout(timeout)
491
+ })).status);
492
+ } catch {
493
+ return failed("unavailable", true, "request failed");
494
+ }
495
+ }
496
+ });
497
+ }
498
+ //#endregion
499
+ export { createPermDock as n, memoryDeliveryTransport as r, webhookTransport as t };
@@ -0,0 +1,40 @@
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
+ import { t as assertAppData } from "./app-data-MuyzVqX8.js";
3
+ import { d as isoNow } from "./time-DkWjdL98.js";
4
+ import { n as requireEventInstant } from "./event-time-CsegxXxB.js";
5
+ //#region src/core/delivery-event.ts
6
+ /**
7
+ * A `delivery` sink event. Throws a `TypeError` when `cause` or `retryable`
8
+ * is set on an operation other than `failed`, and a `RangeError` for a
9
+ * malformed `at`.
10
+ */
11
+ function checkedX(x) {
12
+ assertAppData(x, "x of a delivery event");
13
+ return x;
14
+ }
15
+ function deliveryEvent(input) {
16
+ if (input.operation !== "failed" && (input.cause !== void 0 || input.retryable !== void 0)) throw new TypeError("PermDock: cause and retryable belong on failed delivery events only");
17
+ return compact({
18
+ type: "delivery",
19
+ at: requireEventInstant(input.at, "at") ?? isoNow(),
20
+ source: input.source,
21
+ operation: input.operation,
22
+ channel: input.channel,
23
+ delivery: {
24
+ id: input.delivery.id,
25
+ key: input.delivery.key
26
+ },
27
+ recipient: input.recipient,
28
+ permission: input.permission,
29
+ tenant: input.tenant,
30
+ category: input.category,
31
+ approval: input.approval,
32
+ provider: input.provider,
33
+ cause: input.cause,
34
+ retryable: input.retryable,
35
+ reason: input.reason,
36
+ x: input.x === void 0 ? void 0 : checkedX(input.x)
37
+ });
38
+ }
39
+ //#endregion
40
+ export { deliveryEvent as t };
@@ -0,0 +1,19 @@
1
+ import { Nn as Decision } from "./policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "./vocabulary-D6lPdb4Z.js";
3
+ //#region src/agent/denied-text.d.ts
4
+ /** What an agent adapter's `deniedText` receives: the refusal and the text PermDock wrote for it. */
5
+ type DeniedTextEvent = {
6
+ readonly decision: Exclude<Decision, {
7
+ readonly outcome: "granted";
8
+ }> | null;
9
+ readonly permission: Permission | undefined;
10
+ readonly text: string;
11
+ };
12
+ /**
13
+ * Replaces the human-readable text of a refusal, and nothing else: the
14
+ * outcome, `isError`, the structured content and the approval token stay.
15
+ * `undefined` keeps PermDock's text.
16
+ */
17
+ type DeniedText = (event: DeniedTextEvent) => string | undefined;
18
+ //#endregion
19
+ export { DeniedTextEvent as n, DeniedText as t };
@@ -1,5 +1,5 @@
1
- import { Qn as DeniedDecision, Yn as Decision, Zn as DenialReason } from "./policy-IB6yxpC3.js";
2
- import { f as Permission } from "./permissions-DttnqqxC.js";
1
+ import { In as DenialReason, Ln as DeniedDecision, Nn as Decision } from "./policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "./vocabulary-D6lPdb4Z.js";
3
3
  //#region src/core/describe.d.ts
4
4
  type DecisionDescription = {
5
5
  readonly kind: "granted" | "denied" | "approval" | "tenant" | "delegation" | "server-only" | "upgrade";
@@ -30,6 +30,15 @@ type DescribeMessages = {
30
30
  };
31
31
  type DescribeOptions = {
32
32
  readonly messages?: DescribeMessages;
33
+ /**
34
+ * The permission the decision is about. Its `meta.title` replaces the key in
35
+ * the `granted` and `approval` text, and is what the message functions get.
36
+ */
37
+ readonly permission?: Pick<Permission, "key"> & {
38
+ readonly meta?: {
39
+ readonly title?: string;
40
+ };
41
+ };
33
42
  };
34
43
  declare function describe(decision: Decision, options?: DescribeOptions): DecisionDescription;
35
44
  //#endregion
@@ -1,5 +1,5 @@
1
- import { i as flattenApprovers } from "./approvers-DT4AVyIg.js";
2
- import { r as requiredPlans } from "./problem-details-_AMOYz-w.js";
1
+ import { i as flattenApprovers } from "./approvers-CqPOLD-o.js";
2
+ import { r as requiredPlans } from "./problem-details-cn5X30gZ.js";
3
3
  //#region src/core/describe.ts
4
4
  const TENANT_REASONS = /* @__PURE__ */ new Set([
5
5
  "tenant-mismatch",
@@ -7,7 +7,11 @@ const TENANT_REASONS = /* @__PURE__ */ new Set([
7
7
  "expired-membership",
8
8
  "scope"
9
9
  ]);
10
- const DELEGATION_REASONS = /* @__PURE__ */ new Set(["not-delegated", "no-delegation"]);
10
+ const DELEGATION_REASONS = /* @__PURE__ */ new Set([
11
+ "not-delegated",
12
+ "no-delegation",
13
+ "agent-tool-not-delegated"
14
+ ]);
11
15
  function labelGrantee(grantee) {
12
16
  switch (grantee.kind) {
13
17
  case "role": return grantee.role;
@@ -51,9 +55,10 @@ function approvalDetail(permission, labels) {
51
55
  }
52
56
  function describe(decision, options) {
53
57
  const messages = options?.messages;
58
+ const labelOf = (key) => options?.permission?.key === key ? options.permission.meta?.title ?? key : key;
54
59
  const titleOf = (kind) => messages?.titles?.[kind] ?? TITLES[kind];
55
60
  if (decision.outcome === "granted") {
56
- const { permission } = decision.matched;
61
+ const permission = labelOf(decision.matched.permission);
57
62
  return {
58
63
  kind: "granted",
59
64
  title: titleOf("granted"),
@@ -62,7 +67,7 @@ function describe(decision, options) {
62
67
  };
63
68
  }
64
69
  if (decision.outcome === "approval-required") {
65
- const { permission } = decision.grant;
70
+ const permission = labelOf(decision.grant.permission);
66
71
  const labels = approvers(decision.grant.approval);
67
72
  return {
68
73
  kind: "approval",