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,403 @@
1
+ import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
+ import { i as dateAt, p as nowSeconds } from "./time-DkWjdL98.js";
4
+ import { s as policyDocumentFromClaims } from "./hosted-B46-5LYE.js";
5
+ import { l as isApprovalErrorCode, s as ApprovalError, t as APPROVAL_HEADER } from "./types-DqzsnlSA.js";
6
+ import { h as toCloudEvent, l as isAbsoluteUri } from "./sink-BEZSlMS_.js";
7
+ import { n as parseCatalogEventData, t as catalogFingerprint } from "./catalog-fingerprint-CCP0-yQS.js";
8
+ import { t as parseApprovalRequest } from "./parse-request-D_tUXG6M.js";
9
+ import { t as timeoutSignal } from "./timeout-D51niuQP.js";
10
+ //#region src/cloud/approver.ts
11
+ const APPROVER_HEADER = "PermDock-Approver";
12
+ /** The RFC 9396 `authorization_details` type that binds an approver token to one verdict. */
13
+ const APPROVAL_DETAIL_TYPE = "permdock_approval";
14
+ /** Seconds an approver token lives: it proves one resolve call, and the Cloud refuses a replayed `jti`. */
15
+ const APPROVER_TTL = 60;
16
+ async function facts(read, request, verdict, fallback) {
17
+ if (read === void 0) return fallback ?? [];
18
+ try {
19
+ return (await read(request, verdict.by)).filter((item) => typeof item === "string");
20
+ } catch {
21
+ return [];
22
+ }
23
+ }
24
+ function unauthenticated(detail) {
25
+ return new ApprovalError("approver-unauthenticated", detail);
26
+ }
27
+ /** A rejection only denies, so the Cloud takes a `system` one without an approver token. */
28
+ function isSystemRejection(verdict) {
29
+ return verdict.status === "rejected" && verdict.by.actor?.kind === "system";
30
+ }
31
+ /**
32
+ * The `PermDock-Approver` header for `verdict`: an RFC 9068 `at+jwt` whose
33
+ * `sub` is the approver, signed by `options.signer` for `<issuer>/approvals`,
34
+ * with a fresh `jti` and one `permdock_approval` authorization detail naming
35
+ * the request id, the verdict status, `vouched`, and the approver's
36
+ * `permissions` and `relations`. With the `roles`, `memberships` and `tenant`
37
+ * claims they are the only facts the Cloud checks a request's `approvers`
38
+ * against in bring-your-own mode. `target` runs only after the
39
+ * approver checks pass. Throws an `ApprovalError` before any resolve when the
40
+ * approver cannot be proven: no signer, no principal, an actor, a failed
41
+ * lookup or a signer failure.
42
+ */
43
+ async function approverHeaders(verdict, options, issuer, target) {
44
+ if (isSystemRejection(verdict)) return {};
45
+ if (verdict.by.actor !== void 0) throw new ApprovalError("approver-not-eligible", "PermDock Cloud: a person approves; a verdict with an actor has no approver token");
46
+ const principal = verdict.by.principal;
47
+ if (principal === null || principal.id === "") throw unauthenticated("PermDock Cloud: the approver has no principal id");
48
+ if (options === void 0) throw unauthenticated("PermDock Cloud: cloud() needs approver.signer to prove who resolves an approval");
49
+ const { request, etag } = await target();
50
+ const permissions = await facts(options.permissions, request, verdict, verdict.permissions);
51
+ const relations = await facts(options.relations, request, verdict, verdict.relations);
52
+ const issuedAt = nowSeconds();
53
+ try {
54
+ const token = await options.signer.sign({
55
+ sub: principal.id,
56
+ roles: principal.roles,
57
+ ...principal.memberships === void 0 ? {} : { memberships: principal.memberships },
58
+ ...principal.tenant === void 0 ? {} : { tenant: principal.tenant },
59
+ authorization_details: [{
60
+ type: APPROVAL_DETAIL_TYPE,
61
+ id: request.id,
62
+ status: verdict.status,
63
+ permissions,
64
+ relations,
65
+ ...etag === void 0 ? {} : { etag },
66
+ ...verdict.vouched === void 0 ? {} : { vouched: verdict.vouched }
67
+ }]
68
+ }, {
69
+ typ: "at+jwt",
70
+ audience: options.audience ?? `${issuer}/approvals`,
71
+ issuedAt,
72
+ expiresAt: issuedAt + APPROVER_TTL,
73
+ jti: globalThis.crypto.randomUUID()
74
+ });
75
+ return { [APPROVER_HEADER]: token };
76
+ } catch {
77
+ throw unauthenticated("PermDock Cloud: the approver signer failed");
78
+ }
79
+ }
80
+ //#endregion
81
+ //#region src/cloud/request.ts
82
+ /** Milliseconds a PermDock Cloud request may take; a slower one fails like an unreachable Cloud. */
83
+ const CLOUD_TIMEOUT_MS = 1e4;
84
+ function readEnv(name) {
85
+ const value = globalThis.process?.env?.[name];
86
+ return typeof value === "string" ? value : "";
87
+ }
88
+ function firstNonEmpty(...values) {
89
+ for (const value of values) if (value !== void 0 && value !== "") return value;
90
+ return "";
91
+ }
92
+ function trimSlash(value) {
93
+ return value.endsWith("/") ? value.slice(0, -1) : value;
94
+ }
95
+ /**
96
+ * The environment URL and JWK Set URL `cloud()` uses, resolved with the same
97
+ * fallbacks (`PERMDOCK_CLOUD_URL`; `PERMDOCK_CLOUD_ENV`, `VERCEL_ENV`, `production`).
98
+ */
99
+ function cloudEndpoints(options = {}) {
100
+ const url = trimSlash(firstNonEmpty(options.url, readEnv("PERMDOCK_CLOUD_URL")));
101
+ if (url === "") throw new Error("PermDock: cloud() requires url and key.");
102
+ const environment = firstNonEmpty(options.environment, readEnv("PERMDOCK_CLOUD_ENV"), readEnv("VERCEL_ENV"), "production");
103
+ const issuer = `${url}/v1/environments/${encodeURIComponent(environment)}`;
104
+ return Object.freeze({
105
+ issuer,
106
+ jwks: `${issuer}/.well-known/jwks.json`
107
+ });
108
+ }
109
+ /** The authenticated connection every `permdock/cloud` client shares. Throws without a URL or key. */
110
+ function cloudConnection(options) {
111
+ const key = firstNonEmpty(options.key, readEnv("PERMDOCK_CLOUD_KEY"));
112
+ if (key === "") throw new Error("PermDock: cloud() requires url and key.");
113
+ const endpoints = cloudEndpoints(options);
114
+ const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);
115
+ const request = (path, init = {}, accept, contentType) => {
116
+ const headers = new Headers();
117
+ headers.set("authorization", `Bearer ${key}`);
118
+ headers.set("content-type", "application/json");
119
+ for (const [name, value] of new Headers(init.headers)) headers.set(name, value);
120
+ if (accept !== void 0) headers.set("accept", accept);
121
+ if (contentType !== void 0) headers.set("content-type", contentType);
122
+ return fetchFn(`${endpoints.issuer}${path}`, {
123
+ ...init,
124
+ headers,
125
+ signal: timeoutSignal(CLOUD_TIMEOUT_MS, init.signal)
126
+ });
127
+ };
128
+ return Object.freeze({
129
+ ...endpoints,
130
+ request
131
+ });
132
+ }
133
+ /** `true` for a compact JWS: three dot-separated parts, not JSON. */
134
+ function isCompactJws(value) {
135
+ return !value.startsWith("{") && value.split(".").length === 3;
136
+ }
137
+ //#endregion
138
+ //#region src/cloud/create.ts
139
+ /** Carries the `at+jwt` that names the subject of `GET /snapshot`. */
140
+ const SUBJECT_HEADER = "PermDock-Subject";
141
+ function catalogPushOf(value) {
142
+ if (!isRecord(value) || !Number.isSafeInteger(value["version"]) || typeof value["fingerprint"] !== "string") return null;
143
+ const version = Number(value["version"]);
144
+ const fingerprint = value["fingerprint"];
145
+ if (value["unchanged"] === true) return {
146
+ version,
147
+ fingerprint,
148
+ unchanged: true
149
+ };
150
+ const data = parseCatalogEventData({
151
+ kind: "drift",
152
+ fingerprint,
153
+ findings: value["findings"]
154
+ });
155
+ return data?.findings === void 0 ? null : {
156
+ version,
157
+ fingerprint,
158
+ findings: data.findings
159
+ };
160
+ }
161
+ function asApproval(value) {
162
+ if (!isRecord(value) || value["v"] !== 1 || typeof value["token"] !== "string") return null;
163
+ return value;
164
+ }
165
+ /** The refusal PermDock Cloud names in its body, else the one its status implies. */
166
+ async function approvalErrorFrom(response) {
167
+ let body;
168
+ try {
169
+ body = await response.json();
170
+ } catch {
171
+ return approvalErrorFromStatus(response.status);
172
+ }
173
+ if (body === null || typeof body !== "object" || !("code" in body)) return approvalErrorFromStatus(response.status);
174
+ const code = body.code;
175
+ if (!isApprovalErrorCode(code)) return approvalErrorFromStatus(response.status);
176
+ const detail = "detail" in body ? body.detail : void 0;
177
+ return new ApprovalError(code, typeof detail === "string" && detail.length > 0 ? detail : code);
178
+ }
179
+ function approvalErrorFromStatus(status) {
180
+ if (status === 409) return new ApprovalError("approval-not-pending", "approval is not pending");
181
+ if (status === 410) return new ApprovalError("approval-expired", "approval has expired");
182
+ return new ApprovalError("approval-not-found", "approval was not found");
183
+ }
184
+ function cloud(options = {}) {
185
+ const { issuer: root, jwks, request } = cloudConnection(options);
186
+ const flushAt = options.flushAt ?? 32;
187
+ const waitUntil = options.waitUntil;
188
+ const approvals = {
189
+ async create(record) {
190
+ if (!(await request("/approvals", {
191
+ method: "POST",
192
+ body: JSON.stringify(record)
193
+ })).ok) throw new Error("PermDock Cloud rejected the approval create");
194
+ },
195
+ async get(token) {
196
+ try {
197
+ const response = await request("/approvals/by-token", { headers: { [APPROVAL_HEADER]: token } });
198
+ if (!response.ok) return null;
199
+ return asApproval(await response.json());
200
+ } catch {
201
+ return null;
202
+ }
203
+ },
204
+ async getById(id) {
205
+ try {
206
+ const response = await request(`/approvals/${encodeURIComponent(id)}`);
207
+ if (!response.ok) return null;
208
+ return asApproval(await response.json());
209
+ } catch {
210
+ return null;
211
+ }
212
+ },
213
+ async resolve(token, verdict) {
214
+ const approver = await approverHeaders(verdict, options.approver, root, async () => {
215
+ const response = await request("/approvals/by-token", { headers: { [APPROVAL_HEADER]: token } });
216
+ if (!response.ok) throw await approvalErrorFrom(response);
217
+ const found = parseApprovalRequest(await response.json());
218
+ if (found === null) throw new ApprovalError("approval-not-found", "PermDock Cloud returned an unknown approval shape");
219
+ const etag = response.headers.get("etag");
220
+ return etag === null ? { request: found } : {
221
+ request: found,
222
+ etag
223
+ };
224
+ });
225
+ const response = await request("/approvals/by-token/resolve", {
226
+ method: "POST",
227
+ headers: {
228
+ [APPROVAL_HEADER]: token,
229
+ ...approver
230
+ },
231
+ body: JSON.stringify(verdict)
232
+ });
233
+ if (!response.ok) throw await approvalErrorFrom(response);
234
+ const parsed = asApproval(await response.json());
235
+ if (parsed === null) throw new ApprovalError("approval-not-found", "PermDock Cloud returned an unknown approval shape");
236
+ return parsed;
237
+ },
238
+ async consume(token, now) {
239
+ try {
240
+ const response = await request("/approvals/by-token/consume", {
241
+ method: "POST",
242
+ headers: { [APPROVAL_HEADER]: token },
243
+ body: JSON.stringify(compact({ now: now === void 0 ? void 0 : dateAt(now).toISOString() }))
244
+ });
245
+ if (!response.ok) return null;
246
+ return asApproval(await response.json());
247
+ } catch {
248
+ return null;
249
+ }
250
+ },
251
+ async list(query) {
252
+ const params = new URLSearchParams(compact({
253
+ status: query.status,
254
+ principalId: query.principalId,
255
+ actorId: query.actorId,
256
+ tenant: query.tenant,
257
+ session: query.session,
258
+ limit: query.limit === void 0 ? void 0 : String(query.limit),
259
+ cursor: query.cursor
260
+ }));
261
+ const suffix = params.size === 0 ? "" : `?${params.toString()}`;
262
+ try {
263
+ const response = await request(`/approvals${suffix}`);
264
+ if (!response.ok) return { items: [] };
265
+ const body = await response.json();
266
+ if (!isRecord(body) || !Array.isArray(body["items"])) return { items: [] };
267
+ const items = body["items"].flatMap((item) => {
268
+ const parsed = asApproval(item);
269
+ return parsed === null ? [] : [parsed];
270
+ });
271
+ return typeof body["next"] === "string" && body["next"] !== "" ? {
272
+ items,
273
+ next: body["next"]
274
+ } : { items };
275
+ } catch {
276
+ return { items: [] };
277
+ }
278
+ },
279
+ async cancel(filter, meta) {
280
+ const response = await request("/approvals/cancel", {
281
+ method: "POST",
282
+ body: JSON.stringify(compact({
283
+ filter,
284
+ by: meta.by,
285
+ note: meta.note
286
+ }))
287
+ });
288
+ if (!response.ok) throw new Error("PermDock Cloud rejected the approval cancel");
289
+ const body = await response.json();
290
+ if (!isRecord(body) || typeof body["cancelled"] !== "number") throw new Error("PermDock Cloud returned an unknown cancel shape");
291
+ return body["cancelled"];
292
+ },
293
+ async expire(now) {
294
+ try {
295
+ const response = await request("/approvals/expire", {
296
+ method: "POST",
297
+ body: JSON.stringify(compact({ now: now === void 0 ? void 0 : dateAt(now).toISOString() }))
298
+ });
299
+ if (!response.ok) return 0;
300
+ const body = await response.json();
301
+ if (!isRecord(body) || typeof body["expired"] !== "number") return 0;
302
+ return body["expired"];
303
+ } catch {
304
+ return 0;
305
+ }
306
+ }
307
+ };
308
+ const capacity = options.capacity ?? 1e4;
309
+ const source = options.source ?? root;
310
+ if (!isAbsoluteUri(source)) throw new TypeError("PermDock: cloud() source is an absolute URI");
311
+ const pending = [];
312
+ const bound = () => {
313
+ if (pending.length > capacity) pending.splice(0, pending.length - capacity);
314
+ };
315
+ const flush = async () => {
316
+ if (pending.length === 0) return;
317
+ const events = pending.splice(0);
318
+ try {
319
+ if (!(await request("/decisions", {
320
+ method: "POST",
321
+ body: JSON.stringify(events.map((event) => toCloudEvent(event, { source })))
322
+ }, void 0, "application/cloudevents-batch+json")).ok) pending.unshift(...events);
323
+ } catch {
324
+ pending.unshift(...events);
325
+ }
326
+ bound();
327
+ };
328
+ const sink = {
329
+ write(events) {
330
+ pending.push(...events);
331
+ bound();
332
+ if (pending.length >= flushAt) return flush();
333
+ if (waitUntil !== void 0 && pending.length > 0) waitUntil(flush());
334
+ },
335
+ flush
336
+ };
337
+ const snapshotsFor = (subject) => ({ async get() {
338
+ const response = await request("/snapshot", { headers: { [SUBJECT_HEADER]: subject } }, "application/jwt");
339
+ if (!response.ok) throw new Error("PermDock Cloud snapshot request failed");
340
+ const text = (await response.text()).trim();
341
+ if (!isCompactJws(text)) throw new Error("PermDock Cloud served an unsigned snapshot");
342
+ return text;
343
+ } });
344
+ let document = null;
345
+ return freezeDeep({
346
+ approvals,
347
+ sink,
348
+ snapshotsFor,
349
+ policies: {
350
+ current() {
351
+ return document;
352
+ },
353
+ async refresh() {
354
+ const verifier = options.verifier;
355
+ if (verifier === void 0) return;
356
+ let response;
357
+ try {
358
+ response = await request("/policy");
359
+ } catch {
360
+ return;
361
+ }
362
+ if (response.status === 404) {
363
+ document = null;
364
+ return;
365
+ }
366
+ if (!response.ok) return;
367
+ const token = (await response.text()).trim();
368
+ if (!isCompactJws(token)) return;
369
+ const verified = await verifier.verify(token, {
370
+ typ: "vnd.permdock.policy+jwt",
371
+ issuer: root,
372
+ audience: root
373
+ });
374
+ if (!verified.ok) return;
375
+ let next;
376
+ try {
377
+ next = policyDocumentFromClaims(verified.claims);
378
+ } catch {
379
+ return;
380
+ }
381
+ document = next;
382
+ }
383
+ },
384
+ catalog: { async push(value) {
385
+ const fingerprint = catalogFingerprint(value);
386
+ const response = await request("/catalog", {
387
+ method: "POST",
388
+ body: JSON.stringify({
389
+ fingerprint,
390
+ catalog: value
391
+ })
392
+ });
393
+ if (!response.ok) throw new Error(`PermDock Cloud rejected the catalog: HTTP ${String(response.status)}`);
394
+ const parsed = catalogPushOf(await response.json());
395
+ if (parsed === null) throw new Error("PermDock Cloud answered the catalog push in an unknown shape");
396
+ return parsed;
397
+ } },
398
+ issuer: root,
399
+ jwks
400
+ });
401
+ }
402
+ //#endregion
403
+ export { approverHeaders as a, isCompactJws as i, cloudConnection as n, cloudEndpoints as r, cloud as t };
@@ -1,15 +1,15 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { n as problemDetails } from "./problem-details-DECUnXAn.js";
4
- import { c as listPermissions } from "./permission-registry-BsblpB-z.js";
5
- import { r as challengeScope } from "./permdock-L26udHSk.js";
3
+ import { n as problemDetails } from "./problem-details-cn5X30gZ.js";
4
+ import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
6
5
  import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
