permdock 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (515) hide show
  1. package/README.md +37 -35
  2. package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
  3. package/dist/a2a/index.d.ts +6 -6
  4. package/dist/a2a/index.js +14 -17
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-DCYe60Pi.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -35
  10. package/dist/ai-sdk/index.js +37 -23
  11. package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-DvSSPQJX.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-p1PGoVjb.js +995 -0
  18. package/dist/arazzo-41WuzHou.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.js} +20 -14
  20. package/dist/args-IIolxxKA.js +197 -0
  21. package/dist/astro/index.d.ts +43 -0
  22. package/dist/astro/index.js +27 -0
  23. package/dist/audience-DabClFLQ.js +55 -0
  24. package/dist/auth-DRLEizbL.js +178 -0
  25. package/dist/authzen/index.d.ts +26 -6
  26. package/dist/authzen/index.js +94 -79
  27. package/dist/automation-BNM3TtDo.d.ts +114 -0
  28. package/dist/automation-DVjOckjV.js +157 -0
  29. package/dist/better-auth/index.d.ts +8 -6
  30. package/dist/better-auth/index.js +9 -8
  31. package/dist/better-supabase/index.d.ts +357 -30
  32. package/dist/better-supabase/index.js +936 -194
  33. package/dist/{bind-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
  34. package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -10
  35. package/dist/body-CH5of8Ne.js +10 -0
  36. package/dist/body-text-QcXok_SI.js +52 -0
  37. package/dist/{build-instance-DIIV9DbC.js → build-instance-Bu_eDqYw.js} +4 -3
  38. package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
  39. package/dist/{capability-CksyCWDH.d.ts → capability-Drg-1YhL.d.ts} +44 -25
  40. package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
  41. package/dist/casbin-Cr7RLtA3.js +30 -0
  42. package/dist/casbin-Dyu2gnUD.js +234 -0
  43. package/dist/casl-64gpT-8x.js +24 -0
  44. package/dist/casl-DjEDhTCP.js +299 -0
  45. package/dist/catalog/index.d.ts +74 -2
  46. package/dist/catalog/index.js +51 -2
  47. package/dist/catalog-BoWglDPI.js +1 -0
  48. package/dist/catalog-DZVbrF-z.js +52 -0
  49. package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.js} +45 -23
  51. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  52. package/dist/chat/index.d.ts +2 -0
  53. package/dist/chat/index.js +224 -0
  54. package/dist/chat-sdk/index.d.ts +87 -0
  55. package/dist/chat-sdk/index.js +197 -0
  56. package/dist/claims-map-7oQ3ue4X.js +13 -0
  57. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  58. package/dist/claude-agent/index.d.ts +7 -14
  59. package/dist/claude-agent/index.js +24 -27
  60. package/dist/clerk/index.d.ts +9 -8
  61. package/dist/clerk/index.js +9 -14
  62. package/dist/cli/bin.js +36 -17
  63. package/dist/cli/index.d.ts +19 -5
  64. package/dist/cli/index.js +164 -4
  65. package/dist/cloud/index.d.ts +102 -63
  66. package/dist/cloud/index.js +239 -340
  67. package/dist/cloud-ytQ3uviA.js +87 -0
  68. package/dist/codemod-5mpSpnUY.js +37 -0
  69. package/dist/codemod-ua2hHy7w.js +2084 -0
  70. package/dist/collect-Ci6akVwH.js +55 -0
  71. package/dist/collect-D7eQDffE.js +1 -0
  72. package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
  73. package/dist/command-L8EstFNm.js +6 -0
  74. package/dist/compile/index.d.ts +1 -1
  75. package/dist/compile/index.js +1 -2
  76. package/dist/{compile-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
  77. package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  78. package/dist/completion-BTFrHZhX.js +143 -0
  79. package/dist/config-Bj2Ixq3d.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-B30OMUOJ.d.ts +107 -0
  87. package/dist/create-CBMmFie-.d.ts +138 -0
  88. package/dist/create-CGm28gyI.js +130 -0
  89. package/dist/create-CQWIpUG-.js +403 -0
  90. package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
  91. package/dist/create-D_NmPOdH.d.ts +110 -0
  92. package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-j6-rc37o.js +286 -0
  95. package/dist/delivery/index.d.ts +5 -0
  96. package/dist/delivery/index.js +5 -0
  97. package/dist/delivery-DCAgNyCn.js +499 -0
  98. package/dist/delivery-event-xX4obB8F.js +40 -0
  99. package/dist/{denied-text-DfRk15uw.d.ts → denied-text-CiFQNuMV.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.d.ts} +2 -2
  101. package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
  102. package/dist/device-BARQ8eYG.js +193 -0
  103. package/dist/{diff-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
  104. package/dist/diff-CmuSD3vc.js +37 -0
  105. package/dist/doctor-3ZqNHX_G.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.js} +245 -50
  107. package/dist/drizzle/index.d.ts +5 -3
  108. package/dist/drizzle/index.js +2 -2
  109. package/dist/elysia/index.d.ts +16 -13
  110. package/dist/elysia/index.js +13 -12
  111. package/dist/env-DJZrPjRi.js +8 -0
  112. package/dist/errors-BDUwg2qC.js +27 -0
  113. package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
  114. package/dist/errors-BWXBMaKK.d.ts +11 -0
  115. package/dist/errors-CWTY6uih.js +143 -0
  116. package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
  117. package/dist/evaluate-CNClBvcj.js +1785 -0
  118. package/dist/evaluations-C_1vdSZc.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.js} +145 -34
  120. package/dist/eve/index.d.ts +12 -16
  121. package/dist/eve/index.js +22 -28
  122. package/dist/event-time-CsegxXxB.js +23 -0
  123. package/dist/expiry-D4_YKRKD.js +52 -0
  124. package/dist/express/index.d.ts +13 -10
  125. package/dist/express/index.js +12 -11
  126. package/dist/fastify/index.d.ts +25 -22
  127. package/dist/fastify/index.js +13 -12
  128. package/dist/fetch-adapter-DD_gfmrC.js +120 -0
  129. package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
  130. package/dist/fields-OYG_JR78.js +203 -0
  131. package/dist/files-C5ZI27eV.js +124 -0
  132. package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
  133. package/dist/flags-C3DktBDY.js +86 -0
  134. package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-CTCMsFZk.js} +55 -52
  135. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  136. package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.js} +5 -4
  138. package/dist/h3/index.d.ts +37 -0
  139. package/dist/h3/index.js +35 -0
  140. package/dist/headers-BIjfMaoC.js +8 -0
  141. package/dist/headers-CIbDTUTK.d.ts +7 -0
  142. package/dist/{helpers-C9YmyBIa.js → helpers-CBYVMjwh.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-B46-5LYE.js +315 -0
  146. package/dist/hosted-BPk51-kX.d.ts +78 -0
  147. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  148. package/dist/http-DXJ37RDA.js +46 -0
  149. package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
  150. package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
  151. package/dist/{import-BFIlhetD.js → import-wyqXUyjm.js} +190 -53
  152. package/dist/index-B8YjkEZ4.d.ts +210 -0
  153. package/dist/index-C-6Letxg.d.ts +431 -0
  154. package/dist/index-CaxrMD1A.d.ts +1 -0
  155. package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
  156. package/dist/index-Cp_ilKi1.d.ts +91 -0
  157. package/dist/index-CueFnxQc.d.ts +110 -0
  158. package/dist/index-DuWxc5dt.d.ts +909 -0
  159. package/dist/index.d.ts +19 -15
  160. package/dist/index.js +31 -21
  161. package/dist/init-DeMYsnYJ.js +96 -0
  162. package/dist/init-GG6Jh8HD.js +95 -0
  163. package/dist/{instance-options-plkrsAog.d.ts → instance-options-BsVpyGIk.d.ts} +2 -2
  164. package/dist/instance-snapshot-BOEhcqIF.js +601 -0
  165. package/dist/instant-BluqDvyS.js +19 -0
  166. package/dist/internals-Dk8A8fX3.js +17 -0
  167. package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
  168. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  169. package/dist/jwt/index.d.ts +18 -11
  170. package/dist/jwt/index.js +156 -135
  171. package/dist/{kernel-CB3LrIJM.js → kernel-D0NVb1cK.js} +52 -24
  172. package/dist/kysely/index.d.ts +5 -3
  173. package/dist/kysely/index.js +2 -2
  174. package/dist/load-BxEtwlBS.js +1 -0
  175. package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
  176. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  177. package/dist/login-Dfe5RlYk.js +68 -0
  178. package/dist/login-imhuwvn3.js +254 -0
  179. package/dist/manifest-C8IzW3Do.js +42 -0
  180. package/dist/manifest-dvL2XEe1.js +370 -0
  181. package/dist/manifest-json-CAGzls-C.js +9 -0
  182. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  183. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  184. package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
  185. package/dist/{map-error-BE27PYkE.js → map-error-Dr70oA_3.js} +3 -3
  186. package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
  187. package/dist/mcp/index.d.ts +22 -12
  188. package/dist/mcp/index.js +57 -39
  189. package/dist/{migrate-BwlB5-Wk.js → migrate-CIq4-E9F.js} +53 -14
  190. package/dist/nest/index.d.ts +12 -9
  191. package/dist/nest/index.js +15 -14
  192. package/dist/next/index.d.ts +18 -21
  193. package/dist/next/index.js +13 -11
  194. package/dist/next/plugin.d.ts +1 -1
  195. package/dist/next/plugin.js +2 -2
  196. package/dist/node/index.d.ts +10 -10
  197. package/dist/node/index.js +7 -9
  198. package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
  199. package/dist/openai/index.d.ts +9 -16
  200. package/dist/openai/index.js +17 -24
  201. package/dist/openapi/index.d.ts +3 -3
  202. package/dist/openapi/index.js +1 -1
  203. package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
  204. package/dist/openapi-C4dDTVEd.js +138 -0
  205. package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-X0VM7F3m.d.ts +59 -0
  208. package/dist/orpc/index.d.ts +13 -10
  209. package/dist/orpc/index.js +20 -15
  210. package/dist/otel/index.d.ts +3 -2
  211. package/dist/otel/index.js +30 -7
  212. package/dist/output-1im__-08.js +88 -0
  213. package/dist/output-files-B3IZJksC.js +1 -0
  214. package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
  215. package/dist/{permission-keys-B26jeyUv.js → ownership-DqaJNJPn.js} +1045 -153
  216. package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
  217. package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
  218. package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
  219. package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
  220. package/dist/parse-request-D_tUXG6M.js +26 -0
  221. package/dist/paths-DXSHAMIa.js +42 -0
  222. package/dist/pdp/index.d.ts +7 -3
  223. package/dist/pdp/index.js +45 -26
  224. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  225. package/dist/peer-CRvC7Hg1.js +1 -0
  226. package/dist/permdock-BrAscV28.js +868 -0
  227. package/dist/permdock-SV8ZINYT.d.ts +502 -0
  228. package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
  229. package/dist/permissions-B-wCP5ZC.js +30 -0
  230. package/dist/{permissions-CCJ6lmxB.js → permissions-BPxlwVhN.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
  232. package/dist/policies-DP2nqRoF.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
  235. package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
  238. package/dist/postgrest-CEgRbefE.d.ts +100 -0
  239. package/dist/postgrest-DAjUkF9w.js +575 -0
  240. package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
  241. package/dist/powersync-DISt6SUe.js +62 -0
  242. package/dist/powersync-MMJ2mI2q.js +1 -0
  243. package/dist/preset/index.d.ts +146 -0
  244. package/dist/preset/index.js +1 -0
  245. package/dist/preset-DZdU0tne.js +1768 -0
  246. package/dist/principal-source-pHneukrx.js +103 -0
  247. package/dist/prisma/index.d.ts +6 -3
  248. package/dist/prisma/index.js +2 -2
  249. package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
  250. package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-B45V5d2b.d.ts} +1 -1
  251. package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
  252. package/dist/problem-types-CJ2325SZ.js +5 -0
  253. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  254. package/dist/{protected-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
  255. package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
  256. package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
  259. package/dist/pull-CvpINcMK.js +1 -0
  260. package/dist/pull-jEwbf80J.js +256 -0
  261. package/dist/push-BD4f15co.js +116 -0
  262. package/dist/pushed-policy-CqtxkV4G.js +238 -0
  263. package/dist/pushed-policy-DCW91KQU.d.ts +57 -0
  264. package/dist/react/index.d.ts +8 -8
  265. package/dist/react/index.js +6 -6
  266. package/dist/react/provider-client.d.ts +1 -1
  267. package/dist/react/provider-client.js +1 -2
  268. package/dist/react-native/index.d.ts +24 -72
  269. package/dist/react-native/index.js +29 -25
  270. package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
  271. package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
  272. package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
  273. package/dist/renames-CGj7YwcQ.js +175 -0
  274. package/dist/{replay-COpmZUfx.d.ts → replay-Bkm-Ne4l.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.js} +3 -3
  277. package/dist/request-schema-CMreVuFM.js +148 -0
  278. package/dist/resend/index.d.ts +126 -0
  279. package/dist/resend/index.js +379 -0
  280. package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
  281. package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
  282. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  283. package/dist/rls-BAqP4q66.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
  287. package/dist/run-CUKuz0A8.js +723 -0
  288. package/dist/run-DDwUaJDU.js +1 -0
  289. package/dist/run-ticket-DocwaTKn.d.ts +124 -0
  290. package/dist/run-ticket-sxFI6LAk.js +337 -0
  291. package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
  292. package/dist/{saas-DtaA4JuW.js → saas-BCXRuXca.js} +16 -14
  293. package/dist/scan-qvOe0hS3.js +29 -0
  294. package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
  295. package/dist/schema-yLuBWWsh.js +130 -0
  296. package/dist/scim/index.d.ts +2 -2
  297. package/dist/scim/index.js +1 -2
  298. package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
  299. package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
  300. package/dist/server/index.d.ts +12 -143
  301. package/dist/server/index.js +12 -9
  302. package/dist/server-C3WXAHZj.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-4-eQIRWf.d.ts +225 -0
  309. package/dist/sink-BEZSlMS_.js +957 -0
  310. package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
  311. package/dist/skills-CTYwkl44.js +51 -0
  312. package/dist/snapshot-B7DkYg6g.js +269 -0
  313. package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  314. package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-PXI-vGpY.d.ts} +7 -5
  315. package/dist/solid/index.d.ts +11 -12
  316. package/dist/solid/index.js +7 -7
  317. package/dist/solid-start/index.d.ts +52 -0
  318. package/dist/solid-start/index.js +49 -0
  319. package/dist/{sources-Dljy06zL.d.ts → sources-Xc4zkszI.d.ts} +7 -13
  320. package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
  321. package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
  322. package/dist/src-Cu2m75uo.js +1860 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  326. package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
  330. package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
  331. package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.d.ts} +2 -2
  333. package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
  334. package/dist/style-DiKWnAvn.js +1 -0
  335. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  336. package/dist/subject-BGoM5o8B.js +17 -0
  337. package/dist/supabase/index.d.ts +23 -106
  338. package/dist/supabase/index.js +5 -4
  339. package/dist/supabase/middleware.d.ts +7 -6
  340. package/dist/supabase/middleware.js +13 -11
  341. package/dist/supabase-By_frk3U.js +92 -0
  342. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
  343. package/dist/supabase-hook-CCw5m35C.js +1 -0
  344. package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
  345. package/dist/support-session-C6xJQYut.js +158 -0
  346. package/dist/svelte/Protected.svelte +4 -4
  347. package/dist/svelte/index.d.ts +7 -7
  348. package/dist/svelte/index.js +10 -10
  349. package/dist/svelte/runtime.d.ts +3 -3
  350. package/dist/svelte/runtime.js +3 -3
  351. package/dist/svelte/source.d.ts +7 -7
  352. package/dist/svelte/source.js +4 -4
  353. package/dist/sveltekit/index.d.ts +51 -0
  354. package/dist/sveltekit/index.js +27 -0
  355. package/dist/tanstack-start/index.d.ts +51 -0
  356. package/dist/tanstack-start/index.js +40 -0
  357. package/dist/target-Bw37TFNA.js +51 -0
  358. package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
  359. package/dist/terminal/index.d.ts +11 -9
  360. package/dist/terminal/index.js +23 -287
  361. package/dist/testing/index.d.ts +311 -38
  362. package/dist/testing/index.js +3475 -201
  363. package/dist/testing/saas/index.d.ts +9 -8
  364. package/dist/testing/saas/index.js +2 -2
  365. package/dist/testing/saas/permissions.d.ts +1 -1
  366. package/dist/testing/saas/permissions.js +1 -2
  367. package/dist/text-BMFRfBqc.js +8 -0
  368. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  369. package/dist/thenable-yD7SabqG.js +31 -0
  370. package/dist/time-DkWjdL98.js +71 -0
  371. package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
  372. package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
  373. package/dist/trpc/index.d.ts +12 -9
  374. package/dist/trpc/index.js +16 -14
  375. package/dist/types-8RnwUAvE.d.ts +107 -0
  376. package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
  377. package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
  378. package/dist/types-BtHtcKMr.d.ts +157 -0
  379. package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
  380. package/dist/types-C791HFu9.d.ts +332 -0
  381. package/dist/types-C863OQiR.d.ts +57 -0
  382. package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
  383. package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
  384. package/dist/types-C_IiEs64.d.ts +65 -0
  385. package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
  388. package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
  389. package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CRVl9V3t.js +32 -0
  393. package/dist/usage-CZpSQP6L.js +1 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.d.ts} +1 -1
  396. package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
  397. package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
  398. package/dist/{verify-BztUB3GX.js → verify-BaAKx7t6.js} +645 -50
  399. package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
  400. package/dist/version-DXkYUISx.js +1 -0
  401. package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
  402. package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-CN8H_9UF.d.ts} +67 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-B986w1oK.d.ts +36 -0
  406. package/dist/waiter-BGUtGYoU.js +67 -0
  407. package/dist/watch--ovlPOc0.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-vea54PRw.js} +44 -5
  409. package/dist/webmcp/index.d.ts +2 -2
  410. package/dist/webmcp/index.js +3 -3
  411. package/dist/where-scope-C9vfEphl.js +306 -0
  412. package/dist/who-can-DWBAcaCQ.js +364 -0
  413. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  414. package/dist/wire-denial-C7PaVYEM.js +27 -0
  415. package/dist/workflow/index.d.ts +5 -0
  416. package/dist/workflow/index.js +223 -0
  417. package/dist/workflow-sdk/index.d.ts +56 -0
  418. package/dist/workflow-sdk/index.js +78 -0
  419. package/dist/{wrap-Cr93qqdP.d.ts → wrap-C5jC6sKI.d.ts} +2 -1
  420. package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
  421. package/package.json +136 -37
  422. package/schemas/access-event-v1.json +118 -0
  423. package/schemas/approval-request-v1.json +34 -1
  424. package/schemas/approval-signature-v1.json +94 -0
  425. package/schemas/automation-event-v1.json +113 -0
  426. package/schemas/capability-v1.json +84 -0
  427. package/schemas/catalog-event-v1.json +87 -0
  428. package/schemas/catalog-v1.json +123 -12
  429. package/schemas/cli-commands-v1.json +164 -0
  430. package/schemas/cli-result-v1.json +96 -0
  431. package/schemas/cloud-api-v1.json +5407 -0
  432. package/schemas/connector-v1.json +408 -0
  433. package/schemas/credential-event-v1.json +81 -0
  434. package/schemas/credential-v1.json +134 -0
  435. package/schemas/decision-event-v1.json +288 -0
  436. package/schemas/delivery-event-v1.json +117 -0
  437. package/schemas/directory-event-v1.json +85 -0
  438. package/schemas/evidence-export-v1.json +54 -0
  439. package/schemas/membership-event-v1.json +93 -0
  440. package/schemas/policy-v1.json +68 -0
  441. package/schemas/pushed-policy-v1.json +236 -0
  442. package/schemas/run-v1.json +162 -0
  443. package/schemas/snapshot-v1.json +138 -0
  444. package/schemas/supabase-claims-v1.json +4 -4
  445. package/schemas/supabase-manifest-v1.json +5 -1
  446. package/schemas/support-session-v1.json +111 -0
  447. package/skills/permdock/SKILL.md +16 -12
  448. package/skills/permdock-agents/SKILL.md +40 -23
  449. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  450. package/skills/permdock-agents/references/runtimes.md +22 -18
  451. package/skills/permdock-approvals/SKILL.md +29 -13
  452. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  453. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  454. package/skills/permdock-audit/SKILL.md +3 -3
  455. package/skills/permdock-credentials/SKILL.md +5 -5
  456. package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
  457. package/skills/permdock-data/SKILL.md +6 -6
  458. package/skills/permdock-data/references/queries-and-rls.md +10 -9
  459. package/skills/permdock-data/references/relationships.md +3 -3
  460. package/skills/permdock-tenancy/SKILL.md +20 -7
  461. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  462. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  463. package/skills/permdock-wire/SKILL.md +17 -11
  464. package/skills/permdock-wire/references/adapters.md +139 -51
  465. package/skills/permdock-wire/references/policy-options.md +5 -5
  466. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  467. package/dist/approvals-DZL76lKW.js +0 -240
  468. package/dist/arazzo-CD8d0WLb.js +0 -54
  469. package/dist/catalog-6yWAX6Ps.js +0 -2
  470. package/dist/catalog-WHG4kBq7.js +0 -48
  471. package/dist/cloud-C7bSDgX4.js +0 -50
  472. package/dist/cloud-PeBN3IEn.js +0 -118
  473. package/dist/collect-Bw2Jdq1q.js +0 -2
  474. package/dist/collect-CQx4hX4N.js +0 -83
  475. package/dist/commands-Cpip4ULx.js +0 -97
  476. package/dist/config-DLt6BvV7.js +0 -36
  477. package/dist/diff-Cnghh_Ip.js +0 -48
  478. package/dist/doctor-CuVJvhV_.js +0 -53
  479. package/dist/duration-xK2jGFVc.js +0 -25
  480. package/dist/errors-CWfoNg9N.js +0 -47
  481. package/dist/errors-DRnGZHzF.js +0 -30
  482. package/dist/expiry-BoBJ8Tvc.js +0 -7
  483. package/dist/fields-fwfXN01n.js +0 -1016
  484. package/dist/headers-BZSDieNT.js +0 -6
  485. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  486. package/dist/ids-DC4V4CFu.js +0 -18
  487. package/dist/index-DgM7w96K.d.ts +0 -6
  488. package/dist/index-Dz7didpC.d.ts +0 -201
  489. package/dist/index-UdVQgq48.d.ts +0 -550
  490. package/dist/load-B_shHrmd.js +0 -2
  491. package/dist/manifest-BngWKryL.js +0 -770
  492. package/dist/may-use-BOn_dR_w.js +0 -78
  493. package/dist/openapi-DcQ1Kg40.js +0 -164
  494. package/dist/ownership-BgnbOJFT.js +0 -851
  495. package/dist/permdock-L26udHSk.js +0 -3646
  496. package/dist/powersync-BFSbSElQ.js +0 -62
  497. package/dist/powersync-DCDgZgfZ.js +0 -2
  498. package/dist/rls-55DQTuf5.js +0 -250
  499. package/dist/run-DMcNW_8T.js +0 -174
  500. package/dist/server-ZYEHtNHS.js +0 -268
  501. package/dist/sink-BTtmfPnE.js +0 -141
  502. package/dist/sink-CPN4zLfs.d.ts +0 -104
  503. package/dist/skills-Dle4ZoLF.js +0 -56
  504. package/dist/snapshot-Dc9CHPME.js +0 -1078
  505. package/dist/src-Bb7no-hS.js +0 -639
  506. package/dist/subject-C6dLxqHU.js +0 -24
  507. package/dist/supabase-Dbqr141s.js +0 -83
  508. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  509. package/dist/thenable-QSmvt-vZ.js +0 -65
  510. package/dist/types-C0dee0Qf.d.ts +0 -197
  511. package/dist/types-DvupZE0w.d.ts +0 -9
  512. package/dist/usage-4G6t643F.js +0 -42
  513. package/dist/usage-iFLJ0-rr.js +0 -2
  514. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  515. package/dist/watch-C8TpsAl4.js +0 -2
