permdock 0.4.0 → 0.6.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 (515) 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-DCYe60Pi.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-DvSSPQJX.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-p1PGoVjb.js +995 -0
  18. package/dist/arazzo-41WuzHou.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.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-DabClFLQ.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-BNM3TtDo.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-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
  34. package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -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-Bu_eDqYw.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-Drg-1YhL.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-BoWglDPI.js +1 -0
  48. package/dist/catalog-DZVbrF-z.js +52 -0
  49. package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.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-ytQ3uviA.js +87 -0
  68. package/dist/codemod-5mpSpnUY.js +37 -0
  69. package/dist/codemod-ua2hHy7w.js +2084 -0
  70. package/dist/collect-Ci6akVwH.js +55 -0
  71. package/dist/collect-D7eQDffE.js +1 -0
  72. package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
  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-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
  77. package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  78. package/dist/completion-BTFrHZhX.js +143 -0
  79. package/dist/config-Bj2Ixq3d.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-B30OMUOJ.d.ts +107 -0
  87. package/dist/create-CBMmFie-.d.ts +138 -0
  88. package/dist/create-CGm28gyI.js +130 -0
  89. package/dist/create-CQWIpUG-.js +403 -0
  90. package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
  91. package/dist/create-D_NmPOdH.d.ts +110 -0
  92. package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-j6-rc37o.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-CiFQNuMV.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.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-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
  104. package/dist/diff-CmuSD3vc.js +37 -0
  105. package/dist/doctor-3ZqNHX_G.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.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-CWTY6uih.js +143 -0
  116. package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
  117. package/dist/evaluate-CNClBvcj.js +1785 -0
  118. package/dist/evaluations-C_1vdSZc.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.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-DD_gfmrC.js +120 -0
  129. package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
  130. package/dist/fields-OYG_JR78.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-CTCMsFZk.js} +55 -52
  135. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  136. package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.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-CBYVMjwh.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-B46-5LYE.js +315 -0
  146. package/dist/hosted-BPk51-kX.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-wyqXUyjm.js} +190 -53
  152. package/dist/index-B8YjkEZ4.d.ts +210 -0
  153. package/dist/index-C-6Letxg.d.ts +431 -0
  154. package/dist/index-CaxrMD1A.d.ts +1 -0
  155. package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
  156. package/dist/index-Cp_ilKi1.d.ts +91 -0
  157. package/dist/index-CueFnxQc.d.ts +110 -0
  158. package/dist/index-DuWxc5dt.d.ts +909 -0
  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-BsVpyGIk.d.ts} +2 -2
  164. package/dist/instance-snapshot-BOEhcqIF.js +601 -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-D0NVb1cK.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-dvL2XEe1.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-Dr70oA_3.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-CIq4-E9F.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-C4dDTVEd.js +138 -0
  205. package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-X0VM7F3m.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-1im__-08.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-DqaJNJPn.js} +1045 -153
  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-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
  219. package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +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-BrAscV28.js +868 -0
  227. package/dist/permdock-SV8ZINYT.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-BPxlwVhN.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
  232. package/dist/policies-DP2nqRoF.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
  235. package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
  238. package/dist/postgrest-CEgRbefE.d.ts +100 -0
  239. package/dist/postgrest-DAjUkF9w.js +575 -0
  240. package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
  241. package/dist/powersync-DISt6SUe.js +62 -0
  242. package/dist/powersync-MMJ2mI2q.js +1 -0
  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-B45V5d2b.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-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
  255. package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
  256. package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
  259. package/dist/pull-CvpINcMK.js +1 -0
  260. package/dist/pull-jEwbf80J.js +256 -0
  261. package/dist/push-BD4f15co.js +116 -0
  262. package/dist/pushed-policy-CqtxkV4G.js +238 -0
  263. package/dist/pushed-policy-DCW91KQU.d.ts +57 -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 +29 -25
  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-Bkm-Ne4l.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.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-BAqP4q66.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
  287. package/dist/run-CUKuz0A8.js +723 -0
  288. package/dist/run-DDwUaJDU.js +1 -0
  289. package/dist/run-ticket-DocwaTKn.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-BCXRuXca.js} +16 -14
  293. package/dist/scan-qvOe0hS3.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-C3WXAHZj.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-4-eQIRWf.d.ts +225 -0
  309. package/dist/sink-BEZSlMS_.js +957 -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-B7DkYg6g.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-PXI-vGpY.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-Xc4zkszI.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-Cu2m75uo.js +1860 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  326. package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
  330. package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
  331. package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.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-By_frk3U.js +92 -0
  342. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
  343. package/dist/supabase-hook-CCw5m35C.js +1 -0
  344. package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
  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-8RnwUAvE.d.ts +107 -0
  376. package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
  377. package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
  378. package/dist/types-BtHtcKMr.d.ts +157 -0
  379. package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
  380. package/dist/types-C791HFu9.d.ts +332 -0
  381. package/dist/types-C863OQiR.d.ts +57 -0
  382. package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
  383. package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
  384. package/dist/types-C_IiEs64.d.ts +65 -0
  385. package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
  388. package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
  389. package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CRVl9V3t.js +32 -0
  393. package/dist/usage-CZpSQP6L.js +1 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.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-BaAKx7t6.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-CN8H_9UF.d.ts} +67 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-B986w1oK.d.ts +36 -0
  406. package/dist/waiter-BGUtGYoU.js +67 -0
  407. package/dist/watch--ovlPOc0.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-vea54PRw.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-C9vfEphl.js +306 -0
  412. package/dist/who-can-DWBAcaCQ.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-C5jC6sKI.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 +10 -9
  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 +6 -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/index-UdVQgq48.d.ts +0 -550
  490. package/dist/load-B_shHrmd.js +0 -2
  491. package/dist/manifest-BngWKryL.js +0 -770
  492. package/dist/may-use-BOn_dR_w.js +0 -78
  493. package/dist/openapi-DcQ1Kg40.js +0 -164
  494. package/dist/ownership-BgnbOJFT.js +0 -851
  495. package/dist/permdock-L26udHSk.js +0 -3646
  496. package/dist/powersync-BFSbSElQ.js +0 -62
  497. package/dist/powersync-DCDgZgfZ.js +0 -2
  498. package/dist/rls-55DQTuf5.js +0 -250
  499. package/dist/run-DMcNW_8T.js +0 -174
  500. package/dist/server-ZYEHtNHS.js +0 -268
  501. package/dist/sink-BTtmfPnE.js +0 -141
  502. package/dist/sink-CPN4zLfs.d.ts +0 -104
  503. package/dist/skills-Dle4ZoLF.js +0 -56
  504. package/dist/snapshot-Dc9CHPME.js +0 -1078
  505. package/dist/src-Bb7no-hS.js +0 -639
  506. package/dist/subject-C6dLxqHU.js +0 -24
  507. package/dist/supabase-Dbqr141s.js +0 -83
  508. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  509. package/dist/thenable-QSmvt-vZ.js +0 -65
  510. package/dist/types-C0dee0Qf.d.ts +0 -197
  511. package/dist/types-DvupZE0w.d.ts +0 -9
  512. package/dist/usage-4G6t643F.js +0 -42
  513. package/dist/usage-iFLJ0-rr.js +0 -2
  514. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  515. package/dist/watch-C8TpsAl4.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 };
