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,45 +1,15 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { n as isForbiddenKey } from "./paths-DXSHAMIa.js";
3
- import { t as byCodePoint } from "./compare-pfyVnBjE.js";
4
- import { i as configError } from "./errors-CWTY6uih.js";
5
- import { a as quoteQualifiedTable, c as quoteSqlTable, o as quoteSqlIdent, s as quoteSqlLiteral, t as SQL_IDENT } from "./sql-B5T1IL83.js";
6
- import "./sources-vs5dGOsS.js";
7
- //#region src/cli/sql/quote.ts
8
- function quoteIdent(name) {
9
- return quoteSqlIdent(name, CLI);
10
- }
11
- function quoteTable(name) {
12
- return quoteSqlTable(name, CLI);
13
- }
14
- /** A table name with `public.` added when it names no schema, quoted. */
15
- function quoteQualified(name) {
16
- return quoteQualifiedTable(name, CLI);
17
- }
18
- function helperSchema(ctx) {
19
- return ctx.schema ?? "permdock";
20
- }
21
- function qualified(ctx, name) {
22
- return `${quoteIdent(helperSchema(ctx))}.${name}`;
23
- }
24
- function quoteLiteral(value) {
25
- return quoteSqlLiteral(value);
26
- }
27
- const CLI = "PermDock CLI";
28
- function declaredArray(values) {
29
- return values.length === 0 ? `'{}'::text[]` : `array[${values.map(quoteLiteral).join(", ")}]::text[]`;
30
- }
2
+ import { n as isForbiddenKey } from "./paths-CUvURzHp.js";
3
+ import { t as byCodePoint } from "./compare-DTfyUunF.js";
4
+ import { i as configError } from "./errors-Vpu6rKHl.js";
5
+ import { a as quoteQualifiedTable, c as quoteSqlTable, o as quoteSqlIdent, s as quoteSqlLiteral, t as SQL_IDENT } from "./sql-0WjxIp9g.js";
6
+ import { t as byScope } from "./compile-EzEMB-7v.js";
7
+ import "./sources-CMAM-2A3.js";
8
+ //#region src/cli/sql/columns.ts
31
9
  /**
32
- * A text array as a Postgres literal (`'{admin,owner}'`). An element that
33
- * holds a delimiter, a brace, a quote, a backslash, whitespace, or that
34
- * reads as `NULL`, is double-quoted and escaped, so one element can never
35
- * split into several.
10
+ * The Postgres type a JSON Schema property compares as; `undefined` for text or
11
+ * an unknown shape.
36
12
  */
