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,228 @@
1
+ import { m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
2
+ import { n as readBodyText } from "./body-text-QcXok_SI.js";
3
+ //#region src/server/standard-webhooks.ts
4
+ const DEFAULT_TOLERANCE = 300;
5
+ const JWKS_TTL_SECONDS = 300;
6
+ const encoder = /* @__PURE__ */ new TextEncoder();
7
+ function decodeBase64(value) {
8
+ if (!/^[A-Za-z0-9+/]*={0,2}$/u.test(value) || value.length % 4 !== 0) return;
9
+ try {
10
+ const binary = atob(value);
11
+ const bytes = new Uint8Array(binary.length);
12
+ for (let index = 0; index < binary.length; index += 1) bytes[index] = binary.codePointAt(index) ?? 0;
13
+ return bytes;
14
+ } catch {
15
+ return;
16
+ }
17
+ }
18
+ function encodeBase64(bytes) {
19
+ let binary = "";
20
+ for (const byte of new Uint8Array(bytes)) binary += String.fromCodePoint(byte);
21
+ return btoa(binary);
22
+ }
23
+ function secretBytes(secret) {
24
+ const bytes = decodeBase64(secret.startsWith("whsec_") ? secret.slice(6) : secret);
25
+ if (bytes === void 0 || bytes.length < 24 || bytes.length > 64) throw new TypeError("PermDock: a v1 webhook secret is whsec_ followed by 24 to 64 bytes in base64");
26
+ return bytes;
27
+ }
28
+ function hmacKey(secret, usage) {
29
+ return crypto.subtle.importKey("raw", secretBytes(secret), {
30
+ name: "HMAC",
31
+ hash: "SHA-256"
32
+ }, false, [usage]);
33
+ }
34
+ function isEd25519(jwk) {
35
+ return jwk.kty === "OKP" && jwk.crv === "Ed25519" && typeof jwk.x === "string";
36
+ }
37
+ function signedContent(id, timestamp, body) {
38
+ return encoder.encode(`${id}.${timestamp}.${body}`);
39
+ }
40
+ function validId(id) {
41
+ return id.length > 0 && id.length <= 256 && !/\s/u.test(id);
42
+ }
43
+ /**
44
+ * Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_`
45
+ * secret, `v1a` Ed25519 with a private JWK. Throws on an invalid key or id,
46
+ * because both come from the sender's own configuration.
47
+ */
48
+ function webhookSigner(options) {
49
+ if (options.keys.length === 0) throw new TypeError("PermDock: webhookSigner() needs at least one key");
50
+ const keys = options.keys.map(async (key) => {
51
+ switch (key.alg) {
52
+ case "v1": return {
53
+ alg: key.alg,
54
+ key: await hmacKey(key.secret, "sign")
55
+ };
56
+ case "v1a":
57
+ if (!isEd25519(key.privateKey) || typeof key.privateKey.d !== "string") throw new TypeError("PermDock: a v1a webhook key is an Ed25519 private JWK");
58
+ return {
59
+ alg: key.alg,
60
+ key: await importEd25519(key.privateKey, "sign")
61
+ };
62
+ default: return key;
63
+ }
64
+ });
65
+ for (const pending of keys) pending.catch(() => void 0);
66
+ return { async sign(message) {
67
+ if (!validId(message.id)) throw new TypeError("PermDock: a webhook id is 1 to 256 characters without whitespace");
68
+ const timestamp = String(nowSeconds(message.now));
69
+ const content = signedContent(message.id, timestamp, message.body);
70
+ const signatures = await Promise.all(keys.map(async (pending) => {
71
+ const { alg, key } = await pending;
72
+ return `${alg},${encodeBase64(await crypto.subtle.sign(alg === "v1" ? "HMAC" : "Ed25519", key, content))}`;
73
+ }));
74
+ return {
75
+ "webhook-id": message.id,
76
+ "webhook-timestamp": timestamp,
77
+ "webhook-signature": signatures.join(" ")
78
+ };
79
+ } };
80
+ }
81
+ function header(input, name) {
82
+ const headers = input.headers;
83
+ if (headers instanceof Headers) return headers.get(name) ?? void 0;
84
+ return Object.hasOwn(headers, name) ? headers[name] : void 0;
85
+ }
86
+ async function bodyOf(input) {
87
+ if (input instanceof Request) {
88
+ const read = await readBodyText(input);
89
+ return read.ok ? read.text : void 0;
90
+ }
91
+ return input.body;
92
+ }
93
+ function parseSignatures(value) {
94
+ const parsed = [];
95
+ for (const entry of value.split(" ")) {
96
+ const comma = entry.indexOf(",");
97
+ const alg = entry.slice(0, comma);
98
+ if (comma <= 0 || alg !== "v1" && alg !== "v1a") continue;
99
+ const bytes = decodeBase64(entry.slice(comma + 1));
100
+ if (bytes?.length === (alg === "v1" ? 32 : 64)) parsed.push({
101
+ alg,
102
+ bytes
103
+ });
104
+ }
105
+ return parsed;
106
+ }
107
+ function importEd25519(jwk, usage) {
108
+ const material = usage === "sign" ? {
109
+ kty: "OKP",
110
+ crv: "Ed25519",
111
+ x: jwk.x,
112
+ d: jwk.d
113
+ } : {
114
+ kty: "OKP",
115
+ crv: "Ed25519",
116
+ x: jwk.x
117
+ };
118
+ return crypto.subtle.importKey("jwk", material, "Ed25519", false, [usage]);
119
+ }
120
+ async function publicKeys(jwks) {
121
+ return (await Promise.all(jwks.keys.filter(isEd25519).map((jwk) => importEd25519(jwk, "verify").catch(() => void 0)))).filter((key) => key !== void 0);
122
+ }
123
+ async function anyVerifies(algorithm, keys, signatures, content) {
124
+ return (await Promise.all(keys.flatMap((key) => signatures.map((signature) => crypto.subtle.verify(algorithm, key, signature.bytes, content))))).includes(true);
125
+ }
126
+ function isJwks(value) {
127
+ return typeof value === "object" && value !== null && "keys" in value && Array.isArray(value.keys);
128
+ }
129
+ /**
130
+ * Verifies Standard Webhooks deliveries signed `v1` with one of `secret` or
131
+ * `v1a` with a key from `jwks`, within `tolerance` seconds, and records each
132
+ * `webhook-id` in `replay`. Throws only on an invalid `secret`.
133
+ */
134
+ function webhookVerifier(options) {
135
+ const secrets = options.secret === void 0 ? [] : typeof options.secret === "string" ? [options.secret] : options.secret;
136
+ for (const secret of secrets) secretBytes(secret);
137
+ const hmacKeys = Promise.all(secrets.map((secret) => hmacKey(secret, "verify")));
138
+ const tolerance = options.tolerance ?? DEFAULT_TOLERANCE;
139
+ const jwks = options.jwks;
140
+ let cached;
141
+ async function ed25519Keys(now) {
142
+ if (jwks === void 0) return [];
143
+ if (isJwks(jwks)) {
144
+ cached ??= {
145
+ keys: await publicKeys(jwks),
146
+ until: Number.POSITIVE_INFINITY
147
+ };
148
+ return cached.keys;
149
+ }
150
+ if (cached !== void 0 && cached.until > now) return cached.keys;
151
+ try {
152
+ const response = await (options.fetch ?? fetch)(String(jwks), { headers: { accept: "application/jwk-set+json, application/json" } });
153
+ const parsed = response.ok ? await response.json() : void 0;
154
+ if (!isJwks(parsed)) return;
155
+ cached = {
156
+ keys: await publicKeys(parsed),
157
+ until: now + JWKS_TTL_SECONDS
158
+ };
159
+ return cached.keys;
160
+ } catch {
161
+ return;
162
+ }
163
+ }
164
+ async function signatureValid(signatures, content, now) {
165
+ const v1 = signatures.filter((signature) => signature.alg === "v1");
166
+ const v1a = signatures.filter((signature) => signature.alg === "v1a");
167
+ if (v1.length > 0 && await anyVerifies("HMAC", await hmacKeys, v1, content)) return;
168
+ if (v1a.length === 0) return "invalid-signature";
169
+ const keys = await ed25519Keys(now);
170
+ if (keys === void 0) return "keys-unavailable";
171
+ if (await anyVerifies("Ed25519", keys, v1a, content)) return;
172
+ return "invalid-signature";
173
+ }
174
+ async function claim(id, expiresAt) {
175
+ const key = `webhook:${id}`;
176
+ try {
177
+ if (options.replay.claim !== void 0) return await options.replay.claim(key, expiresAt);
178
+ if (await options.replay.seen(key)) return false;
179
+ await options.replay.remember(key, expiresAt);
180
+ return true;
181
+ } catch {
182
+ return false;
183
+ }
184
+ }
185
+ return { async verify(input) {
186
+ const id = header(input, "webhook-id");
187
+ const timestamp = header(input, "webhook-timestamp");
188
+ const signature = header(input, "webhook-signature");
189
+ if (id === void 0 || timestamp === void 0 || signature === void 0) return {
190
+ ok: false,
191
+ cause: "missing-headers"
192
+ };
193
+ const body = await bodyOf(input);
194
+ const signatures = parseSignatures(signature);
195
+ if (body === void 0 || !validId(id) || !/^\d{1,12}$/u.test(timestamp) || signatures.length === 0) return {
196
+ ok: false,
197
+ cause: "malformed"
198
+ };
199
+ const now = nowSeconds(options.now?.());
200
+ const sent = Number(timestamp);
201
+ if (Math.abs(now - sent) > tolerance) return {
202
+ ok: false,
203
+ cause: "timestamp-out-of-range"
204
+ };
205
+ let failure;
206
+ try {
207
+ failure = await signatureValid(signatures, signedContent(id, timestamp, body), now);
208
+ } catch {
209
+ failure = "invalid-signature";
210
+ }
211
+ if (failure !== void 0) return {
212
+ ok: false,
213
+ cause: failure
214
+ };
215
+ if (!await claim(id, sent + tolerance)) return {
216
+ ok: false,
217
+ cause: "replayed"
218
+ };
219
+ return {
220
+ ok: true,
221
+ id,
222
+ timestamp: rfc3339(sent),
223
+ body
224
+ };
225
+ } };
226
+ }
227
+ //#endregion
228
+ export { webhookVerifier as n, webhookSigner as t };
@@ -0,0 +1,88 @@
1
+ import { Rt as Instant, tr as JsonWebKeyLike } from "./policy-types-n0uRTsW8.js";
2
+ import { l as ReplayStore } from "./types-C791HFu9.js";
3
+ //#region src/server/standard-webhooks.d.ts
4
+ /** The three Standard Webhooks headers a delivery carries. */
5
+ type WebhookHeaders = {
6
+ readonly "webhook-id": string;
7
+ readonly "webhook-timestamp": string;
8
+ readonly "webhook-signature": string;
9
+ };
10
+ /** An OKP JWK; only `kty: "OKP"` with `crv: "Ed25519"` signs or verifies `v1a`. */
11
+ type WebhookJwk = JsonWebKeyLike & {
12
+ readonly kid?: string;
13
+ readonly crv?: string;
14
+ readonly x?: string;
15
+ readonly d?: string;
16
+ };
17
+ /** A Standard Webhooks signature version: `v1` HMAC-SHA256 or `v1a` Ed25519. */
18
+ type WebhookAlgorithm = "v1" | "v1a";
19
+ type WebhookSigningKey = {
20
+ readonly alg: "v1";
21
+ readonly secret: string;
22
+ } | {
23
+ readonly alg: "v1a";
24
+ readonly privateKey: WebhookJwk;
25
+ };
26
+ type WebhookSignerOptions = {
27
+ /** Every key signs each delivery, so a receiver can rotate between them. */
28
+ readonly keys: readonly WebhookSigningKey[];
29
+ };
30
+ type WebhookMessage = {
31
+ /** A unique message id, kept across retries of the same message. */
32
+ readonly id: string;
33
+ readonly body: string;
34
+ readonly now?: Instant;
35
+ };
36
+ type WebhookSigner = {
37
+ sign(message: WebhookMessage): Promise<WebhookHeaders>;
38
+ };
39
+ /** An Ed25519 public JWK set for `v1a`, or the URL that serves one. */
40
+ type WebhookJwks = {
41
+ readonly keys: readonly WebhookJwk[];
42
+ } | URL | string;
43
+ type WebhookVerifierOptions = {
44
+ /** `v1` secrets in `whsec_` form; more than one during a rotation. */
45
+ readonly secret?: string | readonly string[];
46
+ /** `v1a` public keys. */
47
+ readonly jwks?: WebhookJwks;
48
+ /** Records each `webhook-id` so a replayed delivery fails. */
49
+ readonly replay: ReplayStore;
50
+ /** Seconds a timestamp may differ from the clock. Defaults to 300. */
51
+ readonly tolerance?: number;
52
+ readonly now?: () => Instant;
53
+ /** Fetches a `jwks` URL. Defaults to the global `fetch`. */
54
+ readonly fetch?: typeof fetch;
55
+ };
56
+ type WebhookFailureCause = "missing-headers" | "malformed" | "timestamp-out-of-range" | "invalid-signature" | "keys-unavailable" | "replayed";
57
+ type WebhookInput = Request | {
58
+ readonly headers: Headers | Readonly<Record<string, string | undefined>>;
59
+ readonly body: string;
60
+ };
61
+ type VerifiedWebhookMessage = {
62
+ readonly ok: true;
63
+ readonly id: string;
64
+ /** The `webhook-timestamp` as an RFC 3339 instant. */
65
+ readonly timestamp: string;
66
+ readonly body: string;
67
+ } | {
68
+ readonly ok: false;
69
+ readonly cause: WebhookFailureCause;
70
+ };
71
+ type WebhookVerifier = {
72
+ /** Never throws; claims the `webhook-id` only after a signature verifies. */
73
+ verify(input: WebhookInput): Promise<VerifiedWebhookMessage>;
74
+ };
75
+ /**
76
+ * Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_`
77
+ * secret, `v1a` Ed25519 with a private JWK. Throws on an invalid key or id,
78
+ * because both come from the sender's own configuration.
79
+ */
80
+ declare function webhookSigner(options: WebhookSignerOptions): WebhookSigner;
81
+ /**
82
+ * Verifies Standard Webhooks deliveries signed `v1` with one of `secret` or
83
+ * `v1a` with a key from `jwks`, within `tolerance` seconds, and records each
84
+ * `webhook-id` in `replay`. Throws only on an invalid `secret`.
85
+ */
86
+ declare function webhookVerifier(options: WebhookVerifierOptions): WebhookVerifier;
87
+ //#endregion
88
+ export { WebhookInput as a, WebhookMessage as c, WebhookSigningKey as d, WebhookVerifier as f, webhookVerifier as h, WebhookHeaders as i, WebhookSigner as l, webhookSigner as m, WebhookAlgorithm as n, WebhookJwk as o, WebhookVerifierOptions as p, WebhookFailureCause as r, WebhookJwks as s, VerifiedWebhookMessage as t, WebhookSignerOptions as u };
@@ -0,0 +1,132 @@
1
+ import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
+ import { mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { homedir } from "node:os";
5
+ //#region src/terminal/storage.ts
6
+ const FILE_MODE = 384;
7
+ const DIR_MODE = 448;
8
+ const GROUP_OR_WORLD = 63;
9
+ function credentialsPath(service, runtime) {
10
+ if (runtime.configDir !== void 0) return path.join(runtime.configDir, "credentials.json");
11
+ const home = runtime.homedir ?? homedir;
12
+ const env = runtime.env ?? process.env;
13
+ if ((runtime.platform ?? process.platform) === "win32") {
14
+ const appData = env["APPDATA"] ?? path.join(home(), "AppData", "Roaming");
15
+ return path.join(appData, service, "credentials.json");
16
+ }
17
+ const xdg = env["XDG_CONFIG_HOME"] ?? path.join(home(), ".config");
18
+ return path.join(xdg, service, "credentials.json");
19
+ }
20
+ function parseCredential(value) {
21
+ if (!isRecord(value) || typeof value["access_token"] !== "string") return null;
22
+ return compact({
23
+ access_token: value["access_token"],
24
+ refresh_token: typeof value["refresh_token"] === "string" ? value["refresh_token"] : void 0,
25
+ expires_at: typeof value["expires_at"] === "number" ? value["expires_at"] : void 0,
26
+ token_type: typeof value["token_type"] === "string" ? value["token_type"] : void 0,
27
+ scope: typeof value["scope"] === "string" ? value["scope"] : void 0
28
+ });
29
+ }
30
+ function keyringEntry(storage, profile) {
31
+ if (storage.keyring === void 0) return null;
32
+ try {
33
+ return new storage.keyring(storage.service, profile);
34
+ } catch {
35
+ return null;
36
+ }
37
+ }
38
+ function readKeyring(storage, profile) {
39
+ const entry = keyringEntry(storage, profile);
40
+ if (entry === null) return null;
41
+ try {
42
+ const raw = entry.getPassword();
43
+ return typeof raw === "string" ? parseCredential(JSON.parse(raw)) : null;
44
+ } catch {
45
+ return null;
46
+ }
47
+ }
48
+ function readCredentials(storage, profile, runtime) {
49
+ return readKeyring(storage, profile) ?? readFile(storage.service, profile, runtime);
50
+ }
51
+ function readFile(service, profile, runtime) {
52
+ const file = credentialsPath(service, runtime);
53
+ let raw;
54
+ try {
55
+ const stat = statSync(file);
56
+ if ((runtime.platform ?? process.platform) !== "win32" && (stat.mode & GROUP_OR_WORLD) !== 0) return null;
57
+ raw = readFileSync(file, "utf8");
58
+ } catch {
59
+ return null;
60
+ }
61
+ try {
62
+ const parsed = JSON.parse(raw);
63
+ if (!isRecord(parsed) || !isRecord(parsed["profiles"])) return null;
64
+ return parseCredential(parsed["profiles"][profile]);
65
+ } catch {
66
+ return null;
67
+ }
68
+ }
69
+ /**
70
+ * The OS keychain when `storage.keyring` is set and works; otherwise the
71
+ * mode-0600 file. Answers the store it wrote.
72
+ */
73
+ function writeCredentials(storage, profile, credential, runtime) {
74
+ const entry = keyringEntry(storage, profile);
75
+ if (entry !== null) try {
76
+ entry.setPassword(JSON.stringify(credential));
77
+ deleteFile(storage.service, profile, runtime);
78
+ return "keychain";
79
+ } catch {}
80
+ writeFile(storage.service, profile, credential, runtime);
81
+ return "file";
82
+ }
83
+ function writeFile(service, profile, credential, runtime) {
84
+ const file = credentialsPath(service, runtime);
85
+ mkdirSync(path.dirname(file), {
86
+ recursive: true,
87
+ mode: DIR_MODE
88
+ });
89
+ let profiles = {};
90
+ try {
91
+ const existing = JSON.parse(readFileSync(file, "utf8"));
92
+ if (isRecord(existing) && isRecord(existing["profiles"])) profiles = existing["profiles"];
93
+ } catch {
94
+ profiles = {};
95
+ }
96
+ profiles[profile] = credential;
97
+ writeFileSync(file, `${JSON.stringify({ profiles }, null, 2)}\n`, {
98
+ encoding: "utf8",
99
+ mode: FILE_MODE
100
+ });
101
+ }
102
+ function deleteCredentials(storage, profile, runtime) {
103
+ const entry = keyringEntry(storage, profile);
104
+ if (entry !== null) try {
105
+ entry.deletePassword();
106
+ } catch {}
107
+ deleteFile(storage.service, profile, runtime);
108
+ }
109
+ function deleteFile(service, profile, runtime) {
110
+ const file = credentialsPath(service, runtime);
111
+ let parsed;
112
+ try {
113
+ parsed = JSON.parse(readFileSync(file, "utf8"));
114
+ } catch {
115
+ return;
116
+ }
117
+ if (!isRecord(parsed) || !isRecord(parsed["profiles"])) return;
118
+ const profiles = {};
119
+ for (const key of Object.keys(parsed["profiles"])) if (key !== profile) profiles[key] = parsed["profiles"][key];
120
+ if (Object.keys(profiles).length === 0) {
121
+ try {
122
+ unlinkSync(file);
123
+ } catch {}
124
+ return;
125
+ }
126
+ writeFileSync(file, `${JSON.stringify({ profiles }, null, 2)}\n`, {
127
+ encoding: "utf8",
128
+ mode: FILE_MODE
129
+ });
130
+ }
131
+ //#endregion
132
+ export { writeCredentials as i, deleteCredentials as n, readCredentials as r, credentialsPath as t };
@@ -1,46 +1,10 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
3
  import { i as flattenApprovers } from "./approvers-CqPOLD-o.js";
4
- import { s as rootMembershipId } from "./scopes-tvpa34ep.js";
5
- import { t as parseDuration } from "./duration-xK2jGFVc.js";
6
- import { n as matchGrantee } from "./grantee-match-fxYp9Nmt.js";
7
- import { t as ApprovalError } from "./errors-DRnGZHzF.js";
8
- //#region src/approvals/types.ts
9
- const APPROVAL_HEADER = "PermDock-Approval";
10
- const DEFAULT_APPROVAL_TTL_MS = 36e5;
11
- /** The approvals a request needs in total: `approvers.quorum` (or 1), or the sum of its stages' quorums. */
12
- function approvalQuorum(request) {
13
- const stages = request.approvers?.stages;
14
- if (stages !== void 0) return stages.reduce((sum, stage) => sum + (stage.quorum ?? 1), 0);
15
- return request.approvers?.quorum ?? 1;
16
- }
17
- /**
18
- * The instant from which `approvers.escalation.to` may approve, in epoch
19
- * milliseconds, or `undefined` when the request has no escalation or its
20
- * `after` does not parse (then nobody escalates: fail-closed).
21
- */
22
- function escalationOpenAt(request) {
23
- const after = request.approvers?.escalation?.after;
24
- const seconds = parseDuration(after);
25
- if (seconds === void 0) return;
26
- return Date.parse(request.createdAt) + seconds * 1e3;
27
- }
28
- /** The instant from which a stage's own `escalation.to` may approve it, in epoch milliseconds; `undefined` when it has none or `after` does not parse. */
29
- function stageEscalationOpenAt(request, stage) {
30
- const seconds = parseDuration(stage.escalation?.after);
31
- if (seconds === void 0) return;
32
- return Date.parse(request.createdAt) + seconds * 1e3;
33
- }
34
- /** The key a verdict's `relations` lists a relation approver under. */
35
- function approverRelationKey(item) {
36
- return JSON.stringify([
37
- item.resource,
38
- item.relation,
39
- item.through ?? null,
40
- item.depth ?? null
41
- ]);
42
- }
43
- //#endregion
4
+ import { a as durationOf, i as dateAt } from "./time-DkWjdL98.js";
5
+ import { s as rootMembershipId } from "./scopes-CUPSjo9q.js";
6
+ import { n as matchGrantee } from "./grantee-match-DbENBHLB.js";
7
+ import { a as escalationOpenAt, i as approverRelationKey, o as stageEscalationOpenAt, r as approvalQuorum, s as ApprovalError } from "./types-DqzsnlSA.js";
44
8
  //#region src/approvals/page.ts
45
9
  const DEFAULT_PAGE_SIZE = 50;
46
10
  const MAX_PAGE_SIZE = 200;
@@ -187,12 +151,14 @@ function matchesFilter(request, filter) {
187
151
  function assertSeparateApprover(request, by, requireDistinctApprover) {
188
152
  const principal = by.principal;
189
153
  if (principal === null) throw new ApprovalError("approver-unauthenticated", "approver must be authenticated");
154
+ if (principal.kind === "link" || principal.kind === "feed" || principal.kind === "contact") throw new ApprovalError("approver-not-eligible", "a link, a feed or a contact cannot approve");
155
+ if (by.actor?.kind === "support") throw new ApprovalError("approver-not-eligible", "a support session cannot approve");
190
156
  if (request.subject.actor !== void 0 && principal.id === request.subject.actor.id) throw new ApprovalError("approver-is-actor", "approver is the actor of this request");
191
157
  if ((requireDistinctApprover || request.approvers?.distinct !== false) && request.subject.principal !== null && principal.id === request.subject.principal.id) throw new ApprovalError("approver-is-principal", "approver is the principal of this request");
192
158
  return principal;
193
159
  }
194
160
  function assertNotRepeated(request, id) {
195
- if ((request.approvals ?? []).some((item) => item.by === id)) throw new ApprovalError("approver-repeated", "approver has already approved this request");
161
+ if ((request.approvals ?? []).some((item) => item.by === id || item.onBehalfOf === id)) throw new ApprovalError("approver-repeated", "approver has already approved this request");
196
162
  }
197
163
  function vouchedRule(verdict) {
198
164
  return typeof verdict.vouched === "string" && verdict.vouched !== "" ? verdict.vouched : void 0;
@@ -207,7 +173,8 @@ function vouchedRule(verdict) {
207
173
  * two stages. `relations` are the relation approvers `by` holds on the
208
174
  * request's resource (see `ApprovalVerdict.relations`).
209
175
  */
210
- function assertApprover(request, by, requireDistinctApprover, now = /* @__PURE__ */ new Date(), relations = [], permissions = []) {
176
+ function assertApprover(request, by, requireDistinctApprover, at, relations = [], permissions = []) {
177
+ const now = dateAt(at);
211
178
  const principal = assertSeparateApprover(request, by, requireDistinctApprover);
212
179
  const tenant = request.subject.principal?.tenant;
213
180
  if (tenant !== void 0 && !belongsToTenant(by, tenant)) throw new ApprovalError("approver-not-eligible", "approver does not belong to the request tenant");
@@ -251,13 +218,24 @@ function isSystemSubject(by) {
251
218
  * should write the result only when the stored row is still pending with the
252
219
  * same number of approvals, so two approvers racing both count.
253
220
  */
254
- function applyApprovalVerdict(request, verdict, now = /* @__PURE__ */ new Date()) {
221
+ function applyApprovalVerdict(request, verdict, at) {
222
+ const now = dateAt(at);
255
223
  const principal = verdict.by.principal;
256
224
  if (principal === null) throw new ApprovalError("approver-unauthenticated", "approver must be authenticated");
257
225
  if (request.status !== "pending") throw new ApprovalError("approval-not-pending", "approval is not pending");
258
226
  if (Date.parse(request.expiresAt) <= now.getTime()) throw new ApprovalError("approval-expired", "approval has expired");
259
227
  const vouched = vouchedRule(verdict);
260
- const stage = verdict.status === "rejected" && isSystemSubject(verdict.by) || vouched !== void 0 ? void 0 : assertApprover(request, verdict.by, false, now, verdict.relations, verdict.permissions);
228
+ const behalf = vouched === void 0 ? verdict.onBehalfOf : void 0;
229
+ let stage;
230
+ if (verdict.status === "rejected" && isSystemSubject(verdict.by) || vouched !== void 0) stage = void 0;
231
+ else if (behalf === void 0) stage = assertApprover(request, verdict.by, false, { epochMilliseconds: now.getTime() }, verdict.relations, verdict.permissions);
232
+ else {
233
+ const delegate = assertSeparateApprover(request, verdict.by, false);
234
+ const tenant = request.subject.principal?.tenant;
235
+ if (tenant !== void 0 && !belongsToTenant(verdict.by, tenant)) throw new ApprovalError("approver-not-eligible", "approver does not belong to the request tenant");
236
+ assertNotRepeated(request, delegate.id);
237
+ stage = assertApprover(request, behalf.subject, false, { epochMilliseconds: now.getTime() }, behalf.relations ?? [], behalf.permissions ?? []);
238
+ }
261
239
  if (vouched !== void 0) assertNotRepeated(request, assertSeparateApprover(request, verdict.by, false).id);
262
240
  if (verdict.status === "rejected") return freezeDeep(compact({
263
241
  ...request,
@@ -271,7 +249,9 @@ function applyApprovalVerdict(request, verdict, now = /* @__PURE__ */ new Date()
271
249
  by: principal.id,
272
250
  at: now.toISOString(),
273
251
  stage,
274
- vouched
252
+ vouched,
253
+ onBehalfOf: behalf === void 0 ? void 0 : behalf.subject.principal?.id,
254
+ delegation: behalf?.delegation
275
255
  })];
276
256
  if (vouched === void 0 && !isComplete(request, approvals)) return freezeDeep(compact({
277
257
  ...request,
@@ -302,26 +282,32 @@ function isStale(request, now) {
302
282
  return request.status === "expired" || Date.parse(request.expiresAt) <= now.getTime();
303
283
  }
304
284
  function memoryApprovalStore(options = {}) {
305
- const ttl = options.ttl ?? 36e5;
285
+ if (options.ttl !== void 0 && durationOf(options.ttl) === void 0) throw new RangeError(`PermDock: memoryApprovalStore ttl must be a whole number of seconds above 0, got ${String(options.ttl)}`);
286
+ const ttl = options.ttl ?? 3600;
306
287
  const records = /* @__PURE__ */ new Map();
288
+ const clock = (at) => dateAt(at ?? options.now?.());
307
289
  return {
308
290
  ttl,
309
291
  create(request) {
310
292
  const current = records.get(request.token);
311
- if (current !== void 0 && !isStale(current, /* @__PURE__ */ new Date())) return;
293
+ if (current !== void 0 && !isStale(current, clock())) return;
312
294
  records.set(request.token, freezeDeep(request));
313
295
  },
314
296
  get(token) {
315
297
  return records.get(token) ?? null;
316
298
  },
299
+ getById(id) {
300
+ return records.values().find((request) => request.id === id) ?? null;
301
+ },
317
302
  resolve(token, verdict) {
318
303
  const current = records.get(token);
319
304
  if (current === void 0) throw new ApprovalError("approval-not-found", "approval was not found");
320
- const next = applyApprovalVerdict(current, verdict, /* @__PURE__ */ new Date());
305
+ const next = applyApprovalVerdict(current, verdict);
321
306
  records.set(token, next);
322
307
  return next;
323
308
  },
324
- consume(token, now = /* @__PURE__ */ new Date()) {
309
+ consume(token, at) {
310
+ const now = clock(at);
325
311
  const current = records.get(token);
326
312
  if (current?.status !== "approved" || current.consumedAt !== void 0 || Date.parse(current.expiresAt) <= now.getTime()) return null;
327
313
  const next = freezeDeep({
@@ -336,12 +322,13 @@ function memoryApprovalStore(options = {}) {
336
322
  for (const request of records.values()) if (matchesFilter(request, query)) matching.push(request);
337
323
  return pageApprovals(matching, query);
338
324
  },
339
- expire(now = /* @__PURE__ */ new Date()) {
325
+ expire(at) {
326
+ const now = clock(at);
340
327
  let count = 0;
341
328
  const instant = now.getTime();
342
329
  for (const [token, request] of records) {
343
330
  const deadline = Date.parse(request.expiresAt);
344
- if (request.status !== "pending" && deadline + ttl <= instant) {
331
+ if (request.status !== "pending" && deadline + ttl * 1e3 <= instant) {
345
332
  records.delete(token);
346
333
  continue;
347
334
  }
@@ -356,7 +343,7 @@ function memoryApprovalStore(options = {}) {
356
343
  return count;
357
344
  },
358
345
  cancel(filter, meta) {
359
- const now = /* @__PURE__ */ new Date();
346
+ const now = clock();
360
347
  let count = 0;
361
348
  for (const [token, request] of records) {
362
349
  if (request.status !== "pending" || !matchesFilter(request, filter)) continue;
@@ -368,4 +355,4 @@ function memoryApprovalStore(options = {}) {
368
355
  };
369
356
  }
370
357
  //#endregion
371
- export { decodeApprovalCursor as a, pageApprovals as c, approvalQuorum as d, approverRelationKey as f, approvalPageSize as i, APPROVAL_HEADER as l, assertApprover as n, encodeApprovalCursor as o, escalationOpenAt as p, memoryApprovalStore as r, listAllApprovals as s, applyApprovalVerdict as t, DEFAULT_APPROVAL_TTL_MS as u };
358
+ export { approvalPageSize as a, listAllApprovals as c, memoryApprovalStore as i, pageApprovals as l, assertApprover as n, decodeApprovalCursor as o, matchesApprovers as r, encodeApprovalCursor as s, applyApprovalVerdict as t };