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
@@ -1,174 +0,0 @@
1
- import { a as exitCodeOf, i as describeError, n as cliErrorKind, r as cliProblem } from "./errors-CWfoNg9N.js";
2
- import { o as cliVersion } from "./version-BvacVTZR.js";
3
- import { a as resolveCwd, i as readConfig } from "./config-BJiM-xAm.js";
4
- import { i as globalArgs, n as commands, o as resolveArgs, r as isCommand, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BeaGNj_o.js";
5
- import { stripVTControlCharacters } from "node:util";
6
- import { defineCommand, parseArgs, renderUsage, runCommand } from "citty";
7
- //#region src/cli/run.ts
8
- const NAMES = Object.keys(commands).filter(isCommand);
9
- const NO_CONFIG = {
10
- config: {},
11
- warnings: [],
12
- file: void 0
13
- };
14
- async function run(argv, options) {
15
- const stdoutChunks = [];
16
- const stderrChunks = [];
17
- const io = options?.io ?? {
18
- stdout: (text) => {
19
- stdoutChunks.push(text);
20
- },
21
- stderr: (text) => {
22
- stderrChunks.push(text);
23
- }
24
- };
25
- const writeOut = (text) => {
26
- const line = lined(text);
27
- io.stdout(line);
28
- if (options?.io !== void 0) stdoutChunks.push(line);
29
- };
30
- const writeErr = (text) => {
31
- const line = lined(text);
32
- io.stderr(line);
33
- if (options?.io !== void 0) stderrChunks.push(line);
34
- };
35
- const done = (code) => ({
36
- code,
37
- stdout: stdoutChunks.join(""),
38
- stderr: stderrChunks.join("")
39
- });
40
- const flags = beforeSeparator(argv);
41
- const globals = parseArgs([...flags], globalArgs);
42
- const json = globals.json === true;
43
- const color = io.color === true && globals.color !== false;
44
- const plain = (text) => color ? text : stripVTControlCharacters(text);
45
- const askedHelp = flags.includes("--help") || flags.includes("-h");
46
- const first = globals._[0];
47
- const name = first === "help" ? globals._[1] : first;
48
- let result;
49
- const configFile = stringArg(globals.config);
50
- const contextFor = (cwd, loaded = NO_CONFIG) => ({
51
- cwd,
52
- config: loaded.config,
53
- ...configFile === void 0 ? {} : { configFile },
54
- ...loaded.file === void 0 ? {} : { configPath: loaded.file },
55
- configWarnings: loaded.warnings,
56
- io,
57
- now: io.now?.() ?? /* @__PURE__ */ new Date(),
58
- json,
59
- color,
60
- interactive: io.interactive === true && !json && globals.yes !== true,
61
- report: (outcome) => {
62
- result = outcome;
63
- }
64
- });
65
- /** A failed run: text on stderr, or Problem Details on stdout under `--json`. */
66
- const fail = (kind, message, command) => {
67
- if (json) writeOut(JSON.stringify(cliProblem(kind, message, command), null, 2));
68
- else writeErr(message);
69
- return done(exitCodeOf(kind));
70
- };
71
- if (name !== void 0 && !isCommand(name)) return fail("usage", `unknown command '${name}'. Use ${new Intl.ListFormat("en-GB", { type: "disjunction" }).format(NAMES)}.`);
72
- if (name === void 0 && (flags.includes("--version") || flags.includes("-v"))) {
73
- writeOut(cliVersion());
74
- return done(0);
75
- }
76
- if (askedHelp || first === "help" || name === void 0) {
77
- const root = rootCommand();
78
- const usage = name === void 0 ? await renderUsage(root) : await renderUsage(await load(name, contextFor(options?.cwd ?? process.cwd())), root);
79
- if (name === void 0 && !askedHelp && first !== "help") {
80
- writeErr(plain(usage));
81
- return done(2);
82
- }
83
- writeOut(plain(usage));
84
- return done(0);
85
- }
86
- const cwd = resolveCwd(stringArg(globals.cwd), options?.cwd ?? process.cwd());
87
- let loaded;
88
- try {
89
- loaded = await readConfig(cwd, configFile);
90
- } catch (error) {
91
- return fail(cliErrorKind(error), describeError(error));
92
- }
93
- if (name !== "config") for (const warning of loaded.warnings) writeErr(`permdock: warning: ${warning}`);
94
- try {
95
- const command = await load(name, contextFor(cwd, loaded));
96
- const rawArgs = withoutCommand(argv, name);
97
- await runCommand(command, { rawArgs: normaliseValues(rawArgs, await resolveArgs(command)) });
98
- } catch (error) {
99
- if (!(error instanceof Error)) return fail("usage", String(error), name);
100
- if (error.name === "CLIError") return fail("usage", `${name}: ${stripVTControlCharacters(error.message)}`, name);
101
- return fail(cliErrorKind(error), error.message, name);
102
- }
103
- if (result === void 0) return done(0);
104
- if (json && result.code !== 0 && !isJson(result.output)) return fail(result.code === 2 ? "usage" : "failed", result.output, name);
105
- writeOut(result.output);
106
- return done(result.code);
107
- }
108
- /** The root help lists commands from a static table, so it loads none of them. */
109
- function rootCommand() {
110
- return defineCommand({
111
- meta: {
112
- name: "permdock",
113
- description: "Collect, export, diff and check the permissions a PermDock policy declares"
114
- },
115
- args: {
116
- ...globalArgs,
117
- version: {
118
- type: "boolean",
119
- alias: "v",
120
- description: "Print the permdock version"
121
- }
122
- },
123
- subCommands: Object.fromEntries(NAMES.map((name) => [name, defineCommand({ meta: {
124
- name,
125
- description: COMMAND_DESCRIPTIONS[name]
126
- } })]))
127
- });
128
- }
129
- async function load(name, ctx) {
130
- return (await commands[name]())(ctx);
131
- }
132
- function isJson(text) {
133
- try {
134
- JSON.parse(text);
135
- return true;
136
- } catch {
137
- return false;
138
- }
139
- }
140
- function lined(text) {
141
- return text.endsWith("\n") ? text : `${text}\n`;
142
- }
143
- function beforeSeparator(argv) {
144
- const end = argv.indexOf("--");
145
- return end === -1 ? argv : argv.slice(0, end);
146
- }
147
- /** argv with the command name removed, wherever the global flags put it. */
148
- function withoutCommand(argv, name) {
149
- const index = argv.findIndex((token, i) => token === name && argv[i - 1] !== "--cwd" && argv[i - 1] !== "--config");
150
- return argv.filter((_, i) => i !== index);
151
- }
152
- /**
153
- * A value never starts with `-` (bar `-` itself): `--out --check` is a bare
154
- * `--out` and `--check`, as it was before citty, which would take `--check`
155
- * as the value. A bare string flag reads as `''`; a bare enum flag keeps its
156
- * default.
157
- */
158
- function normaliseValues(rawArgs, def) {
159
- const out = [];
160
- for (const [i, token] of rawArgs.entries()) {
161
- if (token === "--") {
162
- out.push(...rawArgs.slice(i));
163
- break;
164
- }
165
- const arg = token.startsWith("--") ? def[token.slice(2)] : void 0;
166
- const next = rawArgs[i + 1];
167
- const bare = next === void 0 || next !== "-" && next.startsWith("-");
168
- if (arg?.type === "enum" && bare) continue;
169
- out.push(arg?.type === "string" && bare ? `${token}=` : token);
170
- }
171
- return out;
172
- }
173
- //#endregion
174
- export { run as t };
@@ -1,268 +0,0 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
2
- import { t as bytesToBase64Url } from "./sha256-BO0swRXL.js";
3
- import { n as isThenable } from "./thenable-okc2xDsj.js";
4
- import { t as anonymousSubject } from "./subject-C6dLxqHU.js";
5
- import { r as credentialEvent } from "./sink-Bd9PSyfq.js";
6
- import { i as credentialTenant, n as credentialPolicyViolation, o as parseCredential, r as credentialSubject } from "./credential-8P81ff4u.js";
7
- //#region src/server/credentials.ts
8
- const PREFIX = "pdk_";
9
- const ID = /^[\w-]{1,128}$/u;
10
- const TAIL = /^[A-Za-z\d]{49}$/u;
11
- const ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
12
- const SECRET_LENGTH = 43;
13
- const CHECKSUM_LENGTH = 6;
14
- const MAX_KEY = 182;
15
- const CRC_TABLE = (() => {
16
- const table = /* @__PURE__ */ new Uint32Array(256);
17
- for (let index = 0; index < 256; index += 1) {
18
- let value = index;
19
- for (let bit = 0; bit < 8; bit += 1) value = value & 1 ? 3988292384 ^ value >>> 1 : value >>> 1;
20
- table[index] = value >>> 0;
21
- }
22
- return table;
23
- })();
24
- /** CRC-32 (IEEE 802.3) of the key's ASCII bytes, as 6 base62 characters. */
25
- function checksum(text) {
26
- let crc = 4294967295;
27
- for (let index = 0; index < text.length; index += 1) crc = (CRC_TABLE[(crc ^ (text.codePointAt(index) ?? 0)) & 255] ?? 0) ^ crc >>> 8;
28
- let value = (crc ^ 4294967295) >>> 0;
29
- let out = "";
30
- for (let index = 0; index < CHECKSUM_LENGTH; index += 1) {
31
- out = (ALPHABET[value % 62] ?? "") + out;
32
- value = Math.floor(value / 62);
33
- }
34
- return out;
35
- }
36
- /**
37
- * Splits `pdk_<id>_<secret><checksum>`: `id` is 1 to 128 of `A-Z a-z 0-9 _ -`,
38
- * the secret 43 base62 characters and the checksum the 6 base62 characters of
39
- * the CRC-32 of everything before it. Anything else, including a checksum
40
- * that does not match, is `undefined`.
41
- */
42
- function parseApiKey(key) {
43
- if (typeof key !== "string" || key.length > MAX_KEY || !key.startsWith(PREFIX)) return;
44
- const body = key.slice(4);
45
- const cut = body.lastIndexOf("_");
46
- if (cut <= 0) return;
47
- const id = body.slice(0, cut);
48
- const tail = body.slice(cut + 1);
49
- if (!ID.test(id) || !TAIL.test(tail)) return;
50
- const secret = tail.slice(0, SECRET_LENGTH);
51
- return tail.slice(SECRET_LENGTH) === checksum(`${PREFIX}${id}_${secret}`) ? {
52
- id,
53
- secret
54
- } : void 0;
55
- }
56
- /**
57
- * A fresh `pdk_<id>_<secret><checksum>`: a 43-character base62 secret (about
58
- * 256 bits) and a 6-character CRC-32 checksum, so a secret scanner can tell a
59
- * real key from a lookalike without calling the issuer.
60
- */
61
- function generateApiKey(id) {
62
- if (!ID.test(id)) throw new TypeError("PermDock: an API key id is 1 to 128 of A-Z, a-z, 0-9, _ and -");
63
- let secret = "";
64
- const bytes = /* @__PURE__ */ new Uint8Array(64);
65
- while (secret.length < SECRET_LENGTH) {
66
- globalThis.crypto.getRandomValues(bytes);
67
- for (const byte of bytes) if (byte < 248 && secret.length < SECRET_LENGTH) secret += ALPHABET[byte % 62];
68
- }
69
- const key = `${PREFIX}${id}_${secret}`;
70
- return `${key}${checksum(key)}`;
71
- }
72
- /** base64url SHA-256 of the whole key, the value to store and compare. */
73
- async function hashApiKey(key) {
74
- const digest = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(key));
75
- return bytesToBase64Url(new Uint8Array(digest));
76
- }
77
- function sameHash(left, right) {
78
- if (left.length !== right.length) return false;
79
- let difference = 0;
80
- for (let index = 0; index < left.length; index += 1) difference |= (left.codePointAt(index) ?? 0) ^ (right.codePointAt(index) ?? 0);
81
- return difference === 0;
82
- }
83
- /**
84
- * A `CredentialVerifier` over the application's own table: `find` looks a
85
- * key up by the id in it, and the key's hash is compared in constant time.
86
- * A record that is not a valid v1 credential, or whose id is not the key's,
87
- * verifies to `null`. A throwing `find` propagates, so the resolver denies
88
- * with `source-threw`.
89
- */
90
- function apiKeyVerifier(options) {
91
- return Object.freeze({
92
- ...options.touch === void 0 ? {} : { touch: options.touch },
93
- async verify(secret) {
94
- const parts = parseApiKey(secret);
95
- if (parts === void 0) return null;
96
- const stored = await options.find(parts.id);
97
- if (stored === null || stored === void 0) return null;
98
- const credential = parseCredential(stored.credential);
99
- if (credential === void 0 || credential.id !== parts.id || typeof stored.hash !== "string" || !sameHash(await hashApiKey(secret), stored.hash)) return null;
100
- return credential;
101
- }
102
- });
103
- }
104
- function write(sink, event) {
105
- try {
106
- const written = sink.write(event);
107
- if (isThenable(written)) Promise.resolve(written).catch(() => void 0);
108
- } catch {}
109
- }
110
- /**
111
- * In-process credentials for tests and single-replica apps. `issue`, `rotate`
112
- * and `revoke` write `credential` events to `sink` when one is given.
113
- */
114
- function memoryCredentials(options = {}) {
115
- const records = /* @__PURE__ */ new Map();
116
- const used = /* @__PURE__ */ new Map();
117
- const verifier = apiKeyVerifier({ find: (id) => records.get(id) });
118
- const emit = (operation, credential) => {
119
- if (options.sink !== void 0) write(options.sink, [credentialEvent(compact({
120
- operation,
121
- credential,
122
- source: options.source
123
- }))]);
124
- };
125
- const store = async (credential) => {
126
- const key = generateApiKey(credential.id);
127
- records.set(credential.id, {
128
- credential,
129
- hash: await hashApiKey(key)
130
- });
131
- return key;
132
- };
133
- return Object.freeze({
134
- verify: (secret) => verifier.verify(secret),
135
- touch(id, at) {
136
- if (records.has(id)) used.set(id, at);
137
- },
138
- lastUsedAt(id) {
139
- return used.get(id);
140
- },
141
- async issue(input) {
142
- const credential = parseCredential(input);
143
- if (credential === void 0) throw new TypeError("PermDock: not a valid v1 credential");
144
- if (records.has(credential.id)) throw new Error(`PermDock: credential '${credential.id}' exists`);
145
- const key = await store(credential);
146
- emit("created", credential);
147
- return key;
148
- },
149
- async rotate(id) {
150
- const current = records.get(id);
151
- if (current === void 0) return;
152
- const key = await store(current.credential);
153
- emit("rotated", current.credential);
154
- return key;
155
- },
156
- revoke(id) {
157
- const current = records.get(id);
158
- if (current === void 0) return false;
159
- records.delete(id);
160
- used.delete(id);
161
- emit("revoked", current.credential);
162
- return true;
163
- },
164
- list() {
165
- return [...records.values()].map((record) => record.credential);
166
- }
167
- });
168
- }
169
- async function checkStores(options, credential, active) {
170
- try {
171
- const tenant = credentialTenant(credential, active);
172
- const policy = options.settings === void 0 || tenant === void 0 ? void 0 : (await options.settings.settingsFor(tenant))?.credentials;
173
- if (policy !== void 0 && credentialPolicyViolation(credential, policy) !== void 0) return {
174
- ok: false,
175
- cause: "credential-policy"
176
- };
177
- if (options.revoked !== void 0 && await options.revoked(credential.id)) return {
178
- ok: false,
179
- cause: "credential-revoked"
180
- };
181
- if (credential.kind !== "user" || options.owner === void 0) return { ok: true };
182
- const owner = await options.owner(credential.principal);
183
- if (owner === null || owner === void 0) return {
184
- ok: false,
185
- cause: "owner-unavailable"
186
- };
187
- return {
188
- ok: true,
189
- owner
190
- };
191
- } catch {
192
- return { ok: false };
193
- }
194
- }
195
- function touch(verifier, id) {
196
- if (verifier.touch === void 0) return;
197
- try {
198
- const touched = verifier.touch(id, Math.floor(Date.now() / 1e3));
199
- if (isThenable(touched)) Promise.resolve(touched).catch(() => void 0);
200
- } catch {}
201
- }
202
- function sampled(sample) {
203
- if (sample === 1) return true;
204
- const draw = /* @__PURE__ */ new Uint32Array(1);
205
- globalThis.crypto.getRandomValues(draw);
206
- return (draw[0] ?? 0) / 4294967296 < sample;
207
- }
208
- function reportUse(options, credential) {
209
- const sample = options.sample ?? 1;
210
- if (options.sink === void 0 || !Number.isFinite(sample) || sample <= 0 || sample > 1 || !sampled(sample)) return;
211
- write(options.sink, [credentialEvent(compact({
212
- operation: "used",
213
- credential,
214
- source: options.source,
215
- sample
216
- }))]);
217
- }
218
- /**
219
- * A `SubjectResolver` for opaque API keys (`pdk_<id>_<secret>`): each call
220
- * resolves a key into the subject its credential acts as. Every failure (a
221
- * malformed or unknown key, a record that is not a valid credential, expiry,
222
- * a tenant policy the key breaks, a revoked id, a missing owner, a throwing
223
- * verifier or callback) is the anonymous subject, never a throw.
224
- */
225
- function subjectFromApiKey(options) {
226
- return (key, resolve) => resolveApiKey(key, options, resolve?.tenant);
227
- }
228
- function anonymous() {
229
- return anonymousSubject();
230
- }
231
- async function resolveApiKey(key, options, tenant) {
232
- if (typeof key !== "string" || key.length === 0) return anonymous();
233
- const deny = (cause, reason = "invalid-token") => {
234
- try {
235
- options.onAuth?.(compact({
236
- reason,
237
- cause,
238
- source: "api-key",
239
- requestId: options.requestId
240
- }));
241
- } catch {}
242
- return anonymous();
243
- };
244
- const parts = parseApiKey(key);
245
- if (parts === void 0) return deny("malformed");
246
- let verified;
247
- try {
248
- verified = await options.verifier.verify(key);
249
- } catch {
250
- return deny(void 0, "source-threw");
251
- }
252
- if (verified === null || verified === void 0) return deny("unknown-credential");
253
- const credential = parseCredential(verified);
254
- if (credential === void 0 || credential.id !== parts.id) return deny("invalid-claims");
255
- if (credential.expiresAt !== void 0 && credential.expiresAt <= Date.now() / 1e3) return deny("expired");
256
- const checked = await checkStores(options, credential, tenant);
257
- if (!checked.ok) return checked.cause === void 0 ? deny(void 0, "source-threw") : deny(checked.cause);
258
- const subject = credentialSubject(credential, compact({
259
- permissions: options.permissions,
260
- owner: checked.owner
261
- }));
262
- if (subject.principal === null) return deny("owner-unavailable");
263
- reportUse(options, credential);
264
- touch(options.verifier, credential.id);
265
- return subject;
266
- }
267
- //#endregion
268
- export { parseApiKey as a, memoryCredentials as i, generateApiKey as n, subjectFromApiKey as o, hashApiKey as r, apiKeyVerifier as t };
@@ -1,104 +0,0 @@
1
- import { $ as AccessEvent, Kt as Credential, Pt as TokenSigner, at as DecisionSink, ht as MembershipEvent, tt as CredentialEvent, wt as SinkEvent } from "./policy-IB6yxpC3.js";
2
- //#region src/core/sink.d.ts
3
- /** The closed list of CloudEvents `type` values PermDock emits. */
4
- declare const CLOUD_EVENT_TYPES: {
5
- readonly decision: "dev.permdock.decision";
6
- readonly approval: "dev.permdock.approval";
7
- readonly directory: "dev.permdock.directory";
8
- readonly membership: "dev.permdock.membership";
9
- readonly catalog: "dev.permdock.catalog";
10
- readonly credential: "dev.permdock.credential";
11
- readonly accessStarted: "dev.permdock.access.started";
12
- readonly accessEnded: "dev.permdock.access.ended";
13
- readonly accessRevoked: "dev.permdock.access.revoked";
14
- };
15
- type CloudEventType = (typeof CLOUD_EVENT_TYPES)[keyof typeof CLOUD_EVENT_TYPES];
16
- /** Why a published catalog broke a live hosted grant, which the Cloud then suspends. */
17
- type CatalogFindingCode = "permission-removed" | "not-hostable" | "grantee-removed" | "approval-tightened";
18
- /** One drift finding: the permission key and, when one broke, the hosted grant id. */
19
- type CatalogFinding = {
20
- readonly code: CatalogFindingCode;
21
- readonly permission: string;
22
- readonly grant?: string;
23
- };
24
- /** `data` of a `dev.permdock.catalog` event: a `permdock cloud push` or a drift against live hosted grants. */
25
- type CatalogEventData = {
26
- readonly kind: "publish" | "drift";
27
- /** The catalog fingerprint after the publish, or the one drift was measured against. */
28
- readonly fingerprint: string;
29
- readonly previous?: string;
30
- readonly findings?: readonly CatalogFinding[];
31
- };
32
- type CloudEvent = {
33
- readonly specversion: "1.0";
34
- readonly type: CloudEventType;
35
- readonly source: string;
36
- readonly subject?: string;
37
- readonly id: string;
38
- readonly time: string;
39
- readonly datacontenttype: "application/json";
40
- readonly data: SinkEvent | CatalogEventData;
41
- };
42
- type SignDecisionBatchOptions = {
43
- readonly audience?: string | readonly string[];
44
- readonly source?: string;
45
- };
46
- type MemorySinkOptions = {
47
- readonly capacity?: number;
48
- readonly signer?: TokenSigner;
49
- readonly audience?: string | readonly string[];
50
- readonly source?: string;
51
- };
52
- type MemorySink = DecisionSink & {
53
- readonly events: () => readonly SinkEvent[];
54
- readonly batches: () => readonly string[];
55
- };
56
- /**
57
- * A `credential` sink event for `credential`. `sample` belongs on `used`
58
- * events only and must be in `(0, 1]`.
59
- */
60
- declare function credentialEvent(input: {
61
- readonly operation: CredentialEvent["operation"];
62
- readonly credential: Credential;
63
- readonly source?: string;
64
- readonly by?: CredentialEvent["by"];
65
- readonly sample?: number;
66
- readonly at?: string;
67
- }): CredentialEvent;
68
- declare function membershipEvent(input: {
69
- readonly source: string;
70
- readonly operation: MembershipEvent["operation"];
71
- readonly principal: MembershipEvent["principal"];
72
- readonly scope?: string;
73
- readonly id?: string;
74
- readonly within?: MembershipEvent["within"];
75
- readonly via?: string;
76
- readonly expiresAt?: number;
77
- readonly roles: MembershipEvent["roles"];
78
- readonly by?: MembershipEvent["by"];
79
- readonly at?: string;
80
- }): MembershipEvent;
81
- /**
82
- * A support-access lifecycle event. `started` on consent, `ended` when the
83
- * session lapses, `revoked` when the tenant pulls consent early. It never
84
- * decides; the app writes and revokes the membership.
85
- */
86
- declare function accessEvent(input: {
87
- readonly source: string;
88
- readonly operation: AccessEvent["operation"];
89
- readonly tenant: string;
90
- readonly principal: AccessEvent["principal"];
91
- readonly via?: string;
92
- readonly roles: readonly string[];
93
- readonly member?: AccessEvent["member"];
94
- readonly expiresAt?: number;
95
- readonly grantedBy?: string;
96
- readonly reason?: string;
97
- readonly actor?: AccessEvent["actor"];
98
- readonly at?: string;
99
- }): AccessEvent;
100
- declare function toCloudEvent(event: SinkEvent, source?: string): CloudEvent;
101
- declare function signDecisionBatch(events: readonly SinkEvent[], signer: TokenSigner, options?: SignDecisionBatchOptions): Promise<string>;
102
- declare function memorySink(options?: MemorySinkOptions): MemorySink;
103
- //#endregion
104
- export { CloudEvent as a, MemorySinkOptions as c, credentialEvent as d, membershipEvent as f, toCloudEvent as h, CatalogFindingCode as i, SignDecisionBatchOptions as l, signDecisionBatch as m, CatalogEventData as n, CloudEventType as o, memorySink as p, CatalogFinding as r, MemorySink as s, CLOUD_EVENT_TYPES as t, accessEvent as u };
@@ -1,141 +0,0 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
2
- //#region src/core/sink.ts
3
- /** The closed list of CloudEvents `type` values PermDock emits. */
4
- const CLOUD_EVENT_TYPES = Object.freeze({
5
- decision: "dev.permdock.decision",
6
- approval: "dev.permdock.approval",
7
- directory: "dev.permdock.directory",
8
- membership: "dev.permdock.membership",
9
- catalog: "dev.permdock.catalog",
10
- credential: "dev.permdock.credential",
11
- accessStarted: "dev.permdock.access.started",
12
- accessEnded: "dev.permdock.access.ended",
13
- accessRevoked: "dev.permdock.access.revoked"
14
- });
15
- function cloudEventType(event) {
16
- switch (event.type) {
17
- case "directory": return CLOUD_EVENT_TYPES.directory;
18
- case "membership": return CLOUD_EVENT_TYPES.membership;
19
- case "credential": return CLOUD_EVENT_TYPES.credential;
20
- case "access": return event.operation === "started" ? CLOUD_EVENT_TYPES.accessStarted : event.operation === "ended" ? CLOUD_EVENT_TYPES.accessEnded : CLOUD_EVENT_TYPES.accessRevoked;
21
- case "decision":
22
- if (event.phase === "requested" || event.phase === "resolved") return CLOUD_EVENT_TYPES.approval;
23
- return CLOUD_EVENT_TYPES.decision;
24
- default: return event;
25
- }
26
- }
27
- function cloudEventSubject(event) {
28
- if (event.type === "directory") return event.resource.id;
29
- if (event.type === "membership" || event.type === "access") return event.principal.id;
30
- if (event.type === "credential") return event.credential.id;
31
- return event.permission;
32
- }
33
- /**
34
- * A `credential` sink event for `credential`. `sample` belongs on `used`
35
- * events only and must be in `(0, 1]`.
36
- */
37
- function credentialEvent(input) {
38
- const sample = input.sample;
39
- 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");
40
- const { credential } = input;
41
- return compact({
42
- type: "credential",
43
- at: input.at ?? (/* @__PURE__ */ new Date()).toISOString(),
44
- source: input.source ?? "permdock",
45
- operation: input.operation,
46
- credential: {
47
- id: credential.id,
48
- kind: credential.kind
49
- },
50
- principal: { id: credential.principal },
51
- tenant: credential.tenant,
52
- expiresAt: credential.expiresAt,
53
- by: input.by,
54
- sample
55
- });
56
- }
57
- function membershipEvent(input) {
58
- if (input.scope === void 0 !== (input.id === void 0)) throw new TypeError("PermDock: membershipEvent needs scope and id together");
59
- if (input.scope === void 0 && input.within !== void 0) throw new TypeError("PermDock: membershipEvent within needs a scope");
60
- return compact({
61
- type: "membership",
62
- at: input.at ?? (/* @__PURE__ */ new Date()).toISOString(),
63
- source: input.source,
64
- operation: input.operation,
65
- principal: input.principal,
66
- scope: input.scope,
67
- id: input.id,
68
- within: input.within,
69
- via: input.via,
70
- expiresAt: input.expiresAt,
71
- roles: input.roles,
72
- by: input.by
73
- });
74
- }
75
- /**
76
- * A support-access lifecycle event. `started` on consent, `ended` when the
77
- * session lapses, `revoked` when the tenant pulls consent early. It never
78
- * decides; the app writes and revokes the membership.
79
- */
80
- function accessEvent(input) {
81
- return compact({
82
- type: "access",
83
- at: input.at ?? (/* @__PURE__ */ new Date()).toISOString(),
84
- source: input.source,
85
- operation: input.operation,
86
- tenant: input.tenant,
87
- principal: input.principal,
88
- via: input.via ?? "support",
89
- roles: input.roles,
90
- member: input.member,
91
- expiresAt: input.expiresAt,
92
- grantedBy: input.grantedBy,
93
- reason: input.reason,
94
- actor: input.actor
95
- });
96
- }
97
- function toCloudEvent(event, source = "permdock") {
98
- return compact({
99
- specversion: "1.0",
100
- type: cloudEventType(event),
101
- source,
102
- subject: cloudEventSubject(event),
103
- id: globalThis.crypto.randomUUID(),
104
- time: event.at,
105
- datacontenttype: "application/json",
106
- data: event
107
- });
108
- }
109
- function signDecisionBatch(events, signer, options = {}) {
110
- const source = options.source ?? "permdock";
111
- return signer.sign({ events: events.map((event) => toCloudEvent(event, source)) }, compact({
112
- typ: "permdock-decisions+jwt",
113
- audience: options.audience
114
- }));
115
- }
116
- function memorySink(options = {}) {
117
- const capacity = options.capacity ?? 1e4;
118
- const buffer = [];
119
- const signed = [];
120
- return {
121
- write(events) {
122
- buffer.push(...events);
123
- if (buffer.length > capacity) buffer.splice(0, buffer.length - capacity);
124
- if (options.signer === void 0) return;
125
- return signDecisionBatch(events, options.signer, compact({
126
- audience: options.audience,
127
- source: options.source
128
- })).then((batch) => {
129
- signed.push(batch);
130
- }).catch(() => void 0);
131
- },
132
- events() {
133
- return [...buffer];
134
- },
135
- batches() {
136
- return [...signed];
137
- }
138
- };
139
- }
140
- //#endregion
141
- export { memorySink as a, membershipEvent as i, accessEvent as n, signDecisionBatch as o, credentialEvent as r, toCloudEvent as s, CLOUD_EVENT_TYPES as t };