permdock 0.6.0 → 0.8.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 (507) hide show
  1. package/README.md +2 -3
  2. package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
  3. package/dist/a2a/index.d.ts +7 -7
  4. package/dist/a2a/index.js +9 -9
  5. package/dist/action-result-CL-QCITA.d.ts +19 -0
  6. package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
  7. package/dist/{adoption-scan-DCYe60Pi.js → adoption-scan-BLs67P1l.js} +5 -5
  8. package/dist/agent/index.d.ts +3 -3
  9. package/dist/agent/index.js +1 -1
  10. package/dist/ai-sdk/index.d.ts +31 -10
  11. package/dist/ai-sdk/index.js +22 -12
  12. package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
  13. package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
  14. package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  15. package/dist/{approval-prompt-DvSSPQJX.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
  16. package/dist/approvals/index.d.ts +5 -5
  17. package/dist/approvals/index.js +7 -7
  18. package/dist/{approvals-p1PGoVjb.js → approvals-DnIBTuXE.js} +128 -78
  19. package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
  20. package/dist/{arazzo-41WuzHou.js → arazzo-3RhGfkAK.js} +2 -2
  21. package/dist/{arazzo-CaUVBn7D.js → arazzo-B5-ulWif.js} +6 -6
  22. package/dist/{args-IIolxxKA.js → args-0FrVs5EH.js} +125 -8
  23. package/dist/astro/index.d.ts +30 -12
  24. package/dist/astro/index.js +2 -2
  25. package/dist/{audience-DabClFLQ.js → audience-BAkBDMqn.js} +8 -8
  26. package/dist/{auth-DRLEizbL.js → auth--yPyZNgr.js} +21 -10
  27. package/dist/authzen/index.d.ts +171 -25
  28. package/dist/authzen/index.js +321 -149
  29. package/dist/{automation-BNM3TtDo.d.ts → automation-DqEoWHBc.d.ts} +42 -32
  30. package/dist/{automation-DVjOckjV.js → automation-x3KEUusw.js} +22 -21
  31. package/dist/base-url-BQbddZO5.js +9 -0
  32. package/dist/better-auth/index.d.ts +2 -2
  33. package/dist/better-auth/index.js +13 -7
  34. package/dist/better-supabase/index.d.ts +392 -220
  35. package/dist/better-supabase/index.js +293 -152
  36. package/dist/{bind-DOyrv6zi.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
  37. package/dist/{bind-CAvgUuKs.js → bind-D_sZSVA3.js} +22 -10
  38. package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
  39. package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
  40. package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
  41. package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
  42. package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
  43. package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
  44. package/dist/{build-instance-Bu_eDqYw.js → build-instance-CNWaYJyr.js} +3 -3
  45. package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
  46. package/dist/{capability-N1K9IpqS.js → capability-BqX94r07.js} +31 -25
  47. package/dist/{capability-Drg-1YhL.d.ts → capability-ChuiONQU.d.ts} +41 -29
  48. package/dist/{casbin-Dyu2gnUD.js → casbin-H0rKxBx2.js} +16 -8
  49. package/dist/{casbin-Cr7RLtA3.js → casbin-cbSbhT_k.js} +2 -2
  50. package/dist/{casl-64gpT-8x.js → casl-C4OINZHI.js} +2 -2
  51. package/dist/{casl-DjEDhTCP.js → casl-CHHoCldP.js} +19 -10
  52. package/dist/catalog/index.d.ts +104 -23
  53. package/dist/catalog/index.js +117 -8
  54. package/dist/{catalog-HD2gf5mY.js → catalog-BFpz2EmT.js} +57 -26
  55. package/dist/{catalog-DZVbrF-z.js → catalog-DCspHDc8.js} +3 -3
  56. package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-DjMKzJp9.js} +53 -16
  57. package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-e6aCWosn.js} +19 -15
  58. package/dist/catalog-mRQQQhNK.js +1 -0
  59. package/dist/catalog-operations-Dadrl7Z-.js +60 -0
  60. package/dist/{create-CQWIpUG-.js → challenge-DImNcR7B.js} +157 -39
  61. package/dist/chat/index.d.ts +1 -1
  62. package/dist/chat/index.js +13 -10
  63. package/dist/chat-sdk/index.d.ts +44 -26
  64. package/dist/chat-sdk/index.js +17 -17
  65. package/dist/checks-CGkP3Z7A.js +40 -0
  66. package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
  67. package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
  68. package/dist/claude-agent/index.d.ts +6 -6
  69. package/dist/claude-agent/index.js +6 -3
  70. package/dist/clerk/index.d.ts +11 -7
  71. package/dist/clerk/index.js +6 -6
  72. package/dist/cli/bin.js +4 -4
  73. package/dist/cli/index.d.ts +82 -7
  74. package/dist/cli/index.js +6 -6
  75. package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
  76. package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
  77. package/dist/cloud/index.d.ts +186 -38
  78. package/dist/cloud/index.js +293 -31
  79. package/dist/{cloud-ytQ3uviA.js → cloud-BFlGMaak.js} +5 -6
  80. package/dist/{codemod-5mpSpnUY.js → codemod-DLQ9Zpo4.js} +3 -4
  81. package/dist/{codemod-ua2hHy7w.js → codemod-DWSN2erG.js} +523 -201
  82. package/dist/collect-B5BL3klN.js +1 -0
  83. package/dist/{collect-mLTY4nwb.js → collect-B7ZFAJU3.js} +36 -64
  84. package/dist/{collect-Ci6akVwH.js → collect-Bzv3le0A.js} +6 -6
  85. package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
  86. package/dist/compile/index.d.ts +2 -2
  87. package/dist/compile/index.js +1 -1
  88. package/dist/{compile-1bsAezL0.d.ts → compile-BFzysW3o.d.ts} +36 -12
  89. package/dist/{compile-CMqMx_IN.js → compile-EzEMB-7v.js} +77 -33
  90. package/dist/{completion-BTFrHZhX.js → completion-saoYiRFO.js} +17 -8
  91. package/dist/config-BwPBfN0t.js +108 -0
  92. package/dist/{config-Bj2Ixq3d.js → config-DBeXXmBF.js} +2 -2
  93. package/dist/{config-report-DSpsLpCE.js → config-report-BipSWA6V.js} +9 -6
  94. package/dist/config-shape-ykV0Vm2n.js +134 -0
  95. package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
  96. package/dist/connector-schema-CYLQNMYq.js +434 -0
  97. package/dist/{context-B_u3_bDJ.js → context-BnIzxTNE.js} +4 -3
  98. package/dist/convex/index.d.ts +13 -7
  99. package/dist/convex/index.js +9 -6
  100. package/dist/core-H-mbhpZc.js +341 -0
  101. package/dist/core-hWIARPDz.d.ts +206 -0
  102. package/dist/{create-CBMmFie-.d.ts → create-BSNrVuxh.d.ts} +87 -34
  103. package/dist/{create-B30OMUOJ.d.ts → create-BVq1lNQE.d.ts} +49 -28
  104. package/dist/{create-D_NmPOdH.d.ts → create-CM1FciYG.d.ts} +37 -29
  105. package/dist/{create-CGm28gyI.js → create-Cq4Uox0f.js} +13 -9
  106. package/dist/{create-DCF2SvoT.js → create-_noSrY1T.js} +15 -21
  107. package/dist/{credential-BcoiejpY.js → credential-CyyyvCsL.js} +42 -39
  108. package/dist/{credentials-DPyHmYz5.js → credentials-CdDxp7jN.js} +6 -6
  109. package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-NB4wcyBf.js} +13 -2
  110. package/dist/{delegation-j6-rc37o.js → delegation-CDB6_keF.js} +31 -22
  111. package/dist/delivery/index.d.ts +5 -5
  112. package/dist/delivery/index.js +6 -5
  113. package/dist/{delivery-DCAgNyCn.js → delivery-BupfvJIV.js} +81 -20
  114. package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
  115. package/dist/denied-text-CHNlVInN.d.ts +22 -0
  116. package/dist/{describe-BybMRY7A.js → describe-Bb4hGK5d.js} +6 -5
  117. package/dist/{describe-B5qgDvEW.d.ts → describe-ByS9LgHK.d.ts} +5 -5
  118. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  119. package/dist/{diff-CmuSD3vc.js → diff-CN8IYhC_.js} +2 -2
  120. package/dist/{diff-3jbx6Rm4.js → diff-iZWV65nC.js} +23 -14
  121. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  122. package/dist/{doctor-BdZw53-k.js → doctor-CHD1M9R5.js} +485 -141
  123. package/dist/{doctor-3ZqNHX_G.js → doctor-D3wo-yuz.js} +4 -4
  124. package/dist/drizzle/index.d.ts +33 -19
  125. package/dist/drizzle/index.js +17 -9
  126. package/dist/elysia/index.d.ts +17 -11
  127. package/dist/elysia/index.js +5 -5
  128. package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
  129. package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  130. package/dist/{errors-CWTY6uih.js → errors-Vpu6rKHl.js} +14 -10
  131. package/dist/{errors-DH5QEGXh.d.ts → errors-zi_4T-rx.d.ts} +22 -6
  132. package/dist/{evaluate-CNClBvcj.js → evaluate-Dd8Ta0Ie.js} +185 -80
  133. package/dist/{evaluations-beAooV0n.js → evaluations-IBceAeKT.js} +41 -20
  134. package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-z8dQFDaN.d.ts} +12 -6
  135. package/dist/eve/index.d.ts +9 -6
  136. package/dist/eve/index.js +4 -4
  137. package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
  138. package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
  139. package/dist/express/index.d.ts +9 -6
  140. package/dist/express/index.js +9 -6
  141. package/dist/fastify/index.d.ts +16 -10
  142. package/dist/fastify/index.js +8 -5
  143. package/dist/{fetch-adapter-Dw0MTS3D.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
  144. package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-JL43jD3E.js} +14 -11
  145. package/dist/fields-D0vUI6dq.js +498 -0
  146. package/dist/{files-C5ZI27eV.js → files-B3AA05f1.js} +21 -5
  147. package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
  148. package/dist/{fixtures-B7XrLeY7.js → fixtures-A1_sp_tR.js} +15 -6
  149. package/dist/{flags-C3DktBDY.js → flags-DXjoTVbS.js} +2 -2
  150. package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
  151. package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-DCakWRsr.js} +26 -16
  152. package/dist/gen-B5kvbAoZ.js +58 -0
  153. package/dist/gen-DWCYcMQM.js +827 -0
  154. package/dist/generate-CRVV5V7l.js +165 -0
  155. package/dist/generate-CezbCaTI.js +275 -0
  156. package/dist/{grantee-hxrUsbpM.js → grantee-Dke-9rd1.js} +4 -4
  157. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-BrYPe-w0.js} +12 -12
  158. package/dist/{grantee-match-DbENBHLB.js → grantee-match-7RZZvoT_.js} +12 -6
  159. package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
  160. package/dist/h3/index.d.ts +10 -7
  161. package/dist/h3/index.js +3 -3
  162. package/dist/headers-B9jQxjtW.d.ts +10 -0
  163. package/dist/{helpers-CBYVMjwh.js → helpers-DJicaG6f.js} +40 -28
  164. package/dist/hono/index.d.ts +16 -10
  165. package/dist/hono/index.js +5 -5
  166. package/dist/{hosted-BPk51-kX.d.ts → hosted-Cmtxogd0.d.ts} +44 -20
  167. package/dist/{hosted-B46-5LYE.js → hosted-D0IzESu_.js} +68 -25
  168. package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
  169. package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
  170. package/dist/{http-DXJ37RDA.js → http-DOL33cO0.js} +11 -8
  171. package/dist/{import-wyqXUyjm.js → import-CST57XLp.js} +64 -51
  172. package/dist/{import-CNV7I2Dw.js → import-_YqhhwvX.js} +6 -6
  173. package/dist/{index-B8YjkEZ4.d.ts → index-B8s204GL.d.ts} +64 -52
  174. package/dist/{index-Ch8LpNDp.d.ts → index-BT5-1VsX.d.ts} +64 -25
  175. package/dist/{index-DuWxc5dt.d.ts → index-BW_0MZOS.d.ts} +388 -149
  176. package/dist/index-BhxEUY9J.d.ts +233 -0
  177. package/dist/index-Bv5iXPqU.d.ts +210 -0
  178. package/dist/{index-C-6Letxg.d.ts → index-_9UiQIkt.d.ts} +164 -77
  179. package/dist/index.d.ts +22 -21
  180. package/dist/index.js +35 -33
  181. package/dist/{init-GG6Jh8HD.js → init-Dz_PsHdv.js} +5 -5
  182. package/dist/{init-DeMYsnYJ.js → init-cE3A8aXq.js} +10 -10
  183. package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
  184. package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot--JWiTrvO.js} +81 -56
  185. package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
  186. package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
  187. package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
  188. package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
  189. package/dist/jwt/index.d.ts +125 -17
  190. package/dist/jwt/index.js +157 -16
  191. package/dist/{kernel-D0NVb1cK.js → kernel-C-fYydV2.js} +151 -16
  192. package/dist/kysely/index.d.ts +49 -33
  193. package/dist/kysely/index.js +9 -7
  194. package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
  195. package/dist/{load-DFS_ry0W.js → load-DjSU5KXO.js} +6 -6
  196. package/dist/load-Dm0pSYH3.js +1 -0
  197. package/dist/{login-Dfe5RlYk.js → login-D-8tMqzo.js} +4 -4
  198. package/dist/{login-imhuwvn3.js → login-DplQ0s84.js} +18 -15
  199. package/dist/{manifest-dvL2XEe1.js → manifest-Cgiq5oqc.js} +67 -37
  200. package/dist/{manifest-mx5ghSFM.d.ts → manifest-CzzWtnAb.d.ts} +144 -28
  201. package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-2r37XRhD.js} +80 -9
  202. package/dist/{manifest-C8IzW3Do.js → manifest-wg8WkkpD.js} +11 -7
  203. package/dist/{map-claims-D3oRmTk0.js → map-claims-BNWCJtmP.js} +27 -18
  204. package/dist/{map-error-Dr70oA_3.js → map-error-pasIGqMT.js} +7 -7
  205. package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
  206. package/dist/mcp/index.d.ts +154 -47
  207. package/dist/mcp/index.js +200 -41
  208. package/dist/{migrate-CIq4-E9F.js → migrate-B7oP_sQU.js} +102 -31
  209. package/dist/module-values-BJTBdo6y.js +107 -0
  210. package/dist/nest/index.d.ts +23 -13
  211. package/dist/nest/index.js +18 -11
  212. package/dist/next/client.d.ts +5 -2
  213. package/dist/next/client.js +1 -1
  214. package/dist/next/index.d.ts +72 -26
  215. package/dist/next/index.js +110 -6
  216. package/dist/next/plugin.d.ts +1 -1
  217. package/dist/next/plugin.js +4 -3
  218. package/dist/node/index.d.ts +5 -5
  219. package/dist/node/index.js +3 -3
  220. package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
  221. package/dist/openai/index.d.ts +13 -7
  222. package/dist/openai/index.js +3 -3
  223. package/dist/openapi/index.d.ts +61 -30
  224. package/dist/openapi/index.js +2 -2
  225. package/dist/{openapi-B7HZ0f-r.js → openapi-BOsx0xn9.js} +34 -24
  226. package/dist/{openapi-C4dDTVEd.js → openapi-CBZUhA3l.js} +4 -5
  227. package/dist/{openapi-DD1SV-5-.js → openapi-VeHHU2l9.js} +23 -14
  228. package/dist/{operation-findings-DgATDpvh.js → operation-findings-CXtFzlKJ.js} +3 -3
  229. package/dist/{operations-X0VM7F3m.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
  230. package/dist/orpc/index.d.ts +68 -14
  231. package/dist/orpc/index.js +62 -13
  232. package/dist/otel/index.d.ts +7 -4
  233. package/dist/otel/index.js +8 -5
  234. package/dist/output-files-BHOIlrfD.js +1 -0
  235. package/dist/{output-files-DhRBBE4n.js → output-files-BIQ_9pIs.js} +29 -17
  236. package/dist/{output-1im__-08.js → output-tkju6U7R.js} +15 -7
  237. package/dist/ownership-B4L59T9u.js +1054 -0
  238. package/dist/parse-1_ZheTW5.js +151 -0
  239. package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
  240. package/dist/parse-local-manifest-DEiCF4ah.js +69 -0
  241. package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
  242. package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
  243. package/dist/pdp/index.d.ts +9 -6
  244. package/dist/pdp/index.js +23 -12
  245. package/dist/{peer-CRvC7Hg1.js → peer-C9LvBCcb.js} +1 -1
  246. package/dist/peer-Q0fuZ6hx.js +982 -0
  247. package/dist/{permdock-SV8ZINYT.d.ts → permdock-B6Sf4T_S.d.ts} +270 -117
  248. package/dist/{permdock-BrAscV28.js → permdock-L-_I_3zP.js} +226 -74
  249. package/dist/{permission-registry-Br4jSNVi.js → permission-registry-B8tYxPIt.js} +24 -11
  250. package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-CAY-GU7e.d.ts} +130 -104
  251. package/dist/{permissions-u_KHg-sN.d.ts → permissions-Bx6UI8n1.d.ts} +6 -2
  252. package/dist/{permissions-B-wCP5ZC.js → permissions-CVXmRILq.js} +3 -3
  253. package/dist/{permissions-BPxlwVhN.js → permissions-mDcTWoBs.js} +8 -5
  254. package/dist/pg-DQTqRrou.js +60 -0
  255. package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
  256. package/dist/pkce-CnmmYqUZ.js +21 -0
  257. package/dist/{policy-77FSAq_V.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
  258. package/dist/{policy-DbM5YYtV.js → policy-CLQ8__GF.js} +49 -20
  259. package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-CJgOm6aq.js} +28 -25
  260. package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
  261. package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-CCiDRZBH.d.ts} +802 -334
  262. package/dist/postgres-store-DcyrPS-r.js +1028 -0
  263. package/dist/{postgrest-DAjUkF9w.js → postgrest-D4nuPXIQ.js} +88 -36
  264. package/dist/{postgrest-CEgRbefE.d.ts → postgrest-DicQyqm-.d.ts} +60 -30
  265. package/dist/powersync-DHNQX06W.js +1117 -0
  266. package/dist/{powersync-DISt6SUe.js → powersync-DXqGuq9A.js} +3 -3
  267. package/dist/powersync-Djf-zCpB.js +1 -0
  268. package/dist/preset/index.d.ts +38 -28
  269. package/dist/preset/index.js +1 -1
  270. package/dist/{preset-DZdU0tne.js → preset-BjLzeFpp.js} +58 -34
  271. package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
  272. package/dist/prisma/index.d.ts +69 -41
  273. package/dist/prisma/index.js +21 -17
  274. package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
  275. package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
  276. package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
  277. package/dist/prompt-BYc6drYW.js +938 -0
  278. package/dist/protected-action-BE7N_Luo.d.ts +58 -0
  279. package/dist/protected-action-DUYqb-Ma.js +80 -0
  280. package/dist/{protected-BlF0F6wL.js → protected-action-QEA8arRB.js} +48 -14
  281. package/dist/{provider-B1al-AZz.js → provider-C55OGXJ7.js} +5 -4
  282. package/dist/{provider-DILL9oPK.d.ts → provider-DXfq5c2d.d.ts} +1 -1
  283. package/dist/{provider-store-DM6DNcta.js → provider-store-CaTv00tr.js} +13 -9
  284. package/dist/pull-B65ndFNZ.js +1 -0
  285. package/dist/{pull-jEwbf80J.js → pull-CwpGaQSi.js} +12 -11
  286. package/dist/{push-BD4f15co.js → push-DgssgzkK.js} +62 -16
  287. package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
  288. package/dist/{pushed-policy-CqtxkV4G.js → pushed-policy-ITwYKvvH.js} +10 -7
  289. package/dist/react/index.d.ts +9 -8
  290. package/dist/react/index.js +7 -6
  291. package/dist/react/provider-client.d.ts +1 -1
  292. package/dist/react/provider-client.js +1 -1
  293. package/dist/react-native/index.d.ts +104 -51
  294. package/dist/react-native/index.js +394 -67
  295. package/dist/{refs-K6eWUJ0H.js → refs-C8BKxc_e.js} +17 -3
  296. package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
  297. package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
  298. package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
  299. package/dist/{replay-Bkm-Ne4l.d.ts → replay-DNftIb_R.d.ts} +1 -1
  300. package/dist/{request-context-C81Pip9n.js → request-context-C25ilqiJ.js} +8 -8
  301. package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
  302. package/dist/resend/index.d.ts +34 -28
  303. package/dist/resend/index.js +29 -29
  304. package/dist/resolve-names-CF7xXLSG.js +201 -0
  305. package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
  306. package/dist/{retire-CALjIQ7e.js → retire-B2xffQgY.js} +15 -6
  307. package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
  308. package/dist/{rls-DTvYd-lI.js → rls-CNEH2_BG.js} +743 -624
  309. package/dist/{rls-BAqP4q66.js → rls-Ca8Jz9b5.js} +41 -10
  310. package/dist/{role-builder-uWQZ4v84.js → role-builder-BK2-T6oD.js} +41 -20
  311. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  312. package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
  313. package/dist/{rpc-VSl5ylaQ.js → rpc-fNqAIqQk.js} +8 -5
  314. package/dist/{run-CUKuz0A8.js → run-Bz26OTfO.js} +26 -23
  315. package/dist/run-D-JE8QWb.js +1 -0
  316. package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-DbWI9f99.d.ts} +33 -13
  317. package/dist/{run-ticket-sxFI6LAk.js → run-ticket-Dv7aF7Dk.js} +29 -8
  318. package/dist/{runtime-D3VTAiCA.js → runtime-BGnrOkVH.js} +5 -2
  319. package/dist/{saas-BCXRuXca.js → saas-iWnUdwCt.js} +42 -29
  320. package/dist/{scan-qvOe0hS3.js → scan-DCj1KQfn.js} +1 -1
  321. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  322. package/dist/{schema-yLuBWWsh.js → schema-Dst9I9Gs.js} +9 -5
  323. package/dist/scim/index.d.ts +3 -2
  324. package/dist/scim/index.js +3 -1
  325. package/dist/scim-D8YupzX1.js +44 -0
  326. package/dist/{scim-ClHtpyV3.js → scim-jJBJ7g1Z.js} +35 -551
  327. package/dist/{scopes-CUPSjo9q.js → scopes-0Up_UA2t.js} +42 -24
  328. package/dist/server/index.d.ts +12 -12
  329. package/dist/server/index.js +13 -13
  330. package/dist/{server-C3WXAHZj.js → server-3cVlTLde.js} +31 -31
  331. package/dist/{server-types-CKQiCnON.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
  332. package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
  333. package/dist/{shared-BAK8t4Uo.js → shared-Afctg7B0.js} +100 -61
  334. package/dist/{shared-DvvFzYXe.js → shared-l0oGGetg.js} +9 -6
  335. package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
  336. package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  337. package/dist/{sink-4-eQIRWf.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
  338. package/dist/{skills-B6lVdD_W.js → skills-Bjj7BNEQ.js} +16 -12
  339. package/dist/{skills-CTYwkl44.js → skills-OuoMR49L.js} +3 -3
  340. package/dist/{snapshot-B7DkYg6g.js → snapshot-CXlzi69u.js} +21 -18
  341. package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
  342. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-Bx_4xC_6.js} +14 -11
  343. package/dist/solid/index.d.ts +55 -15
  344. package/dist/solid/index.js +46 -12
  345. package/dist/solid-start/index.d.ts +30 -12
  346. package/dist/solid-start/index.js +3 -3
  347. package/dist/sources-B1Os_YUu.d.ts +312 -0
  348. package/dist/{sources-vs5dGOsS.js → sources-CMAM-2A3.js} +156 -51
  349. package/dist/sources-qoIJQrJv.js +11 -0
  350. package/dist/{sql-B5T1IL83.js → sql-0WjxIp9g.js} +32 -7
  351. package/dist/sql-B80DFdpG.d.ts +10 -0
  352. package/dist/{src-Cu2m75uo.js → src-DZ0l9UAg.js} +305 -123
  353. package/dist/ssf/index.d.ts +4 -4
  354. package/dist/ssf/index.js +665 -224
  355. package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
  356. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  357. package/dist/{store-BDutJkDL.js → store-RNFvaJJv.js} +43 -29
  358. package/dist/{store-options-u0ycEe8s.js → store-options-Dil3lraY.js} +105 -15
  359. package/dist/stores-C0Kta5Ft.d.ts +59 -0
  360. package/dist/{stores-CGhM8BN_.js → stores-DxZWDXCs.js} +42 -5
  361. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  362. package/dist/{stream-CeCMJmBB.d.ts → stream-ltuLdtTG.d.ts} +4 -3
  363. package/dist/{style-DiKWnAvn.js → style-DblOtSga.js} +1 -1
  364. package/dist/{style-Uao76wO7.js → style-Ds11Hmk4.js} +3 -1
  365. package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
  366. package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
  367. package/dist/supabase/index.d.ts +48 -37
  368. package/dist/supabase/index.js +6 -6
  369. package/dist/supabase/middleware.d.ts +19 -13
  370. package/dist/supabase/middleware.js +7 -7
  371. package/dist/{supabase-x5JtR2tc.js → supabase-BL1qJzzY.js} +82 -36
  372. package/dist/{supabase-By_frk3U.js → supabase-D39cuGPt.js} +3 -3
  373. package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-B-yXnzUl.js} +1206 -286
  374. package/dist/supabase-hook-H-MtE9Wd.js +1 -0
  375. package/dist/supautils-BU-pAEpf.js +808 -0
  376. package/dist/{support-session-C6xJQYut.js → support-session-BsmPCbz8.js} +22 -22
  377. package/dist/svelte/PermissionBoundary.svelte +2 -6
  378. package/dist/svelte/Protected.svelte +2 -8
  379. package/dist/svelte/index.d.ts +9 -8
  380. package/dist/svelte/index.js +10 -9
  381. package/dist/svelte/runtime.d.ts +4 -4
  382. package/dist/svelte/runtime.js +4 -4
  383. package/dist/svelte/source.d.ts +9 -8
  384. package/dist/svelte/source.js +6 -5
  385. package/dist/sveltekit/index.d.ts +30 -12
  386. package/dist/sveltekit/index.js +2 -2
  387. package/dist/{ownership-DqaJNJPn.js → tables-DeMNEy6V.js} +1025 -1085
  388. package/dist/tanstack-start/index.d.ts +22 -10
  389. package/dist/tanstack-start/index.js +2 -2
  390. package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
  391. package/dist/{tenancy-DN2QAx9z.js → tenancy-5d1zVBvK.js} +36 -21
  392. package/dist/terminal/index.d.ts +23 -14
  393. package/dist/terminal/index.js +17 -20
  394. package/dist/testing/core.d.ts +2 -0
  395. package/dist/testing/core.js +1 -0
  396. package/dist/testing/fixtures/index.d.ts +15 -0
  397. package/dist/testing/fixtures/index.js +831 -0
  398. package/dist/testing/index.d.ts +235 -285
  399. package/dist/testing/index.js +502 -927
  400. package/dist/testing/saas/index.d.ts +43 -27
  401. package/dist/testing/saas/index.js +2 -2
  402. package/dist/testing/saas/permissions.d.ts +1 -1
  403. package/dist/testing/saas/permissions.js +1 -1
  404. package/dist/text-diff-BtfSmdUo.js +444 -0
  405. package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
  406. package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
  407. package/dist/{token-BLZcjQgt.js → token-DC9EQiet.js} +15 -13
  408. package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-Qpjs_W6M.js} +5 -2
  409. package/dist/trpc/index.d.ts +11 -8
  410. package/dist/trpc/index.js +15 -9
  411. package/dist/type-helpers-BIPIDa6a.d.ts +50 -0
  412. package/dist/{types-8RnwUAvE.d.ts → types-AMJ5qoU_.d.ts} +49 -30
  413. package/dist/{types-C_IiEs64.d.ts → types-B2mlGuhW.d.ts} +14 -11
  414. package/dist/{types-_WhUP7ud.d.ts → types-B4uqKDnp.d.ts} +25 -12
  415. package/dist/{types-CX7AvRqP.d.ts → types-BJk0BKRX.d.ts} +24 -14
  416. package/dist/types-B_d_g7T3.d.ts +262 -0
  417. package/dist/{types-BdtSDbBO.d.ts → types-B_tiYvk8.d.ts} +59 -32
  418. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  419. package/dist/{types-Dfv0aTER.d.ts → types-DC1Loeh3.d.ts} +449 -168
  420. package/dist/{types-lUlG3TVd.d.ts → types-DHKPcqzr.d.ts} +2 -2
  421. package/dist/{types-C791HFu9.d.ts → types-DjuMBNF9.d.ts} +68 -32
  422. package/dist/{types-C863OQiR.d.ts → types-HzqOtvsJ.d.ts} +23 -12
  423. package/dist/{types-Druu9wLM.d.ts → types-ZzRGoViD.d.ts} +77 -24
  424. package/dist/{types-BzzaHxt3.d.ts → types-ah9NlU6j.d.ts} +137 -48
  425. package/dist/{types-CVZSNocA.d.ts → types-djVzLlIV.d.ts} +31 -14
  426. package/dist/{types-BtHtcKMr.d.ts → types-yUuPR5Hy.d.ts} +47 -24
  427. package/dist/unplugin/index.d.ts +1 -1
  428. package/dist/unplugin/index.js +2 -2
  429. package/dist/usage-CYeXek0p.js +1 -0
  430. package/dist/{usage-SveTRTyr.js → usage-CxEzS4ey.js} +50 -26
  431. package/dist/{usage-CRVl9V3t.js → usage-ab0PdusX.js} +2 -2
  432. package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
  433. package/dist/{validation-error-DHUrAkku.d.ts → validation-error-YGg2mXyH.d.ts} +5 -2
  434. package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
  435. package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
  436. package/dist/{verify-BaAKx7t6.js → verify-DZeqoWu5.js} +417 -489
  437. package/dist/version-DMQ0dnN5.js +48 -0
  438. package/dist/version-DizhmD72.js +1 -0
  439. package/dist/{views-DTIIO-oQ.js → views-CD8wuL4Z.js} +19 -6
  440. package/dist/vocabulary-DEJ5j4mR.d.ts +70 -0
  441. package/dist/vue/index.d.ts +71 -21
  442. package/dist/vue/index.js +50 -13
  443. package/dist/{waiter-B986w1oK.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
  444. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  445. package/dist/{watch-vea54PRw.js → watch-Cx_WciLE.js} +8 -8
  446. package/dist/watch-DB42U1ib.js +1 -0
  447. package/dist/webmcp/index.d.ts +11 -11
  448. package/dist/webmcp/index.js +8 -5
  449. package/dist/{where-scope-C9vfEphl.js → where-scope-DlCdCM_8.js} +56 -30
  450. package/dist/{who-can-DWBAcaCQ.js → who-can-rI7dCR9Q.js} +23 -20
  451. package/dist/workflow/index.d.ts +3 -3
  452. package/dist/workflow/index.js +13 -13
  453. package/dist/workflow-sdk/index.d.ts +19 -13
  454. package/dist/workflow-sdk/index.js +6 -6
  455. package/dist/{wrap-gX61EtpB.js → wrap-B2wziJI_.js} +11 -5
  456. package/dist/{wrap-C5jC6sKI.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
  457. package/package.json +25 -14
  458. package/schemas/catalog-v1.json +3 -0
  459. package/schemas/cli-result-v1.json +1 -0
  460. package/schemas/cloud-api-v1.json +152 -7
  461. package/schemas/connector-v1.json +8 -0
  462. package/schemas/supabase-claims-v1.json +5 -0
  463. package/schemas/supabase-manifest-v1.json +308 -75
  464. package/skills/permdock/SKILL.md +1 -0
  465. package/skills/permdock-agents/references/runtimes.md +3 -1
  466. package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
  467. package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
  468. package/skills/permdock-data/references/queries-and-rls.md +6 -2
  469. package/skills/permdock-tenancy/SKILL.md +1 -1
  470. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -1
  471. package/skills/permdock-wire/references/adapters.md +28 -22
  472. package/skills/permdock-wire/references/policy-options.md +1 -0
  473. package/dist/catalog-BoWglDPI.js +0 -1
  474. package/dist/collect-D7eQDffE.js +0 -1
  475. package/dist/config-bs_kZeYq.js +0 -162
  476. package/dist/denied-text-CiFQNuMV.d.ts +0 -19
  477. package/dist/fields-OYG_JR78.js +0 -203
  478. package/dist/generate-CNU1pIOo.js +0 -171
  479. package/dist/headers-BIjfMaoC.js +0 -8
  480. package/dist/headers-CIbDTUTK.d.ts +0 -7
  481. package/dist/index-Cp_ilKi1.d.ts +0 -91
  482. package/dist/index-CueFnxQc.d.ts +0 -110
  483. package/dist/load-BxEtwlBS.js +0 -1
  484. package/dist/output-files-B3IZJksC.js +0 -1
  485. package/dist/package-root-Dk_ETdkp.js +0 -31
  486. package/dist/parse-Cxq0WxrA.js +0 -53
  487. package/dist/parse-local-manifest-5ODwqu8b.d.ts +0 -10
  488. package/dist/parse-local-manifest-CVSs6J9I.js +0 -34
  489. package/dist/peer-C8swJ2GH.js +0 -50
  490. package/dist/policies-DP2nqRoF.js +0 -295
  491. package/dist/powersync-BkWWCS1K.js +0 -538
  492. package/dist/powersync-MMJ2mI2q.js +0 -1
  493. package/dist/problem-details-B45V5d2b.d.ts +0 -7
  494. package/dist/prompt-DfZLJLIn.js +0 -32
  495. package/dist/protected-RFGpakN9.d.ts +0 -38
  496. package/dist/pull-CvpINcMK.js +0 -1
  497. package/dist/run-DDwUaJDU.js +0 -1
  498. package/dist/sources-Xc4zkszI.d.ts +0 -190
  499. package/dist/stores-BUGNbJTt.d.ts +0 -30
  500. package/dist/supabase-hook-CCw5m35C.js +0 -1
  501. package/dist/supautils-B6HYL9eL.js +0 -91
  502. package/dist/text-diff-BQcUapOb.js +0 -15
  503. package/dist/types-B3_ooZgZ.d.ts +0 -172
  504. package/dist/usage-CZpSQP6L.js +0 -1
  505. package/dist/version-CEbQ5UeM.js +0 -18
  506. package/dist/version-DXkYUISx.js +0 -1
  507. package/dist/watch--ovlPOc0.js +0 -1
@@ -1,29 +1,169 @@
1
- import { Jt as AutomationEvent, Kt as AccessEvent, Qt as DeliveryEvent, Rt as Instant, Xt as DecisionEvent, Yt as CredentialEvent, Zt as DeliveryChannel, en as DirectoryEvent, nn as MembershipEvent, ut as TokenSigner } from "../policy-types-n0uRTsW8.js";
2
- import { m as ApprovalStore } from "../types-BdtSDbBO.js";
3
- import { i as CatalogEventData, l as CloudEventType, r as CLOUD_EVENT_TYPES, s as CloudEvent } from "../sink-4-eQIRWf.js";
4
- import { c as DeliveryTransport } from "../types-BtHtcKMr.js";
5
- import { a as CloudConnectionOptions, c as CloudOptions, i as CloudClient, l as CloudSignerOptions, n as CloudCatalog, o as CloudEndpointOptions, r as CloudCatalogPush, s as CloudEndpoints, t as CloudApproverOptions } from "../types-8RnwUAvE.js";
6
- import { n as ApprovalWaiter } from "../waiter-B986w1oK.js";
7
- import { l as ReplayStore } from "../types-C791HFu9.js";
8
- import { f as WebhookVerifier, r as WebhookFailureCause$1, s as WebhookJwks } from "../standard-webhooks-rbD7LS6h.js";
1
+ import { $t as CredentialEvent, Qt as AutomationEvent, Rt as Instant, Xt as AccessEvent, en as DecisionEvent, in as DirectoryEvent, nn as DeliveryEvent, on as MembershipEvent, tn as DeliveryChannel, ut as TokenSigner } from "../policy-types-CCiDRZBH.js";
2
+ import { m as ApprovalStore } from "../types-B_tiYvk8.js";
3
+ import { i as CatalogEventData, l as CloudEventType, r as CLOUD_EVENT_TYPES, s as CloudEvent } from "../sink-Dvi7YZG_.js";
4
+ import { c as DeliveryTransport } from "../types-yUuPR5Hy.js";
5
+ import { a as CloudConnectionOptions, c as CloudOptions, i as CloudClient, l as CloudSignerOptions, n as CloudCatalog, o as CloudEndpointOptions, r as CloudCatalogPush, s as CloudEndpoints, t as CloudApproverOptions } from "../types-AMJ5qoU_.js";
6
+ import { n as ApprovalWaiter } from "../waiter-Bu9zAlE0.js";
7
+ import { l as ReplayStore } from "../types-DjuMBNF9.js";
8
+ import { f as WebhookVerifier, r as WebhookFailureCause$1, s as WebhookJwks } from "../standard-webhooks-C-qX4mJW.js";
9
+ //#region src/cloud/base-url.d.ts
10
+ /**
11
+ * The one base URL of PermDock Cloud. The platform issuer is this URL; its
12
+ * OAuth routes, `/.well-known/oauth-authorization-server` and `/openapi.json`
13
+ * sit at the root, unversioned, and the data routes under `/v1`.
14
+ */
15
+ export declare const CLOUD_BASE_URL = "https://permdock.com/api";
16
+ /** The scopes the platform issuer grants a person's login. */
17
+ type CloudScope = "projects:read" | "policy:read" | "catalog:write" | "evidence:read" | "approvals:read";
18
+ //#endregion
9
19
  //#region src/cloud/request.d.ts
10
20
  /**
11
- * The environment URL and JWK Set URL `cloud()` uses, resolved with the same
12
- * fallbacks (`PERMDOCK_CLOUD_URL`; `PERMDOCK_CLOUD_ENV`, `VERCEL_ENV`, `production`).
21
+ * The environment URL and JWK Set URL `cloud()` uses when the environment is
22
+ * configured: `environment`, else `PERMDOCK_CLOUD_ENV`. Throws when neither is
23
+ * set; `resolveCloudEndpoints` then asks the Cloud which environment the key
24
+ * belongs to.
13
25
  */
14
26
  export declare function cloudEndpoints(options?: CloudEndpointOptions): CloudEndpoints;
27
+ /**
28
+ * The environment URL and JWK Set URL for a key: `cloudEndpoints(options)` when
29
+ * the environment is configured, else the environment `GET /v1/environment`
30
+ * names for `key` (`PERMDOCK_CLOUD_KEY`). Rejects when the Cloud does not
31
+ * answer or answers another issuer.
32
+ */
33
+ export declare function resolveCloudEndpoints(options?: CloudConnectionOptions): Promise<CloudEndpoints>;
15
34
  //#endregion
16
35
  //#region src/cloud/create.d.ts
17
36
  export declare function cloud(options?: CloudOptions): CloudClient;
18
37
  //#endregion
38
+ //#region src/cloud/oauth.d.ts
39
+ type CloudOAuthOptions = {
40
+ /** The client id the dashboard issued, or one from `/oauth/register`. */
41
+ readonly clientId: string;
42
+ /**
43
+ * Registered with the client; the Cloud redirects here with `code` and
44
+ * `state`.
45
+ */
46
+ readonly redirectUri: string;
47
+ /**
48
+ * A confidential client's secret, sent as `client_secret_basic` (RFC 6749
49
+ * section 2.3.1). Server-only.
50
+ */
51
+ readonly clientSecret?: string;
52
+ /** The Cloud base URL and platform issuer; defaults to `CLOUD_BASE_URL`. */
53
+ readonly url?: string;
54
+ /** Requested on `authorizeUrl`; defaults to `projects:read` and `policy:read`. */
55
+ readonly scopes?: readonly CloudScope[];
56
+ readonly fetch?: typeof fetch;
57
+ /** The clock `expires_at` is computed from; defaults to the system clock. */
58
+ readonly now?: () => Instant;
59
+ };
60
+ /**
61
+ * A token response, with RFC 6749 field names; `expires_at` is seconds since
62
+ * the epoch.
63
+ */
64
+ type CloudCredential = {
65
+ readonly access_token: string;
66
+ readonly token_type?: string;
67
+ readonly expires_at?: number;
68
+ readonly refresh_token?: string;
69
+ readonly scope?: string;
70
+ };
71
+ /**
72
+ * A started authorization. Keep `state` and `codeVerifier` server-side until
73
+ * the callback.
74
+ */
75
+ type CloudAuthorization = {
76
+ /** Where to send the browser. */
77
+ readonly url: string;
78
+ readonly state: string;
79
+ readonly codeVerifier: string;
80
+ };
81
+ /**
82
+ * `GET /v1/projects` item. A project is one environment: `id` is the `{env}` of
83
+ * `/v1/environments/{env}`.
84
+ */
85
+ type CloudProject = {
86
+ readonly id: string;
87
+ readonly name: string;
88
+ readonly environment: string;
89
+ readonly slug?: string;
90
+ readonly issuer?: string;
91
+ readonly catalog?: {
92
+ readonly version: number;
93
+ readonly fingerprint: string;
94
+ };
95
+ readonly updatedAt?: string;
96
+ };
97
+ type CloudProjectPage = {
98
+ readonly items: readonly CloudProject[];
99
+ /** Pass back as `cursor` for the next page. */
100
+ readonly next?: string;
101
+ };
102
+ type CloudOAuthClient = {
103
+ /** The platform issuer the client discovers its endpoints from. */
104
+ readonly issuer: string;
105
+ /** An authorization code request with PKCE `S256` and a fresh `state`. */
106
+ readonly authorizeUrl: (options?: {
107
+ readonly scopes?: readonly CloudScope[];
108
+ }) => Promise<CloudAuthorization>;
109
+ /**
110
+ * Redeems the callback URL. Throws `state-mismatch` unless it echoes
111
+ * `pending.state`, `issuer-mismatch` for an RFC 9207 `iss` of another server,
112
+ * and `authorization-denied` for an `error` or a missing `code`.
113
+ */
114
+ readonly exchangeCode: (callback: string | URL, pending: Pick<CloudAuthorization, "state" | "codeVerifier">) => Promise<CloudCredential>;
115
+ readonly refresh: (refreshToken: string) => Promise<CloudCredential>;
116
+ /** `GET /v1/projects` with a login holding `projects:read`. */
117
+ readonly listProjects: (accessToken: string, options?: {
118
+ readonly cursor?: string;
119
+ }) => Promise<CloudProjectPage>;
120
+ };
121
+ /**
122
+ * An OAuth 2.0 client of the PermDock Cloud platform issuer, for an app that
123
+ * signs its users in to PermDock Cloud and reads their projects. Endpoints come
124
+ * from the issuer's RFC 8414 metadata; every call throws a `CloudAuthError`.
125
+ */
126
+ export declare function cloudOAuth(options: CloudOAuthOptions): CloudOAuthClient;
127
+ //#endregion
128
+ //#region src/cloud/oauth-error.d.ts
129
+ type CloudAuthErrorCode = "discovery-failed" | "state-mismatch" | "issuer-mismatch" | "authorization-denied" | "token-refused" | "invalid-token" | "insufficient-scope" | "forbidden" | "rate-limited" | "unreachable" | "unexpected-response";
130
+ type CloudAuthErrorDetails = {
131
+ /** The HTTP status, when the Cloud answered. */
132
+ readonly status?: number;
133
+ /**
134
+ * The RFC 6749 or RFC 6750 `error` the Cloud sent (`invalid_grant`,
135
+ * `insufficient_scope`).
136
+ */
137
+ readonly error?: string;
138
+ /** The scope an `insufficient_scope` challenge names. */
139
+ readonly scope?: string;
140
+ };
141
+ /**
142
+ * A failed `cloudOAuth` call. `code` tells a dead token (`invalid-token`) from
143
+ * a missing scope (`insufficient-scope`).
144
+ */
145
+ export declare class CloudAuthError extends Error {
146
+ override readonly name: "CloudAuthError";
147
+ readonly code: CloudAuthErrorCode;
148
+ readonly status: number | undefined;
149
+ readonly error: string | undefined;
150
+ readonly scope: string | undefined;
151
+ constructor(code: CloudAuthErrorCode, message: string, details?: CloudAuthErrorDetails);
152
+ }
153
+ /**
154
+ * Matches by `name` and `code`, so an error from another copy of the module
155
+ * still maps.
156
+ */
157
+ export declare function isCloudAuthError(value: unknown): value is CloudAuthError;
158
+ //#endregion
19
159
  //#region src/cloud/delivery.d.ts
20
160
  /**
21
161
  * A `DeliveryTransport` for `channel` that hands each checked recipient to
22
- * PermDock Cloud, which sends it from its hosted email, chat or webhook
23
- * sender and reports back through `com.permdock.delivery.*` events. The
24
- * router has already decided the recipient: the Cloud receives the target
25
- * and the permission that let it through, never a decision to make.
26
- * `Idempotency-Key` is the delivery's idempotency key, so a retry repeats it.
162
+ * PermDock Cloud, which sends it from its hosted email, chat or webhook sender
163
+ * and reports back through `com.permdock.delivery.*` events. The router has
164
+ * already decided the recipient: the Cloud receives the target and the
165
+ * permission that let it through, never a decision to make. `Idempotency-Key`
166
+ * is the delivery's idempotency key, so a retry repeats it.
27
167
  */
28
168
  export declare function cloudDeliveryTransport<C extends DeliveryChannel>(channel: C, options?: CloudConnectionOptions): DeliveryTransport<C>;
29
169
  //#endregion
@@ -31,11 +171,11 @@ export declare function cloudDeliveryTransport<C extends DeliveryChannel>(channe
31
171
  /**
32
172
  * A `TokenSigner` backed by the environment's PermDock Cloud keys, typically
33
173
  * KMS-held, for run tickets (`vnd.permdock.run+jwt`) and every other signed
34
- * output an app issues. The Cloud signs only what the app sends: it sets
35
- * `iss` to the environment URL and adds no claim. Policy documents,
36
- * snapshots, evidence exports, Security Event Tokens and `at+jwt` access tokens are the Cloud's own
37
- * outputs, so their `typ` values are refused here. Verify what it signs with
38
- * `joseTokenVerifier({ jwks: cloudEndpoints().jwks })`.
174
+ * output an app issues. The Cloud signs only what the app sends: it sets `iss`
175
+ * to the environment URL and adds no claim. Policy documents, snapshots,
176
+ * evidence exports, Security Event Tokens and `at+jwt` access tokens are the
177
+ * Cloud's own outputs, so their `typ` values are refused here. Verify what it
178
+ * signs with `joseTokenVerifier({ jwks: cloudEndpoints().jwks })`.
39
179
  */
40
180
  export declare function cloudSigner(options?: CloudSignerOptions): TokenSigner;
41
181
  //#endregion
@@ -49,8 +189,8 @@ type Types = typeof CLOUD_EVENT_TYPES;
49
189
  type PermDockCloudEvent = Envelope<Types["decision"], DecisionEvent> | Envelope<Types["approvalRequested"] | Types["approvalResolved"] | Types["approvalExpired"] | Types["approvalCancelled"], DecisionEvent> | Envelope<Types["directoryCreated"] | Types["directoryReplaced"] | Types["directoryPatched"] | Types["directoryDeleted"], DirectoryEvent> | Envelope<Types["membershipAdded"] | Types["membershipRemoved"] | Types["membershipChanged"], MembershipEvent> | Envelope<Types["credentialCreated"] | Types["credentialUsed"] | Types["credentialRotated"] | Types["credentialRevoked"], CredentialEvent> | Envelope<Types["catalogPublished"] | Types["catalogDrifted"], CatalogEventData> | Envelope<Types["supportSessionStarted"] | Types["supportSessionEnded"], AccessEvent> | Envelope<Types["automationPublished"] | Types["automationChanged"] | Types["automationRevoked"] | Types["automationRun"], AutomationEvent> | Envelope<Types["deliverySent"] | Types["deliveryDelivered"] | Types["deliveryBounced"] | Types["deliveryComplained"] | Types["deliveryFailed"], DeliveryEvent>;
50
190
  type WebhookOptions = {
51
191
  /**
52
- * A verifier to reuse across deliveries, so the JWKS is fetched once;
53
- * built from `jwks`, `secret`, `replay`, `tolerance` and `now` when absent.
192
+ * A verifier to reuse across deliveries, so the JWKS is fetched once; built
193
+ * from `jwks`, `secret`, `replay`, `tolerance` and `now` when absent.
54
194
  */
55
195
  readonly verifier?: WebhookVerifier;
56
196
  /** `cloud().jwks`, a JWKS URL or an inline key set, for `v1a` signatures. */
@@ -64,7 +204,10 @@ type WebhookOptions = {
64
204
  readonly now?: () => Instant;
65
205
  readonly fetch?: typeof fetch;
66
206
  };
67
- /** The Standard Webhooks verifier's cause, or `invalid-events` for a signed body that is not a CloudEvents batch. */
207
+ /**
208
+ * The Standard Webhooks verifier's cause, or `invalid-events` for a signed body
209
+ * that is not a CloudEvents batch.
210
+ */
68
211
  type WebhookFailureCause = WebhookFailureCause$1 | "invalid-events";
69
212
  type VerifiedWebhook = {
70
213
  readonly ok: true;
@@ -83,8 +226,8 @@ type VerifiedWebhook = {
83
226
  */
84
227
  export declare function parseCloudEvent(value: unknown): PermDockCloudEvent | null;
85
228
  /**
86
- * Verifies a PermDock Cloud webhook delivery: Standard Webhooks headers over
87
- * an `application/cloudevents-batch+json` body (or one
229
+ * Verifies a PermDock Cloud webhook delivery: Standard Webhooks headers over an
230
+ * `application/cloudevents-batch+json` body (or one
88
231
  * `application/cloudevents+json` event). There is no unsigned mode, and it
89
232
  * never throws.
90
233
  */
@@ -92,13 +235,19 @@ export declare function verifyWebhook(request: Request, options: WebhookOptions)
92
235
  //#endregion
93
236
  //#region src/cloud/waiter.d.ts
94
237
  type CloudApprovalWaiterOptions = WebhookOptions & ({
95
- /** Read when a wait starts and every `interval` after; typically `cloud().approvals`. */
238
+ /**
239
+ * Read when a wait starts and every `interval` after; typically
240
+ * `cloud().approvals`.
241
+ */
96
242
  readonly store: ApprovalStore;
97
243
  /** Milliseconds between fallback reads of `store`. Defaults to 60000. */
98
244
  readonly interval?: number;
99
245
  readonly waiter?: undefined;
100
246
  } | {
101
- /** A durable runner's waiter (`workflowSdkWaiter()`); `wait` and `wake` go to it. */
247
+ /**
248
+ * A durable runner's waiter (`workflowSdkWaiter()`); `wait` and `wake`
249
+ * go to it.
250
+ */
102
251
  readonly waiter: ApprovalWaiter;
103
252
  readonly store?: undefined;
104
253
  readonly interval?: undefined;
@@ -107,23 +256,22 @@ type CloudApprovalWaiter = ApprovalWaiter & {
107
256
  /**
108
257
  * The endpoint for the environment's webhook connector. It verifies the
109
258
  * Standard Webhooks signature and wakes the wait of every
110
- * `com.permdock.approval.resolved`, `.expired` and `.cancelled` event in
111
- * the batch. It answers `204` once handled or replayed, and Problem
112
- * Details otherwise.
259
+ * `com.permdock.approval.resolved`, `.expired` and `.cancelled` event in the
260
+ * batch. It answers `204` once handled or replayed, and Problem Details
261
+ * otherwise.
113
262
  */
114
263
  readonly webhook: (request: Request) => Promise<Response>;
115
264
  };
116
265
  /** The approval token of each event that ends a wait, in delivery order. */
117
266
  export declare function approvalTokensOf(events: readonly PermDockCloudEvent[]): readonly string[];
118
267
  /**
119
- * An `ApprovalWaiter` that PermDock Cloud wakes. Mount `webhook` on the
120
- * route the environment's webhook connector posts to: when an approval is
121
- * resolved, expires or is cancelled, the parked run for its token wakes.
122
- * Waking never approves anything. The run decides again with the token, and
123
- * only the app's `decide` and its approval store can grant. Without
124
- * `waiter`, waits poll `store` as a fallback for a webhook another process
125
- * received.
268
+ * An `ApprovalWaiter` that PermDock Cloud wakes. Mount `webhook` on the route
269
+ * the environment's webhook connector posts to: when an approval is resolved,
270
+ * expires or is cancelled, the parked run for its token wakes. Waking never
271
+ * approves anything. The run decides again with the token, and only the app's
272
+ * `decide` and its approval store can grant. Without `waiter`, waits poll
273
+ * `store` as a fallback for a webhook another process received.
126
274
  */
127
275
  export declare function cloudApprovalWaiter(options: CloudApprovalWaiterOptions): CloudApprovalWaiter;
128
276
  //#endregion
129
- export type { CloudApprovalWaiter, CloudApprovalWaiterOptions, CloudApproverOptions, CloudCatalog, CloudCatalogPush, CloudClient, CloudConnectionOptions, CloudEndpointOptions, CloudEndpoints, CloudOptions, CloudSignerOptions, PermDockCloudEvent, VerifiedWebhook, WebhookFailureCause, WebhookOptions };
277
+ export type { CloudApprovalWaiter, CloudApprovalWaiterOptions, CloudApproverOptions, CloudAuthErrorCode, CloudAuthErrorDetails, CloudAuthorization, CloudCatalog, CloudCatalogPush, CloudClient, CloudConnectionOptions, CloudCredential, CloudEndpointOptions, CloudEndpoints, CloudOAuthClient, CloudOAuthOptions, CloudOptions, CloudProject, CloudProjectPage, CloudScope, CloudSignerOptions, PermDockCloudEvent, VerifiedWebhook, WebhookFailureCause, WebhookOptions };
@@ -1,13 +1,276 @@
1
1
  import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
- import { o as statusProblem } from "../problem-details-cn5X30gZ.js";
4
- import { r as CLOUD_EVENT_TYPES } from "../sink-BEZSlMS_.js";
5
- import { i as parseCloudEventBatch, r as parseCloudEvent$1 } from "../catalog-fingerprint-CCP0-yQS.js";
6
- import { c as problemResponse } from "../problem-CTviyH5L.js";
7
- import { n as webhookVerifier } from "../standard-webhooks-DgFFD-Ga.js";
8
- import { t as pollingApprovalWaiter } from "../waiter-BGUtGYoU.js";
9
- import { i as isDeliveryTarget } from "../target-Bw37TFNA.js";
10
- import { i as isCompactJws, n as cloudConnection, r as cloudEndpoints, t as cloud } from "../create-CQWIpUG-.js";
2
+ import { n as freezeDeep } from "../freeze-jjan0lCv.js";
3
+ import { o as statusProblem } from "../problem-details-CLDgX1KV.js";
4
+ import { h as secondsAt } from "../time-nR1JesoH.js";
5
+ import { r as CLOUD_EVENT_TYPES } from "../sink-D9_vh372.js";
6
+ import { i as parseCloudEventBatch, r as parseCloudEvent$1 } from "../catalog-fingerprint-e6aCWosn.js";
7
+ import { n as readBodyText } from "../body-text-DQhcmqdY.js";
8
+ import { l as problemResponse } from "../problem-BVLHFK33.js";
9
+ import { t as timeoutSignal } from "../timeout-D51niuQP.js";
10
+ import { n as webhookVerifier } from "../standard-webhooks-D67a3nzk.js";
11
+ import { c as stringField, n as discoverAuthorizationServer, r as parseToken } from "../device-BwbJNmb2.js";
12
+ import { t as pollingApprovalWaiter } from "../waiter-aBLM63_f.js";
13
+ import { i as isDeliveryTarget } from "../target-qdEAnnhU.js";
14
+ import { t as CLOUD_BASE_URL } from "../base-url-BQbddZO5.js";
15
+ import { a as isCompactJws, i as cloudEndpoints, n as cloud, o as resolveCloudEndpoints, r as cloudConnection, t as bearerChallenge } from "../challenge-DImNcR7B.js";
16
+ import { n as randomToken, t as pkce } from "../pkce-CnmmYqUZ.js";
17
+ //#region src/cloud/oauth-error.ts
18
+ /**
19
+ * A failed `cloudOAuth` call. `code` tells a dead token (`invalid-token`) from
20
+ * a missing scope (`insufficient-scope`).
21
+ */
22
+ var CloudAuthError = class extends Error {
23
+ name = "CloudAuthError";
24
+ code;
25
+ status;
26
+ error;
27
+ scope;
28
+ constructor(code, message, details = {}) {
29
+ super(message);
30
+ this.code = code;
31
+ this.status = details.status;
32
+ this.error = details.error;
33
+ this.scope = details.scope;
34
+ }
35
+ };
36
+ const CODES = /* @__PURE__ */ new Set([
37
+ "discovery-failed",
38
+ "state-mismatch",
39
+ "issuer-mismatch",
40
+ "authorization-denied",
41
+ "token-refused",
42
+ "invalid-token",
43
+ "insufficient-scope",
44
+ "forbidden",
45
+ "rate-limited",
46
+ "unreachable",
47
+ "unexpected-response"
48
+ ]);
49
+ /**
50
+ * Matches by `name` and `code`, so an error from another copy of the module
51
+ * still maps.
52
+ */
53
+ function isCloudAuthError(value) {
54
+ if (!(value instanceof Error) || value.name !== "CloudAuthError") return false;
55
+ const code = Reflect.get(value, "code");
56
+ return typeof code === "string" && CODES.has(code);
57
+ }
58
+ //#endregion
59
+ //#region src/cloud/oauth.ts
60
+ /**
61
+ * Milliseconds a Cloud OAuth or read request may take; a slower one fails with
62
+ * `unreachable`.
63
+ */
64
+ const OAUTH_TIMEOUT_MS = 1e4;
65
+ const DEFAULT_SCOPES = ["projects:read", "policy:read"];
66
+ function trimSlash(value) {
67
+ return value.replace(/\/+$/u, "");
68
+ }
69
+ /**
70
+ * The form-urlencoding RFC 6749 section 2.3.1 applies to client_secret_basic
71
+ * credentials.
72
+ */
73
+ function formEncode(value) {
74
+ return encodeURIComponent(value).replaceAll("%20", "+");
75
+ }
76
+ function isLoopback(hostname) {
77
+ return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "[::1]";
78
+ }
79
+ /**
80
+ * An endpoint must be `https:`, except on a loopback issuer, which a local
81
+ * Cloud serves over plain HTTP.
82
+ */
83
+ function secureEndpoint(value, issuer) {
84
+ try {
85
+ const url = new URL(value);
86
+ return url.protocol === "https:" || url.protocol === "http:" && isLoopback(new URL(issuer).hostname);
87
+ } catch {
88
+ return false;
89
+ }
90
+ }
91
+ async function readRecord(response) {
92
+ const text = await readBodyText(response);
93
+ if (!text.ok) return null;
94
+ try {
95
+ const body = JSON.parse(text.text);
96
+ return isRecord(body) ? body : null;
97
+ } catch {
98
+ return null;
99
+ }
100
+ }
101
+ function optionalString(value) {
102
+ return value === void 0 || typeof value === "string";
103
+ }
104
+ function parseProject(value) {
105
+ if (!isRecord(value) || typeof value["id"] !== "string" || value["id"] === "" || typeof value["name"] !== "string" || typeof value["environment"] !== "string" || value["environment"] === "" || !optionalString(value["slug"]) || !optionalString(value["issuer"]) || !optionalString(value["updatedAt"])) return null;
106
+ const catalog = value["catalog"];
107
+ if (catalog !== void 0 && (!isRecord(catalog) || !Number.isInteger(catalog["version"]) || typeof catalog["fingerprint"] !== "string")) return null;
108
+ return compact({
109
+ id: value["id"],
110
+ name: value["name"],
111
+ environment: value["environment"],
112
+ slug: value["slug"],
113
+ issuer: value["issuer"],
114
+ catalog: isRecord(catalog) && typeof catalog["version"] === "number" && typeof catalog["fingerprint"] === "string" ? {
115
+ version: catalog["version"],
116
+ fingerprint: catalog["fingerprint"]
117
+ } : void 0,
118
+ updatedAt: value["updatedAt"]
119
+ });
120
+ }
121
+ function refusal$1(response) {
122
+ const challenge = bearerChallenge(response.headers.get("www-authenticate"));
123
+ const error = challenge?.params["error"];
124
+ const status = response.status;
125
+ if (status === 401) return new CloudAuthError("invalid-token", "PermDock Cloud refused the access token; refresh it or sign in again", compact({
126
+ status,
127
+ error: error ?? "invalid_token"
128
+ }));
129
+ if (status === 403 && error === "insufficient_scope") {
130
+ const scope = challenge?.params["scope"];
131
+ return new CloudAuthError("insufficient-scope", `The access token lacks ${scope ?? "a required scope"}; sign in again with it`, compact({
132
+ status,
133
+ error,
134
+ scope
135
+ }));
136
+ }
137
+ if (status === 403) return new CloudAuthError("forbidden", "The access token may not read this resource", compact({
138
+ status,
139
+ error
140
+ }));
141
+ if (status === 429) return new CloudAuthError("rate-limited", `PermDock Cloud rate-limited the request; retry after ${response.headers.get("retry-after") ?? "a while"} seconds`, { status });
142
+ return new CloudAuthError("unexpected-response", `PermDock Cloud answered HTTP ${String(status)}`, { status });
143
+ }
144
+ /**
145
+ * An OAuth 2.0 client of the PermDock Cloud platform issuer, for an app that
146
+ * signs its users in to PermDock Cloud and reads their projects. Endpoints come
147
+ * from the issuer's RFC 8414 metadata; every call throws a `CloudAuthError`.
148
+ */
149
+ function cloudOAuth(options) {
150
+ const issuer = trimSlash(options.url ?? "https://permdock.com/api");
151
+ const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);
152
+ const scopes = options.scopes ?? DEFAULT_SCOPES;
153
+ let discovered;
154
+ const discover = async () => {
155
+ const body = await discoverAuthorizationServer(issuer, { fetch: fetchFn });
156
+ const authorization = body === null ? void 0 : stringField(body, "authorization_endpoint");
157
+ const token = body === null ? void 0 : stringField(body, "token_endpoint");
158
+ const methods = body?.["code_challenge_methods_supported"];
159
+ if (authorization === void 0 || token === void 0 || !secureEndpoint(authorization, issuer) || !secureEndpoint(token, issuer) || !Array.isArray(methods) || !methods.includes("S256")) throw new CloudAuthError("discovery-failed", `No usable RFC 8414 metadata for ${issuer}`);
160
+ return {
161
+ authorization,
162
+ token
163
+ };
164
+ };
165
+ const endpoints = () => {
166
+ discovered ??= discover().catch((error) => {
167
+ discovered = void 0;
168
+ throw error;
169
+ });
170
+ return discovered;
171
+ };
172
+ const send = async (url, init) => {
173
+ try {
174
+ return await fetchFn(url, {
175
+ ...init,
176
+ signal: timeoutSignal(OAUTH_TIMEOUT_MS)
177
+ });
178
+ } catch {
179
+ throw new CloudAuthError("unreachable", `PermDock Cloud at ${issuer} did not answer`);
180
+ }
181
+ };
182
+ const token = async (fields) => {
183
+ const headers = new Headers({
184
+ "content-type": "application/x-www-form-urlencoded",
185
+ accept: "application/json"
186
+ });
187
+ const form = new URLSearchParams(fields);
188
+ if (options.clientSecret === void 0) form.set("client_id", options.clientId);
189
+ else headers.set("authorization", `Basic ${btoa(`${formEncode(options.clientId)}:${formEncode(options.clientSecret)}`)}`);
190
+ const response = await send((await endpoints()).token, {
191
+ method: "POST",
192
+ headers,
193
+ body: form
194
+ });
195
+ const body = await readRecord(response);
196
+ if (body === null) throw new CloudAuthError("unexpected-response", "PermDock Cloud answered the token request with a body that is not a JSON object", { status: response.status });
197
+ const parsed = parseToken(body, secondsAt(options.now?.()));
198
+ if (!parsed.ok || !response.ok) {
199
+ const error = parsed.ok ? void 0 : parsed.error;
200
+ throw new CloudAuthError("token-refused", `PermDock Cloud refused the token request${error === void 0 ? "" : `: ${error}`}`, compact({
201
+ status: response.status,
202
+ error
203
+ }));
204
+ }
205
+ return parsed.credential;
206
+ };
207
+ return Object.freeze({
208
+ issuer,
209
+ async authorizeUrl(request = {}) {
210
+ const { authorization } = await endpoints();
211
+ const { verifier, challenge } = await pkce();
212
+ const state = randomToken(16);
213
+ const url = new URL(authorization);
214
+ url.searchParams.set("response_type", "code");
215
+ url.searchParams.set("client_id", options.clientId);
216
+ url.searchParams.set("redirect_uri", options.redirectUri);
217
+ url.searchParams.set("scope", (request.scopes ?? scopes).join(" "));
218
+ url.searchParams.set("state", state);
219
+ url.searchParams.set("code_challenge", challenge);
220
+ url.searchParams.set("code_challenge_method", "S256");
221
+ return Object.freeze({
222
+ url: url.href,
223
+ state,
224
+ codeVerifier: verifier
225
+ });
226
+ },
227
+ async exchangeCode(callback, pending) {
228
+ let params;
229
+ try {
230
+ params = new URL(callback).searchParams;
231
+ } catch {
232
+ throw new CloudAuthError("authorization-denied", "The callback is not a URL");
233
+ }
234
+ if (pending.state === "" || params.get("state") !== pending.state) throw new CloudAuthError("state-mismatch", "The callback does not echo the state of the authorization");
235
+ const iss = params.get("iss");
236
+ if (iss !== null && trimSlash(iss) !== issuer) throw new CloudAuthError("issuer-mismatch", `The callback names the issuer ${iss}, not ${issuer}`);
237
+ const error = params.get("error");
238
+ const code = params.get("code");
239
+ if (error !== null || code === null || code === "") throw new CloudAuthError("authorization-denied", `The authorization was not granted${error === null ? "" : `: ${error}`}`, error === null ? {} : { error });
240
+ return await token({
241
+ grant_type: "authorization_code",
242
+ code,
243
+ redirect_uri: options.redirectUri,
244
+ code_verifier: pending.codeVerifier
245
+ });
246
+ },
247
+ refresh(refreshToken) {
248
+ return token({
249
+ grant_type: "refresh_token",
250
+ refresh_token: refreshToken
251
+ });
252
+ },
253
+ async listProjects(accessToken, request = {}) {
254
+ const url = new URL(`${issuer}/v1/projects`);
255
+ if (request.cursor !== void 0) url.searchParams.set("cursor", request.cursor);
256
+ const response = await send(url, { headers: {
257
+ authorization: `Bearer ${accessToken}`,
258
+ accept: "application/json"
259
+ } });
260
+ if (!response.ok) throw refusal$1(response);
261
+ const body = await readRecord(response);
262
+ const raw = body?.["items"];
263
+ const items = Array.isArray(raw) ? raw.map(parseProject) : null;
264
+ const next = body?.["next"];
265
+ if (items === null || items.includes(null) || !optionalString(next)) throw new CloudAuthError("unexpected-response", "PermDock Cloud sent a project list that does not match cloud-api-v1.json", { status: response.status });
266
+ return Object.freeze(compact({
267
+ items: Object.freeze(items.filter((item) => item !== null)),
268
+ next
269
+ }));
270
+ }
271
+ });
272
+ }
273
+ //#endregion
11
274
  //#region src/cloud/delivery.ts
12
275
  function failed(cause, retryable, reason) {
13
276
  return {
@@ -41,11 +304,11 @@ async function fromResponse(response) {
41
304
  }
42
305
  /**
43
306
  * A `DeliveryTransport` for `channel` that hands each checked recipient to
44
- * PermDock Cloud, which sends it from its hosted email, chat or webhook
45
- * sender and reports back through `com.permdock.delivery.*` events. The
46
- * router has already decided the recipient: the Cloud receives the target
47
- * and the permission that let it through, never a decision to make.
48
- * `Idempotency-Key` is the delivery's idempotency key, so a retry repeats it.
307
+ * PermDock Cloud, which sends it from its hosted email, chat or webhook sender
308
+ * and reports back through `com.permdock.delivery.*` events. The router has
309
+ * already decided the recipient: the Cloud receives the target and the
310
+ * permission that let it through, never a decision to make. `Idempotency-Key`
311
+ * is the delivery's idempotency key, so a retry repeats it.
49
312
  */
50
313
  function cloudDeliveryTransport(channel, options = {}) {
51
314
  const connection = cloudConnection(options);
@@ -103,8 +366,8 @@ const REGISTERED = /* @__PURE__ */ new Set([
103
366
  "jti"
104
367
  ]);
105
368
  /**
106
- * The Cloud's own outputs and access tokens; a client key that could mint
107
- * them could forge them, or forge the approver behind `PermDock-Approver`.
369
+ * The Cloud's own outputs and access tokens; a client key that could mint them
370
+ * could forge them, or forge the approver behind `PermDock-Approver`.
108
371
  */
109
372
  const CLOUD_ISSUED = /* @__PURE__ */ new Set([
110
373
  "vnd.permdock.policy+jwt",
@@ -126,11 +389,11 @@ function headerTyp(token) {
126
389
  /**
127
390
  * A `TokenSigner` backed by the environment's PermDock Cloud keys, typically
128
391
  * KMS-held, for run tickets (`vnd.permdock.run+jwt`) and every other signed
129
- * output an app issues. The Cloud signs only what the app sends: it sets
130
- * `iss` to the environment URL and adds no claim. Policy documents,
131
- * snapshots, evidence exports, Security Event Tokens and `at+jwt` access tokens are the Cloud's own
132
- * outputs, so their `typ` values are refused here. Verify what it signs with
133
- * `joseTokenVerifier({ jwks: cloudEndpoints().jwks })`.
392
+ * output an app issues. The Cloud signs only what the app sends: it sets `iss`
393
+ * to the environment URL and adds no claim. Policy documents, snapshots,
394
+ * evidence exports, Security Event Tokens and `at+jwt` access tokens are the
395
+ * Cloud's own outputs, so their `typ` values are refused here. Verify what it
396
+ * signs with `joseTokenVerifier({ jwks: cloudEndpoints().jwks })`.
134
397
  */
135
398
  function cloudSigner(options = {}) {
136
399
  const connection = cloudConnection(options);
@@ -206,8 +469,8 @@ function eventsOf(body) {
206
469
  return parseCloudEventBatch(parsed);
207
470
  }
208
471
  /**
209
- * Verifies a PermDock Cloud webhook delivery: Standard Webhooks headers over
210
- * an `application/cloudevents-batch+json` body (or one
472
+ * Verifies a PermDock Cloud webhook delivery: Standard Webhooks headers over an
473
+ * `application/cloudevents-batch+json` body (or one
211
474
  * `application/cloudevents+json` event). There is no unsigned mode, and it
212
475
  * never throws.
213
476
  */
@@ -264,13 +527,12 @@ function refusal(cause) {
264
527
  }
265
528
  }
266
529
  /**
267
- * An `ApprovalWaiter` that PermDock Cloud wakes. Mount `webhook` on the
268
- * route the environment's webhook connector posts to: when an approval is
269
- * resolved, expires or is cancelled, the parked run for its token wakes.
270
- * Waking never approves anything. The run decides again with the token, and
271
- * only the app's `decide` and its approval store can grant. Without
272
- * `waiter`, waits poll `store` as a fallback for a webhook another process
273
- * received.
530
+ * An `ApprovalWaiter` that PermDock Cloud wakes. Mount `webhook` on the route
531
+ * the environment's webhook connector posts to: when an approval is resolved,
532
+ * expires or is cancelled, the parked run for its token wakes. Waking never
533
+ * approves anything. The run decides again with the token, and only the app's
534
+ * `decide` and its approval store can grant. Without `waiter`, waits poll
535
+ * `store` as a fallback for a webhook another process received.
274
536
  */
275
537
  function cloudApprovalWaiter(options) {
276
538
  const inner = options.waiter ?? pollingApprovalWaiter({
@@ -294,4 +556,4 @@ function cloudApprovalWaiter(options) {
294
556
  });
295
557
  }
296
558
  //#endregion
297
- export { approvalTokensOf, cloud, cloudApprovalWaiter, cloudDeliveryTransport, cloudEndpoints, cloudSigner, parseCloudEvent, verifyWebhook };
559
+ export { CLOUD_BASE_URL, CloudAuthError, approvalTokensOf, cloud, cloudApprovalWaiter, cloudDeliveryTransport, cloudEndpoints, cloudOAuth, cloudSigner, isCloudAuthError, parseCloudEvent, resolveCloudEndpoints, verifyWebhook };