@@ -0,0 +1,103 @@
1
+ import { t as freezeCopy } from "./freeze-CrU8nQeX.js";
2
+ import { a as ownRecord } from "./paths-DXSHAMIa.js";
3
+ //#region src/core/principal-source.ts
4
+ function nonEmpty(value) {
5
+ return typeof value === "string" && value.trim() !== "";
6
+ }
7
+ /**
8
+ * A `PrincipalIdentity` in the form sources compare: an email trimmed and
9
+ * lower-cased with no provider or workspace, a chat identity with a
10
+ * provider. Anything else, inherited fields included, is `undefined`.
11
+ */
12
+ function normalizeIdentity(value) {
13
+ const record = ownRecord(value);
14
+ const kind = record?.["kind"];
15
+ const raw = record?.["value"];
16
+ if (record === void 0 || !nonEmpty(raw)) return;
17
+ if (kind === "email") return Object.freeze({
18
+ kind,
19
+ value: raw.trim().toLowerCase()
20
+ });
21
+ if (kind !== "chat") return;
22
+ const provider = record["provider"];
23
+ const workspace = record["workspace"];
24
+ if (!nonEmpty(provider) || workspace !== void 0 && !nonEmpty(workspace)) return;
25
+ return Object.freeze({
26
+ kind,
27
+ provider,
28
+ value: raw,
29
+ ...workspace === void 0 ? {} : { workspace }
30
+ });
31
+ }
32
+ function identityKey(identity) {
33
+ return JSON.stringify([
34
+ identity.kind,
35
+ identity.provider ?? null,
36
+ identity.workspace ?? null,
37
+ identity.value
38
+ ]);
39
+ }
40
+ function principalWithId(found, id) {
41
+ const foundId = ownRecord(found)?.["id"];
42
+ if (!nonEmpty(foundId) || id !== void 0 && foundId !== id) return null;
43
+ return found;
44
+ }
45
+ /**
46
+ * `source.principal(id, { tenant })`, failing closed: no source, `null`, a
47
+ * throw, a rejection or a principal with another id is `null`.
48
+ */
49
+ async function loadPrincipal(source, id, tenant) {
50
+ if (source === void 0 || !nonEmpty(id)) return null;
51
+ try {
52
+ return principalWithId(await source.principal(id, tenant === void 0 ? {} : { tenant }), id);
53
+ } catch {
54
+ return null;
55
+ }
56
+ }
57
+ /**
58
+ * `source.principalByIdentity(identity)` over the normalised identity,
59
+ * failing closed: no source or method, an invalid identity, `null`, a throw
60
+ * or a rejection is `null`.
61
+ */
62
+ async function loadPrincipalByIdentity(source, identity) {
63
+ const normalized = normalizeIdentity(identity);
64
+ if (source?.principalByIdentity === void 0 || normalized === void 0) return null;
65
+ try {
66
+ return principalWithId(await source.principalByIdentity(normalized));
67
+ } catch {
68
+ return null;
69
+ }
70
+ }
71
+ /**
72
+ * In-process principals for tests and single-replica apps. `identities`
73
+ * links an email or chat identity to a principal id; each answer is a fresh
74
+ * frozen copy. `tenant` is not a filter, as for a database source.
75
+ */
76
+ function memoryPrincipalSource(input) {
77
+ const byId = /* @__PURE__ */ new Map();
78
+ for (const principal of input.principals) {
79
+ if (!nonEmpty(principal.id) || byId.has(principal.id)) throw new TypeError("PermDock: memoryPrincipalSource needs a unique, non-empty id per principal");
80
+ byId.set(principal.id, principal);
81
+ }
82
+ const links = /* @__PURE__ */ new Map();
83
+ for (const link of input.identities ?? []) {
84
+ const identity = normalizeIdentity(link.identity);
85
+ if (identity === void 0 || !nonEmpty(link.principal)) throw new TypeError("PermDock: memoryPrincipalSource identities link an email or chat identity to a principal id");
86
+ links.set(identityKey(identity), link.principal);
87
+ }
88
+ const copyOf = (id) => {
89
+ const found = id === void 0 ? void 0 : byId.get(id);
90
+ return found === void 0 ? null : freezeCopy(structuredClone(found));
91
+ };
92
+ return Object.freeze({
93
+ principal(id) {
94
+ return copyOf(id);
95
+ },
96
+ principalByIdentity(identity) {
97
+ const normalized = normalizeIdentity(identity);
98
+ return normalized === void 0 ? null : copyOf(links.get(identityKey(normalized)));
99
+ }
100
+ });
101
+ }
102
+ //#endregion
103
+ export { loadPrincipalByIdentity as n, memoryPrincipalSource as r, loadPrincipal as t };
@@ -1,4 +1,5 @@
1
- import { It as WhereResult, jr as Condition, kr as Subject } from "../policy-types-sp9P1iIV.js";
1
+ import { Rt as Instant, ar as Subject, ur as Condition } from "../policy-types-n0uRTsW8.js";
2
+ import { c as WhereResult } from "../permdock-SV8ZINYT.js";
2
3
  import { r as RelationsMapping } from "../graph-sql-B-dsAT6j.js";
