permdock 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/README.md +37 -35
  2. package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
  3. package/dist/a2a/index.d.ts +8 -6
  4. package/dist/a2a/index.js +21 -31
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -23
  10. package/dist/ai-sdk/index.js +38 -21
  11. package/dist/app-data-MuyzVqX8.js +60 -0
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  19. package/dist/arazzo-B6lebmiQ.js +36 -0
  20. package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
  21. package/dist/args-IIolxxKA.js +197 -0
  22. package/dist/astro/index.d.ts +43 -0
  23. package/dist/astro/index.js +27 -0
  24. package/dist/audience-Dg8XsRaO.js +55 -0
  25. package/dist/auth-DRLEizbL.js +178 -0
  26. package/dist/authzen/index.d.ts +26 -6
  27. package/dist/authzen/index.js +228 -75
  28. package/dist/automation-BMZPIVUM.d.ts +114 -0
  29. package/dist/automation-DVjOckjV.js +157 -0
  30. package/dist/better-auth/index.d.ts +8 -6
  31. package/dist/better-auth/index.js +11 -23
  32. package/dist/better-supabase/index.d.ts +438 -86
  33. package/dist/better-supabase/index.js +1027 -184
  34. package/dist/bind--9EFVYWF.d.ts +38 -0
  35. package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
  36. package/dist/body-CH5of8Ne.js +10 -0
  37. package/dist/body-text-QcXok_SI.js +52 -0
  38. package/dist/build-instance-BMnAudHn.js +52 -0
  39. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
  40. package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
  41. package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
  42. package/dist/casbin-Cr7RLtA3.js +30 -0
  43. package/dist/casbin-Dyu2gnUD.js +234 -0
  44. package/dist/casl-64gpT-8x.js +24 -0
  45. package/dist/casl-DjEDhTCP.js +299 -0
  46. package/dist/catalog/index.d.ts +74 -2
  47. package/dist/catalog/index.js +51 -2
  48. package/dist/catalog-BECMPrwc.js +100 -0
  49. package/dist/catalog-DjhMYYCq.js +1 -0
  50. package/dist/catalog-R_A__RsH.js +52 -0
  51. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
  52. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  53. package/dist/chat/index.d.ts +2 -0
  54. package/dist/chat/index.js +224 -0
  55. package/dist/chat-sdk/index.d.ts +87 -0
  56. package/dist/chat-sdk/index.js +197 -0
  57. package/dist/claims-map-7oQ3ue4X.js +13 -0
  58. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  59. package/dist/claude-agent/index.d.ts +7 -14
  60. package/dist/claude-agent/index.js +26 -30
  61. package/dist/clerk/index.d.ts +9 -8
  62. package/dist/clerk/index.js +15 -45
  63. package/dist/cli/bin.js +36 -17
  64. package/dist/cli/index.d.ts +20 -6
  65. package/dist/cli/index.js +164 -4
  66. package/dist/cloud/index.d.ts +102 -63
  67. package/dist/cloud/index.js +240 -347
  68. package/dist/cloud-CIoHNevm.js +87 -0
  69. package/dist/codemod-Bmj9dWMH.js +37 -0
  70. package/dist/codemod-Cxvvc70T.js +2084 -0
  71. package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
  72. package/dist/collect-DloHbDVa.js +55 -0
  73. package/dist/collect-FlXJlhus.js +1 -0
  74. package/dist/command-L8EstFNm.js +6 -0
  75. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  76. package/dist/compile/index.d.ts +1 -1
  77. package/dist/compile/index.js +1 -2
  78. package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
  79. package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  80. package/dist/completion-BqhRBJD8.js +143 -0
  81. package/dist/config-B46rm9sc.js +26 -0
  82. package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
  83. package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
  84. package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
  85. package/dist/constants-DcJABbLW.js +20 -0
  86. package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
  87. package/dist/convex/index.d.ts +11 -10
  88. package/dist/convex/index.js +18 -18
  89. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  90. package/dist/create-BDS7wc3y.d.ts +138 -0
  91. package/dist/create-BFfm17UA.d.ts +110 -0
  92. package/dist/create-BWRSXgOF.js +403 -0
  93. package/dist/create-C3b4B5eF.js +130 -0
  94. package/dist/create-DnrmLnLW.js +323 -0
  95. package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
  96. package/dist/credentials-DPyHmYz5.js +74 -0
  97. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  98. package/dist/delegation-DaXVdDhM.js +286 -0
  99. package/dist/delegation-input-FTxMK3ji.js +19 -0
  100. package/dist/delivery/index.d.ts +5 -0
  101. package/dist/delivery/index.js +5 -0
  102. package/dist/delivery-DCAgNyCn.js +499 -0
  103. package/dist/delivery-event-xX4obB8F.js +40 -0
  104. package/dist/denied-text-D8jDHgsl.d.ts +19 -0
  105. package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
  106. package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
  107. package/dist/device-BARQ8eYG.js +193 -0
  108. package/dist/diff-CxZo9pTq.js +37 -0
  109. package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
  110. package/dist/doctor-CxiwSfqH.js +44 -0
  111. package/dist/doctor-DFjUxf2f.js +2361 -0
  112. package/dist/drizzle/index.d.ts +5 -3
  113. package/dist/drizzle/index.js +6 -14
  114. package/dist/elysia/index.d.ts +16 -13
  115. package/dist/elysia/index.js +14 -13
  116. package/dist/env-DJZrPjRi.js +8 -0
  117. package/dist/errors-BDUwg2qC.js +27 -0
  118. package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
  119. package/dist/errors-BWXBMaKK.d.ts +11 -0
  120. package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  121. package/dist/errors-CWTY6uih.js +143 -0
  122. package/dist/evaluate-_R8QkWaf.js +1732 -0
  123. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  124. package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
  125. package/dist/eve/index.d.ts +12 -16
  126. package/dist/eve/index.js +23 -29
  127. package/dist/event-time-CsegxXxB.js +23 -0
  128. package/dist/expiry-D4_YKRKD.js +52 -0
  129. package/dist/express/index.d.ts +13 -10
  130. package/dist/express/index.js +14 -12
  131. package/dist/fastify/index.d.ts +26 -13
  132. package/dist/fastify/index.js +17 -36
  133. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  134. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  135. package/dist/fields-D9tPVUUS.js +203 -0
  136. package/dist/files-C5ZI27eV.js +124 -0
  137. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  138. package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
  139. package/dist/flags-C3DktBDY.js +86 -0
  140. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
  141. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  142. package/dist/grantee-Cn1HyUsI.js +254 -0
  143. package/dist/grantee-conditions-CcXf8hMM.js +271 -0
  144. package/dist/grantee-match-DHArqY82.js +142 -0
  145. package/dist/h3/index.d.ts +37 -0
  146. package/dist/h3/index.js +35 -0
  147. package/dist/headers-BIjfMaoC.js +8 -0
  148. package/dist/headers-CIbDTUTK.d.ts +7 -0
  149. package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
  150. package/dist/hono/index.d.ts +12 -9
  151. package/dist/hono/index.js +14 -13
  152. package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
  153. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  154. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  155. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  156. package/dist/http-DXJ37RDA.js +46 -0
  157. package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
  158. package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
  159. package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
  160. package/dist/index-BcHcPyIo.d.ts +110 -0
  161. package/dist/index-CaxrMD1A.d.ts +1 -0
  162. package/dist/index-Chrs5fQ-.d.ts +210 -0
  163. package/dist/index-CxGUswIC.d.ts +431 -0
  164. package/dist/index-D8EovfsP.d.ts +91 -0
  165. package/dist/index-DOVf7RJv.d.ts +900 -0
  166. package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
  167. package/dist/index.d.ts +20 -14
  168. package/dist/index.js +33 -23
  169. package/dist/init-DeMYsnYJ.js +96 -0
  170. package/dist/init-GG6Jh8HD.js +95 -0
  171. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  172. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  173. package/dist/instant-BluqDvyS.js +19 -0
  174. package/dist/internals-Dk8A8fX3.js +17 -0
  175. package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
  176. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  177. package/dist/jwt/index.d.ts +18 -11
  178. package/dist/jwt/index.js +166 -145
  179. package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
  180. package/dist/kysely/index.d.ts +5 -3
  181. package/dist/kysely/index.js +6 -14
  182. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  183. package/dist/load-BxEtwlBS.js +1 -0
  184. package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
  185. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  186. package/dist/login-Dfe5RlYk.js +68 -0
  187. package/dist/login-imhuwvn3.js +254 -0
  188. package/dist/manifest-C8IzW3Do.js +42 -0
  189. package/dist/manifest-CtKR3GXL.js +370 -0
  190. package/dist/manifest-json-CAGzls-C.js +9 -0
  191. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  192. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  193. package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
  194. package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
  195. package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
  196. package/dist/mcp/index.d.ts +36 -9
  197. package/dist/mcp/index.js +476 -448
  198. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
  199. package/dist/nest/index.d.ts +12 -9
  200. package/dist/nest/index.js +20 -20
  201. package/dist/next/index.d.ts +40 -20
  202. package/dist/next/index.js +37 -39
  203. package/dist/next/plugin.d.ts +1 -1
  204. package/dist/next/plugin.js +2 -2
  205. package/dist/node/index.d.ts +10 -10
  206. package/dist/node/index.js +7 -9
  207. package/dist/ocsf-BFp-PZZA.js +126 -0
  208. package/dist/openai/index.d.ts +9 -16
  209. package/dist/openai/index.js +18 -25
  210. package/dist/openapi/index.d.ts +3 -3
  211. package/dist/openapi/index.js +1 -1
  212. package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
  213. package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
  214. package/dist/openapi-ahr8rHu3.js +138 -0
  215. package/dist/operation-findings-DgATDpvh.js +36 -0
  216. package/dist/operations-CxybZErY.d.ts +59 -0
  217. package/dist/orpc/index.d.ts +13 -10
  218. package/dist/orpc/index.js +23 -20
  219. package/dist/otel/index.d.ts +3 -2
  220. package/dist/otel/index.js +53 -27
  221. package/dist/output-Dyw8fyPF.js +88 -0
  222. package/dist/output-files-B3IZJksC.js +1 -0
  223. package/dist/output-files-DhRBBE4n.js +138 -0
  224. package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
  225. package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
  226. package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
  227. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
  228. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  229. package/dist/parse-request-D_tUXG6M.js +26 -0
  230. package/dist/paths-DXSHAMIa.js +42 -0
  231. package/dist/pdp/index.d.ts +7 -3
  232. package/dist/pdp/index.js +47 -29
  233. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  234. package/dist/peer-CRvC7Hg1.js +1 -0
  235. package/dist/permdock-B9JxkBwC.js +868 -0
  236. package/dist/permdock-D7eeLJER.d.ts +502 -0
  237. package/dist/permission-registry-Br4jSNVi.js +385 -0
  238. package/dist/permissions-B-wCP5ZC.js +30 -0
  239. package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
  240. package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  241. package/dist/policies-CO1oOymN.js +295 -0
  242. package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  243. package/dist/policy-DLZJ5gAp.js +399 -0
  244. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  245. package/dist/policy-module-CTlwMvLI.js +89 -0
  246. package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
  247. package/dist/postgrest-CW0IqC-U.js +566 -0
  248. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  249. package/dist/powersync-BHfuehf3.js +62 -0
  250. package/dist/powersync-CbzkqL_M.js +1 -0
  251. package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
  252. package/dist/preset/index.d.ts +146 -0
  253. package/dist/preset/index.js +1 -0
  254. package/dist/preset-DZdU0tne.js +1768 -0
  255. package/dist/principal-source-pHneukrx.js +103 -0
  256. package/dist/prisma/index.d.ts +6 -3
  257. package/dist/prisma/index.js +6 -12
  258. package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
  259. package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  260. package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
  261. package/dist/problem-types-CJ2325SZ.js +5 -0
  262. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  263. package/dist/protected-DEPHc2xV.d.ts +38 -0
  264. package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
  265. package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
  266. package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  267. package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
  268. package/dist/pull-BgIfno6w.js +256 -0
  269. package/dist/pull-ByOks_Tg.js +1 -0
  270. package/dist/push-CmFVBOeI.js +116 -0
  271. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  272. package/dist/pushed-policy-DobP7AHI.js +238 -0
  273. package/dist/react/index.d.ts +8 -8
  274. package/dist/react/index.js +6 -6
  275. package/dist/react/provider-client.d.ts +1 -1
  276. package/dist/react/provider-client.js +1 -2
  277. package/dist/react-native/index.d.ts +24 -63
  278. package/dist/react-native/index.js +45 -27
  279. package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
  280. package/dist/relation-walk-3OyDBF0S.js +186 -0
  281. package/dist/relations-BnCWnJGI.js +163 -0
  282. package/dist/renames-CGj7YwcQ.js +175 -0
  283. package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  284. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  285. package/dist/request-context-BTRTG7OT.js +71 -0
  286. package/dist/request-context-C2_1lchh.d.ts +5 -0
  287. package/dist/request-schema-CMreVuFM.js +148 -0
  288. package/dist/resend/index.d.ts +126 -0
  289. package/dist/resend/index.js +379 -0
  290. package/dist/resource-relations-D_jw0BFx.js +243 -0
  291. package/dist/retire-CALjIQ7e.js +240 -0
  292. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  293. package/dist/rls-BA8an5Ap.js +336 -0
  294. package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
  295. package/dist/role-builder-CXbis5-X.js +623 -0
  296. package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
  297. package/dist/run-CNsApDpd.js +1 -0
  298. package/dist/run-DOfMtc9V.js +723 -0
  299. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  300. package/dist/run-ticket-sxFI6LAk.js +337 -0
  301. package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
  302. package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
  303. package/dist/scan-BOI5tJ-6.js +29 -0
  304. package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
  305. package/dist/schema-yLuBWWsh.js +130 -0
  306. package/dist/scim/index.d.ts +2 -2
  307. package/dist/scim/index.js +1 -2
  308. package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
  309. package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
  310. package/dist/server/index.d.ts +13 -134
  311. package/dist/server/index.js +13 -10
  312. package/dist/server-DqCT4CgZ.js +453 -0
  313. package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
  314. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  315. package/dist/shared-CD11nBbC.js +304 -0
  316. package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
  317. package/dist/signals-D3NcTKUS.js +32 -0
  318. package/dist/sink-BEZSlMS_.js +957 -0
  319. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  320. package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
  321. package/dist/skills-CTYwkl44.js +51 -0
  322. package/dist/snapshot-CXUWfsNy.js +269 -0
  323. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  324. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  325. package/dist/solid/index.d.ts +24 -25
  326. package/dist/solid/index.js +41 -11
  327. package/dist/solid-start/index.d.ts +52 -0
  328. package/dist/solid-start/index.js +49 -0
  329. package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
  330. package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
  331. package/dist/sql-B5T1IL83.js +55 -0
  332. package/dist/src-DLfUWFAI.js +1851 -0
  333. package/dist/ssf/index.d.ts +4 -4
  334. package/dist/ssf/index.js +440 -106
  335. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  336. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  337. package/dist/storage-C2bWdvJH.js +132 -0
  338. package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
  339. package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
  340. package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
  341. package/dist/stores-ClZUgeoP.d.ts +30 -0
  342. package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  343. package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
  344. package/dist/style-DiKWnAvn.js +1 -0
  345. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  346. package/dist/subject-BGoM5o8B.js +17 -0
  347. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  348. package/dist/supabase/index.d.ts +23 -106
  349. package/dist/supabase/index.js +5 -4
  350. package/dist/supabase/middleware.d.ts +13 -6
  351. package/dist/supabase/middleware.js +16 -11
  352. package/dist/supabase-9pqI57pW.js +92 -0
  353. package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
  354. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  355. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
  356. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  357. package/dist/support-session-C6xJQYut.js +158 -0
  358. package/dist/svelte/Protected.svelte +11 -4
  359. package/dist/svelte/index.d.ts +7 -7
  360. package/dist/svelte/index.js +26 -12
  361. package/dist/svelte/runtime.d.ts +10 -3
  362. package/dist/svelte/runtime.js +4 -3
  363. package/dist/svelte/source.d.ts +7 -7
  364. package/dist/svelte/source.js +5 -5
  365. package/dist/sveltekit/index.d.ts +51 -0
  366. package/dist/sveltekit/index.js +27 -0
  367. package/dist/tanstack-start/index.d.ts +51 -0
  368. package/dist/tanstack-start/index.js +40 -0
  369. package/dist/target-Bw37TFNA.js +51 -0
  370. package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
  371. package/dist/terminal/index.d.ts +11 -9
  372. package/dist/terminal/index.js +36 -316
  373. package/dist/testing/index.d.ts +391 -106
  374. package/dist/testing/index.js +4574 -1286
  375. package/dist/testing/saas/index.d.ts +9 -8
  376. package/dist/testing/saas/index.js +2 -2
  377. package/dist/testing/saas/permissions.d.ts +1 -1
  378. package/dist/testing/saas/permissions.js +1 -2
  379. package/dist/text-BMFRfBqc.js +8 -0
  380. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  381. package/dist/thenable-yD7SabqG.js +31 -0
  382. package/dist/time-DkWjdL98.js +71 -0
  383. package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
  384. package/dist/tool-refusal-CMLN5xhn.js +41 -0
  385. package/dist/trpc/index.d.ts +12 -9
  386. package/dist/trpc/index.js +18 -17
  387. package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
  388. package/dist/types-BNORmDM8.d.ts +172 -0
  389. package/dist/types-BjV-fqcA.d.ts +57 -0
  390. package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
  391. package/dist/types-C8-KNsFf.d.ts +107 -0
  392. package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  393. package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
  394. package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
  395. package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
  396. package/dist/types-DX0LaKTb.d.ts +157 -0
  397. package/dist/types-DiQjupG2.d.ts +332 -0
  398. package/dist/types-DqzsnlSA.js +67 -0
  399. package/dist/types-_sHy8BQf.d.ts +65 -0
  400. package/dist/types-fbZ7JEXr.d.ts +89 -0
  401. package/dist/types-tIgIeIKJ.d.ts +66 -0
  402. package/dist/unplugin/index.d.ts +1 -1
  403. package/dist/unplugin/index.js +2 -2
  404. package/dist/usage-CHOtwL19.js +1 -0
  405. package/dist/usage-DHtE8j4E.js +32 -0
  406. package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
  407. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  408. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  409. package/dist/validity-CZ7-y0Cj.js +79 -0
  410. package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
  411. package/dist/verify-DbCL9bnB.js +1770 -0
  412. package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
  413. package/dist/version-DXkYUISx.js +1 -0
  414. package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
  415. package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
  416. package/dist/vue/index.d.ts +25 -21
  417. package/dist/vue/index.js +25 -9
  418. package/dist/waiter-BGUtGYoU.js +67 -0
  419. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  420. package/dist/watch-Cb-NcaUw.js +1 -0
  421. package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
  422. package/dist/webmcp/index.d.ts +2 -2
  423. package/dist/webmcp/index.js +13 -37
  424. package/dist/where-scope-Dv-WTP-w.js +306 -0
  425. package/dist/who-can-D0QoYbEb.js +364 -0
  426. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  427. package/dist/wire-denial-C7PaVYEM.js +27 -0
  428. package/dist/workflow/index.d.ts +5 -0
  429. package/dist/workflow/index.js +223 -0
  430. package/dist/workflow-sdk/index.d.ts +56 -0
  431. package/dist/workflow-sdk/index.js +78 -0
  432. package/dist/wrap-Bd1Tejur.d.ts +15 -0
  433. package/dist/wrap-gX61EtpB.js +27 -0
  434. package/package.json +140 -41
  435. package/schemas/access-event-v1.json +118 -0
  436. package/schemas/approval-request-v1.json +34 -1
  437. package/schemas/approval-signature-v1.json +94 -0
  438. package/schemas/automation-event-v1.json +113 -0
  439. package/schemas/capability-v1.json +84 -0
  440. package/schemas/catalog-event-v1.json +87 -0
  441. package/schemas/catalog-v1.json +129 -12
  442. package/schemas/cli-commands-v1.json +164 -0
  443. package/schemas/cli-result-v1.json +96 -0
  444. package/schemas/cloud-api-v1.json +5407 -0
  445. package/schemas/connector-v1.json +408 -0
  446. package/schemas/credential-event-v1.json +81 -0
  447. package/schemas/credential-v1.json +134 -0
  448. package/schemas/decision-event-v1.json +288 -0
  449. package/schemas/delivery-event-v1.json +117 -0
  450. package/schemas/directory-event-v1.json +85 -0
  451. package/schemas/evidence-export-v1.json +54 -0
  452. package/schemas/membership-event-v1.json +93 -0
  453. package/schemas/policy-v1.json +68 -0
  454. package/schemas/pushed-policy-v1.json +236 -0
  455. package/schemas/run-v1.json +162 -0
  456. package/schemas/snapshot-v1.json +138 -0
  457. package/schemas/supabase-claims-v1.json +4 -4
  458. package/schemas/supabase-manifest-v1.json +5 -1
  459. package/schemas/support-session-v1.json +111 -0
  460. package/skills/permdock/SKILL.md +16 -12
  461. package/skills/permdock-agents/SKILL.md +40 -23
  462. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  463. package/skills/permdock-agents/references/runtimes.md +22 -18
  464. package/skills/permdock-approvals/SKILL.md +29 -13
  465. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  466. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  467. package/skills/permdock-audit/SKILL.md +3 -3
  468. package/skills/permdock-credentials/SKILL.md +5 -5
  469. package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
  470. package/skills/permdock-data/SKILL.md +6 -6
  471. package/skills/permdock-data/references/queries-and-rls.md +13 -8
  472. package/skills/permdock-data/references/relationships.md +3 -3
  473. package/skills/permdock-tenancy/SKILL.md +20 -7
  474. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  475. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  476. package/skills/permdock-wire/SKILL.md +18 -12
  477. package/skills/permdock-wire/references/adapters.md +146 -50
  478. package/skills/permdock-wire/references/policy-options.md +15 -6
  479. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  480. package/dist/approvals-DbYAuNkG.js +0 -224
  481. package/dist/arazzo-C9chp3ST.js +0 -54
  482. package/dist/bind-C_ob3LKa.d.ts +0 -25
  483. package/dist/catalog-CRW5Mx_B.js +0 -2
  484. package/dist/catalog-CYj-mX2O.js +0 -48
  485. package/dist/catalog-DWF5cYqB.js +0 -55
  486. package/dist/cloud-CfwZ39Rl.js +0 -50
  487. package/dist/cloud-DWLXO2af.js +0 -118
  488. package/dist/collect-CHB22Sx4.js +0 -83
  489. package/dist/collect-DSWOk19R.js +0 -2
  490. package/dist/commands-BeaGNj_o.js +0 -97
  491. package/dist/config-ir40y8m0.js +0 -36
  492. package/dist/create-CMwIl-w2.js +0 -253
  493. package/dist/delegation-D8pUEuce.js +0 -103
  494. package/dist/diff-C9RDjjhs.js +0 -48
  495. package/dist/doctor-Djh6JDEk.js +0 -53
  496. package/dist/doctor-DvH0IQff.js +0 -1194
  497. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  498. package/dist/duration-xK2jGFVc.js +0 -25
  499. package/dist/errors-CWfoNg9N.js +0 -47
  500. package/dist/errors-DRnGZHzF.js +0 -30
  501. package/dist/evaluation-items-CfCCejQd.js +0 -40
  502. package/dist/expiry-BoBJ8Tvc.js +0 -7
  503. package/dist/fields-BMl1RxoX.js +0 -26
  504. package/dist/grantee-Cv5Sogfv.js +0 -602
  505. package/dist/headers-BZSDieNT.js +0 -6
  506. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  507. package/dist/ids-DC4V4CFu.js +0 -18
  508. package/dist/index-0nNqHspG.d.ts +0 -6
  509. package/dist/index-BNc7Wer_.d.ts +0 -483
  510. package/dist/index-C7Tw7MaW.d.ts +0 -201
  511. package/dist/instance-options-Dhhcnm3y.js +0 -22
  512. package/dist/load-DwJUafYN.js +0 -2
  513. package/dist/manifest-iaoBXHKc.js +0 -783
  514. package/dist/map-AcxK9o_D.js +0 -147
  515. package/dist/may-use-DndQ5tQ-.js +0 -77
  516. package/dist/openapi-CQTsgKoB.js +0 -164
  517. package/dist/permdock-CbgvLnuo.js +0 -3479
  518. package/dist/permissions-DVoF6dMt.js +0 -662
  519. package/dist/policy-xyWg7QdR.js +0 -1122
  520. package/dist/powersync-CrBX8hY6.js +0 -2
  521. package/dist/powersync-DE19b9dT.js +0 -62
  522. package/dist/protected-BdnIEFkY.d.ts +0 -27
  523. package/dist/protected-xAr24FEC.d.ts +0 -40
  524. package/dist/relations-cjOL01hZ.js +0 -505
  525. package/dist/rls-P-BeBx0n.js +0 -238
  526. package/dist/rls-graph-CHwx0V8q.js +0 -435
  527. package/dist/rls-ownership-DcYlZ09B.js +0 -843
  528. package/dist/rls-shared-Cewd_-zI.js +0 -495
  529. package/dist/rls-verify-CMv9H3wV.js +0 -746
  530. package/dist/run-BWc9qqvE.js +0 -174
  531. package/dist/server-DlZ28Oz5.js +0 -268
  532. package/dist/sink-B1fZzIMf.d.ts +0 -104
  533. package/dist/sink-Bd9PSyfq.js +0 -141
  534. package/dist/skills-C5CbhhpG.js +0 -56
  535. package/dist/snapshot-Enxd0n-s.js +0 -975
  536. package/dist/sql-xdg5f4Fi.js +0 -27
  537. package/dist/src-BDwEZWrZ.js +0 -568
  538. package/dist/store-jOBYpiXC.d.ts +0 -36
  539. package/dist/stores-C0IMQrGI.d.ts +0 -52
  540. package/dist/subject-C6dLxqHU.js +0 -24
  541. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  542. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  543. package/dist/supabase-s4o9s1O1.js +0 -83
  544. package/dist/thenable-okc2xDsj.js +0 -10
  545. package/dist/types-BnIEz1sU.d.ts +0 -48
  546. package/dist/types-Bvc4oWT6.d.ts +0 -9
  547. package/dist/types-CKNSyIf_.d.ts +0 -52
  548. package/dist/types-Cq_H8N_X.d.ts +0 -197
  549. package/dist/usage-B0YuTQRO.js +0 -42
  550. package/dist/usage-DorAJiU_.js +0 -2
  551. package/dist/vocabulary-DA8a8zif.d.ts +0 -56
  552. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -0,0 +1,453 @@
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
+ import { a as ownRecord } from "./paths-DXSHAMIa.js";
3
+ import { m as annotationsFor, n as findPermission } from "./permission-registry-Br4jSNVi.js";
4
+ import { n as isThenable } from "./thenable-yD7SabqG.js";
5
+ import { f as nowMillis, g as secondsOf, m as rfc3339, o as epochSeconds, u as isoAt } from "./time-DkWjdL98.js";
6
+ import { t as bytesToBase64Url } from "./sha256-D9ihqmvd.js";
7
+ import { n as parseSupportSession } from "./support-session-C6xJQYut.js";
8
+ import { t as anonymousSubject } from "./subject-BGoM5o8B.js";
9
+ import { c as credentialEvent } from "./sink-BEZSlMS_.js";
10
+ import { i as credentialTenant, n as credentialPolicyViolation, o as isFeedId, r as credentialSubject, s as parseCredential } from "./credential-DM2um3ha.js";
11
+ //#region src/server/credentials.ts
12
+ const PREFIX = "pdk_";
13
+ const ID = /^[\w-]{1,128}$/u;
14
+ const TAIL = /^[A-Za-z\d]{49}$/u;
15
+ const ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
16
+ const SECRET_LENGTH = 43;
17
+ const CHECKSUM_LENGTH = 6;
18
+ const MAX_KEY = 182;
19
+ const CRC_TABLE = (() => {
20
+ const table = /* @__PURE__ */ new Uint32Array(256);
21
+ for (let index = 0; index < 256; index += 1) {
22
+ let value = index;
23
+ for (let bit = 0; bit < 8; bit += 1) value = value & 1 ? 3988292384 ^ value >>> 1 : value >>> 1;
24
+ table[index] = value >>> 0;
25
+ }
26
+ return table;
27
+ })();
28
+ /** CRC-32 (IEEE 802.3) of the key's ASCII bytes, as 6 characters of `alphabet`. */
29
+ function checksum(text, alphabet) {
30
+ let crc = 4294967295;
31
+ for (let index = 0; index < text.length; index += 1) crc = (CRC_TABLE[(crc ^ (text.codePointAt(index) ?? 0)) & 255] ?? 0) ^ crc >>> 8;
32
+ let value = (crc ^ 4294967295) >>> 0;
33
+ let out = "";
34
+ const base = alphabet.length;
35
+ for (let index = 0; index < CHECKSUM_LENGTH; index += 1) {
36
+ out = (alphabet[value % base] ?? "") + out;
37
+ value = Math.floor(value / base);
38
+ }
39
+ return out;
40
+ }
41
+ /**
42
+ * Splits `pdk_<id>_<secret><checksum>`: `id` is 1 to 128 of `A-Z a-z 0-9 _ -`,
43
+ * the secret 43 base62 characters and the checksum the 6 base62 characters of
44
+ * the CRC-32 of everything before it. Anything else, including a checksum
45
+ * that does not match, is `undefined`.
46
+ */
47
+ function parseApiKey(key) {
48
+ if (typeof key !== "string" || key.length > MAX_KEY || !key.startsWith(PREFIX)) return;
49
+ const body = key.slice(4);
50
+ const cut = body.lastIndexOf("_");
51
+ if (cut <= 0) return;
52
+ const id = body.slice(0, cut);
53
+ const tail = body.slice(cut + 1);
54
+ if (!ID.test(id) || !TAIL.test(tail)) return;
55
+ const secret = tail.slice(0, SECRET_LENGTH);
56
+ return tail.slice(SECRET_LENGTH) === checksum(`${PREFIX}${id}_${secret}`, ALPHABET) ? {
57
+ id,
58
+ secret
59
+ } : void 0;
60
+ }
61
+ const FEED_PREFIX = "pdfeed_";
62
+ const FEED_ALPHABET = "abcdefghijklmnopqrstuvwxyz234567";
63
+ const FEED_SECRET_LENGTH = 26;
64
+ const FEED_TAIL = /* @__PURE__ */ new RegExp(`^[a-z2-7]{${String(32)}}$`, "u");
65
+ /**
66
+ * Splits `pdfeed_<id>_<secret><checksum>`. `id` is `isFeedId`, the secret is
67
+ * 26 lowercase base32 characters and the checksum is 6 more. A checksum that
68
+ * does not match is `undefined`.
69
+ */
70
+ function parseFeedKey(key) {
71
+ if (typeof key !== "string" || key.length > 56 || !key.startsWith(FEED_PREFIX)) return;
72
+ const body = key.slice(7);
73
+ const cut = body.lastIndexOf("_");
74
+ if (cut <= 0) return;
75
+ const id = body.slice(0, cut);
76
+ const tail = body.slice(cut + 1);
77
+ if (!isFeedId(id) || !FEED_TAIL.test(tail)) return;
78
+ const secret = tail.slice(0, FEED_SECRET_LENGTH);
79
+ return tail.slice(FEED_SECRET_LENGTH) === checksum(`${FEED_PREFIX}${id}_${secret}`, FEED_ALPHABET) ? {
80
+ id,
81
+ secret
82
+ } : void 0;
83
+ }
84
+ /**
85
+ * A fresh `pdfeed_<id>_<secret><checksum>`: 26 lowercase base32 characters
86
+ * (130 bits) and a 6-character CRC-32 checksum. The whole key is lowercase.
87
+ */
88
+ function generateFeedKey(id) {
89
+ if (!isFeedId(id)) throw new TypeError("PermDock: a feed id is 1 to 16 of a-z, 0-9 and -");
90
+ let secret = "";
91
+ const bytes = /* @__PURE__ */ new Uint8Array(64);
92
+ while (secret.length < FEED_SECRET_LENGTH) {
93
+ globalThis.crypto.getRandomValues(bytes);
94
+ for (const byte of bytes) if (secret.length < FEED_SECRET_LENGTH) secret += FEED_ALPHABET[byte % 32];
95
+ }
96
+ const key = `${FEED_PREFIX}${id}_${secret}`;
97
+ return `${key}${checksum(key, FEED_ALPHABET)}`;
98
+ }
99
+ /**
100
+ * A fresh `pdk_<id>_<secret><checksum>`: a 43-character base62 secret (about
101
+ * 256 bits) and a 6-character CRC-32 checksum, so a secret scanner can tell a
102
+ * real key from a lookalike without calling the issuer.
103
+ */
104
+ function generateApiKey(id) {
105
+ if (!ID.test(id)) throw new TypeError("PermDock: an API key id is 1 to 128 of A-Z, a-z, 0-9, _ and -");
106
+ let secret = "";
107
+ const bytes = /* @__PURE__ */ new Uint8Array(64);
108
+ while (secret.length < SECRET_LENGTH) {
109
+ globalThis.crypto.getRandomValues(bytes);
110
+ for (const byte of bytes) if (byte < 248 && secret.length < SECRET_LENGTH) secret += ALPHABET[byte % 62];
111
+ }
112
+ const key = `${PREFIX}${id}_${secret}`;
113
+ return `${key}${checksum(key, ALPHABET)}`;
114
+ }
115
+ /** base64url SHA-256 of the whole key, the value to store and compare. */
116
+ async function hashApiKey(key) {
117
+ const digest = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(key));
118
+ return bytesToBase64Url(new Uint8Array(digest));
119
+ }
120
+ function sameHash(left, right) {
121
+ if (left.length !== right.length) return false;
122
+ let difference = 0;
123
+ for (let index = 0; index < left.length; index += 1) difference |= (left.codePointAt(index) ?? 0) ^ (right.codePointAt(index) ?? 0);
124
+ return difference === 0;
125
+ }
126
+ /**
127
+ * A `CredentialVerifier` over the application's own table: `find` looks a
128
+ * key up by the id in it, and the key's hash is compared in constant time.
129
+ * A record that is not a valid v1 credential, or whose id is not the key's,
130
+ * verifies to `null`. A throwing `find` propagates, so the resolver denies
131
+ * with `source-threw`.
132
+ */
133
+ function apiKeyVerifier(options) {
134
+ return Object.freeze({
135
+ ...options.touch === void 0 ? {} : { touch: options.touch },
136
+ async verify(secret) {
137
+ const parts = secret.startsWith(FEED_PREFIX) ? parseFeedKey(secret) : parseApiKey(secret);
138
+ if (parts === void 0) return null;
139
+ const stored = await options.find(parts.id);
140
+ if (stored === null || stored === void 0) return null;
141
+ const credential = parseCredential(stored.credential);
142
+ if (credential === void 0 || credential.id !== parts.id || typeof stored.hash !== "string" || !sameHash(await hashApiKey(secret), stored.hash)) return null;
143
+ return credential;
144
+ }
145
+ });
146
+ }
147
+ function write(sink, event) {
148
+ try {
149
+ const written = sink.write(event);
150
+ if (isThenable(written)) Promise.resolve(written).catch(() => void 0);
151
+ } catch {}
152
+ }
153
+ /**
154
+ * In-process credentials for tests and single-replica apps. `issue`, `rotate`
155
+ * and `revoke` write `credential` events to `sink` when one is given.
156
+ */
157
+ function memoryCredentialStore(options = {}) {
158
+ const records = /* @__PURE__ */ new Map();
159
+ const used = /* @__PURE__ */ new Map();
160
+ const verifier = apiKeyVerifier({ find: (id) => records.get(id) });
161
+ const emit = (operation, credential) => {
162
+ if (options.sink !== void 0) write(options.sink, [credentialEvent(compact({
163
+ operation,
164
+ credential,
165
+ source: options.source
166
+ }))]);
167
+ };
168
+ const store = async (credential) => {
169
+ const key = credential.kind === "feed" ? generateFeedKey(credential.id) : generateApiKey(credential.id);
170
+ records.set(credential.id, {
171
+ credential,
172
+ hash: await hashApiKey(key)
173
+ });
174
+ return key;
175
+ };
176
+ return Object.freeze({
177
+ verify: (secret) => verifier.verify(secret),
178
+ touch(id, at) {
179
+ if (records.has(id)) used.set(id, isoAt(at.epochMilliseconds));
180
+ },
181
+ lastUsedAt(id) {
182
+ return used.get(id);
183
+ },
184
+ async issue(input) {
185
+ const credential = parseCredential(input);
186
+ if (credential === void 0) throw new TypeError("PermDock: not a valid v1 credential");
187
+ if (records.has(credential.id)) throw new Error(`PermDock: credential '${credential.id}' exists`);
188
+ const key = await store(credential);
189
+ emit("created", credential);
190
+ return key;
191
+ },
192
+ async rotate(id) {
193
+ const current = records.get(id);
194
+ if (current === void 0) return;
195
+ const key = await store(current.credential);
196
+ emit("rotated", current.credential);
197
+ return key;
198
+ },
199
+ revoke(id) {
200
+ const current = records.get(id);
201
+ if (current === void 0) return false;
202
+ records.delete(id);
203
+ used.delete(id);
204
+ emit("revoked", current.credential);
205
+ return true;
206
+ },
207
+ list() {
208
+ return [...records.values()].map((record) => record.credential);
209
+ }
210
+ });
211
+ }
212
+ function isPrincipalRecord(value) {
213
+ return value !== null && typeof value === "object" && !Array.isArray(value) && Object.hasOwn(value, "id") && "id" in value && typeof value.id === "string";
214
+ }
215
+ async function checkStores(options, credential, active) {
216
+ try {
217
+ const tenant = credentialTenant(credential, active);
218
+ const policy = options.settings === void 0 || tenant === void 0 ? void 0 : (await options.settings.settingsFor(tenant))?.credentials;
219
+ if (policy !== void 0 && credentialPolicyViolation(credential, policy) !== void 0) return {
220
+ ok: false,
221
+ cause: "credential-policy"
222
+ };
223
+ if (options.revoked !== void 0 && await options.revoked(credential.id)) return {
224
+ ok: false,
225
+ cause: "credential-revoked"
226
+ };
227
+ if (credential.kind !== "user" || options.principals === void 0) return { ok: true };
228
+ const owner = await options.principals.principal(credential.principal, tenant === void 0 ? {} : { tenant });
229
+ if (!isPrincipalRecord(owner)) return {
230
+ ok: false,
231
+ cause: "owner-unavailable"
232
+ };
233
+ return {
234
+ ok: true,
235
+ owner
236
+ };
237
+ } catch {
238
+ return { ok: false };
239
+ }
240
+ }
241
+ function touch(verifier, id) {
242
+ if (verifier.touch === void 0) return;
243
+ try {
244
+ const touched = verifier.touch(id, { epochMilliseconds: nowMillis() });
245
+ if (isThenable(touched)) Promise.resolve(touched).catch(() => void 0);
246
+ } catch {}
247
+ }
248
+ function sampled(sample) {
249
+ if (sample === 1) return true;
250
+ const draw = /* @__PURE__ */ new Uint32Array(1);
251
+ globalThis.crypto.getRandomValues(draw);
252
+ return (draw[0] ?? 0) / 4294967296 < sample;
253
+ }
254
+ function reportUse(options, credential) {
255
+ const sample = options.sample ?? 1;
256
+ if (options.sink === void 0 || !Number.isFinite(sample) || sample <= 0 || sample > 1 || !sampled(sample)) return;
257
+ write(options.sink, [credentialEvent(compact({
258
+ operation: "used",
259
+ credential,
260
+ source: options.source,
261
+ sample
262
+ }))]);
263
+ }
264
+ function anonymous() {
265
+ return anonymousSubject();
266
+ }
267
+ /**
268
+ * Resolves an opaque API key (`pdk_<id>_<secret>`) into the subject its
269
+ * credential acts as. Every failure (a malformed or unknown key, a record
270
+ * that is not a valid credential, expiry, a tenant policy the key breaks, a
271
+ * revoked id, a missing owner, a throwing verifier, source or callback) is
272
+ * the anonymous subject, never a throw.
273
+ */
274
+ async function subjectFromApiKey(key, options) {
275
+ const tenant = options.tenant;
276
+ if (typeof key !== "string" || key.length === 0) return anonymous();
277
+ const deny = (cause, reason = "invalid-token") => {
278
+ try {
279
+ options.onAuth?.(compact({
280
+ reason,
281
+ cause,
282
+ source: "api-key",
283
+ requestId: options.requestId
284
+ }));
285
+ } catch {}
286
+ return anonymous();
287
+ };
288
+ const feedKey = key.startsWith(FEED_PREFIX);
289
+ const parts = feedKey ? parseFeedKey(key) : parseApiKey(key);
290
+ if (parts === void 0) return deny("malformed");
291
+ let verified;
292
+ try {
293
+ verified = await options.verifier.verify(key);
294
+ } catch {
295
+ return deny(void 0, "source-threw");
296
+ }
297
+ if (verified === null || verified === void 0) return deny("unknown-credential");
298
+ const credential = parseCredential(verified);
299
+ if (credential === void 0 || credential.id !== parts.id || feedKey !== (credential.kind === "feed") || options.kinds !== void 0 && !options.kinds.includes(credential.kind)) return deny("invalid-claims");
300
+ if (credential.expiresAt !== void 0 && Date.parse(credential.expiresAt) <= nowMillis()) return deny("expired");
301
+ const checked = await checkStores(options, credential, tenant);
302
+ if (!checked.ok) return checked.cause === void 0 ? deny(void 0, "source-threw") : deny(checked.cause);
303
+ const subject = credentialSubject(credential, compact({
304
+ permissions: options.permissions,
305
+ owner: checked.owner
306
+ }));
307
+ if (subject.principal === null) return deny("owner-unavailable");
308
+ reportUse(options, credential);
309
+ touch(options.verifier, credential.id);
310
+ return subject;
311
+ }
312
+ //#endregion
313
+ //#region src/server/support-session.ts
314
+ const SUPPORT_SESSION_TYP = "vnd.permdock.support-session+jwt";
315
+ /**
316
+ * Signs a granted `SupportSession` as a `vnd.permdock.support-session+jwt`
317
+ * (`sub` the viewed principal, `act` the support actor, `jti` the session
318
+ * id) that expires with the session. Throws a `TypeError` for a record
319
+ * `parseSupportSession` refuses.
320
+ */
321
+ function signSupportSession(session, signer, options = {}) {
322
+ const parsed = parseSupportSession(session);
323
+ if (parsed === void 0) throw new TypeError("PermDock: invalid support session");
324
+ return signer.sign(compact({
325
+ v: 1,
326
+ sub: parsed.principal,
327
+ act: {
328
+ sub: parsed.actor,
329
+ kind: "support"
330
+ },
331
+ tenant: parsed.tenant,
332
+ reason: parsed.reason,
333
+ permissions: parsed.permissions,
334
+ approved_by: parsed.approvedBy,
335
+ reference: parsed.reference
336
+ }), compact({
337
+ typ: SUPPORT_SESSION_TYP,
338
+ audience: options.audience,
339
+ expiresAt: secondsOf(parsed.expiresAt),
340
+ issuedAt: secondsOf(parsed.startedAt),
341
+ jti: parsed.id
342
+ }));
343
+ }
344
+ function sessionOf(claims) {
345
+ const record = ownRecord(claims);
346
+ const act = ownRecord(record?.["act"]);
347
+ const { iat, exp } = record ?? {};
348
+ if (record === void 0 || act === void 0 || act["kind"] !== "support" || act["act"] !== void 0 || typeof iat !== "number" || typeof exp !== "number" || !Number.isSafeInteger(iat) || !Number.isSafeInteger(exp)) return;
349
+ return parseSupportSession({
350
+ v: record["v"],
351
+ id: record["jti"],
352
+ principal: record["sub"],
353
+ actor: act["sub"],
354
+ tenant: record["tenant"],
355
+ reason: record["reason"],
356
+ permissions: record["permissions"],
357
+ startedAt: rfc3339(iat),
358
+ expiresAt: rfc3339(exp),
359
+ approvedBy: record["approved_by"],
360
+ reference: record["reference"]
361
+ });
362
+ }
363
+ async function load(principals, id, tenant) {
364
+ try {
365
+ const loaded = await principals.principal(id, { tenant });
366
+ const record = ownRecord(loaded);
367
+ if (record === void 0 || record["id"] !== id) return;
368
+ return loaded;
369
+ } catch {
370
+ return;
371
+ }
372
+ }
373
+ async function ended(sessions, id) {
374
+ if (sessions === void 0) return false;
375
+ try {
376
+ const live = ownRecord(await sessions.session(id));
377
+ return live === void 0 || live["id"] !== id || live["ended"] === true;
378
+ } catch {
379
+ return true;
380
+ }
381
+ }
382
+ /**
383
+ * Resolves a `vnd.permdock.support-session+jwt` into the subject each
384
+ * request of the session acts as: the viewed principal loaded live, a
385
+ * `support` actor, the session's permissions as the delegation and
386
+ * `context.supportSession`. The actor must still exist. Every failure is the
387
+ * anonymous subject, never a throw.
388
+ */
389
+ async function subjectFromSupportSession(token, options) {
390
+ if (typeof token !== "string" || token.length === 0) return anonymousSubject();
391
+ const deny = (cause) => {
392
+ try {
393
+ options.onAuth?.(compact({
394
+ reason: "invalid-token",
395
+ cause,
396
+ source: "support-session",
397
+ typ: SUPPORT_SESSION_TYP,
398
+ issuer: options.issuer,
399
+ requestId: options.requestId
400
+ }));
401
+ } catch {}
402
+ return anonymousSubject();
403
+ };
404
+ let session;
405
+ try {
406
+ const verified = await options.verifier.verify(token, compact({
407
+ typ: SUPPORT_SESSION_TYP,
408
+ audience: options.audience,
409
+ issuer: options.issuer,
410
+ clockTolerance: options.clockTolerance
411
+ }));
412
+ if (!verified.ok) return deny(verified.cause);
413
+ if (verified.header.typ?.toLowerCase().replace(/^application\//u, "") !== SUPPORT_SESSION_TYP) return deny("wrong-token-type");
414
+ session = sessionOf(verified.claims);
415
+ } catch {
416
+ return deny("malformed");
417
+ }
418
+ if (session === void 0) return deny("invalid-claims");
419
+ if ((secondsOf(session.expiresAt) ?? 0) <= epochSeconds()) return deny("expired");
420
+ if (await ended(options.sessions, session.id)) return deny("session-ended");
421
+ if (await load(options.principals, session.actor, session.tenant) === void 0) return deny("actor-unavailable");
422
+ const principal = await load(options.principals, session.principal, session.tenant);
423
+ if (principal === void 0) return deny("principal-unavailable");
424
+ const scopes = [];
425
+ let readOnly = true;
426
+ for (const key of session.permissions) {
427
+ const leaf = findPermission(options.permissions, key);
428
+ if (leaf === void 0) return deny("invalid-claims");
429
+ scopes.push(leaf.scope);
430
+ readOnly &&= annotationsFor(leaf).readOnlyHint;
431
+ }
432
+ return Object.freeze(compact({
433
+ principal: Object.freeze({
434
+ ...principal,
435
+ tenant: session.tenant
436
+ }),
437
+ actor: Object.freeze(compact({
438
+ id: session.actor,
439
+ kind: "support",
440
+ readOnly: readOnly || void 0
441
+ })),
442
+ delegation: Object.freeze({ scopes }),
443
+ context: Object.freeze({ supportSession: Object.freeze(compact({
444
+ id: session.id,
445
+ reason: session.reason,
446
+ approvedBy: session.approvedBy,
447
+ reference: session.reference
448
+ })) }),
449
+ expiresAt: secondsOf(session.expiresAt)
450
+ }));
451
+ }
452
+ //#endregion
453
+ export { generateFeedKey as a, parseApiKey as c, generateApiKey as i, parseFeedKey as l, subjectFromSupportSession as n, hashApiKey as o, apiKeyVerifier as r, memoryCredentialStore as s, signSupportSession as t, subjectFromApiKey as u };