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,957 @@
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
+ import { t as assertAppData } from "./app-data-MuyzVqX8.js";
4
+ import { d as isoNow, n as RFC3339_PATTERN } from "./time-DkWjdL98.js";
5
+ import { n as requireEventInstant } from "./event-time-CsegxXxB.js";
6
+ //#region src/core/event-schemas.ts
7
+ const SCHEMA = "https://json-schema.org/draft/2020-12/schema";
8
+ /** The URL each event family's schema is published at, and its CloudEvents `dataschema`. */
9
+ const EVENT_SCHEMA_IDS = Object.freeze({
10
+ decision: "https://permdock.com/schemas/decision-event-v1.json",
11
+ directory: "https://permdock.com/schemas/directory-event-v1.json",
12
+ membership: "https://permdock.com/schemas/membership-event-v1.json",
13
+ credential: "https://permdock.com/schemas/credential-event-v1.json",
14
+ access: "https://permdock.com/schemas/access-event-v1.json",
15
+ automation: "https://permdock.com/schemas/automation-event-v1.json",
16
+ catalog: "https://permdock.com/schemas/catalog-event-v1.json",
17
+ delivery: "https://permdock.com/schemas/delivery-event-v1.json"
18
+ });
19
+ /** `format` is an annotation, so `pattern` enforces it. */
20
+ const instant = {
21
+ type: "string",
22
+ format: "date-time",
23
+ pattern: RFC3339_PATTERN
24
+ };
25
+ const text = { type: "string" };
26
+ const id = {
27
+ type: "string",
28
+ minLength: 1
29
+ };
30
+ const strings = {
31
+ type: "array",
32
+ items: text
33
+ };
34
+ const ref = {
35
+ type: "object",
36
+ required: ["id"],
37
+ properties: { id },
38
+ additionalProperties: false
39
+ };
40
+ const actor = {
41
+ type: "object",
42
+ required: ["id", "kind"],
43
+ properties: {
44
+ id,
45
+ kind: text
46
+ },
47
+ additionalProperties: false
48
+ };
49
+ const risk = { enum: [
50
+ "low",
51
+ "medium",
52
+ "high",
53
+ "critical"
54
+ ] };
55
+ const credentialKind = { enum: [
56
+ "user",
57
+ "service",
58
+ "feed"
59
+ ] };
60
+ const appData = {
61
+ type: "object",
62
+ description: "The application's own data, set where the event is built: plain JSON, never read by a decision."
63
+ };
64
+ const within = {
65
+ type: "object",
66
+ additionalProperties: text
67
+ };
68
+ function family(key, title, description, node) {
69
+ return freezeDeep({
70
+ $schema: SCHEMA,
71
+ $id: EVENT_SCHEMA_IDS[key],
72
+ title,
73
+ description,
74
+ ...node
75
+ });
76
+ }
77
+ const DECISION_EVENT_SCHEMA = family("decision", "PermDock decision event", "A DecisionEvent, wire format v1: the data of com.permdock.decision and com.permdock.approval.* CloudEvents.", {
78
+ type: "object",
79
+ required: [
80
+ "type",
81
+ "at",
82
+ "outcome",
83
+ "permission",
84
+ "scope",
85
+ "resource",
86
+ "subject",
87
+ "trusted",
88
+ "call"
89
+ ],
90
+ properties: {
91
+ x: appData,
92
+ type: { const: "decision" },
93
+ at: instant,
94
+ outcome: { enum: [
95
+ "granted",
96
+ "denied",
97
+ "approval-required"
98
+ ] },
99
+ permission: id,
100
+ scope: text,
101
+ resource: {
102
+ type: "object",
103
+ required: ["type"],
104
+ properties: {
105
+ type: text,
106
+ id: text
107
+ },
108
+ additionalProperties: false
109
+ },
110
+ subject: {
111
+ type: "object",
112
+ required: ["principal"],
113
+ properties: {
114
+ principal: {
115
+ type: ["object", "null"],
116
+ required: ["id", "roles"],
117
+ properties: {
118
+ id,
119
+ roles: strings,
120
+ tenant: text
121
+ },
122
+ additionalProperties: false
123
+ },
124
+ actor,
125
+ delegation: {
126
+ type: "object",
127
+ properties: {
128
+ scope: text,
129
+ authorization_details: {
130
+ type: "array",
131
+ items: {
132
+ type: "object",
133
+ required: ["type"],
134
+ properties: { type: text }
135
+ }
136
+ },
137
+ access: { type: "array" }
138
+ },
139
+ additionalProperties: false
140
+ },
141
+ credential: {
142
+ type: "object",
143
+ required: ["id", "kind"],
144
+ properties: {
145
+ id,
146
+ kind: credentialKind
147
+ },
148
+ additionalProperties: false
149
+ },
150
+ supportSession: {
151
+ type: "object",
152
+ required: ["id"],
153
+ properties: { id },
154
+ additionalProperties: false
155
+ }
156
+ },
157
+ additionalProperties: false
158
+ },
159
+ tenant: text,
160
+ membership: {
161
+ type: "object",
162
+ required: ["roles"],
163
+ properties: {
164
+ roles: strings,
165
+ expiresAt: instant
166
+ }
167
+ },
168
+ via: { type: ["string", "null"] },
169
+ matched: {
170
+ type: "object",
171
+ required: ["role", "permission"],
172
+ properties: {
173
+ role: { type: ["string", "null"] },
174
+ permission: text,
175
+ name: text,
176
+ meta: { type: "object" },
177
+ to: {},
178
+ hosted: { type: "object" },
179
+ breakGlass: { const: true }
180
+ },
181
+ additionalProperties: false
182
+ },
183
+ obligations: {
184
+ type: "array",
185
+ items: {
186
+ type: "object",
187
+ required: ["kind"],
188
+ properties: { kind: text }
189
+ }
190
+ },
191
+ purpose: strings,
192
+ reason: text,
193
+ denials: {
194
+ type: "array",
195
+ items: {
196
+ type: "object",
197
+ required: ["role", "reason"],
198
+ properties: {
199
+ role: { type: ["string", "null"] },
200
+ reason: text,
201
+ to: {},
202
+ detail: {}
203
+ },
204
+ additionalProperties: false
205
+ }
206
+ },
207
+ alternatives: strings,
208
+ token: text,
209
+ trusted: { type: "boolean" },
210
+ call: { enum: [
211
+ "can",
212
+ "decide",
213
+ "assert",
214
+ "filter",
215
+ "endpoint",
216
+ "adapter",
217
+ "approval",
218
+ "simulate",
219
+ "explain"
220
+ ] },
221
+ adapter: text,
222
+ model: id,
223
+ phase: { enum: [
224
+ "requested",
225
+ "resolved",
226
+ "expired",
227
+ "cancelled"
228
+ ] },
229
+ counts: {
230
+ type: "object",
231
+ required: [
232
+ "granted",
233
+ "denied",
234
+ "approvalRequired"
235
+ ],
236
+ properties: {
237
+ granted: {
238
+ type: "integer",
239
+ minimum: 0
240
+ },
241
+ denied: {
242
+ type: "integer",
243
+ minimum: 0
244
+ },
245
+ approvalRequired: {
246
+ type: "integer",
247
+ minimum: 0
248
+ }
249
+ },
250
+ additionalProperties: false
251
+ }
252
+ },
253
+ additionalProperties: false
254
+ });
255
+ const DIRECTORY_EVENT_SCHEMA = family("directory", "PermDock directory event", "A DirectoryEvent, wire format v1: the data of com.permdock.directory.* CloudEvents.", {
256
+ type: "object",
257
+ required: [
258
+ "type",
259
+ "at",
260
+ "source",
261
+ "operation",
262
+ "tenant",
263
+ "resource",
264
+ "credential"
265
+ ],
266
+ properties: {
267
+ x: appData,
268
+ type: { const: "directory" },
269
+ at: instant,
270
+ source: text,
271
+ operation: { enum: [
272
+ "create",
273
+ "replace",
274
+ "patch",
275
+ "delete"
276
+ ] },
277
+ tenant: id,
278
+ resource: {
279
+ type: "object",
280
+ required: ["type", "id"],
281
+ properties: {
282
+ type: { enum: ["User", "Group"] },
283
+ id
284
+ },
285
+ additionalProperties: false
286
+ },
287
+ credential: { oneOf: [{
288
+ type: "object",
289
+ required: ["kind"],
290
+ properties: { kind: { const: "token" } },
291
+ additionalProperties: false
292
+ }, {
293
+ type: "object",
294
+ required: ["kind"],
295
+ properties: {
296
+ kind: { const: "jwt" },
297
+ iss: text
298
+ },
299
+ additionalProperties: false
300
+ }] },
301
+ active: { type: "boolean" }
302
+ },
303
+ additionalProperties: false
304
+ });
305
+ const MEMBERSHIP_EVENT_SCHEMA = family("membership", "PermDock membership event", "A MembershipEvent, wire format v1: the data of com.permdock.membership.* CloudEvents.", {
306
+ type: "object",
307
+ required: [
308
+ "type",
309
+ "at",
310
+ "source",
311
+ "operation",
312
+ "principal",
313
+ "roles"
314
+ ],
315
+ properties: {
316
+ x: appData,
317
+ type: { const: "membership" },
318
+ at: instant,
319
+ source: text,
320
+ operation: { enum: [
321
+ "added",
322
+ "removed",
323
+ "changed"
324
+ ] },
325
+ principal: ref,
326
+ scope: text,
327
+ id: text,
328
+ within,
329
+ via: text,
330
+ expiresAt: instant,
331
+ roles: {
332
+ type: "object",
333
+ required: ["added", "removed"],
334
+ properties: {
335
+ added: strings,
336
+ removed: strings
337
+ },
338
+ additionalProperties: false
339
+ },
340
+ by: actor
341
+ },
342
+ additionalProperties: false
343
+ });
344
+ const CREDENTIAL_EVENT_SCHEMA = family("credential", "PermDock credential event", "A CredentialEvent, wire format v1: the data of com.permdock.credential.* CloudEvents.", {
345
+ type: "object",
346
+ required: [
347
+ "type",
348
+ "at",
349
+ "source",
350
+ "operation",
351
+ "credential",
352
+ "principal"
353
+ ],
354
+ properties: {
355
+ x: appData,
356
+ type: { const: "credential" },
357
+ at: instant,
358
+ source: text,
359
+ operation: { enum: [
360
+ "created",
361
+ "used",
362
+ "rotated",
363
+ "revoked"
364
+ ] },
365
+ credential: {
366
+ type: "object",
367
+ required: ["id", "kind"],
368
+ properties: {
369
+ id,
370
+ kind: credentialKind
371
+ },
372
+ additionalProperties: false
373
+ },
374
+ principal: ref,
375
+ tenant: text,
376
+ expiresAt: instant,
377
+ by: actor,
378
+ sample: {
379
+ type: "number",
380
+ exclusiveMinimum: 0,
381
+ maximum: 1
382
+ }
383
+ },
384
+ additionalProperties: false
385
+ });
386
+ const ACCESS_EVENT_SCHEMA = family("access", "PermDock support access event", "An AccessEvent, wire format v1: the data of com.permdock.support-session.* CloudEvents.", {
387
+ type: "object",
388
+ required: [
389
+ "type",
390
+ "at",
391
+ "source",
392
+ "operation",
393
+ "tenant",
394
+ "principal",
395
+ "via",
396
+ "roles"
397
+ ],
398
+ properties: {
399
+ x: appData,
400
+ type: { const: "access" },
401
+ at: instant,
402
+ source: text,
403
+ operation: { enum: [
404
+ "started",
405
+ "ended",
406
+ "revoked"
407
+ ] },
408
+ tenant: id,
409
+ principal: ref,
410
+ via: text,
411
+ roles: strings,
412
+ member: {
413
+ type: "object",
414
+ required: ["group"],
415
+ properties: { group: text },
416
+ additionalProperties: false
417
+ },
418
+ expiresAt: instant,
419
+ grantedBy: text,
420
+ reason: text,
421
+ actor,
422
+ session: {
423
+ type: "object",
424
+ required: ["id", "principal"],
425
+ properties: {
426
+ id,
427
+ principal: id
428
+ },
429
+ additionalProperties: false
430
+ },
431
+ permissions: strings
432
+ },
433
+ additionalProperties: false
434
+ });
435
+ const AUTOMATION_EVENT_SCHEMA = family("automation", "PermDock automation event", "An AutomationEvent, wire format v1: the data of com.permdock.automation.* CloudEvents.", {
436
+ type: "object",
437
+ required: [
438
+ "type",
439
+ "at",
440
+ "source",
441
+ "operation",
442
+ "automation",
443
+ "principal",
444
+ "publishedBy",
445
+ "permissions"
446
+ ],
447
+ properties: {
448
+ x: appData,
449
+ type: { const: "automation" },
450
+ at: instant,
451
+ source: text,
452
+ operation: { enum: [
453
+ "published",
454
+ "changed",
455
+ "revoked",
456
+ "run"
457
+ ] },
458
+ automation: {
459
+ type: "object",
460
+ required: [
461
+ "id",
462
+ "version",
463
+ "mode"
464
+ ],
465
+ properties: {
466
+ id,
467
+ version: { type: ["integer", "string"] },
468
+ mode: { enum: ["publisher", "service"] },
469
+ name: text
470
+ },
471
+ additionalProperties: false
472
+ },
473
+ principal: ref,
474
+ publishedBy: id,
475
+ tenant: text,
476
+ roles: strings,
477
+ permissions: strings,
478
+ run: ref,
479
+ by: actor
480
+ },
481
+ additionalProperties: false
482
+ });
483
+ const CATALOG_EVENT_SCHEMA = family("catalog", "PermDock catalog event", "The data of com.permdock.catalog.* CloudEvents, wire format v1: a catalog publish or a drift against live hosted grants.", {
484
+ type: "object",
485
+ required: ["kind", "fingerprint"],
486
+ properties: {
487
+ kind: { enum: ["publish", "drift"] },
488
+ fingerprint: id,
489
+ previous: text,
490
+ findings: {
491
+ type: "array",
492
+ items: { oneOf: [
493
+ {
494
+ type: "object",
495
+ required: ["code", "permission"],
496
+ properties: {
497
+ code: { enum: [
498
+ "permission-removed",
499
+ "not-hostable",
500
+ "grantee-removed",
501
+ "approval-tightened"
502
+ ] },
503
+ permission: text,
504
+ grant: text
505
+ },
506
+ additionalProperties: false
507
+ },
508
+ {
509
+ type: "object",
510
+ required: [
511
+ "code",
512
+ "permission",
513
+ "operation",
514
+ "previous",
515
+ "risk"
516
+ ],
517
+ properties: {
518
+ code: { const: "operation-risk-raised" },
519
+ permission: text,
520
+ operation: text,
521
+ previous: risk,
522
+ risk
523
+ },
524
+ additionalProperties: false
525
+ },
526
+ {
527
+ type: "object",
528
+ required: [
529
+ "code",
530
+ "permission",
531
+ "operation"
532
+ ],
533
+ properties: {
534
+ code: { const: "operation-approval-removed" },
535
+ permission: text,
536
+ operation: text
537
+ },
538
+ additionalProperties: false
539
+ }
540
+ ] }
541
+ }
542
+ },
543
+ additionalProperties: false
544
+ });
545
+ const DELIVERY_EVENT_SCHEMA = family("delivery", "PermDock delivery event", "A DeliveryEvent, wire format v1: the data of com.permdock.delivery.* CloudEvents.", {
546
+ type: "object",
547
+ required: [
548
+ "type",
549
+ "at",
550
+ "source",
551
+ "operation",
552
+ "channel",
553
+ "delivery"
554
+ ],
555
+ properties: {
556
+ x: appData,
557
+ type: { const: "delivery" },
558
+ at: instant,
559
+ source: text,
560
+ operation: { enum: [
561
+ "sent",
562
+ "delivered",
563
+ "bounced",
564
+ "complained",
565
+ "failed"
566
+ ] },
567
+ channel: { enum: [
568
+ "email",
569
+ "chat",
570
+ "webhook"
571
+ ] },
572
+ delivery: {
573
+ type: "object",
574
+ required: ["id", "key"],
575
+ properties: {
576
+ id,
577
+ key: id
578
+ },
579
+ additionalProperties: false
580
+ },
581
+ recipient: {
582
+ type: "object",
583
+ properties: {
584
+ principal: ref,
585
+ trusted: { const: true }
586
+ },
587
+ additionalProperties: false
588
+ },
589
+ permission: id,
590
+ tenant: text,
591
+ category: { enum: [
592
+ "transactional",
593
+ "notification",
594
+ "security",
595
+ "approval"
596
+ ] },
597
+ approval: id,
598
+ provider: {
599
+ type: "object",
600
+ required: ["name"],
601
+ properties: {
602
+ name: id,
603
+ id: text
604
+ },
605
+ additionalProperties: false
606
+ },
607
+ cause: { enum: [
608
+ "denied",
609
+ "unlinked",
610
+ "no-transport",
611
+ "no-message",
612
+ "invalid-recipient",
613
+ "invalid-message",
614
+ "rate-limited",
615
+ "quota-exceeded",
616
+ "unauthorized",
617
+ "unavailable",
618
+ "suppressed",
619
+ "rejected"
620
+ ] },
621
+ retryable: { type: "boolean" },
622
+ reason: text
623
+ },
624
+ additionalProperties: false
625
+ });
626
+ /** Every sink event family's schema, keyed by the event's `type`. */
627
+ const SINK_EVENT_SCHEMAS = Object.freeze({
628
+ decision: DECISION_EVENT_SCHEMA,
629
+ directory: DIRECTORY_EVENT_SCHEMA,
630
+ membership: MEMBERSHIP_EVENT_SCHEMA,
631
+ credential: CREDENTIAL_EVENT_SCHEMA,
632
+ access: ACCESS_EVENT_SCHEMA,
633
+ automation: AUTOMATION_EVENT_SCHEMA,
634
+ delivery: DELIVERY_EVENT_SCHEMA
635
+ });
636
+ //#endregion
637
+ //#region src/core/sink.ts
638
+ /**
639
+ * The closed list of CloudEvents `type` values, `com.permdock.<family>` or
640
+ * `com.permdock.<family>.<operation>`. `RESERVED_CLOUD_EVENT_TYPES` are named
641
+ * for later releases and nothing emits them yet.
642
+ */
643
+ const CLOUD_EVENT_TYPES = Object.freeze({
644
+ decision: "com.permdock.decision",
645
+ approvalRequested: "com.permdock.approval.requested",
646
+ approvalResolved: "com.permdock.approval.resolved",
647
+ approvalExpired: "com.permdock.approval.expired",
648
+ approvalCancelled: "com.permdock.approval.cancelled",
649
+ membershipAdded: "com.permdock.membership.added",
650
+ membershipRemoved: "com.permdock.membership.removed",
651
+ membershipChanged: "com.permdock.membership.changed",
652
+ credentialCreated: "com.permdock.credential.created",
653
+ credentialUsed: "com.permdock.credential.used",
654
+ credentialRotated: "com.permdock.credential.rotated",
655
+ credentialRevoked: "com.permdock.credential.revoked",
656
+ directoryCreated: "com.permdock.directory.created",
657
+ directoryReplaced: "com.permdock.directory.replaced",
658
+ directoryPatched: "com.permdock.directory.patched",
659
+ directoryDeleted: "com.permdock.directory.deleted",
660
+ catalogPublished: "com.permdock.catalog.published",
661
+ catalogDrifted: "com.permdock.catalog.drifted",
662
+ supportSessionStarted: "com.permdock.support-session.started",
663
+ supportSessionEnded: "com.permdock.support-session.ended",
664
+ automationPublished: "com.permdock.automation.published",
665
+ automationChanged: "com.permdock.automation.changed",
666
+ automationRevoked: "com.permdock.automation.revoked",
667
+ automationRun: "com.permdock.automation.run",
668
+ deliverySent: "com.permdock.delivery.sent",
669
+ deliveryDelivered: "com.permdock.delivery.delivered",
670
+ deliveryBounced: "com.permdock.delivery.bounced",
671
+ deliveryComplained: "com.permdock.delivery.complained",
672
+ deliveryFailed: "com.permdock.delivery.failed"
673
+ });
674
+ /** Types named for a later release; a receiver refuses them until then. None are reserved now. */
675
+ const RESERVED_CLOUD_EVENT_TYPES = Object.freeze([]);
676
+ /** The CloudEvents JSON format media type for one event (structured mode). */
677
+ const CLOUDEVENTS_CONTENT_TYPE = "application/cloudevents+json";
678
+ /** The CloudEvents JSON batch format media type: a JSON array of events. */
679
+ const CLOUDEVENTS_BATCH_CONTENT_TYPE = "application/cloudevents-batch+json";
680
+ const ABSOLUTE_URI = /^[A-Za-z][A-Za-z\d+.-]*:\S+$/u;
681
+ const TRACEPARENT = /^[\da-f]{2}-[\da-f]{32}-[\da-f]{16}-[\da-f]{2}$/u;
682
+ /** `true` for an RFC 3986 absolute URI: a scheme, a colon and no whitespace. */
683
+ function isAbsoluteUri(value) {
684
+ return typeof value === "string" && ABSOLUTE_URI.test(value);
685
+ }
686
+ /** `true` for a W3C Trace Context `traceparent` whose ids are not all zero. */
687
+ function isTraceparent(value) {
688
+ if (typeof value !== "string" || !TRACEPARENT.test(value)) return false;
689
+ const [version, trace, span] = value.split("-");
690
+ return version !== "ff" && !/^0+$/u.test(trace ?? "") && !/^0+$/u.test(span ?? "");
691
+ }
692
+ function approvalType(phase) {
693
+ switch (phase) {
694
+ case "requested": return CLOUD_EVENT_TYPES.approvalRequested;
695
+ case "resolved": return CLOUD_EVENT_TYPES.approvalResolved;
696
+ case "expired": return CLOUD_EVENT_TYPES.approvalExpired;
697
+ case "cancelled": return CLOUD_EVENT_TYPES.approvalCancelled;
698
+ default: return phase;
699
+ }
700
+ }
701
+ function directoryType(operation) {
702
+ switch (operation) {
703
+ case "create": return CLOUD_EVENT_TYPES.directoryCreated;
704
+ case "replace": return CLOUD_EVENT_TYPES.directoryReplaced;
705
+ case "patch": return CLOUD_EVENT_TYPES.directoryPatched;
706
+ case "delete": return CLOUD_EVENT_TYPES.directoryDeleted;
707
+ default: return operation;
708
+ }
709
+ }
710
+ function membershipType(operation) {
711
+ switch (operation) {
712
+ case "added": return CLOUD_EVENT_TYPES.membershipAdded;
713
+ case "removed": return CLOUD_EVENT_TYPES.membershipRemoved;
714
+ case "changed": return CLOUD_EVENT_TYPES.membershipChanged;
715
+ default: return operation;
716
+ }
717
+ }
718
+ function credentialType(operation) {
719
+ switch (operation) {
720
+ case "created": return CLOUD_EVENT_TYPES.credentialCreated;
721
+ case "used": return CLOUD_EVENT_TYPES.credentialUsed;
722
+ case "rotated": return CLOUD_EVENT_TYPES.credentialRotated;
723
+ case "revoked": return CLOUD_EVENT_TYPES.credentialRevoked;
724
+ default: return operation;
725
+ }
726
+ }
727
+ function automationType(operation) {
728
+ switch (operation) {
729
+ case "published": return CLOUD_EVENT_TYPES.automationPublished;
730
+ case "changed": return CLOUD_EVENT_TYPES.automationChanged;
731
+ case "revoked": return CLOUD_EVENT_TYPES.automationRevoked;
732
+ case "run": return CLOUD_EVENT_TYPES.automationRun;
733
+ default: return operation;
734
+ }
735
+ }
736
+ function deliveryType(operation) {
737
+ switch (operation) {
738
+ case "sent": return CLOUD_EVENT_TYPES.deliverySent;
739
+ case "delivered": return CLOUD_EVENT_TYPES.deliveryDelivered;
740
+ case "bounced": return CLOUD_EVENT_TYPES.deliveryBounced;
741
+ case "complained": return CLOUD_EVENT_TYPES.deliveryComplained;
742
+ case "failed": return CLOUD_EVENT_TYPES.deliveryFailed;
743
+ default: return operation;
744
+ }
745
+ }
746
+ /**
747
+ * The CloudEvents `type` of a sink event. A support access event maps onto the
748
+ * `support-session` family, and a consent the tenant pulls early (`revoked`)
749
+ * ends the session like a lapse; `data.operation` keeps the difference.
750
+ */
751
+ function cloudEventType(event) {
752
+ switch (event.type) {
753
+ case "directory": return directoryType(event.operation);
754
+ case "membership": return membershipType(event.operation);
755
+ case "credential": return credentialType(event.operation);
756
+ case "access": return event.operation === "started" ? CLOUD_EVENT_TYPES.supportSessionStarted : CLOUD_EVENT_TYPES.supportSessionEnded;
757
+ case "automation": return automationType(event.operation);
758
+ case "delivery": return deliveryType(event.operation);
759
+ case "decision": return event.phase === void 0 ? CLOUD_EVENT_TYPES.decision : approvalType(event.phase);
760
+ default: return event;
761
+ }
762
+ }
763
+ function cloudEventSubject(event) {
764
+ if (event.type === "directory") return event.resource.id;
765
+ if (event.type === "membership" || event.type === "access") return event.principal.id;
766
+ if (event.type === "credential") return event.credential.id;
767
+ if (event.type === "delivery") return event.delivery.id;
768
+ if (event.type === "automation") return event.automation.id;
769
+ return event.permission;
770
+ }
771
+ /** `x` as given, after checking it is a plain JSON object; a builder throws on bad input. */
772
+ function checkedX(x) {
773
+ if (x !== void 0) assertAppData(x, "x of a sink event");
774
+ return x;
775
+ }
776
+ /**
777
+ * An `automation` sink event for `automation`. `run` carries the run id and
778
+ * belongs on `run` events only.
779
+ */
780
+ function automationEvent(input) {
781
+ if (input.run === void 0 !== (input.operation !== "run")) throw new TypeError("PermDock: automationEvent needs run on run events only");
782
+ const { automation } = input;
783
+ return compact({
784
+ type: "automation",
785
+ at: requireEventInstant(input.at, "at") ?? isoNow(),
786
+ source: input.source ?? "permdock",
787
+ operation: input.operation,
788
+ automation: compact({
789
+ id: automation.id,
790
+ version: automation.version,
791
+ mode: automation.mode,
792
+ name: automation.name
793
+ }),
794
+ principal: { id: automation.principal },
795
+ publishedBy: automation.publishedBy,
796
+ tenant: automation.tenant,
797
+ roles: automation.roles,
798
+ permissions: automation.permissions,
799
+ run: input.run === void 0 ? void 0 : { id: input.run },
800
+ by: input.by,
801
+ x: checkedX(input.x)
802
+ });
803
+ }
804
+ /**
805
+ * The `access` event of a `SupportSession`: `started` when it begins,
806
+ * `ended` when it lapses, `revoked` when it is ended early. `principal` is
807
+ * the staff member, as for a support membership.
808
+ */
809
+ function supportSessionEvent(input) {
810
+ const { session } = input;
811
+ return compact({
812
+ type: "access",
813
+ at: requireEventInstant(input.at, "at") ?? isoNow(),
814
+ source: input.source ?? "permdock",
815
+ operation: input.operation,
816
+ tenant: session.tenant,
817
+ principal: { id: session.actor },
818
+ via: "support-session",
819
+ roles: [],
820
+ expiresAt: requireEventInstant(session.expiresAt, "expiresAt"),
821
+ grantedBy: session.approvedBy,
822
+ reason: session.reason,
823
+ session: {
824
+ id: session.id,
825
+ principal: session.principal
826
+ },
827
+ permissions: session.permissions,
828
+ x: checkedX(input.x)
829
+ });
830
+ }
831
+ /**
832
+ * A `credential` sink event for `credential`. `sample` belongs on `used`
833
+ * events only and must be in `(0, 1]`.
834
+ */
835
+ function credentialEvent(input) {
836
+ const sample = input.sample;
837
+ if (sample !== void 0 && (input.operation !== "used" || !Number.isFinite(sample) || sample <= 0 || sample > 1)) throw new RangeError("PermDock: sample is a number in (0, 1] on used events only");
838
+ const { credential } = input;
839
+ return compact({
840
+ type: "credential",
841
+ at: requireEventInstant(input.at, "at") ?? isoNow(),
842
+ source: input.source ?? "permdock",
843
+ operation: input.operation,
844
+ credential: {
845
+ id: credential.id,
846
+ kind: credential.kind
847
+ },
848
+ principal: { id: credential.principal },
849
+ tenant: credential.tenant,
850
+ expiresAt: requireEventInstant(credential.expiresAt, "expiresAt"),
851
+ by: input.by,
852
+ sample,
853
+ x: checkedX(input.x)
854
+ });
855
+ }
856
+ function membershipEvent(input) {
857
+ if (input.scope === void 0 !== (input.id === void 0)) throw new TypeError("PermDock: membershipEvent needs scope and id together");
858
+ if (input.scope === void 0 && input.within !== void 0) throw new TypeError("PermDock: membershipEvent within needs a scope");
859
+ return compact({
860
+ type: "membership",
861
+ at: requireEventInstant(input.at, "at") ?? isoNow(),
862
+ source: input.source,
863
+ operation: input.operation,
864
+ principal: input.principal,
865
+ scope: input.scope,
866
+ id: input.id,
867
+ within: input.within,
868
+ via: input.via,
869
+ expiresAt: requireEventInstant(input.expiresAt, "expiresAt"),
870
+ roles: input.roles,
871
+ by: input.by,
872
+ x: checkedX(input.x)
873
+ });
874
+ }
875
+ /**
876
+ * A support-access lifecycle event. `started` on consent, `ended` when the
877
+ * session lapses, `revoked` when the tenant pulls consent early. It never
878
+ * decides; the app writes and revokes the membership.
879
+ */
880
+ function accessEvent(input) {
881
+ return compact({
882
+ type: "access",
883
+ at: requireEventInstant(input.at, "at") ?? isoNow(),
884
+ source: input.source,
885
+ operation: input.operation,
886
+ tenant: input.tenant,
887
+ principal: input.principal,
888
+ via: input.via ?? "support",
889
+ roles: input.roles,
890
+ member: input.member,
891
+ expiresAt: requireEventInstant(input.expiresAt, "expiresAt"),
892
+ grantedBy: input.grantedBy,
893
+ reason: input.reason,
894
+ actor: input.actor,
895
+ x: checkedX(input.x)
896
+ });
897
+ }
898
+ /**
899
+ * Wraps a sink event in a CloudEvents 1.0 envelope. Throws a `TypeError` when
900
+ * `source` is not an absolute URI or `traceparent` is not W3C Trace Context.
901
+ */
902
+ function toCloudEvent(event, options) {
903
+ if (!isAbsoluteUri(options.source)) throw new TypeError("PermDock: a CloudEvents source is an absolute URI");
904
+ if (options.traceparent !== void 0 && !isTraceparent(options.traceparent)) throw new TypeError("PermDock: traceparent is not W3C Trace Context");
905
+ return compact({
906
+ specversion: "1.0",
907
+ type: cloudEventType(event),
908
+ source: options.source,
909
+ subject: cloudEventSubject(event),
910
+ id: options.id ?? globalThis.crypto.randomUUID(),
911
+ time: event.at,
912
+ datacontenttype: "application/json",
913
+ dataschema: EVENT_SCHEMA_IDS[event.type],
914
+ traceparent: options.traceparent,
915
+ tracestate: options.traceparent === void 0 ? void 0 : options.tracestate,
916
+ data: event
917
+ });
918
+ }
919
+ /**
920
+ * Signs sink events as an offline evidence export: a compact JWS with
921
+ * `typ: vnd.permdock.evidence+jwt` whose `events` claim holds CloudEvents.
922
+ * Live deliveries use Standard Webhooks instead.
923
+ */
924
+ function signDecisionBatch(events, signer, options) {
925
+ const source = options.source;
926
+ return signer.sign({ events: events.map((event) => toCloudEvent(event, { source })) }, compact({
927
+ typ: "vnd.permdock.evidence+jwt",
928
+ audience: options.audience
929
+ }));
930
+ }
931
+ function memoryDecisionSink(options = {}) {
932
+ const capacity = options.capacity ?? 1e4;
933
+ const buffer = [];
934
+ const signed = [];
935
+ if (options.signer !== void 0 && !isAbsoluteUri(options.source)) throw new TypeError("PermDock: a CloudEvents source is an absolute URI");
936
+ return {
937
+ write(events) {
938
+ buffer.push(...events);
939
+ if (buffer.length > capacity) buffer.splice(0, buffer.length - capacity);
940
+ if (options.signer === void 0) return;
941
+ return signDecisionBatch(events, options.signer, compact({
942
+ audience: options.audience,
943
+ source: options.source
944
+ })).then((batch) => {
945
+ signed.push(batch);
946
+ }).catch(() => void 0);
947
+ },
948
+ events() {
949
+ return [...buffer];
950
+ },
951
+ batches() {
952
+ return [...signed];
953
+ }
954
+ };
955
+ }
956
+ //#endregion
957
+ export { EVENT_SCHEMA_IDS as C, DIRECTORY_EVENT_SCHEMA as S, SINK_EVENT_SCHEMAS as T, AUTOMATION_EVENT_SCHEMA as _, accessEvent as a, DECISION_EVENT_SCHEMA as b, credentialEvent as c, membershipEvent as d, memoryDecisionSink as f, ACCESS_EVENT_SCHEMA as g, toCloudEvent as h, RESERVED_CLOUD_EVENT_TYPES as i, isAbsoluteUri as l, supportSessionEvent as m, CLOUDEVENTS_CONTENT_TYPE as n, automationEvent as o, signDecisionBatch as p, CLOUD_EVENT_TYPES as r, cloudEventType as s, CLOUDEVENTS_BATCH_CONTENT_TYPE as t, isTraceparent as u, CATALOG_EVENT_SCHEMA as v, MEMBERSHIP_EVENT_SCHEMA as w, DELIVERY_EVENT_SCHEMA as x, CREDENTIAL_EVENT_SCHEMA as y };