permdock 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/README.md +37 -35
  2. package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
  3. package/dist/a2a/index.d.ts +8 -6
  4. package/dist/a2a/index.js +21 -31
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -23
  10. package/dist/ai-sdk/index.js +38 -21
  11. package/dist/app-data-MuyzVqX8.js +60 -0
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  19. package/dist/arazzo-B6lebmiQ.js +36 -0
  20. package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
  21. package/dist/args-IIolxxKA.js +197 -0
  22. package/dist/astro/index.d.ts +43 -0
  23. package/dist/astro/index.js +27 -0
  24. package/dist/audience-Dg8XsRaO.js +55 -0
  25. package/dist/auth-DRLEizbL.js +178 -0
  26. package/dist/authzen/index.d.ts +26 -6
  27. package/dist/authzen/index.js +228 -75
  28. package/dist/automation-BMZPIVUM.d.ts +114 -0
  29. package/dist/automation-DVjOckjV.js +157 -0
  30. package/dist/better-auth/index.d.ts +8 -6
  31. package/dist/better-auth/index.js +11 -23
  32. package/dist/better-supabase/index.d.ts +438 -86
  33. package/dist/better-supabase/index.js +1027 -184
  34. package/dist/bind--9EFVYWF.d.ts +38 -0
  35. package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
  36. package/dist/body-CH5of8Ne.js +10 -0
  37. package/dist/body-text-QcXok_SI.js +52 -0
  38. package/dist/build-instance-BMnAudHn.js +52 -0
  39. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
  40. package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
  41. package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
  42. package/dist/casbin-Cr7RLtA3.js +30 -0
  43. package/dist/casbin-Dyu2gnUD.js +234 -0
  44. package/dist/casl-64gpT-8x.js +24 -0
  45. package/dist/casl-DjEDhTCP.js +299 -0
  46. package/dist/catalog/index.d.ts +74 -2
  47. package/dist/catalog/index.js +51 -2
  48. package/dist/catalog-BECMPrwc.js +100 -0
  49. package/dist/catalog-DjhMYYCq.js +1 -0
  50. package/dist/catalog-R_A__RsH.js +52 -0
  51. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
  52. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  53. package/dist/chat/index.d.ts +2 -0
  54. package/dist/chat/index.js +224 -0
  55. package/dist/chat-sdk/index.d.ts +87 -0
  56. package/dist/chat-sdk/index.js +197 -0
  57. package/dist/claims-map-7oQ3ue4X.js +13 -0
  58. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  59. package/dist/claude-agent/index.d.ts +7 -14
  60. package/dist/claude-agent/index.js +26 -30
  61. package/dist/clerk/index.d.ts +9 -8
  62. package/dist/clerk/index.js +15 -45
  63. package/dist/cli/bin.js +36 -17
  64. package/dist/cli/index.d.ts +20 -6
  65. package/dist/cli/index.js +164 -4
  66. package/dist/cloud/index.d.ts +102 -63
  67. package/dist/cloud/index.js +240 -347
  68. package/dist/cloud-CIoHNevm.js +87 -0
  69. package/dist/codemod-Bmj9dWMH.js +37 -0
  70. package/dist/codemod-Cxvvc70T.js +2084 -0
  71. package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
  72. package/dist/collect-DloHbDVa.js +55 -0
  73. package/dist/collect-FlXJlhus.js +1 -0
  74. package/dist/command-L8EstFNm.js +6 -0
  75. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  76. package/dist/compile/index.d.ts +1 -1
  77. package/dist/compile/index.js +1 -2
  78. package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
  79. package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  80. package/dist/completion-BqhRBJD8.js +143 -0
  81. package/dist/config-B46rm9sc.js +26 -0
  82. package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
  83. package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
  84. package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
  85. package/dist/constants-DcJABbLW.js +20 -0
  86. package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
  87. package/dist/convex/index.d.ts +11 -10
  88. package/dist/convex/index.js +18 -18
  89. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  90. package/dist/create-BDS7wc3y.d.ts +138 -0
  91. package/dist/create-BFfm17UA.d.ts +110 -0
  92. package/dist/create-BWRSXgOF.js +403 -0
  93. package/dist/create-C3b4B5eF.js +130 -0
  94. package/dist/create-DnrmLnLW.js +323 -0
  95. package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
  96. package/dist/credentials-DPyHmYz5.js +74 -0
  97. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  98. package/dist/delegation-DaXVdDhM.js +286 -0
  99. package/dist/delegation-input-FTxMK3ji.js +19 -0
  100. package/dist/delivery/index.d.ts +5 -0
  101. package/dist/delivery/index.js +5 -0
  102. package/dist/delivery-DCAgNyCn.js +499 -0
  103. package/dist/delivery-event-xX4obB8F.js +40 -0
  104. package/dist/denied-text-D8jDHgsl.d.ts +19 -0
  105. package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
  106. package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
  107. package/dist/device-BARQ8eYG.js +193 -0
  108. package/dist/diff-CxZo9pTq.js +37 -0
  109. package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
  110. package/dist/doctor-CxiwSfqH.js +44 -0
  111. package/dist/doctor-DFjUxf2f.js +2361 -0
  112. package/dist/drizzle/index.d.ts +5 -3
  113. package/dist/drizzle/index.js +6 -14
  114. package/dist/elysia/index.d.ts +16 -13
  115. package/dist/elysia/index.js +14 -13
  116. package/dist/env-DJZrPjRi.js +8 -0
  117. package/dist/errors-BDUwg2qC.js +27 -0
  118. package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
  119. package/dist/errors-BWXBMaKK.d.ts +11 -0
  120. package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  121. package/dist/errors-CWTY6uih.js +143 -0
  122. package/dist/evaluate-_R8QkWaf.js +1732 -0
  123. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  124. package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
  125. package/dist/eve/index.d.ts +12 -16
  126. package/dist/eve/index.js +23 -29
  127. package/dist/event-time-CsegxXxB.js +23 -0
  128. package/dist/expiry-D4_YKRKD.js +52 -0
  129. package/dist/express/index.d.ts +13 -10
  130. package/dist/express/index.js +14 -12
  131. package/dist/fastify/index.d.ts +26 -13
  132. package/dist/fastify/index.js +17 -36
  133. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  134. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  135. package/dist/fields-D9tPVUUS.js +203 -0
  136. package/dist/files-C5ZI27eV.js +124 -0
  137. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  138. package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
  139. package/dist/flags-C3DktBDY.js +86 -0
  140. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
  141. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  142. package/dist/grantee-Cn1HyUsI.js +254 -0
  143. package/dist/grantee-conditions-CcXf8hMM.js +271 -0
  144. package/dist/grantee-match-DHArqY82.js +142 -0
  145. package/dist/h3/index.d.ts +37 -0
  146. package/dist/h3/index.js +35 -0
  147. package/dist/headers-BIjfMaoC.js +8 -0
  148. package/dist/headers-CIbDTUTK.d.ts +7 -0
  149. package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
  150. package/dist/hono/index.d.ts +12 -9
  151. package/dist/hono/index.js +14 -13
  152. package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
  153. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  154. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  155. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  156. package/dist/http-DXJ37RDA.js +46 -0
  157. package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
  158. package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
  159. package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
  160. package/dist/index-BcHcPyIo.d.ts +110 -0
  161. package/dist/index-CaxrMD1A.d.ts +1 -0
  162. package/dist/index-Chrs5fQ-.d.ts +210 -0
  163. package/dist/index-CxGUswIC.d.ts +431 -0
  164. package/dist/index-D8EovfsP.d.ts +91 -0
  165. package/dist/index-DOVf7RJv.d.ts +900 -0
  166. package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
  167. package/dist/index.d.ts +20 -14
  168. package/dist/index.js +33 -23
  169. package/dist/init-DeMYsnYJ.js +96 -0
  170. package/dist/init-GG6Jh8HD.js +95 -0
  171. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  172. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  173. package/dist/instant-BluqDvyS.js +19 -0
  174. package/dist/internals-Dk8A8fX3.js +17 -0
  175. package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
  176. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  177. package/dist/jwt/index.d.ts +18 -11
  178. package/dist/jwt/index.js +166 -145
  179. package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
  180. package/dist/kysely/index.d.ts +5 -3
  181. package/dist/kysely/index.js +6 -14
  182. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  183. package/dist/load-BxEtwlBS.js +1 -0
  184. package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
  185. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  186. package/dist/login-Dfe5RlYk.js +68 -0
  187. package/dist/login-imhuwvn3.js +254 -0
  188. package/dist/manifest-C8IzW3Do.js +42 -0
  189. package/dist/manifest-CtKR3GXL.js +370 -0
  190. package/dist/manifest-json-CAGzls-C.js +9 -0
  191. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  192. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  193. package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
  194. package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
  195. package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
  196. package/dist/mcp/index.d.ts +36 -9
  197. package/dist/mcp/index.js +476 -448
  198. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
  199. package/dist/nest/index.d.ts +12 -9
  200. package/dist/nest/index.js +20 -20
  201. package/dist/next/index.d.ts +40 -20
  202. package/dist/next/index.js +37 -39
  203. package/dist/next/plugin.d.ts +1 -1
  204. package/dist/next/plugin.js +2 -2
  205. package/dist/node/index.d.ts +10 -10
  206. package/dist/node/index.js +7 -9
  207. package/dist/ocsf-BFp-PZZA.js +126 -0
  208. package/dist/openai/index.d.ts +9 -16
  209. package/dist/openai/index.js +18 -25
  210. package/dist/openapi/index.d.ts +3 -3
  211. package/dist/openapi/index.js +1 -1
  212. package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
  213. package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
  214. package/dist/openapi-ahr8rHu3.js +138 -0
  215. package/dist/operation-findings-DgATDpvh.js +36 -0
  216. package/dist/operations-CxybZErY.d.ts +59 -0
  217. package/dist/orpc/index.d.ts +13 -10
  218. package/dist/orpc/index.js +23 -20
  219. package/dist/otel/index.d.ts +3 -2
  220. package/dist/otel/index.js +53 -27
  221. package/dist/output-Dyw8fyPF.js +88 -0
  222. package/dist/output-files-B3IZJksC.js +1 -0
  223. package/dist/output-files-DhRBBE4n.js +138 -0
  224. package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
  225. package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
  226. package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
  227. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
  228. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  229. package/dist/parse-request-D_tUXG6M.js +26 -0
  230. package/dist/paths-DXSHAMIa.js +42 -0
  231. package/dist/pdp/index.d.ts +7 -3
  232. package/dist/pdp/index.js +47 -29
  233. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  234. package/dist/peer-CRvC7Hg1.js +1 -0
  235. package/dist/permdock-B9JxkBwC.js +868 -0
  236. package/dist/permdock-D7eeLJER.d.ts +502 -0
  237. package/dist/permission-registry-Br4jSNVi.js +385 -0
  238. package/dist/permissions-B-wCP5ZC.js +30 -0
  239. package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
  240. package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  241. package/dist/policies-CO1oOymN.js +295 -0
  242. package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  243. package/dist/policy-DLZJ5gAp.js +399 -0
  244. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  245. package/dist/policy-module-CTlwMvLI.js +89 -0
  246. package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
  247. package/dist/postgrest-CW0IqC-U.js +566 -0
  248. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  249. package/dist/powersync-BHfuehf3.js +62 -0
  250. package/dist/powersync-CbzkqL_M.js +1 -0
  251. package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
  252. package/dist/preset/index.d.ts +146 -0
  253. package/dist/preset/index.js +1 -0
  254. package/dist/preset-DZdU0tne.js +1768 -0
  255. package/dist/principal-source-pHneukrx.js +103 -0
  256. package/dist/prisma/index.d.ts +6 -3
  257. package/dist/prisma/index.js +6 -12
  258. package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
  259. package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  260. package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
  261. package/dist/problem-types-CJ2325SZ.js +5 -0
  262. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  263. package/dist/protected-DEPHc2xV.d.ts +38 -0
  264. package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
  265. package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
  266. package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  267. package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
  268. package/dist/pull-BgIfno6w.js +256 -0
  269. package/dist/pull-ByOks_Tg.js +1 -0
  270. package/dist/push-CmFVBOeI.js +116 -0
  271. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  272. package/dist/pushed-policy-DobP7AHI.js +238 -0
  273. package/dist/react/index.d.ts +8 -8
  274. package/dist/react/index.js +6 -6
  275. package/dist/react/provider-client.d.ts +1 -1
  276. package/dist/react/provider-client.js +1 -2
  277. package/dist/react-native/index.d.ts +24 -63
  278. package/dist/react-native/index.js +45 -27
  279. package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
  280. package/dist/relation-walk-3OyDBF0S.js +186 -0
  281. package/dist/relations-BnCWnJGI.js +163 -0
  282. package/dist/renames-CGj7YwcQ.js +175 -0
  283. package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  284. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  285. package/dist/request-context-BTRTG7OT.js +71 -0
  286. package/dist/request-context-C2_1lchh.d.ts +5 -0
  287. package/dist/request-schema-CMreVuFM.js +148 -0
  288. package/dist/resend/index.d.ts +126 -0
  289. package/dist/resend/index.js +379 -0
  290. package/dist/resource-relations-D_jw0BFx.js +243 -0
  291. package/dist/retire-CALjIQ7e.js +240 -0
  292. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  293. package/dist/rls-BA8an5Ap.js +336 -0
  294. package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
  295. package/dist/role-builder-CXbis5-X.js +623 -0
  296. package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
  297. package/dist/run-CNsApDpd.js +1 -0
  298. package/dist/run-DOfMtc9V.js +723 -0
  299. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  300. package/dist/run-ticket-sxFI6LAk.js +337 -0
  301. package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
  302. package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
  303. package/dist/scan-BOI5tJ-6.js +29 -0
  304. package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
  305. package/dist/schema-yLuBWWsh.js +130 -0
  306. package/dist/scim/index.d.ts +2 -2
  307. package/dist/scim/index.js +1 -2
  308. package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
  309. package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
  310. package/dist/server/index.d.ts +13 -134
  311. package/dist/server/index.js +13 -10
  312. package/dist/server-DqCT4CgZ.js +453 -0
  313. package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
  314. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  315. package/dist/shared-CD11nBbC.js +304 -0
  316. package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
  317. package/dist/signals-D3NcTKUS.js +32 -0
  318. package/dist/sink-BEZSlMS_.js +957 -0
  319. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  320. package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
  321. package/dist/skills-CTYwkl44.js +51 -0
  322. package/dist/snapshot-CXUWfsNy.js +269 -0
  323. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  324. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  325. package/dist/solid/index.d.ts +24 -25
  326. package/dist/solid/index.js +41 -11
  327. package/dist/solid-start/index.d.ts +52 -0
  328. package/dist/solid-start/index.js +49 -0
  329. package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
  330. package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
  331. package/dist/sql-B5T1IL83.js +55 -0
  332. package/dist/src-DLfUWFAI.js +1851 -0
  333. package/dist/ssf/index.d.ts +4 -4
  334. package/dist/ssf/index.js +440 -106
  335. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  336. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  337. package/dist/storage-C2bWdvJH.js +132 -0
  338. package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
  339. package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
  340. package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
  341. package/dist/stores-ClZUgeoP.d.ts +30 -0
  342. package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  343. package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
  344. package/dist/style-DiKWnAvn.js +1 -0
  345. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  346. package/dist/subject-BGoM5o8B.js +17 -0
  347. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  348. package/dist/supabase/index.d.ts +23 -106
  349. package/dist/supabase/index.js +5 -4
  350. package/dist/supabase/middleware.d.ts +13 -6
  351. package/dist/supabase/middleware.js +16 -11
  352. package/dist/supabase-9pqI57pW.js +92 -0
  353. package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
  354. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  355. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
  356. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  357. package/dist/support-session-C6xJQYut.js +158 -0
  358. package/dist/svelte/Protected.svelte +11 -4
  359. package/dist/svelte/index.d.ts +7 -7
  360. package/dist/svelte/index.js +26 -12
  361. package/dist/svelte/runtime.d.ts +10 -3
  362. package/dist/svelte/runtime.js +4 -3
  363. package/dist/svelte/source.d.ts +7 -7
  364. package/dist/svelte/source.js +5 -5
  365. package/dist/sveltekit/index.d.ts +51 -0
  366. package/dist/sveltekit/index.js +27 -0
  367. package/dist/tanstack-start/index.d.ts +51 -0
  368. package/dist/tanstack-start/index.js +40 -0
  369. package/dist/target-Bw37TFNA.js +51 -0
  370. package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
  371. package/dist/terminal/index.d.ts +11 -9
  372. package/dist/terminal/index.js +36 -316
  373. package/dist/testing/index.d.ts +391 -106
  374. package/dist/testing/index.js +4574 -1286
  375. package/dist/testing/saas/index.d.ts +9 -8
  376. package/dist/testing/saas/index.js +2 -2
  377. package/dist/testing/saas/permissions.d.ts +1 -1
  378. package/dist/testing/saas/permissions.js +1 -2
  379. package/dist/text-BMFRfBqc.js +8 -0
  380. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  381. package/dist/thenable-yD7SabqG.js +31 -0
  382. package/dist/time-DkWjdL98.js +71 -0
  383. package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
  384. package/dist/tool-refusal-CMLN5xhn.js +41 -0
  385. package/dist/trpc/index.d.ts +12 -9
  386. package/dist/trpc/index.js +18 -17
  387. package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
  388. package/dist/types-BNORmDM8.d.ts +172 -0
  389. package/dist/types-BjV-fqcA.d.ts +57 -0
  390. package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
  391. package/dist/types-C8-KNsFf.d.ts +107 -0
  392. package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  393. package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
  394. package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
  395. package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
  396. package/dist/types-DX0LaKTb.d.ts +157 -0
  397. package/dist/types-DiQjupG2.d.ts +332 -0
  398. package/dist/types-DqzsnlSA.js +67 -0
  399. package/dist/types-_sHy8BQf.d.ts +65 -0
  400. package/dist/types-fbZ7JEXr.d.ts +89 -0
  401. package/dist/types-tIgIeIKJ.d.ts +66 -0
  402. package/dist/unplugin/index.d.ts +1 -1
  403. package/dist/unplugin/index.js +2 -2
  404. package/dist/usage-CHOtwL19.js +1 -0
  405. package/dist/usage-DHtE8j4E.js +32 -0
  406. package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
  407. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  408. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  409. package/dist/validity-CZ7-y0Cj.js +79 -0
  410. package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
  411. package/dist/verify-DbCL9bnB.js +1770 -0
  412. package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
  413. package/dist/version-DXkYUISx.js +1 -0
  414. package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
  415. package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
  416. package/dist/vue/index.d.ts +25 -21
  417. package/dist/vue/index.js +25 -9
  418. package/dist/waiter-BGUtGYoU.js +67 -0
  419. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  420. package/dist/watch-Cb-NcaUw.js +1 -0
  421. package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
  422. package/dist/webmcp/index.d.ts +2 -2
  423. package/dist/webmcp/index.js +13 -37
  424. package/dist/where-scope-Dv-WTP-w.js +306 -0
  425. package/dist/who-can-D0QoYbEb.js +364 -0
  426. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  427. package/dist/wire-denial-C7PaVYEM.js +27 -0
  428. package/dist/workflow/index.d.ts +5 -0
  429. package/dist/workflow/index.js +223 -0
  430. package/dist/workflow-sdk/index.d.ts +56 -0
  431. package/dist/workflow-sdk/index.js +78 -0
  432. package/dist/wrap-Bd1Tejur.d.ts +15 -0
  433. package/dist/wrap-gX61EtpB.js +27 -0
  434. package/package.json +140 -41
  435. package/schemas/access-event-v1.json +118 -0
  436. package/schemas/approval-request-v1.json +34 -1
  437. package/schemas/approval-signature-v1.json +94 -0
  438. package/schemas/automation-event-v1.json +113 -0
  439. package/schemas/capability-v1.json +84 -0
  440. package/schemas/catalog-event-v1.json +87 -0
  441. package/schemas/catalog-v1.json +129 -12
  442. package/schemas/cli-commands-v1.json +164 -0
  443. package/schemas/cli-result-v1.json +96 -0
  444. package/schemas/cloud-api-v1.json +5407 -0
  445. package/schemas/connector-v1.json +408 -0
  446. package/schemas/credential-event-v1.json +81 -0
  447. package/schemas/credential-v1.json +134 -0
  448. package/schemas/decision-event-v1.json +288 -0
  449. package/schemas/delivery-event-v1.json +117 -0
  450. package/schemas/directory-event-v1.json +85 -0
  451. package/schemas/evidence-export-v1.json +54 -0
  452. package/schemas/membership-event-v1.json +93 -0
  453. package/schemas/policy-v1.json +68 -0
  454. package/schemas/pushed-policy-v1.json +236 -0
  455. package/schemas/run-v1.json +162 -0
  456. package/schemas/snapshot-v1.json +138 -0
  457. package/schemas/supabase-claims-v1.json +4 -4
  458. package/schemas/supabase-manifest-v1.json +5 -1
  459. package/schemas/support-session-v1.json +111 -0
  460. package/skills/permdock/SKILL.md +16 -12
  461. package/skills/permdock-agents/SKILL.md +40 -23
  462. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  463. package/skills/permdock-agents/references/runtimes.md +22 -18
  464. package/skills/permdock-approvals/SKILL.md +29 -13
  465. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  466. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  467. package/skills/permdock-audit/SKILL.md +3 -3
  468. package/skills/permdock-credentials/SKILL.md +5 -5
  469. package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
  470. package/skills/permdock-data/SKILL.md +6 -6
  471. package/skills/permdock-data/references/queries-and-rls.md +13 -8
  472. package/skills/permdock-data/references/relationships.md +3 -3
  473. package/skills/permdock-tenancy/SKILL.md +20 -7
  474. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  475. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  476. package/skills/permdock-wire/SKILL.md +18 -12
  477. package/skills/permdock-wire/references/adapters.md +146 -50
  478. package/skills/permdock-wire/references/policy-options.md +15 -6
  479. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  480. package/dist/approvals-DbYAuNkG.js +0 -224
  481. package/dist/arazzo-C9chp3ST.js +0 -54
  482. package/dist/bind-C_ob3LKa.d.ts +0 -25
  483. package/dist/catalog-CRW5Mx_B.js +0 -2
  484. package/dist/catalog-CYj-mX2O.js +0 -48
  485. package/dist/catalog-DWF5cYqB.js +0 -55
  486. package/dist/cloud-CfwZ39Rl.js +0 -50
  487. package/dist/cloud-DWLXO2af.js +0 -118
  488. package/dist/collect-CHB22Sx4.js +0 -83
  489. package/dist/collect-DSWOk19R.js +0 -2
  490. package/dist/commands-BeaGNj_o.js +0 -97
  491. package/dist/config-ir40y8m0.js +0 -36
  492. package/dist/create-CMwIl-w2.js +0 -253
  493. package/dist/delegation-D8pUEuce.js +0 -103
  494. package/dist/diff-C9RDjjhs.js +0 -48
  495. package/dist/doctor-Djh6JDEk.js +0 -53
  496. package/dist/doctor-DvH0IQff.js +0 -1194
  497. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  498. package/dist/duration-xK2jGFVc.js +0 -25
  499. package/dist/errors-CWfoNg9N.js +0 -47
  500. package/dist/errors-DRnGZHzF.js +0 -30
  501. package/dist/evaluation-items-CfCCejQd.js +0 -40
  502. package/dist/expiry-BoBJ8Tvc.js +0 -7
  503. package/dist/fields-BMl1RxoX.js +0 -26
  504. package/dist/grantee-Cv5Sogfv.js +0 -602
  505. package/dist/headers-BZSDieNT.js +0 -6
  506. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  507. package/dist/ids-DC4V4CFu.js +0 -18
  508. package/dist/index-0nNqHspG.d.ts +0 -6
  509. package/dist/index-BNc7Wer_.d.ts +0 -483
  510. package/dist/index-C7Tw7MaW.d.ts +0 -201
  511. package/dist/instance-options-Dhhcnm3y.js +0 -22
  512. package/dist/load-DwJUafYN.js +0 -2
  513. package/dist/manifest-iaoBXHKc.js +0 -783
  514. package/dist/map-AcxK9o_D.js +0 -147
  515. package/dist/may-use-DndQ5tQ-.js +0 -77
  516. package/dist/openapi-CQTsgKoB.js +0 -164
  517. package/dist/permdock-CbgvLnuo.js +0 -3479
  518. package/dist/permissions-DVoF6dMt.js +0 -662
  519. package/dist/policy-xyWg7QdR.js +0 -1122
  520. package/dist/powersync-CrBX8hY6.js +0 -2
  521. package/dist/powersync-DE19b9dT.js +0 -62
  522. package/dist/protected-BdnIEFkY.d.ts +0 -27
  523. package/dist/protected-xAr24FEC.d.ts +0 -40
  524. package/dist/relations-cjOL01hZ.js +0 -505
  525. package/dist/rls-P-BeBx0n.js +0 -238
  526. package/dist/rls-graph-CHwx0V8q.js +0 -435
  527. package/dist/rls-ownership-DcYlZ09B.js +0 -843
  528. package/dist/rls-shared-Cewd_-zI.js +0 -495
  529. package/dist/rls-verify-CMv9H3wV.js +0 -746
  530. package/dist/run-BWc9qqvE.js +0 -174
  531. package/dist/server-DlZ28Oz5.js +0 -268
  532. package/dist/sink-B1fZzIMf.d.ts +0 -104
  533. package/dist/sink-Bd9PSyfq.js +0 -141
  534. package/dist/skills-C5CbhhpG.js +0 -56
  535. package/dist/snapshot-Enxd0n-s.js +0 -975
  536. package/dist/sql-xdg5f4Fi.js +0 -27
  537. package/dist/src-BDwEZWrZ.js +0 -568
  538. package/dist/store-jOBYpiXC.d.ts +0 -36
  539. package/dist/stores-C0IMQrGI.d.ts +0 -52
  540. package/dist/subject-C6dLxqHU.js +0 -24
  541. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  542. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  543. package/dist/supabase-s4o9s1O1.js +0 -83
  544. package/dist/thenable-okc2xDsj.js +0 -10
  545. package/dist/types-BnIEz1sU.d.ts +0 -48
  546. package/dist/types-Bvc4oWT6.d.ts +0 -9
  547. package/dist/types-CKNSyIf_.d.ts +0 -52
  548. package/dist/types-Cq_H8N_X.d.ts +0 -197
  549. package/dist/usage-B0YuTQRO.js +0 -42
  550. package/dist/usage-DorAJiU_.js +0 -2
  551. package/dist/vocabulary-DA8a8zif.d.ts +0 -56
  552. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -1,46 +1,192 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { E as ownGet, _ as listPermissions, c as getResource } from "../permissions-DVoF6dMt.js";
