permdock 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/README.md +37 -35
  2. package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
  3. package/dist/a2a/index.d.ts +8 -6
  4. package/dist/a2a/index.js +21 -31
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -23
  10. package/dist/ai-sdk/index.js +38 -21
  11. package/dist/app-data-MuyzVqX8.js +60 -0
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  19. package/dist/arazzo-B6lebmiQ.js +36 -0
  20. package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
  21. package/dist/args-IIolxxKA.js +197 -0
  22. package/dist/astro/index.d.ts +43 -0
  23. package/dist/astro/index.js +27 -0
  24. package/dist/audience-Dg8XsRaO.js +55 -0
  25. package/dist/auth-DRLEizbL.js +178 -0
  26. package/dist/authzen/index.d.ts +26 -6
  27. package/dist/authzen/index.js +228 -75
  28. package/dist/automation-BMZPIVUM.d.ts +114 -0
  29. package/dist/automation-DVjOckjV.js +157 -0
  30. package/dist/better-auth/index.d.ts +8 -6
  31. package/dist/better-auth/index.js +11 -23
  32. package/dist/better-supabase/index.d.ts +438 -86
  33. package/dist/better-supabase/index.js +1027 -184
  34. package/dist/bind--9EFVYWF.d.ts +38 -0
  35. package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
  36. package/dist/body-CH5of8Ne.js +10 -0
  37. package/dist/body-text-QcXok_SI.js +52 -0
  38. package/dist/build-instance-BMnAudHn.js +52 -0
  39. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
  40. package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
  41. package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
  42. package/dist/casbin-Cr7RLtA3.js +30 -0
  43. package/dist/casbin-Dyu2gnUD.js +234 -0
  44. package/dist/casl-64gpT-8x.js +24 -0
  45. package/dist/casl-DjEDhTCP.js +299 -0
  46. package/dist/catalog/index.d.ts +74 -2
  47. package/dist/catalog/index.js +51 -2
  48. package/dist/catalog-BECMPrwc.js +100 -0
  49. package/dist/catalog-DjhMYYCq.js +1 -0
  50. package/dist/catalog-R_A__RsH.js +52 -0
  51. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
  52. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  53. package/dist/chat/index.d.ts +2 -0
  54. package/dist/chat/index.js +224 -0
  55. package/dist/chat-sdk/index.d.ts +87 -0
  56. package/dist/chat-sdk/index.js +197 -0
  57. package/dist/claims-map-7oQ3ue4X.js +13 -0
  58. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  59. package/dist/claude-agent/index.d.ts +7 -14
  60. package/dist/claude-agent/index.js +26 -30
  61. package/dist/clerk/index.d.ts +9 -8
  62. package/dist/clerk/index.js +15 -45
  63. package/dist/cli/bin.js +36 -17
  64. package/dist/cli/index.d.ts +20 -6
  65. package/dist/cli/index.js +164 -4
  66. package/dist/cloud/index.d.ts +102 -63
  67. package/dist/cloud/index.js +240 -347
  68. package/dist/cloud-CIoHNevm.js +87 -0
  69. package/dist/codemod-Bmj9dWMH.js +37 -0
  70. package/dist/codemod-Cxvvc70T.js +2084 -0
  71. package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
  72. package/dist/collect-DloHbDVa.js +55 -0
  73. package/dist/collect-FlXJlhus.js +1 -0
  74. package/dist/command-L8EstFNm.js +6 -0
  75. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  76. package/dist/compile/index.d.ts +1 -1
  77. package/dist/compile/index.js +1 -2
  78. package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
  79. package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  80. package/dist/completion-BqhRBJD8.js +143 -0
  81. package/dist/config-B46rm9sc.js +26 -0
  82. package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
  83. package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
  84. package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
  85. package/dist/constants-DcJABbLW.js +20 -0
  86. package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
  87. package/dist/convex/index.d.ts +11 -10
  88. package/dist/convex/index.js +18 -18
  89. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  90. package/dist/create-BDS7wc3y.d.ts +138 -0
  91. package/dist/create-BFfm17UA.d.ts +110 -0
  92. package/dist/create-BWRSXgOF.js +403 -0
  93. package/dist/create-C3b4B5eF.js +130 -0
  94. package/dist/create-DnrmLnLW.js +323 -0
  95. package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
  96. package/dist/credentials-DPyHmYz5.js +74 -0
  97. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  98. package/dist/delegation-DaXVdDhM.js +286 -0
  99. package/dist/delegation-input-FTxMK3ji.js +19 -0
  100. package/dist/delivery/index.d.ts +5 -0
  101. package/dist/delivery/index.js +5 -0
  102. package/dist/delivery-DCAgNyCn.js +499 -0
  103. package/dist/delivery-event-xX4obB8F.js +40 -0
  104. package/dist/denied-text-D8jDHgsl.d.ts +19 -0
  105. package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
  106. package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
  107. package/dist/device-BARQ8eYG.js +193 -0
  108. package/dist/diff-CxZo9pTq.js +37 -0
  109. package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
  110. package/dist/doctor-CxiwSfqH.js +44 -0
  111. package/dist/doctor-DFjUxf2f.js +2361 -0
  112. package/dist/drizzle/index.d.ts +5 -3
  113. package/dist/drizzle/index.js +6 -14
  114. package/dist/elysia/index.d.ts +16 -13
  115. package/dist/elysia/index.js +14 -13
  116. package/dist/env-DJZrPjRi.js +8 -0
  117. package/dist/errors-BDUwg2qC.js +27 -0
  118. package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
  119. package/dist/errors-BWXBMaKK.d.ts +11 -0
  120. package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  121. package/dist/errors-CWTY6uih.js +143 -0
  122. package/dist/evaluate-_R8QkWaf.js +1732 -0
  123. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  124. package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
  125. package/dist/eve/index.d.ts +12 -16
  126. package/dist/eve/index.js +23 -29
  127. package/dist/event-time-CsegxXxB.js +23 -0
  128. package/dist/expiry-D4_YKRKD.js +52 -0
  129. package/dist/express/index.d.ts +13 -10
  130. package/dist/express/index.js +14 -12
  131. package/dist/fastify/index.d.ts +26 -13
  132. package/dist/fastify/index.js +17 -36
  133. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  134. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  135. package/dist/fields-D9tPVUUS.js +203 -0
  136. package/dist/files-C5ZI27eV.js +124 -0
  137. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  138. package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
  139. package/dist/flags-C3DktBDY.js +86 -0
  140. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
  141. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  142. package/dist/grantee-Cn1HyUsI.js +254 -0
  143. package/dist/grantee-conditions-CcXf8hMM.js +271 -0
  144. package/dist/grantee-match-DHArqY82.js +142 -0
  145. package/dist/h3/index.d.ts +37 -0
  146. package/dist/h3/index.js +35 -0
  147. package/dist/headers-BIjfMaoC.js +8 -0
  148. package/dist/headers-CIbDTUTK.d.ts +7 -0
  149. package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
  150. package/dist/hono/index.d.ts +12 -9
  151. package/dist/hono/index.js +14 -13
  152. package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
  153. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  154. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  155. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  156. package/dist/http-DXJ37RDA.js +46 -0
  157. package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
  158. package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
  159. package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
  160. package/dist/index-BcHcPyIo.d.ts +110 -0
  161. package/dist/index-CaxrMD1A.d.ts +1 -0
  162. package/dist/index-Chrs5fQ-.d.ts +210 -0
  163. package/dist/index-CxGUswIC.d.ts +431 -0
  164. package/dist/index-D8EovfsP.d.ts +91 -0
  165. package/dist/index-DOVf7RJv.d.ts +900 -0
  166. package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
  167. package/dist/index.d.ts +20 -14
  168. package/dist/index.js +33 -23
  169. package/dist/init-DeMYsnYJ.js +96 -0
  170. package/dist/init-GG6Jh8HD.js +95 -0
  171. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  172. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  173. package/dist/instant-BluqDvyS.js +19 -0
  174. package/dist/internals-Dk8A8fX3.js +17 -0
  175. package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
  176. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  177. package/dist/jwt/index.d.ts +18 -11
  178. package/dist/jwt/index.js +166 -145
  179. package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
  180. package/dist/kysely/index.d.ts +5 -3
  181. package/dist/kysely/index.js +6 -14
  182. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  183. package/dist/load-BxEtwlBS.js +1 -0
  184. package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
  185. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  186. package/dist/login-Dfe5RlYk.js +68 -0
  187. package/dist/login-imhuwvn3.js +254 -0
  188. package/dist/manifest-C8IzW3Do.js +42 -0
  189. package/dist/manifest-CtKR3GXL.js +370 -0
  190. package/dist/manifest-json-CAGzls-C.js +9 -0
  191. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  192. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  193. package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
  194. package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
  195. package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
  196. package/dist/mcp/index.d.ts +36 -9
  197. package/dist/mcp/index.js +476 -448
  198. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
  199. package/dist/nest/index.d.ts +12 -9
  200. package/dist/nest/index.js +20 -20
  201. package/dist/next/index.d.ts +40 -20
  202. package/dist/next/index.js +37 -39
  203. package/dist/next/plugin.d.ts +1 -1
  204. package/dist/next/plugin.js +2 -2
  205. package/dist/node/index.d.ts +10 -10
  206. package/dist/node/index.js +7 -9
  207. package/dist/ocsf-BFp-PZZA.js +126 -0
  208. package/dist/openai/index.d.ts +9 -16
  209. package/dist/openai/index.js +18 -25
  210. package/dist/openapi/index.d.ts +3 -3
  211. package/dist/openapi/index.js +1 -1
  212. package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
  213. package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
  214. package/dist/openapi-ahr8rHu3.js +138 -0
  215. package/dist/operation-findings-DgATDpvh.js +36 -0
  216. package/dist/operations-CxybZErY.d.ts +59 -0
  217. package/dist/orpc/index.d.ts +13 -10
  218. package/dist/orpc/index.js +23 -20
  219. package/dist/otel/index.d.ts +3 -2
  220. package/dist/otel/index.js +53 -27
  221. package/dist/output-Dyw8fyPF.js +88 -0
  222. package/dist/output-files-B3IZJksC.js +1 -0
  223. package/dist/output-files-DhRBBE4n.js +138 -0
  224. package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
  225. package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
  226. package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
  227. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
  228. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  229. package/dist/parse-request-D_tUXG6M.js +26 -0
  230. package/dist/paths-DXSHAMIa.js +42 -0
  231. package/dist/pdp/index.d.ts +7 -3
  232. package/dist/pdp/index.js +47 -29
  233. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  234. package/dist/peer-CRvC7Hg1.js +1 -0
  235. package/dist/permdock-B9JxkBwC.js +868 -0
  236. package/dist/permdock-D7eeLJER.d.ts +502 -0
  237. package/dist/permission-registry-Br4jSNVi.js +385 -0
  238. package/dist/permissions-B-wCP5ZC.js +30 -0
  239. package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
  240. package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  241. package/dist/policies-CO1oOymN.js +295 -0
  242. package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  243. package/dist/policy-DLZJ5gAp.js +399 -0
  244. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  245. package/dist/policy-module-CTlwMvLI.js +89 -0
  246. package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
  247. package/dist/postgrest-CW0IqC-U.js +566 -0
  248. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  249. package/dist/powersync-BHfuehf3.js +62 -0
  250. package/dist/powersync-CbzkqL_M.js +1 -0
  251. package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
  252. package/dist/preset/index.d.ts +146 -0
  253. package/dist/preset/index.js +1 -0
  254. package/dist/preset-DZdU0tne.js +1768 -0
  255. package/dist/principal-source-pHneukrx.js +103 -0
  256. package/dist/prisma/index.d.ts +6 -3
  257. package/dist/prisma/index.js +6 -12
  258. package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
  259. package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  260. package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
  261. package/dist/problem-types-CJ2325SZ.js +5 -0
  262. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  263. package/dist/protected-DEPHc2xV.d.ts +38 -0
  264. package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
  265. package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
  266. package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  267. package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
  268. package/dist/pull-BgIfno6w.js +256 -0
  269. package/dist/pull-ByOks_Tg.js +1 -0
  270. package/dist/push-CmFVBOeI.js +116 -0
  271. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  272. package/dist/pushed-policy-DobP7AHI.js +238 -0
  273. package/dist/react/index.d.ts +8 -8
  274. package/dist/react/index.js +6 -6
  275. package/dist/react/provider-client.d.ts +1 -1
  276. package/dist/react/provider-client.js +1 -2
  277. package/dist/react-native/index.d.ts +24 -63
  278. package/dist/react-native/index.js +45 -27
  279. package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
  280. package/dist/relation-walk-3OyDBF0S.js +186 -0
  281. package/dist/relations-BnCWnJGI.js +163 -0
  282. package/dist/renames-CGj7YwcQ.js +175 -0
  283. package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  284. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  285. package/dist/request-context-BTRTG7OT.js +71 -0
  286. package/dist/request-context-C2_1lchh.d.ts +5 -0
  287. package/dist/request-schema-CMreVuFM.js +148 -0
  288. package/dist/resend/index.d.ts +126 -0
  289. package/dist/resend/index.js +379 -0
  290. package/dist/resource-relations-D_jw0BFx.js +243 -0
  291. package/dist/retire-CALjIQ7e.js +240 -0
  292. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  293. package/dist/rls-BA8an5Ap.js +336 -0
  294. package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
  295. package/dist/role-builder-CXbis5-X.js +623 -0
  296. package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
  297. package/dist/run-CNsApDpd.js +1 -0
  298. package/dist/run-DOfMtc9V.js +723 -0
  299. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  300. package/dist/run-ticket-sxFI6LAk.js +337 -0
  301. package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
  302. package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
  303. package/dist/scan-BOI5tJ-6.js +29 -0
  304. package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
  305. package/dist/schema-yLuBWWsh.js +130 -0
  306. package/dist/scim/index.d.ts +2 -2
  307. package/dist/scim/index.js +1 -2
  308. package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
  309. package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
  310. package/dist/server/index.d.ts +13 -134
  311. package/dist/server/index.js +13 -10
  312. package/dist/server-DqCT4CgZ.js +453 -0
  313. package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
  314. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  315. package/dist/shared-CD11nBbC.js +304 -0
  316. package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
  317. package/dist/signals-D3NcTKUS.js +32 -0
  318. package/dist/sink-BEZSlMS_.js +957 -0
  319. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  320. package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
  321. package/dist/skills-CTYwkl44.js +51 -0
  322. package/dist/snapshot-CXUWfsNy.js +269 -0
  323. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  324. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  325. package/dist/solid/index.d.ts +24 -25
  326. package/dist/solid/index.js +41 -11
  327. package/dist/solid-start/index.d.ts +52 -0
  328. package/dist/solid-start/index.js +49 -0
  329. package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
  330. package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
  331. package/dist/sql-B5T1IL83.js +55 -0
  332. package/dist/src-DLfUWFAI.js +1851 -0
  333. package/dist/ssf/index.d.ts +4 -4
  334. package/dist/ssf/index.js +440 -106
  335. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  336. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  337. package/dist/storage-C2bWdvJH.js +132 -0
  338. package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
  339. package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
  340. package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
  341. package/dist/stores-ClZUgeoP.d.ts +30 -0
  342. package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  343. package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
  344. package/dist/style-DiKWnAvn.js +1 -0
  345. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  346. package/dist/subject-BGoM5o8B.js +17 -0
  347. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  348. package/dist/supabase/index.d.ts +23 -106
  349. package/dist/supabase/index.js +5 -4
  350. package/dist/supabase/middleware.d.ts +13 -6
  351. package/dist/supabase/middleware.js +16 -11
  352. package/dist/supabase-9pqI57pW.js +92 -0
  353. package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
  354. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  355. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
  356. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  357. package/dist/support-session-C6xJQYut.js +158 -0
  358. package/dist/svelte/Protected.svelte +11 -4
  359. package/dist/svelte/index.d.ts +7 -7
  360. package/dist/svelte/index.js +26 -12
  361. package/dist/svelte/runtime.d.ts +10 -3
  362. package/dist/svelte/runtime.js +4 -3
  363. package/dist/svelte/source.d.ts +7 -7
  364. package/dist/svelte/source.js +5 -5
  365. package/dist/sveltekit/index.d.ts +51 -0
  366. package/dist/sveltekit/index.js +27 -0
  367. package/dist/tanstack-start/index.d.ts +51 -0
  368. package/dist/tanstack-start/index.js +40 -0
  369. package/dist/target-Bw37TFNA.js +51 -0
  370. package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
  371. package/dist/terminal/index.d.ts +11 -9
  372. package/dist/terminal/index.js +36 -316
  373. package/dist/testing/index.d.ts +391 -106
  374. package/dist/testing/index.js +4574 -1286
  375. package/dist/testing/saas/index.d.ts +9 -8
  376. package/dist/testing/saas/index.js +2 -2
  377. package/dist/testing/saas/permissions.d.ts +1 -1
  378. package/dist/testing/saas/permissions.js +1 -2
  379. package/dist/text-BMFRfBqc.js +8 -0
  380. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  381. package/dist/thenable-yD7SabqG.js +31 -0
  382. package/dist/time-DkWjdL98.js +71 -0
  383. package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
  384. package/dist/tool-refusal-CMLN5xhn.js +41 -0
  385. package/dist/trpc/index.d.ts +12 -9
  386. package/dist/trpc/index.js +18 -17
  387. package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
  388. package/dist/types-BNORmDM8.d.ts +172 -0
  389. package/dist/types-BjV-fqcA.d.ts +57 -0
  390. package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
  391. package/dist/types-C8-KNsFf.d.ts +107 -0
  392. package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  393. package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
  394. package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
  395. package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
  396. package/dist/types-DX0LaKTb.d.ts +157 -0
  397. package/dist/types-DiQjupG2.d.ts +332 -0
  398. package/dist/types-DqzsnlSA.js +67 -0
  399. package/dist/types-_sHy8BQf.d.ts +65 -0
  400. package/dist/types-fbZ7JEXr.d.ts +89 -0
  401. package/dist/types-tIgIeIKJ.d.ts +66 -0
  402. package/dist/unplugin/index.d.ts +1 -1
  403. package/dist/unplugin/index.js +2 -2
  404. package/dist/usage-CHOtwL19.js +1 -0
  405. package/dist/usage-DHtE8j4E.js +32 -0
  406. package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
  407. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  408. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  409. package/dist/validity-CZ7-y0Cj.js +79 -0
  410. package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
  411. package/dist/verify-DbCL9bnB.js +1770 -0
  412. package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
  413. package/dist/version-DXkYUISx.js +1 -0
  414. package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
  415. package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
  416. package/dist/vue/index.d.ts +25 -21
  417. package/dist/vue/index.js +25 -9
  418. package/dist/waiter-BGUtGYoU.js +67 -0
  419. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  420. package/dist/watch-Cb-NcaUw.js +1 -0
  421. package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
  422. package/dist/webmcp/index.d.ts +2 -2
  423. package/dist/webmcp/index.js +13 -37
  424. package/dist/where-scope-Dv-WTP-w.js +306 -0
  425. package/dist/who-can-D0QoYbEb.js +364 -0
  426. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  427. package/dist/wire-denial-C7PaVYEM.js +27 -0
  428. package/dist/workflow/index.d.ts +5 -0
  429. package/dist/workflow/index.js +223 -0
  430. package/dist/workflow-sdk/index.d.ts +56 -0
  431. package/dist/workflow-sdk/index.js +78 -0
  432. package/dist/wrap-Bd1Tejur.d.ts +15 -0
  433. package/dist/wrap-gX61EtpB.js +27 -0
  434. package/package.json +140 -41
  435. package/schemas/access-event-v1.json +118 -0
  436. package/schemas/approval-request-v1.json +34 -1
  437. package/schemas/approval-signature-v1.json +94 -0
  438. package/schemas/automation-event-v1.json +113 -0
  439. package/schemas/capability-v1.json +84 -0
  440. package/schemas/catalog-event-v1.json +87 -0
  441. package/schemas/catalog-v1.json +129 -12
  442. package/schemas/cli-commands-v1.json +164 -0
  443. package/schemas/cli-result-v1.json +96 -0
  444. package/schemas/cloud-api-v1.json +5407 -0
  445. package/schemas/connector-v1.json +408 -0
  446. package/schemas/credential-event-v1.json +81 -0
  447. package/schemas/credential-v1.json +134 -0
  448. package/schemas/decision-event-v1.json +288 -0
  449. package/schemas/delivery-event-v1.json +117 -0
  450. package/schemas/directory-event-v1.json +85 -0
  451. package/schemas/evidence-export-v1.json +54 -0
  452. package/schemas/membership-event-v1.json +93 -0
  453. package/schemas/policy-v1.json +68 -0
  454. package/schemas/pushed-policy-v1.json +236 -0
  455. package/schemas/run-v1.json +162 -0
  456. package/schemas/snapshot-v1.json +138 -0
  457. package/schemas/supabase-claims-v1.json +4 -4
  458. package/schemas/supabase-manifest-v1.json +5 -1
  459. package/schemas/support-session-v1.json +111 -0
  460. package/skills/permdock/SKILL.md +16 -12
  461. package/skills/permdock-agents/SKILL.md +40 -23
  462. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  463. package/skills/permdock-agents/references/runtimes.md +22 -18
  464. package/skills/permdock-approvals/SKILL.md +29 -13
  465. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  466. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  467. package/skills/permdock-audit/SKILL.md +3 -3
  468. package/skills/permdock-credentials/SKILL.md +5 -5
  469. package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
  470. package/skills/permdock-data/SKILL.md +6 -6
  471. package/skills/permdock-data/references/queries-and-rls.md +13 -8
  472. package/skills/permdock-data/references/relationships.md +3 -3
  473. package/skills/permdock-tenancy/SKILL.md +20 -7
  474. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  475. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  476. package/skills/permdock-wire/SKILL.md +18 -12
  477. package/skills/permdock-wire/references/adapters.md +146 -50
  478. package/skills/permdock-wire/references/policy-options.md +15 -6
  479. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  480. package/dist/approvals-DbYAuNkG.js +0 -224
  481. package/dist/arazzo-C9chp3ST.js +0 -54
  482. package/dist/bind-C_ob3LKa.d.ts +0 -25
  483. package/dist/catalog-CRW5Mx_B.js +0 -2
  484. package/dist/catalog-CYj-mX2O.js +0 -48
  485. package/dist/catalog-DWF5cYqB.js +0 -55
  486. package/dist/cloud-CfwZ39Rl.js +0 -50
  487. package/dist/cloud-DWLXO2af.js +0 -118
  488. package/dist/collect-CHB22Sx4.js +0 -83
  489. package/dist/collect-DSWOk19R.js +0 -2
  490. package/dist/commands-BeaGNj_o.js +0 -97
  491. package/dist/config-ir40y8m0.js +0 -36
  492. package/dist/create-CMwIl-w2.js +0 -253
  493. package/dist/delegation-D8pUEuce.js +0 -103
  494. package/dist/diff-C9RDjjhs.js +0 -48
  495. package/dist/doctor-Djh6JDEk.js +0 -53
  496. package/dist/doctor-DvH0IQff.js +0 -1194
  497. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  498. package/dist/duration-xK2jGFVc.js +0 -25
  499. package/dist/errors-CWfoNg9N.js +0 -47
  500. package/dist/errors-DRnGZHzF.js +0 -30
  501. package/dist/evaluation-items-CfCCejQd.js +0 -40
  502. package/dist/expiry-BoBJ8Tvc.js +0 -7
  503. package/dist/fields-BMl1RxoX.js +0 -26
  504. package/dist/grantee-Cv5Sogfv.js +0 -602
  505. package/dist/headers-BZSDieNT.js +0 -6
  506. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  507. package/dist/ids-DC4V4CFu.js +0 -18
  508. package/dist/index-0nNqHspG.d.ts +0 -6
  509. package/dist/index-BNc7Wer_.d.ts +0 -483
  510. package/dist/index-C7Tw7MaW.d.ts +0 -201
  511. package/dist/instance-options-Dhhcnm3y.js +0 -22
  512. package/dist/load-DwJUafYN.js +0 -2
  513. package/dist/manifest-iaoBXHKc.js +0 -783
  514. package/dist/map-AcxK9o_D.js +0 -147
  515. package/dist/may-use-DndQ5tQ-.js +0 -77
  516. package/dist/openapi-CQTsgKoB.js +0 -164
  517. package/dist/permdock-CbgvLnuo.js +0 -3479
  518. package/dist/permissions-DVoF6dMt.js +0 -662
  519. package/dist/policy-xyWg7QdR.js +0 -1122
  520. package/dist/powersync-CrBX8hY6.js +0 -2
  521. package/dist/powersync-DE19b9dT.js +0 -62
  522. package/dist/protected-BdnIEFkY.d.ts +0 -27
  523. package/dist/protected-xAr24FEC.d.ts +0 -40
  524. package/dist/relations-cjOL01hZ.js +0 -505
  525. package/dist/rls-P-BeBx0n.js +0 -238
  526. package/dist/rls-graph-CHwx0V8q.js +0 -435
  527. package/dist/rls-ownership-DcYlZ09B.js +0 -843
  528. package/dist/rls-shared-Cewd_-zI.js +0 -495
  529. package/dist/rls-verify-CMv9H3wV.js +0 -746
  530. package/dist/run-BWc9qqvE.js +0 -174
  531. package/dist/server-DlZ28Oz5.js +0 -268
  532. package/dist/sink-B1fZzIMf.d.ts +0 -104
  533. package/dist/sink-Bd9PSyfq.js +0 -141
  534. package/dist/skills-C5CbhhpG.js +0 -56
  535. package/dist/snapshot-Enxd0n-s.js +0 -975
  536. package/dist/sql-xdg5f4Fi.js +0 -27
  537. package/dist/src-BDwEZWrZ.js +0 -568
  538. package/dist/store-jOBYpiXC.d.ts +0 -36
  539. package/dist/stores-C0IMQrGI.d.ts +0 -52
  540. package/dist/subject-C6dLxqHU.js +0 -24
  541. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  542. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  543. package/dist/supabase-s4o9s1O1.js +0 -83
  544. package/dist/thenable-okc2xDsj.js +0 -10
  545. package/dist/types-BnIEz1sU.d.ts +0 -48
  546. package/dist/types-Bvc4oWT6.d.ts +0 -9
  547. package/dist/types-CKNSyIf_.d.ts +0 -52
  548. package/dist/types-Cq_H8N_X.d.ts +0 -197
  549. package/dist/usage-B0YuTQRO.js +0 -42
  550. package/dist/usage-DorAJiU_.js +0 -2
  551. package/dist/vocabulary-DA8a8zif.d.ts +0 -56
  552. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -0,0 +1,58 @@