6
+ import { c as withApp, i as challengeScope } from "./permdock-BrAscV28.js";
7
7
  import { r as hasCredentials } from "./http-BBoKefeS.js";
8
- import { i as decisionResponse, o as notFoundProblem, s as problemFromDecision, t as ANONYMOUS, u as unauthenticatedProblem } from "./problem-CnWraVhC.js";
9
- import { n as resolveOrNull } from "./build-instance-DIIV9DbC.js";
10
- import { n as createEvaluationsHandler, r as InvalidSignatureError, t as applyApprovalResume } from "./evaluations-C9YJsv3H.js";
11
- import { n as tenantScope, t as actorFrom } from "./adapter-context-mlWsVGGg.js";
12
- import { n as requestContext, t as buildReportingInstance } from "./request-context-BVM7aWNs.js";
8
+ import { i as decisionResponse, o as notFoundProblem, s as problemFromDecision, t as ANONYMOUS, u as unauthenticatedProblem } from "./problem-CTviyH5L.js";
9
+ import { n as resolveOrNull } from "./build-instance-Bu_eDqYw.js";
10
+ import { n as applyApprovalResume, o as evaluationsHandler, u as InvalidSignatureError } from "./evaluations-beAooV0n.js";
11
+ import { n as tenantScope, t as actorFrom } from "./adapter-context-CRhqyzCk.js";
12
+ import { n as requestContext, t as buildReportingInstance } from "./request-context-C81Pip9n.js";
13
13
  //#region src/server/kernel-problems.ts