@@ -1,7 +1,7 @@
1
- import { ir as Decision } from "./policy-types-sp9P1iIV.js";
2
- import { d as Permission } from "./permission-types-Dg39z9Kv.js";
1
+ import { Nn as Decision } from "./policy-types-n0uRTsW8.js";
2
+ import { w as Permission } from "./vocabulary-CN8H_9UF.js";
3
3
  //#region src/agent/denied-text.d.ts
4
- /** What an agent adapter's `onDenied` receives: the refusal and the text PermDock wrote for it. */
4
+ /** What an agent adapter's `deniedText` receives: the refusal and the text PermDock wrote for it. */
5
5
  type DeniedTextEvent = {
6
6
  readonly decision: Exclude<Decision, {
7
7
  readonly outcome: "granted";
@@ -14,6 +14,6 @@ type DeniedTextEvent = {
14
14
  * outcome, `isError`, the structured content and the approval token stay.
15
15
  * `undefined` keeps PermDock's text.
16
16
  */
17
- type OnDeniedText = (event: DeniedTextEvent) => string | undefined;
17
+ type DeniedText = (event: DeniedTextEvent) => string | undefined;
18
18
  //#endregion
19
- export { OnDeniedText as n, DeniedTextEvent as t };
19
+ export { DeniedTextEvent as n, DeniedText as t };
@@ -1,5 +1,5 @@
1
- import { cr as DeniedDecision, ir as Decision, sr as DenialReason } from "./policy-types-sp9P1iIV.js";
2
- import { d as Permission } from "./permission-types-Dg39z9Kv.js";
1
+ import { In as DenialReason, Ln as DeniedDecision, Nn as Decision } from "./policy-types-n0uRTsW8.js";
2
+ import { w as Permission } from "./vocabulary-CN8H_9UF.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";
@@ -1,5 +1,5 @@
1
1
  import { i as flattenApprovers } from "./approvers-CqPOLD-o.js";
2
- import { r as requiredPlans } from "./problem-details-DECUnXAn.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;