37
- function textArrayLiteral(values) {
38
- return quoteLiteral(`{${values.map((value) => value === "" || /[\s,{}"\\]/u.test(value) || /^null$/iu.test(value) ? `"${value.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"")}"` : value).join(",")}}`);
39
- }
40
- //#endregion
41
- //#region src/cli/sql/columns.ts
42
- /** The Postgres type a JSON Schema property compares as; `undefined` for text or an unknown shape. */
43
13
  function columnTypeOf(property) {
44
14
  if (!isRecord(property)) return;
45
15
  const variants = [property["anyOf"], property["oneOf"]].find(Array.isArray);
@@ -101,14 +71,55 @@ function sqlType(name) {
101
71
  function tenantTypeOf(ctx) {
102
72
  return sqlType(ctx.tenantType ?? "uuid");
103
73
  }
104
- function teamTypeOf(ctx) {
105
- return sqlType(ctx.teamType ?? ctx.tenantType ?? "uuid");
106
- }
107
- /** Postgres type of scope `name`'s id: `scopeTypes`, then the tenant / team type by position. */
74
+ /**
75
+ * Postgres type of scope `name`'s id: `scopeTypes` by name or by its `tenant` /
76
+ * `team` alias, then the tenant type.
77
+ */
108
78
  function scopeTypeOf(ctx, name) {
109
- const declared = ctx.scopeTypes?.[name];
110
- if (declared !== void 0) return sqlType(declared);
111
- return name === ctx.scopes[1]?.name ? teamTypeOf(ctx) : tenantTypeOf(ctx);
79
+ const declared = byScope(ctx.scopeTypes, ctx.scopes, name);
80
+ return declared === void 0 ? tenantTypeOf(ctx) : sqlType(declared);
81
+ }
82
+ /**
83
+ * The tenant type `rls.scopeTypes` gives the first scope, else `uuid`: the type
84
+ * the tenant claim and the custom-role tenant arguments are cast to.
85
+ */
86
+ function firstScopeType(scopeTypes, scopes) {
87
+ const first = scopes[0]?.name;
88
+ return (first === void 0 ? void 0 : byScope(scopeTypes, scopes, first)) ?? scopeTypes?.["tenant"] ?? "uuid";
89
+ }
90
+ //#endregion
91
+ //#region src/cli/sql/quote.ts
92
+ function quoteIdent(name) {
93
+ return quoteSqlIdent(name, CLI);
94
+ }
95
+ function quoteTable(name) {
96
+ return quoteSqlTable(name, CLI);
97
+ }
98
+ /** A table name with `public.` added when it names no schema, quoted. */
99
+ function quoteQualified(name) {
100
+ return quoteQualifiedTable(name, CLI);
101
+ }
102
+ function helperSchema(ctx) {
103
+ return ctx.schema ?? "permdock";
104
+ }
105
+ function qualified(ctx, name) {
106
+ return `${quoteIdent(helperSchema(ctx))}.${name}`;
107
+ }
108
+ function quoteLiteral(value) {
109
+ return quoteSqlLiteral(value);
110
+ }
111
+ const CLI = "PermDock CLI";
112
+ function declaredArray(values) {
113
+ return values.length === 0 ? `'{}'::text[]` : `array[${values.map(quoteLiteral).join(", ")}]::text[]`;
114
+ }
115
+ /**
116
+ * A text array as a Postgres literal (`'{admin,owner}'`). An element that holds
117
+ * a delimiter, a brace, a quote, a backslash, whitespace, or that reads as
118
+ * `NULL`, is double-quoted and escaped, so one element can never split into
119
+ * several.
120
+ */
121
+ function textArrayLiteral(values) {
122
+ return quoteLiteral(`{${values.map((value) => value === "" || /[\s,{}"\\]/u.test(value) || /^null$/iu.test(value) ? `"${value.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"")}"` : value).join(",")}}`);
112
123
  }
113
124
  //#endregion
114
125
  //#region src/cli/sql/context.ts
@@ -118,21 +129,21 @@ function parseMembershipsFlag(raw) {
118
129
  const colon = raw.indexOf(":");
119
130
  const table = colon === -1 ? raw : raw.slice(0, colon);
120
131
  const cols = (colon === -1 ? "" : raw.slice(colon + 1)).split(",").map((item) => item.trim()).filter((item) => item !== "");
121
- return { tenant: {
132
+ return { scopes: { tenant: {
122
133
  table,
123
- tenant: cols[0] ?? "tenant_id",
134
+ columns: { tenant: cols[0] ?? "tenant_id" },
124
135
  user: cols[1] ?? "user_id",
125
136
  role: cols[2] ?? "role",
126
137
  ...cols[3] === void 0 ? {} : { expiresAt: cols[3] }
127
- } };
138
+ } } };
128
139
  }
129
140
  //#endregion
130
141
  //#region src/cli/sql/subject.ts
131
142
  /**
132
- * A role with `for` counts only on a membership of one of those kinds:
133
- * `case role when 'admin' then via = any(...) ... else true end`. A missing
134
- * kind (`viaExpr` null) holds none of them. A constant kind folds into the
135
- * roles it excludes, or no filter. `undefined` when nothing is filtered.
143
+ * A role with `for` counts only on a membership of one of those kinds: `case
144
+ * role when 'admin' then via = any(...) ... else true end`. A missing kind
145
+ * (`viaExpr` null) holds none of them. A constant kind folds into the roles it
146
+ * excludes, or no filter. `undefined` when nothing is filtered.
136
147
  */
137
148
  function kindFilterSql(ctx, roleExpr, viaExpr) {
138
149
  const kinds = Object.entries(ctx.ownership?.kinds ?? {}).toSorted(([a], [b]) => byCodePoint(a, b));
@@ -143,7 +154,10 @@ function kindFilterSql(ctx, roleExpr, viaExpr) {
143
154
  }
144
155
  return `case ${roleExpr} ${kinds.map(([role, allowed]) => `when ${quoteLiteral(role)} then coalesce(${viaExpr}, '') = any(array[${allowed.map(quoteLiteral).join(", ")}]::text[])`).join(" ")} else true end`;
145
156
  }
146
- /** The kind check for one known role; `undefined` when it has no `for` or a constant kind it allows. */
157
+ /**
158
+ * The kind check for one known role; `undefined` when it has no `for` or a
159
+ * constant kind it allows.
160
+ */
147
161
  function roleKindSql(ctx, role, viaExpr) {
148
162
  const allowed = ctx.ownership?.kinds[role];
149
163
  if (allowed === void 0) return;
@@ -161,7 +175,10 @@ function keyTenantSql(ctx, tenant) {
161
175
  const named = `nullif(${subjectClaimJsonSql(ctx, keys.claim)} ->> ${quoteLiteral(keys.tenant)}, '')`;
162
176
  return tenant === void 0 ? `${named} is null` : `(${named} is null or (${tenant})::text = ${named})`;
163
177
  }
164
- /** The active-tenant claim cast to the tenant column's type, so the comparison uses the column's index. */
178
+ /**
179
+ * The active-tenant claim cast to the tenant column's type, so the comparison
180
+ * uses the column's index.
181
+ */
165
182
  function tenantClaimSql(ctx) {
166
183
  return `${subjectClaimSql(ctx, ctx.tenantClaim)}::${tenantTypeOf(ctx)}`;
167
184
  }
@@ -170,7 +187,10 @@ function userIdHelperSql(ctx) {
170
187
  return qualified(ctx, USER_ID_HELPER);
171
188
  }
172
189
  const SESSION_LIVE_HELPER = "permdock_session_live";
173
- /** `{ subject: { session: { live: true } } }` in a policy; only Supabase has `auth.sessions`. */
190
+ /**
191
+ * `{ subject: { session: { live: true } } }` in a policy; only Supabase has
192
+ * `auth.sessions`.
193
+ */
174
194
  function liveSessionSql(ctx) {
175
195
  if (ctx.dialect !== "supabase") throw configError(`PermDock CLI: { subject: { session: { live: true } } } reads auth.sessions, which only the supabase dialect has (got ${ctx.dialect})`);
176
196
  return `(select ${qualified(ctx, SESSION_LIVE_HELPER)}())`;
@@ -245,7 +265,10 @@ function subjectClaimJsonSql(ctx, claim) {
245
265
  function viaAllowed(value, allowed) {
246
266
  return allowed.includes(value ?? "");
247
267
  }
248
- /** The membership kind of a row `m` of `table`: its column as text, or its constant (`null` without one). */
268
+ /**
269
+ * The membership kind of a row `m` of `table`: its column as text, or its
270
+ * constant (`null` without one).
271
+ */
249
272
  function memberVia(table) {
250
273
  const via = table.via;
251
274
  if (via === void 0) return { value: null };
@@ -267,7 +290,10 @@ const HELPERS = {
267
290
  has: "permdock_has",
268
291
  hasFor: "permdock_has_for"
269
292
  };
270
- /** Objects `--custom-roles` adds next to the helpers. Names are part of the SQL contract. */
293
+ /**
294
+ * Objects `--custom-roles` adds next to the helpers. Names are part of the SQL
295
+ * contract.
296
+ */
271
297
  const CUSTOM_ROLES = {
272
298
  permissions: "custom_role_permissions",
273
299
  includes: "custom_role_includes",
@@ -275,31 +301,44 @@ const CUSTOM_ROLES = {
275
301
  keys: "permdock_custom_keys",
276
302
  beyond: "permdock_custom_role_beyond",
277
303
  guard: "permdock_custom_role_guard",
304
+ syncGuard: "permdock_sync_custom_role_guard",
278
305
  beyondFor: "permdock_custom_role_beyond_for",
279
306
  guardFor: "permdock_custom_role_guard_for",
280
307
  shape: "permdock_custom_role_shape",
281
308
  entries: "permdock_custom_role_entries",
309
+ entryProblem: "permdock_custom_role_entry_problem",
282
310
  replace: "permdock_replace_custom_role_grants",
283
311
  rename: "permdock_rename_custom_role_grants",
284
312
  remove: "permdock_delete_custom_role_grants",
285
313
  trustedReplace: "permdock_trusted_replace_custom_role_grants",
286
314
  trustedRename: "permdock_trusted_rename_custom_role_grants",
287
315
  trustedRemove: "permdock_trusted_delete_custom_role_grants",
316
+ replaceById: "permdock_replace_custom_role_grants_by_id",
317
+ trustedReplaceById: "permdock_trusted_replace_custom_role_grants_by_id",
318
+ trustedReadById: "permdock_trusted_role_permissions_by_id",
288
319
  cascade: "permdock_cascade_custom_role",
320
+ nameGuard: "permdock_custom_role_name_guard",
321
+ sync: "permdock_sync_custom_role",
289
322
  shared: "permdock_is_shared_role"
290
323
  };
291
324
  /** The function `rls.roles` adds. The name is part of the SQL contract. */
292
325
  const GLOBAL_ROLES = { replace: "permdock_replace_global_roles" };
293
- /** `user` is the SQL for the user id: the dialect's (the default) or the `p_user` parameter of a `_for` helper. */
326
+ /**
327
+ * `user` is the SQL for the user id: the dialect's (the default) or the
328
+ * `p_user` parameter of a `_for` helper.
329
+ */
294
330
  function signedIn(ctx, user = subjectIdSql(ctx)) {
295
331
  return `coalesce(${user}::text, '') <> ''`;
296
332
  }
297
333
  function rootName(ctx) {
298
334
  return ctx.scopes[0]?.name ?? "tenant";
299
335
  }
300
- /** The stored allow as `permissions` hands it to `permdock_custom_keys`: `key`, or `key@level` with levels. */
336
+ /**
337
+ * The stored allow as `permissions` hands it to `permdock_custom_keys`: `key`,
338
+ * or `key@level` with levels.
339
+ */
301
340
  function allowEntry(ctx) {
302
341
  return ctx.customRoles?.levels === true ? "permission || coalesce('@' || c.level, '')" : "permission";
303
342
  }
304
343
  //#endregion
305
- export { declaredArray as A, parseMembershipsFlag as C, sqlType as D, scopeTypeOf as E, quoteQualified as F, quoteTable as I, textArrayLiteral as L, qualified as M, quoteIdent as N, tenantTypeOf as O, quoteLiteral as P, CLAIM as S, columnTypesOf as T, subjectClaimJsonSql as _, customRolesOn as a, tenantClaimSql as b, SESSION_LIVE_HELPER as c, keyTenantSql as d, kindFilterSql as f, sessionLiveHelperSql as g, roleKindSql as h, allowEntry as i, helperSchema as j, CLI as k, USER_ID_HELPER as l, memberVia as m, GLOBAL_ROLES as n, rootName as o, liveSessionSql as p, HELPERS as r, signedIn as s, CUSTOM_ROLES as t, globalKindFilterSql as u, subjectClaimSql as v, arrayColumnsOf as w, userIdHelperSql as x, subjectIdSql as y };
344
+ export { quoteQualified as A, parseMembershipsFlag as C, qualified as D, helperSchema as E, firstScopeType as F, scopeTypeOf as I, sqlType as L, textArrayLiteral as M, arrayColumnsOf as N, quoteIdent as O, columnTypesOf as P, tenantTypeOf as R, CLAIM as S, declaredArray as T, subjectClaimJsonSql as _, customRolesOn as a, tenantClaimSql as b, SESSION_LIVE_HELPER as c, keyTenantSql as d, kindFilterSql as f, sessionLiveHelperSql as g, roleKindSql as h, allowEntry as i, quoteTable as j, quoteLiteral as k, USER_ID_HELPER as l, memberVia as m, GLOBAL_ROLES as n, rootName as o, liveSessionSql as p, HELPERS as r, signedIn as s, CUSTOM_ROLES as t, globalKindFilterSql as u, subjectClaimSql as v, CLI as w, userIdHelperSql as x, subjectIdSql as y };
@@ -1,9 +1,12 @@
1
- import { a as durationOf, f as nowMillis } from "./time-DkWjdL98.js";
2
- import { t as decisionToken } from "./token-BLZcjQgt.js";
1
+ import { a as durationOf, f as nowMillis } from "./time-nR1JesoH.js";
2
+ import { t as decisionToken } from "./token-DC9EQiet.js";
3
3
  //#region src/pdp/shared.ts
4
4
  const MAX_CACHE_TTL = 30;
5
5
  const CACHE_MAX = 1e3;
6
- /** Milliseconds from `ttl` seconds, clamped to 30 s; a `ttl` that is not a whole number of seconds above 0 disables the cache. */
6
+ /**
7
+ * Milliseconds from `ttl` seconds, clamped to 30 s; a `ttl` that is not a whole
8
+ * number of seconds above 0 disables the cache.
9
+ */
7
10
  function ttlMs(cache) {
8
11
  const ttl = durationOf(cache?.ttl);
9
12
  return ttl === void 0 ? 0 : Math.min(ttl, MAX_CACHE_TTL) * 1e3;
@@ -48,9 +51,9 @@ function granted(provider, permission, subject, data) {
48
51
  };
49
52
  }
50
53
  /**
51
- * The request that would be sent, plus what a custom mapping may drop
52
- * (issuer, tenant, actor): a tenant switch or a changed row never reuses a
53
- * cached answer.
54
+ * The request that would be sent, plus what a custom mapping may drop (issuer,
55
+ * tenant, actor): a tenant switch or a changed row never reuses a cached
56
+ * answer.
54
57
  */
55
58
  function cacheKey(subject, permission, body) {
56
59
  return JSON.stringify([
@@ -6,8 +6,8 @@ const EXIT_CODES = {
6
6
  /** How long a signalled run may take to clean up before the process exits. */
7
7
  const GRACE_MS = 2e3;
8
8
  /**
9
- * Turns SIGINT and SIGTERM into an aborted signal and the 128 + n exit code.
10
- * A second signal, or a run still busy after the grace period, exits at once.
9
+ * Turns SIGINT and SIGTERM into an aborted signal and the 128 + n exit code. A
10
+ * second signal, or a run still busy after the grace period, exits at once.
11
11
  */
12
12
  function trapSignals() {
13
13
  const controller = new AbortController();
@@ -1,11 +1,14 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { t as assertAppData } from "./app-data-MuyzVqX8.js";
4
- import { d as isoNow, n as RFC3339_PATTERN } from "./time-DkWjdL98.js";
5
- import { n as requireEventInstant } from "./event-time-CsegxXxB.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { t as assertAppData } from "./app-data-UNNm07jV.js";
4
+ import { d as isoNow, n as RFC3339_PATTERN } from "./time-nR1JesoH.js";
5
+ import { n as requireEventInstant } from "./event-time-BGy48400.js";
6
6
  //#region src/core/event-schemas.ts
7
7
  const SCHEMA = "https://json-schema.org/draft/2020-12/schema";
8
- /** The URL each event family's schema is published at, and its CloudEvents `dataschema`. */
8
+ /**
9
+ * The URL each event family's schema is published at, and its CloudEvents
10
+ * `dataschema`.
11
+ */
9
12
  const EVENT_SCHEMA_IDS = Object.freeze({
10
13
  decision: "https://permdock.com/schemas/decision-event-v1.json",
11
14
  directory: "https://permdock.com/schemas/directory-event-v1.json",
@@ -671,7 +674,10 @@ const CLOUD_EVENT_TYPES = Object.freeze({
671
674
  deliveryComplained: "com.permdock.delivery.complained",
672
675
  deliveryFailed: "com.permdock.delivery.failed"
673
676
  });
674
- /** Types named for a later release; a receiver refuses them until then. None are reserved now. */
677
+ /**
678
+ * Types named for a later release; a receiver refuses them until then. None are
679
+ * reserved now.
680
+ */
675
681
  const RESERVED_CLOUD_EVENT_TYPES = Object.freeze([]);
676
682
  /** The CloudEvents JSON format media type for one event (structured mode). */
677
683
  const CLOUDEVENTS_CONTENT_TYPE = "application/cloudevents+json";
@@ -768,7 +774,10 @@ function cloudEventSubject(event) {
768
774
  if (event.type === "automation") return event.automation.id;
769
775
  return event.permission;
770
776
  }
771
- /** `x` as given, after checking it is a plain JSON object; a builder throws on bad input. */
777
+ /**
778
+ * `x` as given, after checking it is a plain JSON object; a builder throws on
779
+ * bad input.
780
+ */
772
781
  function checkedX(x) {
773
782
  if (x !== void 0) assertAppData(x, "x of a sink event");
774
783
  return x;
@@ -802,9 +811,9 @@ function automationEvent(input) {
802
811
  });
803
812
  }
804
813
  /**
805
- * The `access` event of a `SupportSession`: `started` when it begins,
806
- * `ended` when it lapses, `revoked` when it is ended early. `principal` is
807
- * the staff member, as for a support membership.
814
+ * The `access` event of a `SupportSession`: `started` when it begins, `ended`
815
+ * when it lapses, `revoked` when it is ended early. `principal` is the staff
816
+ * member, as for a support membership.
808
817
  */
809
818
  function supportSessionEvent(input) {
810
819
  const { session } = input;
@@ -829,8 +838,8 @@ function supportSessionEvent(input) {
829
838
  });
830
839
  }
831
840
  /**
832
- * A `credential` sink event for `credential`. `sample` belongs on `used`
833
- * events only and must be in `(0, 1]`.
841
+ * A `credential` sink event for `credential`. `sample` belongs on `used` events
842
+ * only and must be in `(0, 1]`.
834
843
  */
835
844
  function credentialEvent(input) {
836
845
  const sample = input.sample;
@@ -917,9 +926,9 @@ function toCloudEvent(event, options) {
917
926
  });
918
927
  }
919
928
  /**
920
- * Signs sink events as an offline evidence export: a compact JWS with
921
- * `typ: vnd.permdock.evidence+jwt` whose `events` claim holds CloudEvents.
922
- * Live deliveries use Standard Webhooks instead.
929
+ * Signs sink events as an offline evidence export: a compact JWS with `typ:
930
+ * vnd.permdock.evidence+jwt` whose `events` claim holds CloudEvents. Live
931
+ * deliveries use Standard Webhooks instead.
923
932
  */
924
933
  function signDecisionBatch(events, signer, options) {
925
934
  const source = options.source;
@@ -938,12 +947,14 @@ function memoryDecisionSink(options = {}) {
938
947
  buffer.push(...events);
939
948
  if (buffer.length > capacity) buffer.splice(0, buffer.length - capacity);
940
949
  if (options.signer === void 0) return;
941
- return signDecisionBatch(events, options.signer, compact({
942
- audience: options.audience,
943
- source: options.source
944
- })).then((batch) => {
945
- signed.push(batch);
946
- }).catch(() => void 0);
950
+ const { signer } = options;
951
+ const sign = async () => {
952
+ signed.push(await signDecisionBatch(events, signer, compact({
953
+ audience: options.audience,
954
+ source: options.source
955
+ })));
956
+ };
957
+ return sign().catch(() => void 0);
947
958
  },
948
959
  events() {
949
960
  return [...buffer];
@@ -1,7 +1,7 @@
1
- import { Ct as Credential, Jt as AutomationEvent, Kt as AccessEvent, Yt as CredentialEvent, gt as SupportSession, nn as MembershipEvent, q as DecisionSink, rn as SinkEvent, ut as TokenSigner } from "./policy-types-n0uRTsW8.js";
2
- import { V as AppData } from "./vocabulary-CN8H_9UF.js";
3
- import { u as OperationRisk } from "./operations-X0VM7F3m.js";
4
- import { t as Automation } from "./automation-BNM3TtDo.js";
1
+ import { $t as CredentialEvent, Ct as Credential, Qt as AutomationEvent, Xt as AccessEvent, gt as SupportSession, on as MembershipEvent, q as DecisionSink, sn as SinkEvent, ut as TokenSigner } from "./policy-types-CCiDRZBH.js";
2
+ import { M as AppData } from "./permission-types-CAY-GU7e.js";
3
+ import { u as OperationRisk } from "./operations-Ci_rT6Uo.js";
4
+ import { t as Automation } from "./automation-DqEoWHBc.js";
5
5
  //#region src/core/sink.d.ts
6
6
  /**
7
7
  * The closed list of CloudEvents `type` values, `com.permdock.<family>` or
@@ -40,7 +40,10 @@ declare const CLOUD_EVENT_TYPES: {
40
40
  readonly deliveryFailed: "com.permdock.delivery.failed";
41
41
  };
42
42
  type CloudEventType = (typeof CLOUD_EVENT_TYPES)[keyof typeof CLOUD_EVENT_TYPES];
43
- /** Types named for a later release; a receiver refuses them until then. None are reserved now. */
43
+ /**
44
+ * Types named for a later release; a receiver refuses them until then. None are
45
+ * reserved now.
46
+ */
44
47
  declare const RESERVED_CLOUD_EVENT_TYPES: readonly CloudEventType[];
45
48
  /** The CloudEvents JSON format media type for one event (structured mode). */
46
49
  declare const CLOUDEVENTS_CONTENT_TYPE = "application/cloudevents+json";
@@ -51,27 +54,42 @@ declare const CLOUDEVENTS_BATCH_CONTENT_TYPE = "application/cloudevents-batch+js
51
54
  * which the Cloud then suspends; the `operation-*` codes only report.
52
55
  */
53
56
  type CatalogFindingCode = "permission-removed" | "not-hostable" | "grantee-removed" | "approval-tightened" | "operation-risk-raised" | "operation-approval-removed";
54
- /** One drift finding: the permission key and, when one broke, the hosted grant id. */
57
+ /**
58
+ * One drift finding: the permission key and, when one broke, the hosted grant
59
+ * id.
60
+ */
55
61
  type CatalogFinding = {
56
62
  readonly code: CatalogFindingCode;
57
63
  readonly permission: string;
58
64
  readonly grant?: string;
59
65
  /** The operation name, on the `operation-*` codes. */
60
66
  readonly operation?: string;
61
- /** `meta.risk` before the publish, on `operation-risk-raised`; an unset risk is `low`. */
67
+ /**
68
+ * `meta.risk` before the publish, on `operation-risk-raised`; an unset risk
69
+ * is `low`.
70
+ */
62
71
  readonly previous?: OperationRisk;
63
72
  /** `meta.risk` after the publish, on `operation-risk-raised`. */
64
73
  readonly risk?: OperationRisk;
65
74
  };
66
- /** `data` of a `com.permdock.catalog.*` event: a `permdock cloud push` or a drift against live hosted grants. */
75
+ /**
76
+ * `data` of a `com.permdock.catalog.*` event: a `permdock cloud push` or a
77
+ * drift against live hosted grants.
78
+ */
67
79
  type CatalogEventData = {
68
80
  readonly kind: "publish" | "drift";
69
- /** The catalog fingerprint after the publish, or the one drift was measured against. */
81
+ /**
82
+ * The catalog fingerprint after the publish, or the one drift was measured
83
+ * against.
84
+ */
70
85
  readonly fingerprint: string;
71
86
  readonly previous?: string;
72
87
  readonly findings?: readonly CatalogFinding[];
73
88
  };
74
- /** A CloudEvents 1.0 event in the JSON format, with the distributed-tracing extension. */
89
+ /**
90
+ * A CloudEvents 1.0 event in the JSON format, with the distributed-tracing
91
+ * extension.
92
+ */
75
93
  type CloudEvent = {
76
94
  readonly specversion: "1.0";
77
95
  readonly type: CloudEventType;
@@ -82,9 +100,15 @@ type CloudEvent = {
82
100
  /** An RFC 3339 instant: the sink event's `at`. */
83
101
  readonly time: string;
84
102
  readonly datacontenttype: "application/json";
85
- /** The published JSON Schema of `data`, `https://permdock.com/schemas/<family>-event-v1.json`. */
103
+ /**
104
+ * The published JSON Schema of `data`,
105
+ * `https://permdock.com/schemas/<family>-event-v1.json`.
106
+ */
86
107
  readonly dataschema: string;
87
- /** W3C Trace Context `traceparent`, the CloudEvents distributed-tracing extension. */
108
+ /**
109
+ * W3C Trace Context `traceparent`, the CloudEvents distributed-tracing
110
+ * extension.
111
+ */
88
112
  readonly traceparent?: string;
89
113
  readonly tracestate?: string;
90
114
  readonly data: SinkEvent | CatalogEventData;
@@ -141,9 +165,9 @@ declare function automationEvent(input: {
141
165
  readonly x?: AppData;
142
166
  }): AutomationEvent;
143
167
  /**
144
- * The `access` event of a `SupportSession`: `started` when it begins,
145
- * `ended` when it lapses, `revoked` when it is ended early. `principal` is
146
- * the staff member, as for a support membership.
168
+ * The `access` event of a `SupportSession`: `started` when it begins, `ended`
169
+ * when it lapses, `revoked` when it is ended early. `principal` is the staff
170
+ * member, as for a support membership.
147
171
  */
148
172
  declare function supportSessionEvent(input: {
149
173
  readonly operation: AccessEvent["operation"];
@@ -155,8 +179,8 @@ declare function supportSessionEvent(input: {
155
179
  readonly x?: AppData;
156
180
  }): AccessEvent;
157
181
  /**
158
- * A `credential` sink event for `credential`. `sample` belongs on `used`
159
- * events only and must be in `(0, 1]`.
182
+ * A `credential` sink event for `credential`. `sample` belongs on `used` events
183
+ * only and must be in `(0, 1]`.
160
184
  */
161
185
  declare function credentialEvent(input: {
162
186
  readonly operation: CredentialEvent["operation"];
@@ -215,9 +239,9 @@ declare function accessEvent(input: {
215
239
  */
216
240
  declare function toCloudEvent(event: SinkEvent, options: CloudEventOptions): CloudEvent;
217
241
  /**
218
- * Signs sink events as an offline evidence export: a compact JWS with
219
- * `typ: vnd.permdock.evidence+jwt` whose `events` claim holds CloudEvents.
220
- * Live deliveries use Standard Webhooks instead.
242
+ * Signs sink events as an offline evidence export: a compact JWS with `typ:
243
+ * vnd.permdock.evidence+jwt` whose `events` claim holds CloudEvents. Live
244
+ * deliveries use Standard Webhooks instead.
221
245
  */
222
246
  declare function signDecisionBatch(events: readonly SinkEvent[], signer: TokenSigner, options: SignDecisionBatchOptions): Promise<string>;
223
247
  declare function memoryDecisionSink(options?: MemoryDecisionSinkOptions): MemoryDecisionSink;
@@ -1,10 +1,12 @@
1
- import { t as byCodePoint } from "./compare-pfyVnBjE.js";
2
- import { i as readJsonFile } from "./files-D_JIzUrP.js";
3
- import { t as packageRoot } from "./package-root-Dk_ETdkp.js";
4
- import { t as didYouMean } from "./args-IIolxxKA.js";
1
+ import { t as byCodePoint } from "./compare-DTfyUunF.js";
2
+ import { i as readJsonFile } from "./files-BSjrtIHw.js";
3
+ import { l as packageRoot } from "./version-DMQ0dnN5.js";
4
+ import { t as didYouMean } from "./args-0FrVs5EH.js";
5
+ import { a as nonEmptyOr } from "./output-tkju6U7R.js";
5
6
  import { cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, readlinkSync, realpathSync, writeFileSync } from "node:fs";
6
7
  import { basename, dirname, join, relative, resolve } from "node:path";
7
- import { createRequire } from "node:module";
8
+ import { pathToFileURL } from "node:url";
9
+ import { findPackageJSON } from "node:module";
8
10
  //#region src/cli/skills.ts
9
11
  const SKILL_NAMES = [
10
12
  "permdock",
@@ -23,7 +25,10 @@ const AGENT_FOLDERS = {
23
25
  };
24
26
  /** The `--for` names `skills install` knows, with the folder each writes. */
25
27
  const SKILL_AGENTS = AGENT_FOLDERS;
26
- /** Agents whose config folder (`.claude`, `.cursor`, `.agents`) the project already has. */
28
+ /**
29
+ * Agents whose config folder (`.claude`, `.cursor`, `.agents`) the project
30
+ * already has.
31
+ */
27
32
  function detectedAgents(cwd) {
28
33
  return Object.entries(AGENT_FOLDERS).filter(([, folder]) => existsSync(join(cwd, dirname(folder)))).map(([agent]) => agent);
29
34
  }
@@ -79,13 +84,13 @@ function runSkillsInstall(input) {
79
84
  const links = linked.length === 0 ? "" : `; linked ${linked.join(", ")}`;
80
85
  return {
81
86
  code: 0,
82
- output: `installed ${copied.join(", ") || "no skills"}${links} (permdock@${version})`
87
+ output: `installed ${nonEmptyOr(copied.join(", "), "no skills")}${links} (permdock@${version})`
83
88
  };
84
89
  }
85
90
  /**
86
91
  * Compares the installed skills with the ones this version ships and writes
87
- * nothing: exit 1 lists every file that is missing or differs. Without
88
- * agents it checks the agent folders the project has, else every folder.
92
+ * nothing: exit 1 lists every file that is missing or differs. Without agents
93
+ * it checks the agent folders the project has, else every folder.
89
94
  */
90
95
  function runSkillsCheck(input) {
91
96
  const source = resolveSkillsRoot(input.cwd, input.bundled ?? join(packageRoot(), "skills"));
@@ -183,9 +188,8 @@ function resolveTargets(agents) {
183
188
  }
184
189
  function resolveSkillsRoot(cwd, bundled) {
185
190
  try {
186
- const pkg = createRequire(resolve(cwd, "package.json")).resolve("permdock/package.json");
187
- const root = join(dirname(pkg), "skills");
188
- if (existsSync(root)) return root;
191
+ const pkg = findPackageJSON("permdock", pathToFileURL(resolve(cwd, "package.json")));
192
+ if (pkg !== void 0 && existsSync(join(dirname(pkg), "skills"))) return join(dirname(pkg), "skills");
189
193
  } catch {}
190
194
  const local = join(cwd, "node_modules/permdock/skills");
191
195
  if (existsSync(local)) return local;
@@ -1,7 +1,7 @@
1
1
  import { t as defineLeaf } from "./command-L8EstFNm.js";
2
- import { t as checkFlag } from "./flags-C3DktBDY.js";
3
- import { r as pick, t as CANCELLED } from "./prompt-DfZLJLIn.js";
4
- import { n as detectedAgents, r as runSkills, t as SKILL_AGENTS } from "./skills-B6lVdD_W.js";
2
+ import { t as checkFlag } from "./flags-DXjoTVbS.js";
3
+ import { r as pick, t as CANCELLED } from "./prompt-BYc6drYW.js";
4
+ import { n as detectedAgents, r as runSkills, t as SKILL_AGENTS } from "./skills-Bjj7BNEQ.js";
5
5
  //#region src/cli/commands/skills.ts
6
6
  const forFlag = { for: {
7
7
  type: "string",