14
14
  const NOT_DELEGATED = freezeDeep({
15
15
  outcome: "denied",
@@ -89,7 +89,7 @@ async function refused(hook, fallback, decision, request, report) {
89
89
  decision
90
90
  };
91
91
  const status = result.status;
92
- if (typeof status !== "number" || status < 300) throw new TypeError(`PermDock: onDenied returned status ${String(status)}; a refusal keeps a status of 300 or more`);
92
+ if (typeof status !== "number" || status < 300) throw new TypeError(`PermDock: deniedResponse returned status ${String(status)}; a refusal keeps a status of 300 or more`);
93
93
  return {
94
94
  ok: false,
95
95
  response: result instanceof Response ? result : new Response(JSON.stringify(result), {
@@ -112,11 +112,11 @@ async function guardOn(deps, instance, remote, report, request, permission, load
112
112
  const credentials = request === void 0 ? false : hasCredentials(request);
113
113
  if (permission === null) {
114
114
  if (declared === void 0) throw new TypeError(request === void 0 ? "PermDock: protect(null) needs oauthScopes" : `PermDock: protect(null) needs oauthScopes, and no operation declares them for ${request.method} ${new URL(request.url).pathname}`);
115
- if (instance.subject.principal === null) return refused(deps.options.onDenied, unauthenticatedProblem(credentials), ANONYMOUS, request, report);
115
+ if (instance.subject.principal === null) return refused(deps.options.deniedResponse, unauthenticatedProblem(credentials), ANONYMOUS, request, report);
116
116
  }
117
117
  const { actor, delegation } = instance.subject;
118
118
  const held = permission === null && (actor !== void 0 || delegation !== void 0) ? delegation?.scopes ?? [] : delegation?.scopes;
119
- if (declared !== void 0 && held !== void 0 && !declared.some((granted) => held.includes(granted))) return refused(deps.options.onDenied, scopeProblem(permission, instance.subject, credentials, declared[0]), NOT_DELEGATED, request, report);
119
+ if (declared !== void 0 && held !== void 0 && !declared.some((granted) => held.includes(granted))) return refused(deps.options.deniedResponse, scopeProblem(permission, instance.subject, credentials, declared[0]), NOT_DELEGATED, request, report);
120
120
  let data;
121
121
  if (load !== void 0) {
122
122
  let loaded;
@@ -124,7 +124,7 @@ async function guardOn(deps, instance, remote, report, request, permission, load
124
124
  loaded = await load();
125
125
  } catch (error) {
126
126
  report(error);
127
- return refused(deps.options.onDenied, loadFailedProblem(permission), LOAD_FAILED, request, report);
127
+ return refused(deps.options.deniedResponse, loadFailedProblem(permission), LOAD_FAILED, request, report);
128
128
  }
129
129
  if (loaded === null || loaded === void 0) return {
130
130
  ok: false,
@@ -138,7 +138,7 @@ async function guardOn(deps, instance, remote, report, request, permission, load
138
138
  data
139
139
  };
140
140
  const decideOptions = compact({
141
- source: "adapter",
141
+ call: "adapter",
142
142
  adapter: deps.adapter,
143
143
  field: protectOptions.field,
144
144
  explain: protectOptions.explain,
@@ -162,7 +162,7 @@ async function guardOn(deps, instance, remote, report, request, permission, load
162
162
  decision,
163
163
  data
164
164
  };
165
- return refused(deps.options.onDenied, problemFromDecision(decision, permission, instance.subject, compact({
165
+ return refused(deps.options.deniedResponse, problemFromDecision(decision, permission, instance.subject, compact({
166
166
  approval: deps.options.approval,
167
167
  credentials,
168
168
  scope: declared?.[0] ?? challengeScope(deps.policy, permission),
@@ -172,18 +172,17 @@ async function guardOn(deps, instance, remote, report, request, permission, load
172
172
  //#endregion
173
173
  //#region src/server/create.ts
174
174
  async function resolveActor(request, options) {
175
- return (options.webBotAuth === void 0 ? void 0 : await options.webBotAuth(request)) ?? actorFrom(options.actor, request);
175
+ return (options.webBotAuth === void 0 ? void 0 : await options.webBotAuth.verify(request)) ?? actorFrom(options.actor, request);
176
176
  }
177
177
  const NO_TENANT = "\0";
178
- function createPermDock(policy, options) {
179
- return createServerKernel(policy, options);
180
- }
181
178
  /**
182
- * The kernel behind every HTTP adapter. The subject and actor are resolved
183
- * once per `Request`; one instance is cached per `(Request, tenant)`, so a
184
- * global middleware and a later tenant-scoped `protect` never share a tenant.
179
+ * The Fetch factory behind every HTTP adapter. The subject and actor are
180
+ * resolved once per `Request`; one instance is cached per `(Request, tenant)`,
181
+ * so a global middleware and a later tenant-scoped `protect` never share a
182
+ * tenant.
185
183
  */
186
- function createServerKernel(policy, options) {
184
+ function createPermDock(policy, given) {
185
+ const options = withApp(policy, given);
187
186
  const adapter = options.adapter ?? "server";
188
187
  const subjects = /* @__PURE__ */ new WeakMap();
189
188
  const instances = /* @__PURE__ */ new WeakMap();
@@ -217,7 +216,7 @@ function createServerKernel(policy, options) {
217
216
  context
218
217
  },
219
218
  errors,
220
- wrap: options.wrap
219
+ wrap: (created) => options.wrap === void 0 ? created : options.wrap(created)
221
220
  });
222
221
  const remote = options.pdp === void 0 ? void 0 : await options.pdp(policy, user, built.options);
223
222
  reporters.set(built.permdock, built.report);
@@ -243,7 +242,7 @@ function createServerKernel(policy, options) {
243
242
  };
244
243
  const connection = async (request, connectionOptions = {}, scope) => {
245
244
  const { tenant } = scope ?? await tenantScope(options.tenant, request);
246
- const { openConnection } = await import("./connection-DUsczpB5.js");
245
+ const { openConnection } = await import("./connection-DjhIJSs2.js");
247
246
  return openConnection({
248
247
  open: async () => (await build(request, { tenant })).permdock,
249
248
  rebuild: async () => (await instanceFor(await freshSubject(request), tenant)).permdock,
@@ -253,9 +252,9 @@ function createServerKernel(policy, options) {
253
252
  options: connectionOptions
254
253
  });
255
254
  };
256
- const permdock = async (request, scope) => (await build(request, scope)).permdock;
255
+ const getPermDock = async (request, scope) => (await build(request, scope)).permdock;
257
256
  const getSnapshot = async (request, query = {}) => {
258
- return (await permdock(request, query.tenant === void 0 ? void 0 : { tenant: query.tenant })).snapshot(compact({
257
+ return (await getPermDock(request, query.tenant === void 0 ? void 0 : { tenant: query.tenant })).snapshot(compact({
259
258
  include: query.include,
260
259
  tenants: query.tenants
261
260
  }));
@@ -265,7 +264,7 @@ function createServerKernel(policy, options) {
265
264
  options,
266
265
  adapter
267
266
  };
268
- const protectRoute = (permission, loadData, protectOptions = {}) => {
267
+ const protectRoute = (permission, data, protectOptions = {}) => {
269
268
  if (permission === null && routeScopes(protectOptions.oauthScopes) === void 0 && options.operations === void 0) throw new TypeError("PermDock: protect(null) needs oauthScopes, in its options or an operations entry");
270
269
  return async (request, scope) => {
271
270
  let instance;
@@ -280,7 +279,7 @@ function createServerKernel(policy, options) {
280
279
  };
281
280
  throw error;
282
281
  }
283
- return guardOn(deps, instance, remote, report, request, permission, loadData === void 0 ? void 0 : () => loadData(request), protectOptions);
282
+ return guardOn(deps, instance, remote, report, request, permission, data === void 0 ? void 0 : () => data(request), protectOptions);
284
283
  };
285
284
  };
286
285
  const protect = protectRoute;
@@ -299,14 +298,14 @@ function createServerKernel(policy, options) {
299
298
  } };
300
299
  }
301
300
  };
302
- const permdockHandler = (scope) => createEvaluationsHandler(compact({
301
+ const permdockHandler = (scope) => evaluationsHandler(compact({
303
302
  policy,
304
- resolve: scope === void 0 ? permdock : async (request) => permdock(request, await scope(request)),
303
+ resolve: scope === void 0 ? getPermDock : async (request) => getPermDock(request, await scope(request)),
305
304
  store: options.store,
306
305
  adapter
307
306
  }));
308
307
  return {
309
- permdock,
308
+ getPermDock,
310
309
  getSnapshot,
311
310
  protect,
312
311
  protectOn: (instance, permission, load, protectOptions = {}, request) => guardOn(deps, instance, void 0, reporters.get(instance) ?? (() => void 0), request, permission, load, protectOptions),
@@ -321,4 +320,4 @@ function createServerKernel(policy, options) {
321
320
  };
322
321
  }
323
322
  //#endregion
324
- export { createServerKernel as n, createPermDock as t };
323
+ export { createPermDock as t };
@@ -0,0 +1,110 @@
1
+ import { Nn as Decision, Pn as Denial, Rt as Instant, T as Policy, dt as TokenVerifier, j as PolicyVocabulary, qt as AuthEvent, rr as Principal, ut as TokenSigner } from "./policy-types-n0uRTsW8.js";
2
+ import { w as Permission } from "./vocabulary-CN8H_9UF.js";
3
+ import { i as PermDockOptions, p as PrincipalSource, r as PermDock, t as DecideOptions } from "./permdock-SV8ZINYT.js";
4
+ import { m as ApprovalStore } from "./types-BdtSDbBO.js";
5
+ import { a as AutomationSource } from "./automation-BNM3TtDo.js";
6
+ import { n as ApprovalWaiter } from "./waiter-B986w1oK.js";
7
+ import { n as RunAutomation, r as RunBinding } from "./run-ticket-DocwaTKn.js";
8
+ //#region src/workflow/create.d.ts
9
+ type WorkflowPermDockOptions = PermDockOptions & {
10
+ /** Signs the run tickets `start` mints. */
11
+ readonly signer: TokenSigner;
12
+ /** Verifies run tickets in `getPermDock`. */
13
+ readonly verifier: TokenVerifier;
14
+ /** Loads the principal a run acts as, live, on every `getPermDock`. */
15
+ readonly principals: PrincipalSource;
16
+ /** The live automation records, read by `start` and on every `getPermDock`. */
17
+ readonly automations: AutomationSource;
18
+ /** Where `awaitApproval` opens and resumes requests; the same option name as every other adapter. */
19
+ readonly store?: ApprovalStore;
20
+ /** Suspends `awaitApproval` until a request is decided. */
21
+ readonly waiter?: ApprovalWaiter;
22
+ readonly audience?: string | readonly string[];
23
+ readonly issuer?: string;
24
+ /** Run ticket lifetime in seconds. Defaults to 86400; a run past it denies. */
25
+ readonly expiresIn?: number;
26
+ readonly onAuth?: (event: AuthEvent) => void;
27
+ };
28
+ type AutomationOptions = {
29
+ /** The tenant the automation is read for. */
30
+ readonly tenant?: string;
31
+ /**
32
+ * The caller starting the run. It needs only the automation's `run`
33
+ * permission and lends the run nothing. Absent: server code starts the run,
34
+ * which an automation without `run` requires.
35
+ */
36
+ readonly caller?: PermDock;
37
+ /** The row `run` is decided on, when it is an instance permission. */
38
+ readonly row?: unknown;
39
+ /** The event that started the run, as JSON. Kept in `subject.context.trigger`; never a grant. */
40
+ readonly trigger?: Readonly<Record<string, unknown>>;
41
+ /** The run id (`jti`); a fresh UUID when absent. */
42
+ readonly id?: string;
43
+ readonly binding?: RunBinding;
44
+ readonly now?: Instant;
45
+ };
46
+ type StartAutomationResult = {
47
+ readonly outcome: "started";
48
+ readonly ticket: string;
49
+ readonly run: {
50
+ readonly id: string;
51
+ readonly automation: RunAutomation;
52
+ };
53
+ } | {
54
+ readonly outcome: "denied";
55
+ readonly denials: readonly Denial[];
56
+ };
57
+ type AwaitApprovalOptions = DecideOptions & {
58
+ /** The resource the approval request names; defaults to the permission's resource and the row's `id`. */
59
+ readonly resource?: {
60
+ readonly type: string;
61
+ readonly id?: string;
62
+ };
63
+ /** Seconds the request stays open; the store's `ttl` when absent. */
64
+ readonly ttl?: number;
65
+ readonly signal?: AbortSignal;
66
+ };
67
+ type WorkflowPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
68
+ /**
69
+ * Starts a run of the automation `id` and returns its run ticket. Denied
70
+ * when the automation is unknown or revoked (`validation`) or when the
71
+ * caller is not granted its `run` permission.
72
+ */
73
+ readonly start: (id: string, options?: AutomationOptions) => Promise<StartAutomationResult>;
74
+ /**
75
+ * The PermDock of a run, rebuilt from its ticket: the principal loaded
76
+ * live, narrowed to the automation's permissions and to any policy
77
+ * delegation to `actor('automation')`. A changed, revoked or unknown
78
+ * automation, or a publisher who is gone, gives an anonymous instance
79
+ * that denies everything.
80
+ */
81
+ readonly getPermDock: (ticket: string) => Promise<PermDock<V>>;
82
+ /**
83
+ * Decides `permission`; on `approval-required` opens a request, waits on
84
+ * the `waiter`, then rebuilds the run from its ticket and decides again
85
+ * with the token. The second decision reads the publisher's rights as of
86
+ * then, so a demotion while waiting denies.
87
+ */
88
+ readonly awaitApproval: (ticket: string, permission: Permission, data?: unknown, options?: AwaitApprovalOptions) => Promise<Decision>;
89
+ /**
90
+ * The first half of `awaitApproval`, for runners that wait outside the
91
+ * call: decides, and on `approval-required` opens the request and returns
92
+ * the decision with its token.
93
+ */
94
+ readonly openApproval: (ticket: string, permission: Permission, data?: unknown, options?: AwaitApprovalOptions) => Promise<Decision>;
95
+ /**
96
+ * The second half: rebuilds the run from its ticket and decides again with
97
+ * the approval `token`. A request still pending denies with reason
98
+ * `approval`.
99
+ */
100
+ readonly resumeApproval: (ticket: string, permission: Permission, token: string, data?: unknown, options?: AwaitApprovalOptions) => Promise<Decision>;
101
+ };
102
+ /**
103
+ * Creates the PermDock for durable runs of published automations. A run
104
+ * acts as the automation's principal with that principal's rights at each
105
+ * step, narrowed to the automation's operations; the trigger is recorded
106
+ * and never grants.
107
+ */
108
+ declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: WorkflowPermDockOptions): WorkflowPermDock<V>;
109
+ //#endregion
110
+ export { WorkflowPermDockOptions as a, WorkflowPermDock as i, AwaitApprovalOptions as n, createPermDock as o, StartAutomationResult as r, AutomationOptions as t };