1
+ # Presets and recipes
2
+
3
+ ## Presets
4
+
5
+ A preset is an archetype plus the features, auth, backend, framework, integrations and Cloud services an app needs, encoded as a code that starts with `p1` ([presets](https://permdock.com/docs/concepts/presets)). The user builds one at [permdock.com/create](https://permdock.com/create), or you pass flags.
6
+
7
+ ```bash
8
+ npx permdock init --preset <code> --dry-run
9
+ npx permdock init --archetype b2b --framework hono --auth clerk --backend drizzle --feature approvals --dry-run
10
+ npx permdock preset decode <code>
11
+ ```
12
+
13
+ | Flag | Values |
14
+ | --------------- | ----------------------------------------------------------------------------------------------------------------------- |
15
+ | `--archetype` | `b2b`, `agent`, `marketplace`, `api`, `internal`, `consumer` |
16
+ | `--framework` | `next`, `hono`, `express`, `none` |
17
+ | `--auth` | `custom`, `supabase`, `better-auth`, `clerk`, `jwt` |
18
+ | `--backend` | `memory`, `supabase`, `drizzle`, `prisma` |
19
+ | `--feature` | `tenancy`, `custom-roles`, `approvals`, `operations`, `decision-log`, `limits`, `plans`, `ownership`, `api-keys`, `rls` |
20
+ | `--integration` | `ai-sdk`, `mcp`, `shadcn`, `react-native` |
21
+ | `--service` | `cloud-decision-log`, `cloud-approvals`, `cloud-snapshots`, `cloud-hosted-grants` |
22
+
23
+ `permdock preset decode <code>` ends with the `init` flags that select the same preset.
24
+
25
+ `init` keeps every file that exists unless `--force` is passed, installs nothing and calls no network. It prints the `npm install` line, the `npx shadcn add` line for the recipes and the docs pages to read. Run what it prints, then `permdock doctor`.
26
+
27
+ What `init` writes is the app's own code: `src/permissions.ts`, `src/policy.ts`, `src/permdock.ts` (`defineApp` with a `profile` from `NODE_ENV`), `src/session.ts`, `src/data.ts`, the framework file and `permdock.config.ts` ([what each choice writes](https://permdock.com/docs/cli/init#generated-files)). With `--auth custom` the session returns `null` until it is wired, so every check denies; a provider's session calls its `subjectFrom*`. With `--backend memory` the loaders return demo rows: replace them, and do not add rules to them.
28
+
29
+ ### Who owns what
30
+
31
+ - The `permdock` package owns every rule: evaluation, role ceilings, approval binding, limits, token checks. `npm update` reaches it.
32
+ - The app owns declarations (`definePermissions`, `definePolicy` data, `defineApp` options) and presentation (recipes).
33
+ - Never copy evaluation logic out of the package into the app, and never change a recipe so it decides on its own; it renders what `useGate` returns.
34
+
35
+ `profile: "prod"` throws at startup when a store or limits a feature needs are missing ([apps and profiles](https://permdock.com/docs/concepts/apps)). Do not switch the profile to silence it; pass the store.
36
+
37
+ ## Recipes
38
+
39
+ The `@permdock` shadcn registry holds UI built from the app's own components on `useGate` ([recipes](https://permdock.com/docs/concepts/recipes)). PermDock ships no visible component besides `<Protected>`.
40
+
41
+ ```bash
42
+ npx shadcn@latest add https://permdock.com/r/gated-button.json
43
+ npx shadcn@latest add https://permdock.com/r/preset-<code>.json
44
+ ```
45
+
46
+ | Recipe | Use |
47
+ | ---------------------------------------------- | ----------------------------------------------------------------------- |
48
+ | `gated-button` | A button that is hidden, disabled with the reason, or asks for approval |
49
+ | `approval-request-dialog` | A note and a request for an `approval-required` action |
50
+ | `tenant-switcher` | The tenants the user is a member of |
51
+ | `role-picker` | Only the roles the user may hand out |
52
+ | `custom-role-editor` | Only the permissions the editor holds |
53
+ | `upgrade-prompt` | The plans that would grant the action |
54
+ | `gated-button-native`, `upgrade-prompt-native` | The same on React Native Reusables |
55
+
56
+ Each recipe needs `PermDockProvider` from `permdock/react` or `permdock/react-native`. A recipe hides or disables a control; the server checks the action again, so the guard from the Guard step stays.
57
+
58
+ ✓ The recipe renders `useGate`'s `hidden`, `disabled`, `needsApproval` and `reason`, and the server action it calls asserts the same permission.
@@ -1,224 +0,0 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
2
- import { t as PROBLEM_BASE } from "./validation-error-CnjZ4t92.js";
3
- import { s as rootMembershipId } from "./scopes-CVdPrWN-.js";
4
- import { n as isApprovalError } from "./errors-DRnGZHzF.js";
5
- import { n as hasCredentials } from "./http-SO7qGttf.js";
6
- import { l as unauthenticatedProblem } from "./problem-B43ztKIm.js";
7
- import { n as assertApprover } from "./store-DMAWwAJV.js";
8
- import { m as approverRelations, p as heldPermissions } from "./helpers-H_KARDVC.js";
9
- //#region src/approvals/handler.ts
10
- function problem(status, title, detail, slug) {
11
- const body = {
12
- type: `${PROBLEM_BASE}/${slug}`,
13
- title,
14
- status,
15
- detail
16
- };
17
- return new Response(JSON.stringify(body), {
18
- status,
19
- headers: { "content-type": "application/problem+json" }
20
- });
21
- }
22
- function json(status, body) {
23
- return new Response(JSON.stringify(body), {
24
- status,
25
- headers: { "content-type": "application/json" }
26
- });
27
- }
28
- function parseRoute(url, method) {
29
- const parts = url.pathname.replace(/\/+$/u, "").split("/").filter(Boolean);
30
- const last = parts.at(-1);
31
- const prev = parts.at(-2);
32
- if (last === void 0) return;
33
- if (method === "GET" && last === "pending") return { kind: "pending" };
34
- if (method === "GET" && last === "mine") return { kind: "mine" };
35
- if (method === "POST" && last === "approve" && prev !== void 0) return {
36
- kind: "approve",
37
- token: decodeURIComponent(prev)
38
- };
39
- if (method === "POST" && last === "reject" && prev !== void 0) return {
40
- kind: "reject",
41
- token: decodeURIComponent(prev)
42
- };
43
- if (method === "GET" && last !== "pending" && last !== "mine") return {
44
- kind: "get",
45
- token: decodeURIComponent(last)
46
- };
47
- }
48
- async function resolveSubject(request, resolve) {
49
- try {
50
- const subject = await resolve(request);
51
- if (subject === null || subject === void 0) return null;
52
- return subject;
53
- } catch {
54
- return null;
55
- }
56
- }
57
- function membershipTenants(subject) {
58
- const principal = subject.principal;
59
- if (principal === null) return [];
60
- const tenants = /* @__PURE__ */ new Set();
61
- if (principal.tenant !== void 0) tenants.add(principal.tenant);
62
- for (const membership of principal.memberships ?? []) {
63
- const tenant = rootMembershipId(membership);
64
- if (tenant !== void 0) tenants.add(tenant);
65
- }
66
- return [...tenants];
67
- }
68
- function belongsToTenant(subject, tenant) {
69
- return membershipTenants(subject).includes(tenant);
70
- }
71
- async function mayResolve(request, subject, requireDistinct, options) {
72
- try {
73
- const relations = await approverRelations(request, subject, options);
74
- const permissions = await heldPermissions(request, subject, options.permdockFor);
75
- assertApprover(request, subject, requireDistinct, /* @__PURE__ */ new Date(), relations, permissions);
76
- return true;
77
- } catch {
78
- return false;
79
- }
80
- }
81
- function canView(request, subject) {
82
- const principal = subject.principal;
83
- if (principal === null) return false;
84
- if (request.subject.principal?.id === principal.id) return true;
85
- const tenant = request.subject.principal?.tenant;
86
- if (tenant !== void 0) return belongsToTenant(subject, tenant);
87
- return true;
88
- }
89
- /**
90
- * The tenants whose pending requests the approver may list: the requested one,
91
- * else the active one, else every membership tenant. Requests without a tenant
92
- * are listed only when no tenant was requested or active.
93
- */
94
- function pageQuery(url) {
95
- const limit = url.searchParams.get("limit");
96
- const cursor = url.searchParams.get("cursor");
97
- return compact({
98
- limit: limit === null ? void 0 : Number(limit),
99
- cursor: cursor ?? void 0
100
- });
101
- }
102
- function inboxScope(url, subject) {
103
- const requested = url.searchParams.get("tenant");
104
- if (requested !== null && requested !== "") {
105
- if (!belongsToTenant(subject, requested)) return { ok: false };
106
- return {
107
- ok: true,
108
- tenants: [requested],
109
- tenantless: false
110
- };
111
- }
112
- const active = subject.principal?.tenant;
113
- if (active !== void 0) return {
114
- ok: true,
115
- tenants: [active],
116
- tenantless: false
117
- };
118
- return {
119
- ok: true,
120
- tenants: membershipTenants(subject),
121
- tenantless: true
122
- };
123
- }
124
- function signedApproval(request, signer, audience) {
125
- if (signer === void 0 || request.status !== "approved") return Promise.resolve(void 0);
126
- const payload = { approval: {
127
- token: request.token,
128
- permission: request.permission,
129
- resource: request.resource,
130
- status: request.status
131
- } };
132
- if (request.subject.principal !== null) payload["sub"] = request.subject.principal.id;
133
- return signer.sign(payload, compact({
134
- typ: "permdock-approval+jwt",
135
- audience,
136
- expiresAt: Math.floor(Date.parse(request.expiresAt) / 1e3)
137
- }));
138
- }
139
- async function readNote(request) {
140
- const contentType = request.headers.get("content-type") ?? "";
141
- if (request.method !== "POST" || contentType === "") return;
142
- if (!contentType.includes("application/json")) return;
143
- try {
144
- const body = await request.json();
145
- if (body !== null && typeof body === "object" && "note" in body && typeof body.note === "string") return body.note;
146
- } catch {
147
- return;
148
- }
149
- }
150
- function mapError(error, credentials) {
151
- if (!isApprovalError(error)) return problem(500, "Internal error", "approval store failed", "internal");
152
- if (error.code === "approval-not-found") return problem(404, "Not found", error.message, "not-found");
153
- if (error.code === "approval-not-pending" || error.code === "approval-expired" || error.code === "approver-repeated") return problem(409, "Conflict", error.message, "conflict");
154
- if (error.code === "approver-unauthenticated") return unauthenticatedProblem(credentials);
155
- return problem(403, "Permission denied", error.message, "denied");
156
- }
157
- function approvalsHandler(store, options) {
158
- const requireDistinct = options.requireDistinctApprover === true;
159
- return async (request) => {
160
- const url = new URL(request.url);
161
- const route = parseRoute(url, request.method);
162
- if (route === void 0) return problem(405, "Method not allowed", "unknown approvals route", "method-not-allowed");
163
- await store.expire();
164
- const subject = await resolveSubject(request, options.subject);
165
- const principal = subject?.principal ?? null;
166
- if (subject === null || principal === null) return unauthenticatedProblem(hasCredentials(request));
167
- try {
168
- if (route.kind === "pending") {
169
- const scoped = inboxScope(url, subject);
170
- if (!scoped.ok) return problem(403, "Permission denied", "approver does not belong to that tenant", "denied");
171
- const page = await store.list({
172
- ...pageQuery(url),
173
- status: "pending"
174
- });
175
- const tenants = new Set(scoped.tenants);
176
- const eligible = await Promise.all(page.items.map(async (item) => {
177
- const tenant = item.subject.principal?.tenant;
178
- return (tenant === void 0 ? scoped.tenantless : tenants.has(tenant)) && await mayResolve(item, subject, requireDistinct, options);
179
- }));
180
- return json(200, compact({
181
- items: page.items.filter((_, index) => eligible[index] === true),
182
- next: page.next
183
- }));
184
- }
185
- if (route.kind === "mine") {
186
- const page = await store.list({
187
- ...pageQuery(url),
188
- principalId: principal.id
189
- });
190
- return json(200, compact({
191
- items: page.items,
192
- next: page.next
193
- }));
194
- }
195
- if (route.kind === "get") {
196
- const current = await store.get(route.token);
197
- if (current === null || !canView(current, subject)) return problem(404, "Not found", "approval was not found", "not-found");
198
- return json(200, current);
199
- }
200
- const current = await store.get(route.token);
201
- if (current === null) return problem(404, "Not found", "approval was not found", "not-found");
202
- const relations = await approverRelations(current, subject, options);
203
- const permissions = await heldPermissions(current, subject, options.permdockFor);
204
- assertApprover(current, subject, requireDistinct, /* @__PURE__ */ new Date(), relations, permissions);
205
- const note = await readNote(request);
206
- const resolved = await store.resolve(route.token, compact({
207
- status: route.kind === "approve" ? "approved" : "rejected",
208
- by: subject,
209
- note,
210
- relations,
211
- permissions
212
- }));
213
- const signed = await signedApproval(resolved, options.signer, options.audience);
214
- return json(200, compact({
215
- ...resolved,
216
- signed
217
- }));
218
- } catch (error) {
219
- return mapError(error, hasCredentials(request));
220
- }
221
- };
222
- }
223
- //#endregion
224
- export { approvalsHandler as t };
@@ -1,54 +0,0 @@
1
- import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BeaGNj_o.js";
2
- import { defineCommand } from "citty";
3
- //#region src/cli/commands/arazzo.ts
4
- function arazzo(ctx) {
5
- return defineCommand({
6
- meta: {
7
- name: "arazzo",
8
- description: COMMAND_DESCRIPTIONS.arazzo
9
- },
10
- args: {
11
- ...globalArgs,
12
- action: {
13
- type: "positional",
14
- required: false,
15
- description: "check"
16
- },
17
- doc: {
18
- type: "string",
19
- description: "Arazzo document",
20
- valueHint: "arazzo.json"
21
- },
22
- openapi: {
23
- type: "string",
24
- description: "OpenAPI document the workflows call",
25
- valueHint: "doc.json"
26
- },
27
- workflow: {
28
- type: "string",
29
- description: "Check one workflow",
30
- valueHint: "id"
31
- },
32
- from: {
33
- type: "string",
34
- description: "Module exporting the policy, instead of the config",
35
- valueHint: "module"
36
- }
37
- },
38
- async run({ args: parsed, rawArgs }) {
39
- const result = await (await import("./arazzo-BAgw9ap6.js")).runArazzo({
40
- cwd: ctx.cwd,
41
- config: ctx.config,
42
- rest: parsed._,
43
- doc: listArg(rawArgs, "doc")[0],
44
- openapi: stringArg(parsed.openapi),
45
- workflow: stringArg(parsed.workflow),
46
- from: stringArg(parsed.from),
47
- json: ctx.json
48
- });
49
- ctx.report(result);
50
- }
51
- });
52
- }
53
- //#endregion
54
- export { arazzo };
@@ -1,25 +0,0 @@
1
- import { f as ApprovalStore } from "./types-aqOHTHcp.js";
2
- import { t as InstanceOptions } from "./instance-options-jARdwfPN.js";
3
- import { r as PdpFactory } from "./types-DxiCGmmd.js";
4
- import { o as OtelWrap } from "./types-QCuYJh4q.js";
5
- import { T as TenantOption, b as WebBotAuthVerifier } from "./create-B1d519XK.js";
6
- //#region src/server/bind.d.ts
7
- /** The options of every framework adapter; `TContext` is what its callbacks receive. */
8
- type ServerAdapterOptions<TContext, TUser = unknown> = InstanceOptions & ServerAdapterServices & {
9
- readonly subject: (context: TContext) => TUser | Promise<TUser>;
10
- /** The agent or service acting for the subject; anything but an `Actor` is ignored. */
11
- readonly actor?: (context: TContext) => unknown;
12
- readonly tenant?: TenantOption<TContext>;
13
- };
14
- /** The services an adapter hands to its kernel unchanged. */
15
- type ServerAdapterServices = {
16
- readonly store?: ApprovalStore;
17
- /** `createPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
18
- readonly pdp?: PdpFactory;
19
- /** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
20
- readonly otel?: OtelWrap;
21
- /** `(request) => verifyWebBotAuth(request, options)`; a verified bot becomes the actor. */
22
- readonly webBotAuth?: WebBotAuthVerifier;
23
- };
24
- //#endregion
25
- export { ServerAdapterServices as n, ServerAdapterOptions as t };
@@ -1,2 +0,0 @@
1
- import { t as runCatalog } from "./catalog-DWF5cYqB.js";
2
- export { runCatalog };
@@ -1,48 +0,0 @@
1
- import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BeaGNj_o.js";
2
- import { defineCommand } from "citty";
3
- //#region src/cli/commands/catalog.ts
4
- function catalog(ctx) {
5
- return defineCommand({
6
- meta: {
7
- name: "catalog",
8
- description: COMMAND_DESCRIPTIONS.catalog
9
- },
10
- args: {
11
- ...globalArgs,
12
- format: {
13
- type: "enum",
14
- options: [
15
- "json",
16
- "schema",
17
- "markdown"
18
- ],
19
- default: "json",
20
- description: "Output format"
21
- },
22
- from: {
23
- type: "string",
24
- description: "Module exporting the permissions, instead of the config",
25
- valueHint: "module"
26
- },
27
- include: {
28
- type: "string",
29
- description: "Permission keys or prefixes to keep, repeatable",
30
- valueHint: "key"
31
- }
32
- },
33
- async run({ args: parsed, rawArgs }) {
34
- const result = await (await import("./catalog-CRW5Mx_B.js")).runCatalog({
35
- cwd: ctx.cwd,
36
- config: ctx.config,
37
- format: parsed.format,
38
- from: stringArg(parsed.from),
39
- include: listArg(rawArgs, "include"),
40
- now: ctx.now,
41
- io: ctx.io
42
- });
43
- ctx.report(result);
44
- }
45
- });
46
- }
47
- //#endregion
48
- export { catalog };
@@ -1,55 +0,0 @@
1
- import { a as formatCatalogMarkdown, i as formatCatalogJson, r as catalogSchemaDocument, t as buildCatalog } from "./catalog-doc-DdGm82XT.js";
2
- import { r as listSourceFiles, t as defaultSrcPath } from "./files-DWUN9PzI.js";
3
- import { a as loadModule, i as loadConfiguredPolicy, o as pickNamed, r as leavesOf, t as asPermissionTree } from "./load-DhWEB9P1.js";
4
- import { i as scanSources, r as runCollect } from "./collect-DSTE3ml9.js";
5
- import { existsSync } from "node:fs";
6
- import { resolve } from "node:path";
7
- //#region src/cli/catalog.ts
8
- async function runCatalog(input) {
9
- if (input.format === "schema") return {
10
- code: 0,
11
- output: `${JSON.stringify(catalogSchemaDocument(), null, 2)}\n`
12
- };
13
- const from = input.from ?? input.config.permissions;
14
- let document;
15
- if (from !== void 0) {
16
- const abs = resolve(input.cwd, from);
17
- if (!existsSync(abs)) return {
18
- code: 2,
19
- output: `PermDock CLI: module not found: ${from}`
20
- };
21
- const tree = asPermissionTree(pickNamed(await loadModule(abs), ["permissions"]));
22
- const srcPath = input.config.collect?.srcPath ?? defaultSrcPath();
23
- const files = listSourceFiles(input.cwd, srcPath);
24
- const scan = scanSources(input.cwd, files, new Set(leavesOf(tree).map((leaf) => leaf.key)));
25
- document = buildCatalog(tree, scan, input.now.toISOString(), await loadConfiguredPolicy(input.cwd, input.config.policy));
26
- } else {
27
- const collected = await runCollect({
28
- cwd: input.cwd,
29
- config: input.config,
30
- collect: input.config.collect ?? {},
31
- check: false,
32
- now: input.now,
33
- io: input.io
34
- });
35
- if (collected.document === void 0) return {
36
- code: collected.code,
37
- output: collected.message
38
- };
39
- document = collected.document;
40
- }
41
- const filtered = input.include.length === 0 ? document : {
42
- ...document,
43
- permissions: document.permissions.filter((permission) => input.include.some((prefix) => permission.key === prefix || permission.key.startsWith(`${prefix}.`) || permission.resource === prefix))
44
- };
45
- if (input.format === "markdown") return {
46
- code: 0,
47
- output: formatCatalogMarkdown(filtered)
48
- };
49
- return {
50
- code: 0,
51
- output: formatCatalogJson(filtered)
52
- };
53
- }
54
- //#endregion
55
- export { runCatalog as t };
@@ -1,50 +0,0 @@
1
- import { i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BeaGNj_o.js";
2
- import { defineCommand } from "citty";
3
- //#region src/cli/commands/cloud.ts
4
- function cloud(ctx) {
5
- return defineCommand({
6
- meta: {
7
- name: "cloud",
8
- description: COMMAND_DESCRIPTIONS.cloud
9
- },
10
- args: {
11
- ...globalArgs,
12
- action: {
13
- type: "positional",
14
- required: false,
15
- description: "push"
16
- },
17
- "dry-run": {
18
- type: "boolean",
19
- description: "Print the payload; send nothing"
20
- },
21
- url: {
22
- type: "string",
23
- description: "Cloud API base URL",
24
- valueHint: "url"
25
- },
26
- environment: {
27
- type: "string",
28
- description: "Target environment",
29
- valueHint: "env"
30
- }
31
- },
32
- async run({ args: parsed }) {
33
- const result = await (await import("./cloud-DWLXO2af.js")).runCloud({
34
- cwd: ctx.cwd,
35
- config: ctx.config,
36
- rest: parsed._,
37
- url: stringArg(parsed.url),
38
- environment: stringArg(parsed.environment),
39
- dryRun: parsed["dry-run"] === true,
40
- json: ctx.json,
41
- env: ctx.io.env ?? process.env,
42
- now: ctx.now,
43
- io: ctx.io
44
- });
45
- ctx.report(result);
46
- }
47
- });
48
- }
49
- //#endregion
50
- export { cloud };
@@ -1,118 +0,0 @@
1
- import { t as catalogFingerprint } from "./src-BDwEZWrZ.js";
2
- import { s as snapshotScopes } from "./permdock-CbgvLnuo.js";
3
- import { i as describeError } from "./errors-CWfoNg9N.js";
4
- import { i as loadConfiguredPolicy } from "./load-DhWEB9P1.js";
5
- import { t as parseCatalog } from "./parse-BuyjxhZV.js";
6
- import { t as runCatalog } from "./catalog-DWF5cYqB.js";
7
- //#region src/cli/cloud.ts
8
- function firstNonEmpty(...values) {
9
- for (const value of values) if (value !== void 0 && value !== "") return value;
10
- return "";
11
- }
12
- function pushedGrant(grant) {
13
- const entry = {
14
- permission: grant.permission.key,
15
- effect: grant.effect,
16
- role: grant.role,
17
- to: grant.to,
18
- where: grant.portable ? grant.where : void 0,
19
- check: grant.portable ? grant.check : void 0,
20
- approval: grant.approval,
21
- scope: grant.scope === "global" ? void 0 : typeof grant.scope === "string" ? grant.scope : { resource: grant.scope.resource },
22
- portable: grant.portable ? void 0 : false,
23
- fields: grant.fields,
24
- limit: grant.limit
25
- };
26
- return Object.fromEntries(Object.entries(entry).filter(([, value]) => value !== void 0));
27
- }
28
- /** The code policy as the hosted AuthZEN endpoint evaluates it; closures travel as `portable: false` and deny there. */
29
- function pushedPolicy(policy) {
30
- const scopes = snapshotScopes(policy);
31
- return {
32
- fingerprint: policy.fingerprint,
33
- ...scopes === void 0 ? {} : { scopes },
34
- grants: policy.grants.filter((grant) => grant.hosted === void 0).map(pushedGrant)
35
- };
36
- }
37
- async function runCloud(input) {
38
- if (input.rest[0] !== "push") return {
39
- code: 2,
40
- output: `usage: permdock cloud push [--dry-run] [--url <url>] [--environment <env>]`
41
- };
42
- const built = await runCatalog({
43
- cwd: input.cwd,
44
- config: input.config,
45
- format: "json",
46
- from: void 0,
47
- include: [],
48
- now: input.now,
49
- io: input.io
50
- });
51
- if (built.code !== 0) return {
52
- code: built.code,
53
- output: built.output
54
- };
55
- const catalog = parseCatalog(built.output);
56
- const fingerprint = catalogFingerprint(catalog);
57
- const loaded = await loadConfiguredPolicy(input.cwd, input.config.policy);
58
- const policy = loaded === void 0 ? void 0 : pushedPolicy(loaded);
59
- const hostable = catalog.permissions.filter((permission) => permission.hostable === true).map((permission) => permission.key);
60
- const summary = {
61
- fingerprint,
62
- permissions: catalog.permissions.length,
63
- hostable,
64
- roles: (catalog.roles ?? []).length,
65
- plans: (catalog.plans ?? []).length,
66
- grants: policy?.grants.length ?? 0
67
- };
68
- const url = firstNonEmpty(input.url, input.env["PERMDOCK_CLOUD_URL"]).replace(/\/$/u, "");
69
- const environment = firstNonEmpty(input.environment, input.env["PERMDOCK_CLOUD_ENV"], input.env["VERCEL_ENV"], "production");
70
- const describe = (verb) => input.json ? JSON.stringify({
71
- ...summary,
72
- environment,
73
- status: verb
74
- }) : `${verb} catalog ${fingerprint} (${String(summary.permissions)} permissions, ${String(hostable.length)} hostable) to ${environment}`;
75
- if (input.dryRun) return {
76
- code: 0,
77
- output: describe("would push")
78
- };
79
- const key = input.env["PERMDOCK_CLOUD_KEY"] ?? "";
80
- if (url === "" || key === "") return {
81
- code: 2,
82
- output: "permdock cloud push needs PERMDOCK_CLOUD_URL (or --url) and PERMDOCK_CLOUD_KEY in the environment"
83
- };
84
- const fetchFn = input.io.fetch ?? globalThis.fetch.bind(globalThis);
85
- let response;
86
- try {
87
- response = await fetchFn(`${url}/v1/environments/${encodeURIComponent(environment)}/catalog`, {
88
- method: "POST",
89
- headers: {
90
- authorization: `Bearer ${key}`,
91
- "content-type": "application/json"
92
- },
93
- body: JSON.stringify(policy === void 0 ? {
94
- fingerprint,
95
- catalog
96
- } : {
97
- fingerprint,
98
- catalog,
99
- policy
100
- })
101
- });
102
- } catch (error) {
103
- return {
104
- code: 1,
105
- output: `PermDock Cloud unreachable: ${describeError(error)}`
106
- };
107
- }
108
- if (!response.ok) return {
109
- code: 1,
110
- output: `PermDock Cloud rejected the catalog: HTTP ${String(response.status)}`
111
- };
112
- return {
113
- code: 0,
114
- output: describe("pushed")
115
- };
116
- }
117
- //#endregion
118
- export { runCloud };