permdock 0.0.0 → 0.2.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 (344) hide show
  1. package/README.md +327 -1
  2. package/dist/a2a/index.d.ts +169 -0
  3. package/dist/a2a/index.js +232 -0
  4. package/dist/adapter-context-mlWsVGGg.js +23 -0
  5. package/dist/ai-sdk/index.d.ts +95 -0
  6. package/dist/ai-sdk/index.js +154 -0
  7. package/dist/approval-required-TzNB9oQA.js +6 -0
  8. package/dist/approvals/index.d.ts +3 -0
  9. package/dist/approvals/index.js +5 -0
  10. package/dist/approvals-DbYAuNkG.js +224 -0
  11. package/dist/approvers-DT4AVyIg.js +52 -0
  12. package/dist/arazzo-BAgw9ap6.js +70 -0
  13. package/dist/arazzo-cmvX2jDe.js +54 -0
  14. package/dist/authzen/index.d.ts +39 -0
  15. package/dist/authzen/index.js +302 -0
  16. package/dist/better-auth/index.d.ts +109 -0
  17. package/dist/better-auth/index.js +344 -0
  18. package/dist/better-supabase/index.d.ts +206 -0
  19. package/dist/better-supabase/index.js +620 -0
  20. package/dist/bind-CVy3Espv.d.ts +25 -0
  21. package/dist/bind-VnYn2HKq.js +97 -0
  22. package/dist/boundary-BM8a_P6E.js +13 -0
  23. package/dist/boundary-BmHxVH1J.d.ts +15 -0
  24. package/dist/budget-JqcRqyhK.d.ts +11 -0
  25. package/dist/budget-NbEtbJC_.js +11 -0
  26. package/dist/canonical-json-DemiK4Vp.js +26 -0
  27. package/dist/capability-4qPdO9gk.js +173 -0
  28. package/dist/capability-Dq43tT1u.d.ts +99 -0
  29. package/dist/catalog/index.d.ts +12 -0
  30. package/dist/catalog/index.js +2 -0
  31. package/dist/catalog-BjZSovXQ.js +2 -0
  32. package/dist/catalog-doc-Dsc9y7sd.js +309 -0
  33. package/dist/catalog-h2tlKFkq.js +48 -0
  34. package/dist/catalog-path-CnI0XTFK.js +12 -0
  35. package/dist/catalog-z8q6bi_r.js +55 -0
  36. package/dist/claude-agent/index.d.ts +72 -0
  37. package/dist/claude-agent/index.js +77 -0
  38. package/dist/clerk/index.d.ts +65 -0
  39. package/dist/clerk/index.js +301 -0
  40. package/dist/cli/bin.d.ts +1 -0
  41. package/dist/cli/bin.js +20 -0
  42. package/dist/cli/index.d.ts +46 -0
  43. package/dist/cli/index.js +5 -0
  44. package/dist/clients-C7zLFuWT.d.ts +12 -0
  45. package/dist/clients-DjU5ABMy.js +23 -0
  46. package/dist/cloud/index.d.ts +90 -0
  47. package/dist/cloud/index.js +404 -0
  48. package/dist/cloud-BGhHS-lY.js +50 -0
  49. package/dist/cloud-Bo3e9Ak3.js +118 -0
  50. package/dist/collect-DDDv_ESs.js +502 -0
  51. package/dist/collect-DLlujdHC.js +83 -0
  52. package/dist/collect-rG2IQ3t0.js +2 -0
  53. package/dist/commands-DWOrSQic.js +97 -0
  54. package/dist/compact-y6vfu2_f.js +19 -0
  55. package/dist/compare-pfyVnBjE.js +12 -0
  56. package/dist/compile/index.d.ts +3 -0
  57. package/dist/compile/index.js +2 -0
  58. package/dist/compile-Ba4blROR.js +613 -0
  59. package/dist/compile-CNnl6uIt.d.ts +94 -0
  60. package/dist/config-BJiM-xAm.js +157 -0
  61. package/dist/config-Bn00Z3ks.js +36 -0
  62. package/dist/config-report-Dw_JcUqT.js +44 -0
  63. package/dist/connection-CU8MQxRi.js +194 -0
  64. package/dist/context-Ttp0ekMT.js +82 -0
  65. package/dist/convex/index.d.ts +45 -0
  66. package/dist/convex/index.js +65 -0
  67. package/dist/create-BWyx3jua.d.ts +245 -0
  68. package/dist/create-CPhDL6qx.js +253 -0
  69. package/dist/credential-8P81ff4u.js +306 -0
  70. package/dist/delegation-D8pUEuce.js +103 -0
  71. package/dist/describe-B_gVZEVi.js +94 -0
  72. package/dist/describe-PdoqESvg.d.ts +36 -0
  73. package/dist/diff-B8Tunc3o.js +451 -0
  74. package/dist/diff-CzqLxZ77.js +48 -0
  75. package/dist/digest-B3kc_PgQ.d.ts +19 -0
  76. package/dist/digest-BI-6aa6d.js +27 -0
  77. package/dist/doctor-WpvG6p4k.js +1194 -0
  78. package/dist/doctor-collect-ByfYlNv1.js +664 -0
  79. package/dist/doctor-rOr-4ZfS.js +53 -0
  80. package/dist/drizzle/index.d.ts +73 -0
  81. package/dist/drizzle/index.js +160 -0
  82. package/dist/duration-xK2jGFVc.js +25 -0
  83. package/dist/elysia/index.d.ts +49 -0
  84. package/dist/elysia/index.js +59 -0
  85. package/dist/errors-CWfoNg9N.js +47 -0
  86. package/dist/errors-Cz5zn0mW.js +123 -0
  87. package/dist/errors-DAqevpNk.d.ts +125 -0
  88. package/dist/errors-DRnGZHzF.js +30 -0
  89. package/dist/evaluation-items-CfCCejQd.js +40 -0
  90. package/dist/evaluations-tz6D9A2G.js +461 -0
  91. package/dist/eve/index.d.ts +86 -0
  92. package/dist/eve/index.js +176 -0
  93. package/dist/expiry-BoBJ8Tvc.js +7 -0
  94. package/dist/express/index.d.ts +23 -0
  95. package/dist/express/index.js +78 -0
  96. package/dist/fastify/index.d.ts +33 -0
  97. package/dist/fastify/index.js +92 -0
  98. package/dist/fields-BMl1RxoX.js +26 -0
  99. package/dist/files-DWUN9PzI.js +125 -0
  100. package/dist/fixtures-ht28Cplr.js +67 -0
  101. package/dist/freeze-CrU8nQeX.js +60 -0
  102. package/dist/from-snapshot-C3sHpZNS.js +569 -0
  103. package/dist/generate-CH7ThJ14.js +173 -0
  104. package/dist/grantee-Cv5Sogfv.js +602 -0
  105. package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
  106. package/dist/headers-BZSDieNT.js +6 -0
  107. package/dist/headers-Cf-zWvsO.d.ts +6 -0
  108. package/dist/helpers-H_KARDVC.js +421 -0
  109. package/dist/hono/index.d.ts +48 -0
  110. package/dist/hono/index.js +99 -0
  111. package/dist/hosted-DJQw46hn.js +266 -0
  112. package/dist/http-BIhmLfCc.js +95 -0
  113. package/dist/http-DPuDaChb.d.ts +13 -0
  114. package/dist/http-SO7qGttf.js +44 -0
  115. package/dist/ids-DC4V4CFu.js +18 -0
  116. package/dist/index-A0YNL8jZ.d.ts +177 -0
  117. package/dist/index-CtE07CBF.d.ts +6 -0
  118. package/dist/index-D3vbkoSI.d.ts +483 -0
  119. package/dist/index-D6_cSa1z.d.ts +201 -0
  120. package/dist/index.d.ts +16 -0
  121. package/dist/index.js +26 -0
  122. package/dist/instance-options-BK_rNOSC.d.ts +11 -0
  123. package/dist/instance-options-Dhhcnm3y.js +22 -0
  124. package/dist/json-schema-BsAflUGW.js +106 -0
  125. package/dist/jwt/index.d.ts +91 -0
  126. package/dist/jwt/index.js +590 -0
  127. package/dist/kernel-GSQnMz3O.js +208 -0
  128. package/dist/kysely/index.d.ts +78 -0
  129. package/dist/kysely/index.js +129 -0
  130. package/dist/live-options-H2eG8dfJ.js +60 -0
  131. package/dist/load-DhWEB9P1.js +75 -0
  132. package/dist/load-DwJUafYN.js +2 -0
  133. package/dist/load-jose-BL6LH4bL.js +11 -0
  134. package/dist/lru-8q4WZjBV.js +28 -0
  135. package/dist/manifest-iaoBXHKc.js +783 -0
  136. package/dist/manifest-uDS9y5de.d.ts +206 -0
  137. package/dist/map-AcxK9o_D.js +147 -0
  138. package/dist/map-claims-Z4QZOiFF.js +369 -0
  139. package/dist/map-error-pgUWNNtG.js +23 -0
  140. package/dist/markers-B0hYLvMD.js +60 -0
  141. package/dist/may-use-DndQ5tQ-.js +77 -0
  142. package/dist/mcp/index.d.ts +159 -0
  143. package/dist/mcp/index.js +603 -0
  144. package/dist/nest/index.d.ts +75 -0
  145. package/dist/nest/index.js +261 -0
  146. package/dist/next/client.d.ts +23 -0
  147. package/dist/next/client.js +33 -0
  148. package/dist/next/index.d.ts +93 -0
  149. package/dist/next/index.js +180 -0
  150. package/dist/next/plugin.d.ts +14 -0
  151. package/dist/next/plugin.js +33 -0
  152. package/dist/node/index.d.ts +24 -0
  153. package/dist/node/index.js +34 -0
  154. package/dist/openai/index.d.ts +62 -0
  155. package/dist/openai/index.js +92 -0
  156. package/dist/openapi/index.d.ts +176 -0
  157. package/dist/openapi/index.js +3 -0
  158. package/dist/openapi-Bbg4wGVL.js +164 -0
  159. package/dist/openapi-BqRBvAng.js +538 -0
  160. package/dist/openapi-CqqEbHsL.js +250 -0
  161. package/dist/openapi-import-cmwetbzw.js +5959 -0
  162. package/dist/openapi-schema--ARjyfQr.js +6902 -0
  163. package/dist/orpc/index.d.ts +51 -0
  164. package/dist/orpc/index.js +145 -0
  165. package/dist/otel/index.d.ts +13 -0
  166. package/dist/otel/index.js +202 -0
  167. package/dist/package-root-zGkxO3oN.js +30 -0
  168. package/dist/parse-BuyjxhZV.js +53 -0
  169. package/dist/parse-local-manifest-BkGQNzAh.d.ts +10 -0
  170. package/dist/parse-local-manifest-BrMozJCo.js +36 -0
  171. package/dist/pdp/index.d.ts +22 -0
  172. package/dist/pdp/index.js +682 -0
  173. package/dist/peer-BOr_kJE1.js +31 -0
  174. package/dist/permdock-CzqXjCpU.js +3471 -0
  175. package/dist/permissions-CDgvKG5L.d.ts +52 -0
  176. package/dist/permissions-CpZrivYv.js +142 -0
  177. package/dist/permissions-DVoF6dMt.js +662 -0
  178. package/dist/permissions-DttnqqxC.d.ts +214 -0
  179. package/dist/pins-8ILTftC9.js +12 -0
  180. package/dist/policy-CFZAr_Al.d.ts +2252 -0
  181. package/dist/policy-D8UFyERw.d.ts +20 -0
  182. package/dist/policy-xyWg7QdR.js +1122 -0
  183. package/dist/powersync-A8x_Yyvh.js +2 -0
  184. package/dist/powersync-C7kLglqX.js +540 -0
  185. package/dist/powersync-yW1UUFzp.js +62 -0
  186. package/dist/prisma/index.d.ts +136 -0
  187. package/dist/prisma/index.js +455 -0
  188. package/dist/problem-B43ztKIm.js +191 -0
  189. package/dist/problem-details-CkL50EEf.d.ts +7 -0
  190. package/dist/problem-details-_AMOYz-w.js +144 -0
  191. package/dist/prompt-CXYhLfsS.js +32 -0
  192. package/dist/protected-CNsMzrVd.d.ts +27 -0
  193. package/dist/protected-Cs6kTaHo.js +100 -0
  194. package/dist/protected-bZs6rbT1.d.ts +40 -0
  195. package/dist/provider-Cjr62YMV.d.ts +6 -0
  196. package/dist/provider-DLzpb2Xz.js +52 -0
  197. package/dist/provider-store-DNyC1y48.js +43 -0
  198. package/dist/react/index.d.ts +8 -0
  199. package/dist/react/index.js +7 -0
  200. package/dist/react/provider-client.d.ts +2 -0
  201. package/dist/react/provider-client.js +3 -0
  202. package/dist/react-native/index.d.ts +198 -0
  203. package/dist/react-native/index.js +696 -0
  204. package/dist/refs-KYb4ntaz.js +91 -0
  205. package/dist/relations-cjOL01hZ.js +505 -0
  206. package/dist/replay-BsOyTrdV.js +28 -0
  207. package/dist/replay-sqBGMnNs.d.ts +5 -0
  208. package/dist/resource-ref-CaS9yVPi.js +20 -0
  209. package/dist/revocations-Bhr0aMIC.js +27 -0
  210. package/dist/revocations-Cy06JNx2.d.ts +21 -0
  211. package/dist/rls-BMNydpHk.js +2521 -0
  212. package/dist/rls-CEvs64Kj.js +238 -0
  213. package/dist/rls-fields-BMasREhR.js +3502 -0
  214. package/dist/rls-graph-pc9fuXYm.js +435 -0
  215. package/dist/rls-import-D8F7j35Q.js +943 -0
  216. package/dist/rls-migrate-7wikfrVI.js +367 -0
  217. package/dist/rls-ownership-B5Lkq62W.js +843 -0
  218. package/dist/rls-shared-aOQ4hGTO.js +493 -0
  219. package/dist/rls-verify-D8B7dOTh.js +745 -0
  220. package/dist/row-check-Dt35czLy.d.ts +40 -0
  221. package/dist/rpc-DOK54_CS.js +89 -0
  222. package/dist/run-YXCJDNYk.js +174 -0
  223. package/dist/runtime-CB8gQFvS.js +11 -0
  224. package/dist/saas-Bj_FFkjN.js +1203 -0
  225. package/dist/schema-D3MnDMxa.js +300 -0
  226. package/dist/scim/index.d.ts +2 -0
  227. package/dist/scim/index.js +2 -0
  228. package/dist/scim-BFGBBAqR.js +1445 -0
  229. package/dist/scopes-CVdPrWN-.js +239 -0
  230. package/dist/server/index.d.ts +134 -0
  231. package/dist/server/index.js +11 -0
  232. package/dist/server-DlZ28Oz5.js +268 -0
  233. package/dist/sha256-BO0swRXL.js +150 -0
  234. package/dist/shared-DRu8VFVM.js +123 -0
  235. package/dist/sink-Bd9PSyfq.js +141 -0
  236. package/dist/sink-Gs6TTVa-.d.ts +104 -0
  237. package/dist/skills-Biq5uup3.js +192 -0
  238. package/dist/skills-JaymNCdK.js +56 -0
  239. package/dist/snapshot-Enxd0n-s.js +975 -0
  240. package/dist/snapshot-cache-D6jLelln.js +44 -0
  241. package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
  242. package/dist/solid/index.d.ts +93 -0
  243. package/dist/solid/index.js +188 -0
  244. package/dist/sources-B0UvrJ21.js +534 -0
  245. package/dist/sources-BcJgw0lt.d.ts +192 -0
  246. package/dist/sql-xdg5f4Fi.js +27 -0
  247. package/dist/src-CSbUiozF.js +568 -0
  248. package/dist/ssf/index.d.ts +4 -0
  249. package/dist/ssf/index.js +596 -0
  250. package/dist/store-DMAWwAJV.js +371 -0
  251. package/dist/store-D_pjn91-.d.ts +36 -0
  252. package/dist/store-options-yO0V6gRn.js +716 -0
  253. package/dist/stores-4_sqiOA1.js +87 -0
  254. package/dist/stores-DVR5NHLE.d.ts +52 -0
  255. package/dist/stream-DDpvynSB.js +66 -0
  256. package/dist/stream-DlvG2hs-.d.ts +12 -0
  257. package/dist/style-CTm1AXDT.js +22 -0
  258. package/dist/subject-C6dLxqHU.js +24 -0
  259. package/dist/subject-settings-BwBmCdTR.js +128 -0
  260. package/dist/supabase/index.d.ts +183 -0
  261. package/dist/supabase/index.js +5 -0
  262. package/dist/supabase/middleware.d.ts +82 -0
  263. package/dist/supabase/middleware.js +102 -0
  264. package/dist/supabase-CwafwxxF.js +83 -0
  265. package/dist/supabase-DTBaC20O.js +774 -0
  266. package/dist/supabase-config-Bs44dare.js +472 -0
  267. package/dist/supabase-hook-BuxLQLpU.js +1814 -0
  268. package/dist/supabase-hook-D5qVd_D8.js +2 -0
  269. package/dist/supautils-DYZnzRWV.js +91 -0
  270. package/dist/svelte/PermissionBoundary.svelte +37 -0
  271. package/dist/svelte/Protected.svelte +40 -0
  272. package/dist/svelte/index.d.ts +13 -0
  273. package/dist/svelte/index.js +107 -0
  274. package/dist/svelte/runtime.d.ts +7 -0
  275. package/dist/svelte/runtime.js +4 -0
  276. package/dist/svelte/source.d.ts +13 -0
  277. package/dist/svelte/source.js +11 -0
  278. package/dist/terminal/index.d.ts +163 -0
  279. package/dist/terminal/index.js +833 -0
  280. package/dist/testing/index.d.ts +745 -0
  281. package/dist/testing/index.js +3672 -0
  282. package/dist/testing/saas/index.d.ts +194 -0
  283. package/dist/testing/saas/index.js +3 -0
  284. package/dist/testing/saas/permissions.d.ts +2 -0
  285. package/dist/testing/saas/permissions.js +2 -0
  286. package/dist/text-diff-BdkkYSbi.js +15 -0
  287. package/dist/thenable-okc2xDsj.js +10 -0
  288. package/dist/timeout-D51niuQP.js +8 -0
  289. package/dist/token-CIWxJOCh.js +50 -0
  290. package/dist/trpc/index.d.ts +61 -0
  291. package/dist/trpc/index.js +122 -0
  292. package/dist/types-9AWO9EGt.d.ts +197 -0
  293. package/dist/types-BPxgszlT.d.ts +550 -0
  294. package/dist/types-BVyImy5I.d.ts +120 -0
  295. package/dist/types-Bvc4oWT6.d.ts +9 -0
  296. package/dist/types-C3s9xVJG.d.ts +48 -0
  297. package/dist/types-Dnemwd77.d.ts +183 -0
  298. package/dist/types-kxznc7cn.d.ts +52 -0
  299. package/dist/types-vKyAMtcX.d.ts +157 -0
  300. package/dist/types-vNSDF7Dq.d.ts +66 -0
  301. package/dist/types-yF5LmQVD.d.ts +306 -0
  302. package/dist/unplugin/index.d.ts +7 -0
  303. package/dist/unplugin/index.js +31 -0
  304. package/dist/usage-D07N9QJ3.js +42 -0
  305. package/dist/usage-D82l1CwK.js +2 -0
  306. package/dist/usage-DG1oeCca.js +693 -0
  307. package/dist/validation-error-CnjZ4t92.js +33 -0
  308. package/dist/validation-error-CtF23SrC.d.ts +26 -0
  309. package/dist/validity-uOp8UpYn.js +245 -0
  310. package/dist/verifier-BxBo6I44.js +466 -0
  311. package/dist/version-BvacVTZR.js +17 -0
  312. package/dist/views-Soe7bGSC.js +95 -0
  313. package/dist/vocabulary-DA8a8zif.d.ts +56 -0
  314. package/dist/vue/index.d.ts +79 -0
  315. package/dist/vue/index.js +196 -0
  316. package/dist/watch-Etoa_Mvr.js +2 -0
  317. package/dist/watch-UihESpsJ.js +128 -0
  318. package/dist/webmcp/index.d.ts +75 -0
  319. package/dist/webmcp/index.js +307 -0
  320. package/package.json +450 -5
  321. package/rulesets/permdock.yaml +29 -0
  322. package/schemas/approval-request-v1.json +175 -0
  323. package/schemas/catalog-v1.json +535 -0
  324. package/schemas/openapi/oas-3.1.json +1298 -0
  325. package/schemas/openapi/oas-3.2.json +1516 -0
  326. package/schemas/openapi/overlay-1.1.json +79 -0
  327. package/schemas/supabase-claims-v1.json +144 -0
  328. package/schemas/supabase-manifest-v1.json +361 -0
  329. package/skills/permdock/SKILL.md +66 -0
  330. package/skills/permdock-agents/SKILL.md +77 -0
  331. package/skills/permdock-agents/references/runtimes.md +213 -0
  332. package/skills/permdock-approvals/SKILL.md +80 -0
  333. package/skills/permdock-approvals/references/stores-and-resume.md +94 -0
  334. package/skills/permdock-audit/SKILL.md +67 -0
  335. package/skills/permdock-credentials/SKILL.md +55 -0
  336. package/skills/permdock-credentials/references/tokens-keys-links.md +132 -0
  337. package/skills/permdock-data/SKILL.md +57 -0
  338. package/skills/permdock-data/references/queries-and-rls.md +62 -0
  339. package/skills/permdock-data/references/relationships.md +67 -0
  340. package/skills/permdock-tenancy/SKILL.md +80 -0
  341. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +89 -0
  342. package/skills/permdock-wire/SKILL.md +116 -0
  343. package/skills/permdock-wire/references/adapters.md +492 -0
  344. package/skills/permdock-wire/references/policy-options.md +45 -0