3
- import { t as PROBLEM_BASE } from "../validation-error-CnjZ4t92.js";
4
- import { t as createPermDock$1 } from "../permdock-CbgvLnuo.js";
1
+ import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
2
+ import { r as ownGet } from "../paths-DXSHAMIa.js";
3
+ import { o as statusProblem } from "../problem-details-cn5X30gZ.js";
4
+ import { a as getResource, c as listPermissions } from "../permission-registry-Br4jSNVi.js";
5
+ import { t as fromWireDelegation } from "../wire-delegation-Cv3W2eaM.js";
5
6
  import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
6
- import { n as hasCredentials } from "../http-SO7qGttf.js";
7
- import { i as methodNotAllowed, l as unauthenticatedProblem, s as problemResponse, t as batchTooLarge, u as validationProblem } from "../problem-B43ztKIm.js";
8
- import { t as applyApprovalResume } from "../evaluations-tz6D9A2G.js";
9
- import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
10
- import { n as permissionLookup } from "../evaluation-items-CfCCejQd.js";
11
- import { a as endsWithPath, c as mergeItem, d as pathnameOf, f as permissionOf, g as userFromEntity, h as tenantOf, i as delegationOf, l as pageOf, m as resourceIdOf, n as UNKNOWN, o as evaluationRow, p as resourceData, r as actorOf, s as isRecord, t as UNAVAILABLE, u as paged } from "../map-AcxK9o_D.js";
7
+ import { n as readBodyText } from "../body-text-QcXok_SI.js";
8
+ import { r as hasCredentials } from "../http-BBoKefeS.js";
9
+ import { a as methodNotAllowed, c as problemResponse, d as validationProblem, n as batchTooLarge, u as unauthenticatedProblem } from "../problem-CTviyH5L.js";
10
+ import { t as bodyTooLarge } from "../body-CH5of8Ne.js";
11
+ import { n as resolveOrNull, t as buildInstance } from "../build-instance-BMnAudHn.js";
12
+ import { _ as wireResourceId, a as evaluationReasons, c as unknownSemanticProblem, g as permissionLookup, h as itemResourceData, i as evaluateBatch, l as withRequestId, n as applyApprovalResume, r as authzenMetadata, s as evaluationsSemantic, t as EVALUATIONS_SEMANTICS } from "../evaluations-DZ2CbV5k.js";
13
+ //#region src/authzen/map.ts
14
+ const UNKNOWN = {
15
+ outcome: "denied",
16
+ denials: [{
17
+ role: null,
18
+ reason: "no-grant",
19
+ detail: "unknown-permission"
20
+ }],
21
+ alternatives: []
22
+ };
23
+ const UNAVAILABLE = {
24
+ outcome: "denied",
25
+ denials: [{
26
+ role: null,
27
+ reason: "no-grant",
28
+ detail: "resource-unavailable"
29
+ }],
30
+ alternatives: []
31
+ };
32
+ function actionNameOf(item) {
33
+ if (typeof item.action?.name === "string") return item.action.name;
34
+ if (!isRecord(item.action?.properties)) return;
35
+ const scope = item.action.properties["scope"];
36
+ return typeof scope === "string" ? scope : void 0;
37
+ }
38
+ function permissionOf(lookup, item) {
39
+ return lookup(actionNameOf(item), item.resource);
40
+ }
41
+ function resourceData(item) {
42
+ return itemResourceData(item.resource);
43
+ }
44
+ /** The row id an item names; `undefined` for none and for the collection sentinel `id: "*"`. */
45
+ function resourceIdOf(item) {
46
+ return wireResourceId(item.resource?.id);
47
+ }
48
+ function userFromEntity(entity) {
49
+ if (entity === void 0) return null;
50
+ const result = {};
51
+ if (typeof entity.id === "string" || typeof entity.id === "number") result["id"] = String(entity.id);
52
+ if (isRecord(entity.properties)) for (const [key, value] of Object.entries(entity.properties)) {
53
+ if (key === "actor" || key === "delegation") continue;
54
+ result[key] = value;
55
+ }
56
+ return Object.keys(result).length === 0 ? null : result;
57
+ }
58
+ function contextOrSubject(item, name) {
59
+ return (isRecord(item.context) ? item.context[name] : void 0) ?? (isRecord(item.subject?.properties) ? item.subject.properties[name] : void 0);
60
+ }
61
+ function actorOf(item) {
62
+ const raw = contextOrSubject(item, "actor");
63
+ if (!isRecord(raw) || typeof raw["id"] !== "string") return;
64
+ const kind = typeof raw["kind"] === "string" ? raw["kind"] : "oauth-client";
65
+ return {
66
+ id: raw["id"],
67
+ kind
68
+ };
69
+ }
70
+ function delegationOf(item) {
71
+ return fromWireDelegation(contextOrSubject(item, "delegation"));
72
+ }
73
+ function tenantOf(item) {
74
+ if (!isRecord(item.context) || typeof item.context["tenant"] !== "string") return;
75
+ return item.context["tenant"];
76
+ }
77
+ function permdockContext(decision) {
78
+ switch (decision.outcome) {
79
+ case "granted": return { outcome: "granted" };
80
+ case "denied": {
81
+ const unknown = decision.denials.some((denial) => denial.detail === "unknown-permission");
82
+ return compact({
83
+ outcome: "denied",
84
+ denials: decision.denials.map((denial) => ({
85
+ role: denial.role,
86
+ reason: denial.reason
87
+ })),
88
+ reason: unknown ? "unknown-permission" : void 0
89
+ });
90
+ }
91
+ case "approval-required": return {
92
+ outcome: "approval-required",
93
+ token: decision.token
94
+ };
95
+ default: return decision;
96
+ }
97
+ }
98
+ function evaluationRow(decision, permission) {
99
+ return {
100
+ decision: decision.outcome === "granted",
101
+ context: {
102
+ permdock: permdockContext(decision),
103
+ ...evaluationReasons(decision, permission)
104
+ }
105
+ };
106
+ }
107
+ function pathnameOf(request) {
108
+ return new URL(request.url).pathname;
109
+ }
110
+ function endsWithPath(pathname, suffix) {
111
+ return pathname === suffix || pathname.endsWith(suffix);
112
+ }
113
+ /**
114
+ * One item of an `evaluations` batch with the request's top-level `subject`,
115
+ * `action`, `resource` and `context` filled in where the item omits them.
116
+ */
117
+ function mergeEvaluationItem(shared, item) {
118
+ if (!isRecord(item)) return shared;
119
+ return compact({
120
+ subject: isRecord(item["subject"]) ? item["subject"] : shared.subject,
121
+ action: isRecord(item["action"]) ? item["action"] : shared.action,
122
+ resource: isRecord(item["resource"]) ? item["resource"] : shared.resource,
123
+ context: item["context"] ?? shared.context
124
+ });
125
+ }
126
+ function pageOf(body) {
127
+ const page = isRecord(body["page"]) ? body["page"] : {};
128
+ const raw = typeof page["token"] === "string" ? page["token"] : typeof page["next_token"] === "string" ? page["next_token"] : "0";
129
+ const parsed = Math.trunc(Number(raw));
130
+ const sizeRaw = page["limit"] ?? page["size"];
131
+ const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) : 50;
132
+ return {
133
+ offset: Number.isFinite(parsed) && parsed > 0 ? parsed : 0,
134
+ size
135
+ };
136
+ }
137
+ function paged(items, offset, size) {
138
+ const slice = items.slice(offset, offset + size);
139
+ const next = offset + slice.length;
140
+ return {
141
+ results: slice,
142
+ page: {
143
+ next_token: next < items.length ? String(next) : "",
144
+ count: slice.length,
145
+ total: items.length
146
+ }
147
+ };
148
+ }
149
+ //#endregion
12
150
  //#region src/authzen/create.ts