3
4
  import { n as WithSubjectOptions, t as RowCheck } from "../row-check-Dt35czLy.js";
4
5
  //#region src/prisma/model-fields.d.ts
@@ -29,7 +30,8 @@ export declare function prismaModelFields(datamodel: string | PrismaDatamodel, m
29
30
  type PrismaWhereOptions = {
30
31
  readonly fields?: Readonly<Record<string, string>>;
31
32
  readonly subject?: Subject;
32
- readonly now?: number;
33
+ /** The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults to the current time. */
34
+ readonly now?: Instant;
33
35
  readonly listFields?: readonly string[];
34
36
  readonly requiredFields?: readonly string[];
35
37
  /** Required and list fields read from the schema by `prismaModelFields`; adds to `requiredFields` and `listFields`. */
@@ -93,7 +95,8 @@ type PrismaCombinators = {
93
95
  type PrismaPredicateOptions = {
94
96
  readonly fields?: Readonly<Record<string, string>>;
95
97
  readonly subject?: Subject;
96
- readonly now?: number;
98
+ /** The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults to the current time. */
99
+ readonly now?: Instant;
97
100
  /** Required and list fields from `prismaModelFields`; `contains` on a list field is refused. */
98
101
  readonly model?: PrismaModelFields;
99
102
  readonly listFields?: readonly string[];
@@ -1,8 +1,8 @@
1
1
  import { t as compact } from "../compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
- import { a as assertSafeKey } from "../thenable-QSmvt-vZ.js";
3
+ import { t as assertSafeKey } from "../paths-DXSHAMIa.js";
4
4
  import { n as PermDockValidationError } from "../validation-error-ZfUHbKvf.js";
5
- import { a as relatedRowGuard, l as renderGraphSql, n as escapeLike, s as relatedTargetsSql, t as compileWhere, u as restrictedRowsSql } from "../compile-CcEu2ZQ1.js";
5
+ import { a as relatedRowGuard, l as renderGraphSql, n as escapeLike, s as relatedTargetsSql, t as compileWhere, u as restrictedRowsSql } from "../compile-CMqMx_IN.js";
6
6
  import { n as statementText, o as rowCheckOf, r as subjectStatements, s as loadPeer } from "../subject-settings-CkEwrw3W.js";
7
7
  //#region src/prisma/to-where.ts
8
8
  function fieldTests(options) {
@@ -1,8 +1,9 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { n as PermDockValidationError, t as PROBLEM_BASE } from "./validation-error-ZfUHbKvf.js";
4
- import { i as stepUpOf, n as problemDetails, t as notFoundDetails } from "./problem-details-DECUnXAn.js";
5
- import { a as deniedMessage, i as approvalMessage } from "./errors-drnfxYtm.js";
3
+ import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
4
+ import { a as problemType, i as stepUpOf, n as problemDetails, o as statusProblem, t as notFoundDetails } from "./problem-details-cn5X30gZ.js";
5
+ import { a as deniedMessage, i as approvalMessage } from "./errors-BKy0EfhN.js";
6
+ import { a as durationOf, g as secondsOf, p as nowSeconds } from "./time-DkWjdL98.js";
6
7
  //#region src/server/problem.ts
7
8
  function quoted(value) {
8
9
  return `"${value.replaceAll(/["\\]/gu, "")}"`;
@@ -67,16 +68,11 @@ function problemResponse(details, permission, decision, extra, credentials) {
67
68
  }
68
69
  /** RFC 9457 413 for a batch over `max` evaluations. */
69
70
  function batchTooLarge(max) {
70
- return problemResponse({
71
- type: `${PROBLEM_BASE}/payload-too-large`,
72
- title: "Payload too large",
73
- status: 413,
74
- detail: `evaluations batch exceeds ${String(max)}`
75
- });
71
+ return problemResponse(statusProblem(413, `evaluations batch exceeds ${String(max)}`));
76
72
  }
77
73
  function validationProblem(detail) {
78
74
  return problemResponse(compact({
79
- type: `${PROBLEM_BASE}/validation`,
75
+ type: problemType("validation"),
80
76
  title: "Invalid request",
81
77
  status: 400,
82
78
  detail
@@ -87,14 +83,14 @@ function resourceRef(permission) {
87
83
  }
88
84
  function isLimitDetail(value) {
89
85
  if (value === null || typeof value !== "object") return false;
90
- const { count, window, resetsAt } = value;
91
- return Number.isFinite(count) && Number.isFinite(window) && Number.isFinite(resetsAt);
86
+ const { count, per, resetsAt } = value;
87
+ return Number.isFinite(count) && durationOf(per) !== void 0 && secondsOf(resetsAt) !== void 0;
92
88
  }
93
89
  /**
94
90
  * `Retry-After` plus the `RateLimit` / `RateLimit-Policy` fields of
95
91
  * draft-ietf-httpapi-ratelimit-headers-11, one policy per exhausted grant.
96
92
  */
97
- function rateLimitHeaders(decision, now = Date.now() / 1e3) {
93
+ function rateLimitHeaders(decision, now) {
98
94
  if (decision.outcome !== "denied") return {};
99
95
  const policies = /* @__PURE__ */ new Map();
100
96
  for (const denial of decision.denials) {
@@ -106,12 +102,12 @@ function rateLimitHeaders(decision, now = Date.now() / 1e3) {
106
102
  const entries = [...policies].map(([name, detail]) => ({
107
103
  name: sfString(name),
108
104
  detail,
109
- wait: Math.max(1, Math.ceil(detail.resetsAt - now))
105
+ wait: Math.max(1, (secondsOf(detail.resetsAt) ?? 0) - nowSeconds(now))
110
106
  }));
111
107
  return {
112
108
  "Retry-After": String(Math.min(...entries.map((entry) => entry.wait))),
113
109
  RateLimit: entries.map((entry) => `${entry.name};r=0;t=${entry.wait}`).join(", "),
114
- "RateLimit-Policy": entries.map((entry) => `${entry.name};q=${entry.detail.count};w=${entry.detail.window}`).join(", ")
110
+ "RateLimit-Policy": entries.map((entry) => `${entry.name};q=${entry.detail.count};w=${entry.detail.per}`).join(", ")
115
111
  };
116
112
  }
117
113
  /**
@@ -178,15 +174,9 @@ function unauthenticatedProblem(credentials) {
178
174
  detail: "anonymous"
179
175
  }), ANONYMOUS, { credentials });
180
176
  }
177
+ /** RFC 9110 section 15.5.6: a `405` lists the methods the resource supports in `Allow`. */
181
178
  function methodNotAllowed(allow) {
182
- const response = problemResponse({
183
- type: `${PROBLEM_BASE}/method-not-allowed`,
184
- title: "Method not allowed",
185
- status: 405,
186
- detail: `use ${allow}`
187
- });
188
- response.headers.set("Allow", allow);
189
- return response;
179
+ return problemResponse(statusProblem(405, `use ${allow}`), void 0, void 0, { Allow: allow });
190
180
  }
191
181
  //#endregion
192
182
  export { methodNotAllowed as a, problemResponse as c, validationProblem as d, wwwAuthenticate as f, decisionResponse as i, protectedResourceMetadataUrl as l, batchTooLarge as n, notFoundProblem as o, bearerChallenge as r, problemFromDecision as s, ANONYMOUS as t, unauthenticatedProblem as u };
@@ -1,4 +1,4 @@
1
- import { ir as Decision } from "./policy-types-sp9P1iIV.js";
1
+ import { Nn as Decision } from "./policy-types-n0uRTsW8.js";
2
2
  //#region src/core/problem-details.d.ts
3
3
  type Disclosure = "hide" | "reveal";
4
4
  /** The plans a `not-entitled` denial asks for; empty unless every denial is `not-entitled`. */
@@ -1,29 +1,41 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
2
  import { t as PROBLEM_BASE } from "./validation-error-ZfUHbKvf.js";
3
- //#region src/core/wire-denial.ts
4
- const IN_PROCESS = /* @__PURE__ */ new Set(["closure-error", "validation"]);
5
- function jsonDetail(value) {
6
- if (value === void 0 || value === null || value instanceof Error) return;
7
- if (typeof value === "string" || typeof value === "boolean") return value;
8
- if (typeof value === "number") return Number.isFinite(value) ? value : void 0;
9
- if (typeof value !== "object") return;
10
- try {
11
- return JSON.parse(JSON.stringify(value));
12
- } catch {
13
- return;
14
- }
3
+ import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
4
+ //#region src/core/problem-types.ts
5
+ /** The `type` URI of a PermDock problem type. */
6
+ function problemType(type) {
7
+ return `${PROBLEM_BASE}/${type}`;
15
8
  }
16
- function wireDenial(denial) {
9
+ /** RFC 9110 section 15 reason phrases for the statuses PermDock answers with. */
10
+ const REASON_PHRASES = {
11
+ 400: "Bad Request",
12
+ 401: "Unauthorized",
13
+ 403: "Forbidden",
14
+ 404: "Not Found",
15
+ 405: "Method Not Allowed",
16
+ 406: "Not Acceptable",
17
+ 409: "Conflict",
18
+ 412: "Precondition Failed",
19
+ 413: "Content Too Large",
20
+ 415: "Unsupported Media Type",
21
+ 422: "Unprocessable Content",
22
+ 428: "Precondition Required",
23
+ 429: "Too Many Requests",
24
+ 500: "Internal Server Error",
25
+ 501: "Not Implemented",
26
+ 502: "Bad Gateway",
27
+ 503: "Service Unavailable"
28
+ };
29
+ /** An `about:blank` problem: the `title` is the status's reason phrase. */
30
+ function statusProblem(status, detail, extra = {}) {
17
31
  return compact({
18
- role: denial.role,
19
- reason: denial.reason,
20
- to: denial.to,
21
- detail: IN_PROCESS.has(denial.reason) ? void 0 : jsonDetail(denial.detail)
32
+ type: "about:blank",
33
+ title: REASON_PHRASES[status] ?? "Error",
34
+ status,
35
+ detail,
36
+ ...extra
22
37
  });
23
38
  }
24
- function wireDenials(denials) {
25
- return denials.map(wireDenial);
26
- }
27
39
  //#endregion
28
40
  //#region src/core/problem-details.ts
29
41
  /** Reasons that only arise once a matching grant was found, so they reveal nothing hidden. */
@@ -63,13 +75,7 @@ function stepUpOf(decision) {
63
75
  }
64
76
  /** The `404` a missing row and a hidden one share, so the two read the same. */
65
77
  function notFoundDetails(instance) {
66
- return compact({
67
- type: `${PROBLEM_BASE}/not-found`,
68
- title: "Not found",
69
- status: 404,
70
- detail: "No such resource",
71
- instance
72
- });
78
+ return statusProblem(404, "No such resource", compact({ instance }));
73
79
  }
74
80
  /**
75
81
  * The RFC 9457 body for a decision that is not `granted`. One status matrix
@@ -86,7 +92,7 @@ function problemDetails(input) {
86
92
  resource: input.resource
87
93
  });
88
94
  if (decision.outcome === "approval-required") return compact({
89
- type: `${PROBLEM_BASE}/approval-required`,
95
+ type: problemType("approval-required"),
90
96
  title: "Approval required",
91
97
  status: 403,
92
98
  detail: input.detail,
@@ -96,16 +102,12 @@ function problemDetails(input) {
96
102
  });
97
103
  const reasons = new Set(decision.denials.map((denial) => denial.reason));
98
104
  if (input.disclosure === "hide" && ![...reasons].every((reason) => HOLDS_GRANT.has(reason))) return notFoundDetails(input.instance);
99
- if (reasons.has("anonymous")) return compact({
100
- type: `${PROBLEM_BASE}/unauthenticated`,
101
- title: "Authentication required",
102
- status: 401,
103
- detail: "Authenticate and repeat the request",
105
+ if (reasons.has("anonymous")) return statusProblem(401, "Authenticate and repeat the request", compact({
104
106
  instance: input.instance,
105
107
  permission: input.permission
106
- });
108
+ }));
107
109
  const denied = compact({
108
- type: `${PROBLEM_BASE}/denied`,
110
+ type: problemType("denied"),
109
111
  title: "Permission denied",
110
112
  status: 403,
111
113
  detail: input.detail,
@@ -116,29 +118,30 @@ function problemDetails(input) {
116
118
  if (reasons.has("insufficient-user-authentication")) return {
117
119
  ...denied,
118
120
  status: 401,
119
- type: `${PROBLEM_BASE}/step-up-required`,
121
+ type: problemType("step-up-required"),
122
+ title: "Step-up required",
120
123
  ...stepUpOf(decision)
121
124
  };
122
125
  const plans = requiredPlans(decision);
123
126
  if (plans.length > 0) return {
124
127
  ...denied,
125
- type: `${PROBLEM_BASE}/not-entitled`,
128
+ type: problemType("not-entitled"),
126
129
  title: "Plan upgrade required",
127
130
  plans
128
131
  };
129
132
  if (reasons.size > 0 && [...reasons].every((reason) => reason === "limit")) return {
130
133
  ...denied,
131
134
  status: 429,
132
- type: `${PROBLEM_BASE}/rate-limited`,
135
+ type: problemType("rate-limited"),
133
136
  title: "Rate limit exceeded"
134
137
  };
135
138
  if (reasons.has("limit-unavailable") && [...reasons].every((reason) => reason === "limit" || reason === "limit-unavailable")) return {
136
139
  ...denied,
137
140
  status: 503,
138
- type: `${PROBLEM_BASE}/limit-unavailable`,
141
+ type: problemType("limit-unavailable"),
139
142
  title: "Rate limit unavailable"
140
143
  };
141
144
  return denied;
142
145
  }
143
146
  //#endregion
144
- export { wireDenials as a, stepUpOf as i, problemDetails as n, requiredPlans as r, notFoundDetails as t };
147
+ export { problemType as a, stepUpOf as i, problemDetails as n, statusProblem as o, requiredPlans as r, notFoundDetails as t };
@@ -0,0 +1,5 @@
1
+ //#region src/cli/cloud/problem-types.ts
2
+ /** The Problem `type` of `GET /v1/projects/{id}/policy` before the first `cloud push`. */
3
+ const POLICY_NOT_PUBLISHED = "https://permdock.com/problems/policy-not-published";
4
+ //#endregion
5
+ export { POLICY_NOT_PUBLISHED as t };
@@ -1,8 +1,8 @@
1
1
  import { cancel, confirm, isCancel, multiselect } from "@clack/prompts";
2
- //#region src/cli/commands/prompt.ts
2
+ //#region src/cli/core/prompt.ts
3
3
  /** What a command reports when the person at the terminal cancels a prompt. */
4
4
  const CANCELLED = {
5
- code: 2,
5
+ code: 130,
6
6
  output: "Cancelled."
7
7
  };
8
8
  /** A yes or no question; `undefined` when cancelled. */
@@ -1,5 +1,5 @@
1
- import { n as storeOf } from "./store-options-CbUHDoSe.js";
2
- import { a as permissionSet, c as scopedTenant, d as tenantView, l as slotContent, n as describeWith, o as protectedView, r as filterResult, s as rolesView, t as approvalHandle, u as subjectView } from "./views-CJsrBS1f.js";
1
+ import { n as storeOf } from "./store-options-u0ycEe8s.js";
2
+ import { c as rolesView, d as subjectView, f as tenantView, i as gateView, l as scopedTenant, n as describeWith, o as permissionSet, r as filterResult, s as protectedView, t as approvalHandle, u as slotContent } from "./views-DTIIO-oQ.js";
3
3
  import { a as PermDockUiContext, i as PermDockStoreContext, r as PermDockSnapshotPromiseContext } from "./live-options-BaAFCIiu.js";
4
4
  import { Suspense, use, useMemo, useSyncExternalStore } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -80,6 +80,23 @@ function useDescribe() {
80
80
  function useApproval(decision) {
81
81
  return approvalHandle(storeOf(usePermDock()), decision);
82
82
  }
83
+ /**
84
+ * What a permission-gated control renders: `hidden`, `disabled`,
85
+ * `needsApproval`, `upgrade` and a localised `reason`, from the same
86
+ * snapshot as `usePermission`. React and React Native share it; a recipe
87
+ * renders the fields and decides nothing.
88
+ */
89
+ function useGate(permission, data, options = {}) {
90
+ const state = usePermission(permission, data);
91
+ const describeDecision = useDescribe();
92
+ const mode = options.mode ?? "disable";
93
+ return useMemo(() => gateView(state, (decision) => describeDecision(decision, { permission }), mode), [
94
+ state,
95
+ describeDecision,
96
+ permission,
97
+ mode
98
+ ]);
99
+ }
83
100
  //#endregion
84
101
  //#region src/react/protected.tsx
85
102
  function Protected(props) {
@@ -99,7 +116,7 @@ function Guard(props) {
99
116
  const view = protectedView(local, root, props.permission, props.data, scoped);
100
117
  switch (view.slot) {
101
118
  case "pending": return slotContent("pending", props, defaults) ?? null;
102
- case "fallback": return render(slotContent("fallback", props, defaults), view.decision);
119
+ case "denied": return render(slotContent("denied", props, defaults), view.decision);
103
120
  case "approval": return render(slotContent("approval", props, defaults), view.decision);
104
121
  case "default": return typeof props.children === "function" ? props.children(view.decision) : props.children;
105
122
  default: return view;
@@ -109,4 +126,4 @@ function render(content, decision) {
109
126
  return typeof content === "function" ? content(decision) : content ?? null;
110
127
  }
111
128
  //#endregion
112
- export { useDescribe as a, usePermDock as c, useRoles as d, useSubject as f, useAssignableRoles as i, usePermission as l, useApproval as n, useFilter as o, useTenant as p, useAssignablePermissions as r, useMemberships as s, Protected as t, usePermissions as u };
129
+ export { useDescribe as a, useMemberships as c, usePermissions as d, useRoles as f, useAssignableRoles as i, usePermDock as l, useTenant as m, useApproval as n, useFilter as o, useSubject as p, useAssignablePermissions as r, useGate as s, Protected as t, usePermission as u };
@@ -1,9 +1,8 @@
1
- import { Dr as Membership, ir as Decision, j as PolicyVocabulary } from "./policy-types-sp9P1iIV.js";
2
- import { d as Permission } from "./permission-types-Dg39z9Kv.js";
3
- import { r as Role } from "./vocabulary-hhEFLFoL.js";
4
- import { r as DescribeOptions, t as DecisionDescription } from "./describe-C3ldA9os.js";
5
- import { a as ClientPermDock, c as PermissionSet, d as SubjectView, f as TenantView, l as PermissionState, p as UseRolesOptions, r as ApprovalHandle, s as FilterResult } from "./store-9KO4BlkB.js";
6
- import { r as ProtectedProps } from "./types-DHrmBJLH.js";
1
+ import { Nn as Decision, j as PolicyVocabulary, nr as Membership } from "./policy-types-n0uRTsW8.js";
2
+ import { r as Role, w as Permission } from "./vocabulary-CN8H_9UF.js";
3
+ import { r as DescribeOptions, t as DecisionDescription } from "./describe-B5qgDvEW.js";
4
+ import { a as FilterResult, c as PermissionSet, d as RolesOptions, f as SubjectView, l as PermissionState, o as GateMode, p as TenantView, r as ClientPermDock, s as GateView, t as ApprovalHandle } from "./types-B3_ooZgZ.js";
5
+ import { r as ProtectedProps } from "./types-CX7AvRqP.js";
7
6
  import { ReactNode } from "react";
8
7
  //#region src/react/hooks.d.ts
9
8
  declare function usePermDock<V extends PolicyVocabulary = PolicyVocabulary>(): ClientPermDock<V>;
@@ -12,7 +11,7 @@ declare function usePermissions(permissions: readonly Permission[], data?: unkno
12
11
  declare function useFilter<T>(permission: Permission<string, T, "instance">, rows: readonly T[]): FilterResult<T>;
13
12
  declare function useTenant(): TenantView;
14
13
  declare function useMemberships(): readonly Membership[];
15
- declare function useRoles(options?: UseRolesOptions): {
14
+ declare function useRoles(options?: RolesOptions): {
16
15
  readonly roles: readonly Role[];
17
16
  };
18
17
  declare function useAssignableRoles(): readonly Role[];
@@ -23,8 +22,17 @@ declare function useSubject(): SubjectView;
23
22
  /** `describe` with the provider's `messages`; a call's own `messages` win. */
24
23
  declare function useDescribe(): (decision: Decision, options?: DescribeOptions) => DecisionDescription;
25
24
  declare function useApproval(decision: Decision): ApprovalHandle;
25
+ /**
26
+ * What a permission-gated control renders: `hidden`, `disabled`,
27
+ * `needsApproval`, `upgrade` and a localised `reason`, from the same
28
+ * snapshot as `usePermission`. React and React Native share it; a recipe
29
+ * renders the fields and decides nothing.
30
+ */
31
+ declare function useGate(permission: Permission, data?: unknown, options?: {
32
+ readonly mode?: GateMode;
33
+ }): GateView;
26
34
  //#endregion
27
35
  //#region src/react/protected.d.ts
28
36
  declare function Protected(props: ProtectedProps): ReactNode;
29
37
  //#endregion
30
- export { useDescribe as a, usePermDock as c, useRoles as d, useSubject as f, useAssignableRoles as i, usePermission as l, useApproval as n, useFilter as o, useTenant as p, useAssignablePermissions as r, useMemberships as s, Protected as t, usePermissions as u };
38
+ export { useDescribe as a, useMemberships as c, usePermissions as d, useRoles as f, useAssignableRoles as i, usePermDock as l, useTenant as m, useApproval as n, useFilter as o, useSubject as p, useAssignablePermissions as r, useGate as s, Protected as t, usePermission as u };
@@ -1,6 +1,6 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as emptySnapshot } from "./from-snapshot-7REQZe0H.js";
3
- import { t as adapterStore } from "./store-options-CbUHDoSe.js";
2
+ import { t as emptySnapshot } from "./from-snapshot-CTCMsFZk.js";
3
+ import { t as adapterStore } from "./store-options-u0ycEe8s.js";
4
4
  import { a as PermDockUiContext, i as PermDockStoreContext, n as useKeyed, r as PermDockSnapshotPromiseContext, t as useLiveOptions } from "./live-options-BaAFCIiu.js";
5
5
  import { useLayoutEffect, useMemo } from "react";
6
6
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { n as PermDockProviderProps } from "./types-DHrmBJLH.js";
1
+ import { n as PermDockProviderProps } from "./types-CX7AvRqP.js";
2
2
  import { ReactElement } from "react";
3
3
  //#region src/react/provider.d.ts
4
4
  declare function PermDockProvider(props: PermDockProviderProps): ReactElement;
@@ -1,6 +1,6 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as emptySnapshot } from "./from-snapshot-7REQZe0H.js";
3
- import { i as isPromiseLike, t as adapterStore } from "./store-options-CbUHDoSe.js";
2
+ import { t as emptySnapshot } from "./from-snapshot-CTCMsFZk.js";
3
+ import { i as isPromiseLike, t as adapterStore } from "./store-options-u0ycEe8s.js";
4
4
  //#region src/client/provider-store.ts
5
5
  /**
6
6
  * Store options that read `read()` on every request, so a rotated token, a
@@ -0,0 +1 @@
1
+ export { n as runCloudPull } from "./pull-jEwbf80J.js";