@@ -0,0 +1,150 @@
1
+ //#region src/core/sha256.ts
2
+ const K = [
3
+ 1116352408,
4
+ 1899447441,
5
+ 3049323471,
6
+ 3921009573,
7
+ 961987163,
8
+ 1508970993,
9
+ 2453635748,
10
+ 2870763221,
11
+ 3624381080,
12
+ 310598401,
13
+ 607225278,
14
+ 1426881987,
15
+ 1925078388,
16
+ 2162078206,
17
+ 2614888103,
18
+ 3248222580,
19
+ 3835390401,
20
+ 4022224774,
21
+ 264347078,
22
+ 604807628,
23
+ 770255983,
24
+ 1249150122,
25
+ 1555081692,
26
+ 1996064986,
27
+ 2554220882,
28
+ 2821834349,
29
+ 2952996808,
30
+ 3210313671,
31
+ 3336571891,
32
+ 3584528711,
33
+ 113926993,
34
+ 338241895,
35
+ 666307205,
36
+ 773529912,
37
+ 1294757372,
38
+ 1396182291,
39
+ 1695183700,
40
+ 1986661051,
41
+ 2177026350,
42
+ 2456956037,
43
+ 2730485921,
44
+ 2820302411,
45
+ 3259730800,
46
+ 3345764771,
47
+ 3516065817,
48
+ 3600352804,
49
+ 4094571909,
50
+ 275423344,
51
+ 430227734,
52
+ 506948616,
53
+ 659060556,
54
+ 883997877,
55
+ 958139571,
56
+ 1322822218,
57
+ 1537002063,
58
+ 1747873779,
59
+ 1955562222,
60
+ 2024104815,
61
+ 2227730452,
62
+ 2361852424,
63
+ 2428436474,
64
+ 2756734187,
65
+ 3204031479,
66
+ 3329325298
67
+ ];
68
+ function rotr(value, bits) {
69
+ return value >>> bits | value << 32 - bits;
70
+ }
71
+ /**
72
+ * SHA-256 of UTF-8 text. Pure JS so `decide` stays synchronous and WinterTC-safe.
73
+ */
74
+ function sha256(message) {
75
+ const bytes = new TextEncoder().encode(message);
76
+ const bitLength = bytes.length * 8;
77
+ const paddedLength = bytes.length + 9 + 63 >> 6 << 6;
78
+ const padded = new Uint8Array(paddedLength);
79
+ padded.set(bytes);
80
+ padded[bytes.length] = 128;
81
+ const view = new DataView(padded.buffer);
82
+ view.setUint32(paddedLength - 4, bitLength, false);
83
+ let h0 = 1779033703;
84
+ let h1 = 3144134277;
85
+ let h2 = 1013904242;
86
+ let h3 = 2773480762;
87
+ let h4 = 1359893119;
88
+ let h5 = 2600822924;
89
+ let h6 = 528734635;
90
+ let h7 = 1541459225;
91
+ const w = /* @__PURE__ */ new Int32Array(64);
92
+ for (let offset = 0; offset < paddedLength; offset += 64) {
93
+ for (let i = 0; i < 16; i += 1) w[i] = view.getInt32(offset + i * 4, false);
94
+ for (let i = 16; i < 64; i += 1) {
95
+ const w15 = w[i - 15] ?? 0;
96
+ const w2 = w[i - 2] ?? 0;
97
+ const s0 = rotr(w15, 7) ^ rotr(w15, 18) ^ w15 >>> 3;
98
+ const s1 = rotr(w2, 17) ^ rotr(w2, 19) ^ w2 >>> 10;
99
+ w[i] = (w[i - 16] ?? 0) + s0 + (w[i - 7] ?? 0) + s1 | 0;
100
+ }
101
+ let a = h0;
102
+ let b = h1;
103
+ let c = h2;
104
+ let d = h3;
105
+ let e = h4;
106
+ let f = h5;
107
+ let g = h6;
108
+ let h = h7;
109
+ for (let i = 0; i < 64; i += 1) {
110
+ const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
111
+ const ch = e & f ^ ~e & g;
112
+ const temp1 = h + S1 + ch + (K[i] ?? 0) + (w[i] ?? 0) | 0;
113
+ const temp2 = (rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)) + (a & b ^ a & c ^ b & c) | 0;
114
+ h = g;
115
+ g = f;
116
+ f = e;
117
+ e = d + temp1 | 0;
118
+ d = c;
119
+ c = b;
120
+ b = a;
121
+ a = temp1 + temp2 | 0;
122
+ }
123
+ h0 = h0 + a | 0;
124
+ h1 = h1 + b | 0;
125
+ h2 = h2 + c | 0;
126
+ h3 = h3 + d | 0;
127
+ h4 = h4 + e | 0;
128
+ h5 = h5 + f | 0;
129
+ h6 = h6 + g | 0;
130
+ h7 = h7 + h | 0;
131
+ }
132
+ const out = /* @__PURE__ */ new Uint8Array(32);
133
+ const outView = new DataView(out.buffer);
134
+ outView.setInt32(0, h0, false);
135
+ outView.setInt32(4, h1, false);
136
+ outView.setInt32(8, h2, false);
137
+ outView.setInt32(12, h3, false);
138
+ outView.setInt32(16, h4, false);
139
+ outView.setInt32(20, h5, false);
140
+ outView.setInt32(24, h6, false);
141
+ outView.setInt32(28, h7, false);
142
+ return out;
143
+ }
144
+ function bytesToBase64Url(bytes) {
145
+ let binary = "";
146
+ for (const byte of bytes) binary += String.fromCodePoint(byte);
147
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replaceAll("=", "");
148
+ }
149
+ //#endregion
150
+ export { sha256 as n, bytesToBase64Url as t };
@@ -0,0 +1,123 @@
1
+ import { t as decisionToken } from "./token-CIWxJOCh.js";
2
+ //#region src/pdp/shared.ts
3
+ const MAX_CACHE_TTL_MS = 3e4;
4
+ const CACHE_MAX = 1e3;
5
+ /** Milliseconds, clamped to `[0, 30s]`; anything unparseable disables the cache. */
6
+ function ttlMs(cache) {
7
+ if (cache === void 0) return 0;
8
+ const raw = typeof cache.ttl === "number" ? cache.ttl : cache.ttl.endsWith("ms") ? Number(cache.ttl.slice(0, -2)) : Number(cache.ttl.slice(0, -1)) * 1e3;
9
+ if (!Number.isFinite(raw) || raw <= 0) return 0;
10
+ return Math.min(raw, MAX_CACHE_TTL_MS);
11
+ }
12
+ function denied(reason) {
13
+ return {
14
+ outcome: "denied",
15
+ denials: [{
16
+ role: null,
17
+ reason
18
+ }],
19
+ alternatives: []
20
+ };
21
+ }
22
+ function resourceIdOf(data, field = "id") {
23
+ if (data === null || typeof data !== "object") return "*";
24
+ const id = Object.hasOwn(data, field) ? data[field] : void 0;
25
+ if (typeof id === "string" || typeof id === "number") return String(id);
26
+ return "*";
27
+ }
28
+ function granted(provider, permission, subject, data) {
29
+ const principal = subject.principal;
30
+ if (principal === null) return denied("anonymous");
31
+ return {
32
+ outcome: "granted",
33
+ subject: {
34
+ ...subject,
35
+ principal
36
+ },
37
+ matched: {
38
+ role: provider,
39
+ permission: permission.key,
40
+ provider
41
+ },
42
+ token: decisionToken({
43
+ key: permission.key,
44
+ resourceId: resourceIdOf(data),
45
+ principal,
46
+ actor: subject.actor,
47
+ fingerprint: provider
48
+ })
49
+ };
50
+ }
51
+ /**
52
+ * The request that would be sent, plus what a custom mapping may drop
53
+ * (issuer, tenant, actor): a tenant switch or a changed row never reuses a
54
+ * cached answer.
55
+ */
56
+ function cacheKey(subject, permission, body) {
57
+ return JSON.stringify([
58
+ permission.key,
59
+ subject.principal?.issuer ?? null,
60
+ subject.principal?.tenant ?? null,
61
+ subject.actor === void 0 ? null : [subject.actor.id, subject.actor.kind],
62
+ body
63
+ ]);
64
+ }
65
+ function ttlCache(ttl) {
66
+ const entries = /* @__PURE__ */ new Map();
67
+ return {
68
+ get(key) {
69
+ if (ttl <= 0) return;
70
+ const hit = entries.get(key);
71
+ if (hit !== void 0 && Date.now() - hit.at < ttl) return hit.value;
72
+ entries.delete(key);
73
+ },
74
+ set(key, value) {
75
+ if (ttl <= 0) return;
76
+ entries.set(key, {
77
+ at: Date.now(),
78
+ value
79
+ });
80
+ if (entries.size > CACHE_MAX) {
81
+ const oldest = entries.keys().next();
82
+ if (oldest.done !== true) entries.delete(oldest.value);
83
+ }
84
+ }
85
+ };
86
+ }
87
+ async function bearerOf(auth) {
88
+ if (auth === void 0) return null;
89
+ try {
90
+ const token = typeof auth.bearer === "function" ? await auth.bearer() : auth.bearer;
91
+ return token === "" ? null : token;
92
+ } catch {
93
+ return null;
94
+ }
95
+ }
96
+ async function postJson(fetcher, url, body, options) {
97
+ const token = await bearerOf(options.auth);
98
+ const headers = {
99
+ "content-type": "application/json",
100
+ accept: "application/json"
101
+ };
102
+ if (token !== null) headers["authorization"] = `Bearer ${token}`;
103
+ try {
104
+ const response = await fetcher(url, {
105
+ method: "POST",
106
+ headers,
107
+ body: JSON.stringify(body),
108
+ signal: AbortSignal.timeout(options.timeout)
109
+ });
110
+ return response.ok ? {
111
+ ok: true,
112
+ response
113
+ } : { ok: false };
114
+ } catch {
115
+ return { ok: false };
116
+ }
117
+ }
118
+ function joinUrl(base, path) {
119
+ if (path.startsWith("http://") || path.startsWith("https://")) return path;
120
+ return `${base.endsWith("/") ? base.slice(0, -1) : base}${path.startsWith("/") ? path : `/${path}`}`;
121
+ }
122
+ //#endregion
123
+ export { postJson as a, ttlMs as c, joinUrl as i, denied as n, resourceIdOf as o, granted as r, ttlCache as s, cacheKey as t };
@@ -0,0 +1,141 @@
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 };
@@ -0,0 +1,104 @@
1
+ import { $ as AccessEvent, Kt as Credential, Pt as TokenSigner, at as DecisionSink, ht as MembershipEvent, tt as CredentialEvent, wt as SinkEvent } from "./policy-CFZAr_Al.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 };