13
151
  function notFound(detail) {
14
- return problemResponse({
15
- type: `${PROBLEM_BASE}/not-found`,
16
- title: "Not found",
17
- status: 404,
18
- detail
19
- });
152
+ return problemResponse(statusProblem(404, detail));
20
153
  }
21
154
  async function readJson(request) {
155
+ if (request.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() !== "application/json") return validationProblem("AuthZEN requests must use Content-Type: application/json");
156
+ const read = await readBodyText(request);
157
+ if (!read.ok) return read.cause === "too-large" ? bodyTooLarge() : validationProblem("AuthZEN body was not valid JSON");
22
158
  try {
23
- return await request.json();
159
+ return JSON.parse(read.text);
24
160
  } catch {
25
161
  return validationProblem("AuthZEN body was not valid JSON");
26
162
  }
27
163
  }
28
- const SEMANTICS = [
29
- "execute_all",
30
- "deny_on_first_deny",
31
- "permit_on_first_permit"
32
- ];
33
- function semanticOf(body) {
34
- const options = body["options"];
35
- const value = isRecord(options) ? options["evaluations_semantic"] : void 0;
36
- if (value === void 0) return "execute_all";
37
- return SEMANTICS.find((semantic) => semantic === value);
164
+ /**
165
+ * The 400 for a request missing a required entity or one of its required
166
+ * fields (AuthZEN 1.0 sections 5, 6.1 and 10.1.1), or `undefined`.
167
+ */
168
+ function missingProblem(body, required) {
169
+ for (const name of ["subject", "resource"]) {
170
+ const needs = required[name];
171
+ if (needs === void 0) continue;
172
+ const entity = body[name];
173
+ if (!isRecord(entity) || typeof entity["type"] !== "string") return validationProblem(`${name}.type is required`);
174
+ if (needs === "type-id" && typeof entity["id"] !== "string") return validationProblem(`${name}.id is required`);
175
+ }
176
+ if (required.action === true) {
177
+ const action = body["action"];
178
+ if (!isRecord(action) || typeof action["name"] !== "string") return validationProblem("action.name is required");
179
+ }
38
180
  }
181
+ const EVALUATION = {
182
+ subject: "type-id",
183
+ action: true,
184
+ resource: "type-id"
185
+ };
39
186
  const WELL_KNOWN = "/.well-known/authzen-configuration";
40
- function withRequestId(request, response) {
41
- const id = request.headers.get("x-request-id");
42
- if (id !== null && id !== "") response.headers.set("X-Request-ID", id);
43
- return response;
187
+ /** The name an item's action gives, for the reasons of an unknown permission. */
188
+ function actionName(item) {
189
+ return typeof item.action?.name === "string" ? item.action.name : "unknown";
44
190
  }
45
191
  const createPermDock = (policy, options) => {
46
192
  const maxEvaluations = options.maxEvaluations ?? 256;
@@ -56,24 +202,23 @@ const createPermDock = (policy, options) => {
56
202
  };
57
203
  const allowAnonymous = options.anonymous === true;
58
204
  async function authenticate(request) {
59
- let pep;
60
- try {
61
- pep = await options.subject(request);
62
- } catch {
63
- pep = null;
64
- }
205
+ const pep = await resolveOrNull(() => options.subject(request));
65
206
  if ((pep === null || pep === void 0) && !allowAnonymous) return unauthenticatedProblem(hasCredentials(request));
66
207
  return { pep: pep ?? null };
67
208
  }
68
- function instantiate(pep, item) {
209
+ async function instantiate(pep, item) {
69
210
  const trusted = trusts(pep);
70
211
  const user = (trusted ? userFromEntity(item.subject) : null) ?? pep;
71
- return createPermDock$1(policy, user, compact({
72
- actor: trusted ? actorOf(item) : void 0,
73
- delegation: trusted ? delegationOf(item) : void 0,
74
- tenant: tenantOf(item),
75
- ...instanceOptions(options)
76
- }));
212
+ return (await buildInstance({
213
+ policy,
214
+ user,
215
+ sources: options,
216
+ scope: {
217
+ actor: trusted ? actorOf(item) : void 0,
218
+ delegation: trusted ? delegationOf(item) : void 0,
219
+ tenant: tenantOf(item)
220
+ }
221
+ })).permdock;
77
222
  }
78
223
  async function resourceOf(item) {
79
224
  const properties = item.resource?.properties;
@@ -83,7 +228,7 @@ const createPermDock = (policy, options) => {
83
228
  };
84
229
  const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
85
230
  const id = resourceIdOf(item);
86
- const load = type !== void 0 && options.resources !== void 0 ? options.resources[type]?.load : void 0;
231
+ const load = type !== void 0 && options.resources !== void 0 ? options.resources[type]?.data : void 0;
87
232
  if (id !== void 0 && load !== void 0) try {
88
233
  return {
89
234
  data: await load(id),
@@ -106,22 +251,27 @@ const createPermDock = (policy, options) => {
106
251
  const permdock = await instantiate(pep, item);
107
252
  const decide = permdock.decide;
108
253
  const decision = decide(permission, data, trusted ? {
109
- source: "endpoint",
254
+ call: "endpoint",
110
255
  adapter: "authzen",
111
256
  trusted: true
112
257
  } : {
113
- source: "endpoint",
258
+ call: "endpoint",
114
259
  adapter: "authzen",
115
260
  trusted: false,
116
261
  boundary: "decision-endpoint"
117
262
  });
118
- return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, item.resource?.id), "authzen");
263
+ return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, resourceIdOf(item)), "authzen");
264
+ }
265
+ async function rowOf(request, pep, item) {
266
+ return evaluationRow(await decideItem(request, pep, item), permissionOf(lookup, item)?.key ?? actionName(item));
119
267
  }
120
268
  async function evaluation(request, pep) {
121
269
  const body = await readJson(request);
122
270
  if (body instanceof Response) return body;
123
271
  if (!isRecord(body)) return validationProblem("evaluation body must be an object");
124
- return Response.json(evaluationRow(await decideItem(request, pep, body)));
272
+ const missing = missingProblem(body, EVALUATION);
273
+ if (missing !== void 0) return missing;
274
+ return Response.json(await rowOf(request, pep, body));
125
275
  }
126
276
  async function evaluations(request, pep) {
127
277
  const body = await readJson(request);
@@ -129,31 +279,27 @@ const createPermDock = (policy, options) => {
129
279
  if (!isRecord(body)) return validationProblem("evaluations body must be an object");
130
280
  const items = body["evaluations"] ?? [];
131
281
  if (!Array.isArray(items)) return validationProblem("evaluations must be an array");
132
- if (items.length === 0) return Response.json(evaluationRow(await decideItem(request, pep, body)));
282
+ if (items.length === 0) return missingProblem(body, EVALUATION) ?? Response.json(await rowOf(request, pep, body));
133
283
  if (items.length > maxEvaluations) return batchTooLarge(maxEvaluations);
134
- const semantic = semanticOf(body);
135
- if (semantic === void 0) return validationProblem(`options.evaluations_semantic must be one of ${SEMANTICS.join(", ")}`);
284
+ const semantic = evaluationsSemantic(body);
285
+ if (semantic === void 0) return unknownSemanticProblem();
136
286
  const shared = compact({
137
287
  subject: isRecord(body["subject"]) ? body["subject"] : void 0,
138
288
  action: isRecord(body["action"]) ? body["action"] : void 0,
139
289
  resource: isRecord(body["resource"]) ? body["resource"] : void 0,
140
290
  context: body["context"]
141
291
  });
142
- const rowOf = (item) => decideItem(request, pep, mergeItem(shared, item)).then(evaluationRow);
143
- if (semantic === "execute_all") return Response.json({ evaluations: await Promise.all(items.map(rowOf)) });
144
- const stopOn = semantic === "permit_on_first_permit";
145
- const rows = [];
146
- for (const item of items) {
147
- const row = await rowOf(item);
148
- rows.push(row);
149
- if (row.decision === stopOn) break;
150
- }
151
- return Response.json({ evaluations: rows });
292
+ return Response.json({ evaluations: await evaluateBatch(items, semantic, (item) => rowOf(request, pep, mergeEvaluationItem(shared, item))) });
152
293
  }
153
294
  async function searchAction(request, pep) {
154
295
  const body = await readJson(request);
155
296
  if (body instanceof Response) return body;
156
297
  if (!isRecord(body)) return validationProblem("search/action body must be an object");
298
+ const missingAction = missingProblem(body, {
299
+ subject: "type-id",
300
+ resource: "type-id"
301
+ });
302
+ if (missingAction !== void 0) return missingAction;
157
303
  const item = body;
158
304
  const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
159
305
  const leaves = listPermissions(policy.permissions).filter((leaf) => type === void 0 || leaf.resource === type);
@@ -184,6 +330,12 @@ const createPermDock = (policy, options) => {
184
330
  const body = await readJson(request);
185
331
  if (body instanceof Response) return body;
186
332
  if (!isRecord(body)) return validationProblem("search/resource body must be an object");
333
+ const missingResource = missingProblem(body, {
334
+ subject: "type-id",
335
+ action: true,
336
+ resource: "type"
337
+ });
338
+ if (missingResource !== void 0) return missingResource;
187
339
  const item = body;
188
340
  const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
189
341
  const permission = permissionOf(lookup, item);
@@ -209,6 +361,12 @@ const createPermDock = (policy, options) => {
209
361
  const body = await readJson(request);
210
362
  if (body instanceof Response) return body;
211
363
  if (!isRecord(body)) return validationProblem("search/subject body must be an object");
364
+ const missingSubject = missingProblem(body, {
365
+ subject: "type",
366
+ action: true,
367
+ resource: "type-id"
368
+ });
369
+ if (missingSubject !== void 0) return missingSubject;
212
370
  let records;
213
371
  try {
214
372
  records = await options.subjects.list();
@@ -243,15 +401,11 @@ const createPermDock = (policy, options) => {
243
401
  }
244
402
  function discovery(request, pathname) {
245
403
  const pdp = `${new URL(request.url).origin}${pathname.slice(pathname.indexOf(WELL_KNOWN) + 34).replace(/\/+$/u, "")}`;
246
- const document = {
247
- policy_decision_point: pdp,
248
- access_evaluation_endpoint: `${pdp}/access/v1/evaluation`,
249
- access_evaluations_endpoint: `${pdp}/access/v1/evaluations`,
250
- search_action_endpoint: `${pdp}/access/v1/search/action`,
251
- search_resource_endpoint: `${pdp}/access/v1/search/resource`
252
- };
253
- if (options.subjects?.list !== void 0) document["search_subject_endpoint"] = `${pdp}/access/v1/search/subject`;
254
- return Response.json(document);
404
+ return Response.json(authzenMetadata(pdp, {
405
+ action: true,
406
+ resource: true,
407
+ subject: options.subjects?.list !== void 0
408
+ }));
255
409
  }
256
410
  async function route(request) {
257
411
  const pathname = pathnameOf(request);
@@ -294,9 +448,8 @@ const createPermDock = (policy, options) => {
294
448
  }
295
449
  return notFound("unknown AuthZEN path");
296
450
  }
297
- return { async permdockHandler(request) {
298
- return withRequestId(request, await route(request));
299
- } };
451
+ const handler = async (request) => withRequestId(request, await route(request));
452
+ return { permdockHandler: () => handler };
300
453
  };
301
454
  //#endregion
302
- export { createPermDock };
455
+ export { EVALUATIONS_SEMANTICS, createPermDock, evaluateBatch, evaluationsSemantic, mergeEvaluationItem };
@@ -0,0 +1,114 @@
1
+ import { Lt as InstanceHandle, Pn as Denial, Rt as Instant } from "./policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "./vocabulary-D6lPdb4Z.js";
3
+ import { t as Operation } from "./operations-CxybZErY.js";
4
+ //#region src/core/automation.d.ts
5
+ /**
6
+ * Who an automation runs as. `publisher`: the person who published it, with
7
+ * their rights as of each run. `service`: a `kind: 'service'` principal
8
+ * holding `roles` in `tenant`, capped at what the publisher could assign.
9
+ */
10
+ type AutomationMode = "publisher" | "service";
11
+ /**
12
+ * Automation v1: a published, versioned run of operations. Every run acts
13
+ * as `principal` with live rights, narrowed to `permissions` (the
14
+ * operations' permissions) and to any policy delegation to
15
+ * `actor('automation')`. The event that triggers a run never grants.
16
+ */
17
+ type Automation = {
18
+ readonly v: 1;
19
+ readonly id: string;
20
+ /** Changes on every edit; a run ticket for another version is refused. */
21
+ readonly version: number | string;
22
+ readonly mode: AutomationMode;
23
+ /** The principal each run acts as: the publisher, or the service principal. */
24
+ readonly principal: string;
25
+ readonly publishedBy: string;
26
+ /** RFC 3339. */
27
+ readonly publishedAt: string;
28
+ readonly tenant?: string;
29
+ /** Service mode only: the roles the service principal holds in `tenant`. */
30
+ readonly roles?: readonly string[];
31
+ /** The operation names the automation runs. */
32
+ readonly operations: readonly string[];
33
+ /** The delegation: the permission keys of `operations`. */
34
+ readonly permissions: readonly string[];
35
+ /** The permission key a caller needs to start a run; absent, only server code starts one. */
36
+ readonly run?: string;
37
+ readonly revoked?: boolean;
38
+ readonly name?: string;
39
+ };
40
+ /** The live record of each automation, read on every run. */
41
+ type AutomationSource = {
42
+ /** Names the implementation in errors and events. */
43
+ readonly name?: string;
44
+ /** The automation as of now, or `null` for an unknown one. A throw is no automation. */
45
+ automation(id: string, options?: {
46
+ readonly tenant?: string;
47
+ }): Automation | null | Promise<Automation | null>;
48
+ };
49
+ type OperationRef = Pick<Operation, "name" | "permission">;
50
+ type AutomationRequest = {
51
+ readonly id: string;
52
+ readonly version: number | string;
53
+ /** The operations the automation runs: entries of an `OperationMap`, or the map itself. */
54
+ readonly operations: readonly OperationRef[] | Readonly<Record<string, OperationRef>>;
55
+ /** Defaults to `'publisher'`. */
56
+ readonly mode?: AutomationMode;
57
+ /** Defaults to the publisher's active tenant; required for `service`. */
58
+ readonly tenant?: string;
59
+ /** Service mode: the service principal's id; defaults to `automation:<id>`. */
60
+ readonly principal?: string;
61
+ /** Service mode: the roles the service principal holds in `tenant`. */
62
+ readonly roles?: readonly string[];
63
+ /** The permission a caller needs to start a run. */
64
+ readonly run?: Permission;
65
+ readonly name?: string;
66
+ };
67
+ type AutomationDecision = {
68
+ readonly outcome: "granted";
69
+ readonly automation: Automation;
70
+ } | {
71
+ readonly outcome: "denied";
72
+ readonly denials: readonly Denial[];
73
+ };
74
+ type DecideAutomationOptions = {
75
+ /** The publication time; defaults to the clock. */
76
+ readonly now?: Instant;
77
+ };
78
+ /**
79
+ * Validates an untrusted automation record and returns a frozen copy with
80
+ * only the v1 fields, or `undefined`. A service automation needs `tenant`
81
+ * and `roles`; a publisher automation runs as `publishedBy` and has no
82
+ * `roles`.
83
+ */
84
+ declare function parseAutomation(input: unknown): Automation | undefined;
85
+ type MemoryAutomationSource = {
86
+ automation(id: string, options?: {
87
+ readonly tenant?: string;
88
+ }): Automation | null;
89
+ /** Adds or replaces a record by id; an invalid record throws. */
90
+ put(automation: Automation): void;
91
+ };
92
+ /** An in-process `AutomationSource`; records are kept by id and checked with `parseAutomation`. */
93
+ declare function memoryAutomationSource(automations?: readonly Automation[]): MemoryAutomationSource;
94
+ /**
95
+ * Decides whether the subject of `permdock` may publish the automation in
96
+ * `request`, and returns the record to store. The publisher must be a
97
+ * signed-in user or service that is not a link, a feed, a contact, a
98
+ * credential or a run, and must be able to use every operation's permission
99
+ * now (`exceeds-creator`); each run re-checks their live rights. A
100
+ * `service` automation's tenant must be one the publisher is a member of,
101
+ * its roles among their `assignableRoles` there and its permissions within
102
+ * `assignablePermissions`. PermDock never stores the record; the
103
+ * application does, after a `granted` result.
104
+ */
105
+ /**
106
+ * Decides whether the subject of `permdock` may publish the automation in
107
+ * `request` and returns the record to store: the publisher's own reach over
108
+ * every operation's permission and, for a `service` automation, their
109
+ * assignable ceiling. Each run re-checks the publisher live. An instance
110
+ * built from a snapshot denies with `unsupported`.
111
+ */
112
+ declare function decideAutomation(permdock: InstanceHandle, request: AutomationRequest, options?: DecideAutomationOptions): Promise<AutomationDecision>;
113
+ //#endregion
114
+ export { AutomationSource as a, decideAutomation as c, AutomationRequest as i, memoryAutomationSource as l, AutomationDecision as n, DecideAutomationOptions as o, AutomationMode as r, MemoryAutomationSource as s, Automation as t, parseAutomation as u };
@@ -0,0 +1,157 @@
1
+ import { n as isReadonlyArray, 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 { a as isId, r as idList } from "./expiry-D4_YKRKD.js";
5
+ import { n as internalsOf } from "./internals-Dk8A8fX3.js";
6
+ import { n as findPermission } from "./permission-registry-Br4jSNVi.js";
7
+ import { l as isRfc3339, m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
8
+ //#region src/core/automation.ts
9
+ const MAX_NAME = 256;
10
+ function isVersion(value) {
11
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 || isId(value);
12
+ }
13
+ /**
14
+ * Validates an untrusted automation record and returns a frozen copy with
15
+ * only the v1 fields, or `undefined`. A service automation needs `tenant`
16
+ * and `roles`; a publisher automation runs as `publishedBy` and has no
17
+ * `roles`.
18
+ */
19
+ function parseAutomation(input) {
20
+ const value = ownRecord(input);
21
+ if (value === void 0 || value["v"] !== 1 || !isId(value["id"]) || !isVersion(value["version"]) || value["mode"] !== "publisher" && value["mode"] !== "service" || !isId(value["principal"]) || !isId(value["publishedBy"]) || !isRfc3339(value["publishedAt"])) return;
22
+ const operations = idList(value["operations"]);
23
+ const permissions = idList(value["permissions"]);
24
+ const roles = value["roles"] === void 0 ? void 0 : idList(value["roles"]);
25
+ const { tenant, run, revoked, name } = value;
26
+ if (operations === void 0 || permissions === void 0 || value["roles"] !== void 0 && roles === void 0 || tenant !== void 0 && !isId(tenant) || run !== void 0 && !isId(run) || revoked !== void 0 && typeof revoked !== "boolean" || name !== void 0 && (typeof name !== "string" || name.length > MAX_NAME)) return;
27
+ if (value["mode"] === "service") {
28
+ if (tenant === void 0 || roles === void 0) return;
29
+ } else if (roles !== void 0 || value["principal"] !== value["publishedBy"]) return;
30
+ return freezeDeep(compact({
31
+ v: 1,
32
+ id: value["id"],
33
+ version: value["version"],
34
+ mode: value["mode"],
35
+ principal: value["principal"],
36
+ publishedBy: value["publishedBy"],
37
+ publishedAt: value["publishedAt"],
38
+ tenant,
39
+ roles,
40
+ operations,
41
+ permissions,
42
+ run,
43
+ revoked: revoked === true ? true : void 0,
44
+ name
45
+ }));
46
+ }
47
+ /** An in-process `AutomationSource`; records are kept by id and checked with `parseAutomation`. */
48
+ function memoryAutomationSource(automations = []) {
49
+ const byId = /* @__PURE__ */ new Map();
50
+ const put = (automation) => {
51
+ const parsed = parseAutomation(automation);
52
+ if (parsed === void 0) throw new TypeError("PermDock: invalid automation record");
53
+ byId.set(parsed.id, parsed);
54
+ };
55
+ for (const automation of automations) put(automation);
56
+ return Object.freeze({
57
+ automation(id, options) {
58
+ const found = byId.get(id);
59
+ if (found === void 0 || options?.tenant !== void 0 && found.tenant !== void 0 && found.tenant !== options.tenant) return null;
60
+ return found;
61
+ },
62
+ put
63
+ });
64
+ }
65
+ function denied(reason, detail) {
66
+ return freezeDeep({
67
+ outcome: "denied",
68
+ denials: [compact({
69
+ role: null,
70
+ reason,
71
+ detail
72
+ })]
73
+ });
74
+ }
75
+ function operationList(operations) {
76
+ return isReadonlyArray(operations) ? operations : Object.values(operations);
77
+ }
78
+ /**
79
+ * Decides whether the subject of `permdock` may publish the automation in
80
+ * `request`, and returns the record to store. The publisher must be a
81
+ * signed-in user or service that is not a link, a feed, a contact, a
82
+ * credential or a run, and must be able to use every operation's permission
83
+ * now (`exceeds-creator`); each run re-checks their live rights. A
84
+ * `service` automation's tenant must be one the publisher is a member of,
85
+ * its roles among their `assignableRoles` there and its permissions within
86
+ * `assignablePermissions`. PermDock never stores the record; the
87
+ * application does, after a `granted` result.
88
+ */
89
+ /**
90
+ * Decides whether the subject of `permdock` may publish the automation in
91
+ * `request` and returns the record to store: the publisher's own reach over
92
+ * every operation's permission and, for a `service` automation, their
93
+ * assignable ceiling. Each run re-checks the publisher live. An instance
94
+ * built from a snapshot denies with `unsupported`.
95
+ */
96
+ function decideAutomation(permdock, request, options = {}) {
97
+ const internals = internalsOf(permdock);
98
+ if (internals === void 0) return Promise.resolve(freezeDeep({
99
+ outcome: "denied",
100
+ denials: [{
101
+ role: null,
102
+ reason: "unsupported"
103
+ }]
104
+ }));
105
+ return Promise.resolve().then(() => decideAutomationWith(internals.instance, request, options));
106
+ }
107
+ function decideAutomationWith(permdock, request, options) {
108
+ const publisher = permdock.subject.principal;
109
+ if (publisher === null) return denied("anonymous");
110
+ if (publisher.kind === "link" || publisher.kind === "feed" || publisher.kind === "contact") return denied("exceeds-creator", { creator: publisher.kind });
111
+ if ("credential" in publisher || "runTicket" in publisher) return denied("exceeds-creator", { creator: "credential" in publisher ? "credential" : "run" });
112
+ const mode = request.mode ?? "publisher";
113
+ const refs = operationList(request.operations);
114
+ if (!isId(request.id) || !isVersion(request.version) || refs.length === 0 || mode !== "publisher" && mode !== "service") return denied("validation");
115
+ const names = [];
116
+ const keys = [];
117
+ for (const ref of refs) {
118
+ const leaf = findPermission(permdock.permissions, ref.permission.key);
119
+ if (!isId(ref.name) || leaf === void 0 || names.includes(ref.name)) return denied("validation");
120
+ names.push(ref.name);
121
+ if (!keys.includes(leaf.key)) keys.push(leaf.key);
122
+ if (!permdock.mayUse(leaf)) return denied("exceeds-creator", { permission: leaf.key });
123
+ }
124
+ const run = request.run === void 0 ? void 0 : findPermission(permdock.permissions, request.run.key);
125
+ if (request.run !== void 0 && run === void 0) return denied("validation");
126
+ const tenant = request.tenant ?? publisher.tenant;
127
+ if (tenant !== void 0 && !permdock.tenants().includes(tenant)) return denied("exceeds-creator", { tenant });
128
+ if (mode === "service") {
129
+ if (tenant === void 0 || request.roles === void 0) return denied("validation");
130
+ const assignable = new Set(permdock.assignableRoles({ tenant }).map((role) => role.key));
131
+ for (const role of request.roles) if (!assignable.has(role)) return denied("exceeds-creator", { role });
132
+ const ceiling = new Set(permdock.assignablePermissions({ tenant }).map((leaf) => leaf.key));
133
+ for (const key of keys) if (!ceiling.has(key)) return denied("exceeds-creator", { permission: key });
134
+ }
135
+ const automation = parseAutomation(compact({
136
+ v: 1,
137
+ id: request.id,
138
+ version: request.version,
139
+ mode,
140
+ principal: mode === "service" ? request.principal ?? `automation:${request.id}` : publisher.id,
141
+ publishedBy: publisher.id,
142
+ publishedAt: rfc3339(nowSeconds(options.now)),
143
+ tenant,
144
+ roles: mode === "service" ? request.roles : void 0,
145
+ operations: names,
146
+ permissions: keys,
147
+ run: run?.key,
148
+ name: request.name
149
+ }));
150
+ if (automation === void 0) return denied("validation");
151
+ return freezeDeep({
152
+ outcome: "granted",
153
+ automation
154
+ });
155
+ }
156
+ //#endregion
157
+ export { memoryAutomationSource as n, parseAutomation as r, decideAutomation as t };