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,97 @@
1
+ import { t as compact } from "./compact-y6vfu2_f.js";
2
+ import { o as invalidSignatureResponse } from "./evaluations-tz6D9A2G.js";
3
+ import { t as instanceOptions } from "./instance-options-Dhhcnm3y.js";
4
+ import { n as tenantScope } from "./adapter-context-mlWsVGGg.js";
5
+ import { n as createServerKernel } from "./create-CPhDL6qx.js";
6
+ //#region src/server/bind.ts
7
+ /** The server kernel with the subject and actor callbacks reading the context `contextOf` maps a `Request` to. */
8
+ function adapterKernel(policy, options, adapter, contextOf) {
9
+ return createServerKernel(policy, compact({
10
+ subject: (request) => {
11
+ const context = contextOf(request);
12
+ return context === void 0 ? null : options.subject(context);
13
+ },
14
+ actor: options.actor === void 0 ? void 0 : (request) => {
15
+ const context = contextOf(request);
16
+ return context === void 0 ? void 0 : options.actor?.(context);
17
+ },
18
+ ...instanceOptions(options),
19
+ store: options.store,
20
+ pdp: options.pdp,
21
+ webBotAuth: options.webBotAuth,
22
+ revocations: options.revocations,
23
+ adapter,
24
+ wrap: options.otel
25
+ }));
26
+ }
27
+ /**
28
+ * The kernel of a framework adapter, with the subject, actor and tenant
29
+ * callbacks reading the framework context each `Request` was built from.
30
+ */
31
+ function bindKernel(policy, options, adapter, toRequest) {
32
+ const contexts = /* @__PURE__ */ new WeakMap();
33
+ const bound = /* @__PURE__ */ new WeakMap();
34
+ const kernel = adapterKernel(policy, options, adapter, (request) => contexts.get(request));
35
+ const bind = (context) => {
36
+ const hit = bound.get(context);
37
+ if (hit !== void 0) return hit;
38
+ const request = toRequest(context);
39
+ bound.set(context, request);
40
+ contexts.set(request, context);
41
+ return request;
42
+ };
43
+ const rebind = (context) => {
44
+ const request = toRequest(context);
45
+ contexts.set(request, context);
46
+ const previous = bound.get(context);
47
+ if (previous !== void 0) kernel.shareSubject(previous, request);
48
+ return request;
49
+ };
50
+ const scopeOf = (context) => tenantScope(options.tenant, context);
51
+ const handlerScope = (request) => {
52
+ const context = contexts.get(request);
53
+ return context === void 0 ? Promise.resolve({ tenant: void 0 }) : scopeOf(context);
54
+ };
55
+ const attach = (context) => attached(async () => kernel.permdock(bind(context), await scopeOf(context)));
56
+ return {
57
+ kernel,
58
+ bind,
59
+ rebind,
60
+ scopeOf,
61
+ handlerScope,
62
+ attach
63
+ };
64
+ }
65
+ /** The instance `build` resolves; an invalid Web Bot Auth signature is its `401` response. */
66
+ async function attached(build) {
67
+ try {
68
+ return {
69
+ ok: true,
70
+ permdock: await build()
71
+ };
72
+ } catch (error) {
73
+ const response = invalidSignatureResponse(error);
74
+ if (response === void 0) throw error;
75
+ return {
76
+ ok: false,
77
+ response
78
+ };
79
+ }
80
+ }
81
+ /** Sets `permdock`, and `permdockData` when a loader returned a row, on a framework request or context. */
82
+ function decorate(target, instance, data) {
83
+ Object.assign(target, data === void 0 ? { permdock: instance } : {
84
+ permdock: instance,
85
+ permdockData: data
86
+ });
87
+ }
88
+ /** One connection per socket: every handler of `socket` gets the promise the first one opened. */
89
+ function socketConnection(sockets, socket, open) {
90
+ const hit = sockets.get(socket);
91
+ if (hit !== void 0) return hit;
92
+ const opened = open();
93
+ sockets.set(socket, opened);
94
+ return opened;
95
+ }
96
+ //#endregion
97
+ export { socketConnection as a, decorate as i, attached as n, bindKernel as r, adapterKernel as t };
@@ -0,0 +1,13 @@
1
+ import { r as parsePermDockDigest } from "./digest-BI-6aa6d.js";
2
+ //#region src/client/boundary.ts
3
+ /** The digest of a PermDock error (`PermDockDeniedError`, `PermDockApprovalRequiredError`); `null` for any other error. */
4
+ function boundaryDigest(error) {
5
+ if (error === null || typeof error !== "object" || !("digest" in error)) return null;
6
+ return parsePermDockDigest(error.digest);
7
+ }
8
+ /** What a boundary renders for `digest`: `approval` for an approval request when given, otherwise `denied`. */
9
+ function boundaryFallback(digest, fallbacks) {
10
+ return digest.outcome === "approval-required" ? fallbacks.approval ?? fallbacks.denied : fallbacks.denied;
11
+ }
12
+ //#endregion
13
+ export { boundaryFallback as n, boundaryDigest as t };
@@ -0,0 +1,15 @@
1
+ import { t as PermDockDigest } from "./digest-B3kc_PgQ.js";
2
+ //#region src/client/boundary.d.ts
3
+ type PermissionBoundaryState = PermDockDigest & {
4
+ /** Renders the boundary's children again, e.g. after an approval or a role change. */
5
+ readonly retry: () => void;
6
+ };
7
+ /** The digest of a PermDock error (`PermDockDeniedError`, `PermDockApprovalRequiredError`); `null` for any other error. */
8
+ declare function boundaryDigest(error: unknown): PermDockDigest | null;
9
+ /** What a boundary renders for `digest`: `approval` for an approval request when given, otherwise `denied`. */
10
+ declare function boundaryFallback<T>(digest: PermDockDigest, fallbacks: {
11
+ readonly denied?: T | undefined;
12
+ readonly approval?: T | undefined;
13
+ }): T | undefined;
14
+ //#endregion
15
+ export { boundaryDigest as n, boundaryFallback as r, PermissionBoundaryState as t };
@@ -0,0 +1,11 @@
1
+ //#region src/supabase/budget.d.ts
2
+ /** The default size budget, in bytes of JSON, for the hook's `memberships` claim: about 15 UUID-keyed single-role memberships. */
3
+ declare const supabaseMembershipsBudget = 1024;
4
+ /**
5
+ * The default claim that carries the active first-scope id: the hook writes
6
+ * it, `subjectFromSupabase` reads it, and the RLS helpers compare with it.
7
+ * `rls.tenantClaim` and the `tenant` option change it.
8
+ */
9
+ declare const supabaseTenantClaim = "tenant_id";
10
+ //#endregion
11
+ export { supabaseTenantClaim as n, supabaseMembershipsBudget as t };
@@ -0,0 +1,11 @@
1
+ //#region src/supabase/budget.ts
2
+ /** The default size budget, in bytes of JSON, for the hook's `memberships` claim: about 15 UUID-keyed single-role memberships. */
3
+ const supabaseMembershipsBudget = 1024;
4
+ /**
5
+ * The default claim that carries the active first-scope id: the hook writes
6
+ * it, `subjectFromSupabase` reads it, and the RLS helpers compare with it.
7
+ * `rls.tenantClaim` and the `tenant` option change it.
8
+ */
9
+ const supabaseTenantClaim = "tenant_id";
10
+ //#endregion
11
+ export { supabaseTenantClaim as n, supabaseMembershipsBudget as t };
@@ -0,0 +1,26 @@
1
+ //#region src/core/canonical-json.ts
2
+ function isRecord(value) {
3
+ return value !== null && typeof value === "object" && !Array.isArray(value);
4
+ }
5
+ /**
6
+ * JSON with sorted keys and `undefined` members dropped, so equal values hash
7
+ * equally. Dates become ISO strings, bigints `"<n>n"`, and a repeated object
8
+ * on the current path `"[Circular]"`, so any validated row serialises.
9
+ */
10
+ function canonicalJson(value, path = /* @__PURE__ */ new Set()) {
11
+ if (typeof value === "bigint") return JSON.stringify(`${value}n`);
12
+ if (value instanceof Date) return JSON.stringify(Number.isNaN(value.getTime()) ? null : value.toISOString());
13
+ if (value !== null && typeof value === "object") {
14
+ if (path.has(value)) return "\"[Circular]\"";
15
+ path.add(value);
16
+ try {
17
+ if (Array.isArray(value)) return `[${value.map((item) => canonicalJson(item === void 0 ? null : item, path)).join(",")}]`;
18
+ if (isRecord(value)) return `{${Object.keys(value).toSorted().filter((key) => value[key] !== void 0).map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key], path)}`).join(",")}}`;
19
+ } finally {
20
+ path.delete(value);
21
+ }
22
+ }
23
+ return JSON.stringify(value) ?? "null";
24
+ }
25
+ //#endregion
26
+ export { canonicalJson as t };
@@ -0,0 +1,173 @@
1
+ import { t as compact } from "./compact-y6vfu2_f.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
+ import { T as isForbiddenKey, _ as listPermissions } from "./permissions-DVoF6dMt.js";
4
+ import { t as expiredAt } from "./expiry-BoBJ8Tvc.js";
5
+ import { n as sameId } from "./ids-DC4V4CFu.js";
6
+ import { t as anonymousSubject } from "./subject-C6dLxqHU.js";
7
+ //#region src/core/capability.ts
8
+ function redeemerKind(redeemer) {
9
+ if (redeemer === void 0 || typeof redeemer === "string") return redeemer ?? "anyone";
10
+ return "user" in redeemer ? "user" : "scope";
11
+ }
12
+ /**
13
+ * The first rule of `policy` the capability breaks, or `undefined`. A
14
+ * lifetime rule without a known `issuedAt`, or one that is not a finite
15
+ * non-negative number, is broken: the check fails closed.
16
+ */
17
+ function linkPolicyViolation(capability, policy, issuedAt) {
18
+ const policies = Array.isArray(policy) ? policy : [policy];
19
+ for (const item of policies) {
20
+ const max = item.maxLifetime;
21
+ if (max !== void 0 && (typeof max !== "number" || !Number.isFinite(max) || max < 0 || issuedAt === void 0 || capability.expiresAt - issuedAt > max)) return "lifetime";
22
+ if (item.redeemers !== void 0 && !item.redeemers.includes(redeemerKind(capability.redeemer))) return "redeemer";
23
+ if (item.once === true && capability.once !== true) return "once";
24
+ }
25
+ }
26
+ const MAX_ID = 256;
27
+ const MAX_ENTRIES = 64;
28
+ /** A copy holding only own enumerable properties, so a prototype never supplies a field. */
29
+ function ownRecord(value) {
30
+ if (value === null || typeof value !== "object" || Array.isArray(value)) return;
31
+ const record = {};
32
+ for (const [key, item] of Object.entries(value)) if (!isForbiddenKey(key)) record[key] = item;
33
+ return record;
34
+ }
35
+ function isId(value) {
36
+ return typeof value === "string" && value.length > 0 && value.length <= MAX_ID;
37
+ }
38
+ function idList(value) {
39
+ if (!Array.isArray(value) || value.length === 0 || value.length > MAX_ENTRIES || !value.every(isId)) return;
40
+ return [...new Set(value)];
41
+ }
42
+ function parseRedeemer(input) {
43
+ if (input === "anyone" || input === "signed-in") return input;
44
+ const value = ownRecord(input);
45
+ if (value === void 0) return;
46
+ const keys = Object.keys(value);
47
+ if (keys.length === 1 && isId(value["user"])) return { user: value["user"] };
48
+ if (keys.length === 2 && isId(value["scope"]) && isId(value["id"])) return {
49
+ scope: value["scope"],
50
+ id: value["id"]
51
+ };
52
+ }
53
+ /**
54
+ * Validates an untrusted `capability` claim and returns a frozen copy with
55
+ * only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
56
+ * type in a known field rejects the whole claim.
57
+ */
58
+ function parseCapability(input) {
59
+ const value = ownRecord(input);
60
+ if (value === void 0 || value["v"] !== 1 || !isId(value["id"])) return;
61
+ if (value["holder"] !== "link" && value["holder"] !== "key") return;
62
+ const on = ownRecord(value["on"]);
63
+ if (on === void 0 || !isId(on["resource"]) || !isId(on["id"])) return;
64
+ const roles = idList(value["roles"]);
65
+ if (roles === void 0) return;
66
+ const permissions = value["permissions"] === void 0 ? void 0 : idList(value["permissions"]);
67
+ if (value["permissions"] !== void 0 && permissions === void 0) return;
68
+ const redeemer = value["redeemer"] === void 0 ? void 0 : parseRedeemer(value["redeemer"]);
69
+ if (value["redeemer"] !== void 0 && redeemer === void 0) return;
70
+ if (value["once"] !== void 0 && value["once"] !== true) return;
71
+ const expiresAt = value["expiresAt"];
72
+ if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt)) return;
73
+ return freezeDeep(compact({
74
+ v: 1,
75
+ id: value["id"],
76
+ holder: value["holder"],
77
+ on: {
78
+ resource: on["resource"],
79
+ id: on["id"]
80
+ },
81
+ roles,
82
+ permissions,
83
+ redeemer,
84
+ once: value["once"],
85
+ expiresAt
86
+ }));
87
+ }
88
+ function resourceName(resource) {
89
+ const names = new Set(listPermissions(resource).map((leaf) => leaf.resource));
90
+ const [name] = names;
91
+ if (names.size !== 1 || name === void 0) throw new Error("PermDock: capability on.resource must name exactly one resource");
92
+ return name;
93
+ }
94
+ /** Builds the v1 `Capability` for `input`; throws on an input no resolver would accept. */
95
+ function capabilityOf(input) {
96
+ const capability = parseCapability(compact({
97
+ v: 1,
98
+ id: input.id,
99
+ holder: "link",
100
+ on: {
101
+ resource: resourceName(input.on.resource),
102
+ id: input.on.id
103
+ },
104
+ roles: input.roles,
105
+ permissions: input.permissions?.map((permission) => permission.key),
106
+ redeemer: input.redeemer,
107
+ once: input.once === true ? true : void 0,
108
+ expiresAt: Math.floor(input.expiresAt)
109
+ }));
110
+ if (capability === void 0) throw new Error("PermDock: invalid capability (id, on.id and roles are required; roles and permissions hold at most 64 entries)");
111
+ return capability;
112
+ }
113
+ /**
114
+ * Signs a capability as a `permdock-capability+jwt`: `sub` is the link id,
115
+ * `exp` is `expiresAt`, and the signer sets `iss`, `iat` and a fresh `jti`.
116
+ */
117
+ function signCapability(input, signer, options = {}) {
118
+ const capability = capabilityOf(input);
119
+ const violation = options.linkPolicy === void 0 ? void 0 : linkPolicyViolation(capability, options.linkPolicy, Math.floor(Date.now() / 1e3));
120
+ if (violation !== void 0) return Promise.reject(/* @__PURE__ */ new Error(`PermDock: capability breaks the link policy (${violation})`));
121
+ return signer.sign({
122
+ capability,
123
+ sub: capability.id
124
+ }, compact({
125
+ typ: "permdock-capability+jwt",
126
+ audience: options.audience,
127
+ expiresAt: capability.expiresAt
128
+ }));
129
+ }
130
+ function holdsScope(membership, scope, id, now) {
131
+ if (expiredAt(membership, now)) return false;
132
+ if (membership.scope === scope && sameId(membership.id, id)) return true;
133
+ return scope === "tenant" && sameId(membership.tenant, id) || scope === "team" && sameId(membership.team, id);
134
+ }
135
+ /** Whether `viewer`, the request's own verified subject, may redeem a capability. */
136
+ function redeemerAllows(redeemer, viewer, now = Date.now() / 1e3) {
137
+ if (redeemer === void 0 || redeemer === "anyone") return true;
138
+ const principal = viewer?.principal ?? null;
139
+ if (principal === null || principal.kind === "link") return false;
140
+ if (redeemer === "signed-in") return true;
141
+ if ("user" in redeemer) return principal.id === redeemer.user;
142
+ return (principal.memberships ?? []).some((membership) => holdsScope(membership, redeemer.scope, redeemer.id, now));
143
+ }
144
+ /**
145
+ * The subject a verified capability acts as: a `link` principal holding
146
+ * `roles` on `on` and nothing else, with `delegation.scopes` narrowing it to
147
+ * `permissions` when the capability lists them. A `key` holder resolves to
148
+ * the anonymous subject until user-bound credentials ship.
149
+ */
150
+ function capabilitySubject(capability, options = {}) {
151
+ if (capability.holder !== "link") return anonymousSubject();
152
+ const membership = {
153
+ on: capability.on,
154
+ roles: capability.roles,
155
+ via: "link",
156
+ expiresAt: capability.expiresAt
157
+ };
158
+ const principal = compact({
159
+ id: capability.id,
160
+ kind: "link",
161
+ issuer: options.issuer,
162
+ memberships: [membership],
163
+ capability
164
+ });
165
+ return freezeDeep(compact({
166
+ principal,
167
+ delegation: capability.permissions === void 0 ? void 0 : { scopes: capability.permissions.map((key) => key.replaceAll(".", ":")) },
168
+ context: {},
169
+ expiresAt: capability.expiresAt
170
+ }));
171
+ }
172
+ //#endregion
173
+ export { ownRecord as a, signCapability as c, linkPolicyViolation as i, idList as n, parseCapability as o, isId as r, redeemerAllows as s, capabilitySubject as t };
@@ -0,0 +1,99 @@
1
+ import { Nr as Principal, Pr as Subject, Pt as TokenSigner } from "./policy-CFZAr_Al.js";
2
+ import { f as Permission, m as PermissionTree } from "./permissions-DttnqqxC.js";
3
+ //#region src/core/capability.d.ts
4
+ /**
5
+ * Who may redeem a capability: anyone holding it, any signed-in principal,
6
+ * one user, or a member of one scope instance. The viewer is the request's
7
+ * own verified subject, never a claim of the capability.
8
+ */
9
+ type CapabilityRedeemer = "anyone" | "signed-in" | {
10
+ readonly user: string;
11
+ } | {
12
+ readonly scope: string;
13
+ readonly id: string;
14
+ };
15
+ /**
16
+ * Capability v1: the `capability` claim of a `permdock-capability+jwt`. It
17
+ * holds `roles` on one resource instance (`on`, the `Membership.on` shape),
18
+ * optionally narrowed to `permissions` (keys). `id` is the link id: the
19
+ * token's `sub` and the handle an application revokes.
20
+ */
21
+ type Capability = {
22
+ readonly v: 1;
23
+ readonly id: string;
24
+ /** `key` is reserved for user-bound credentials and resolves to no subject. */
25
+ readonly holder: "link" | "key";
26
+ readonly on: {
27
+ readonly resource: string;
28
+ readonly id: string;
29
+ };
30
+ readonly roles: readonly string[];
31
+ readonly permissions?: readonly string[];
32
+ readonly redeemer?: CapabilityRedeemer;
33
+ /** One request per token: the resolver claims the token's `jti` in a `ReplayStore`. */
34
+ readonly once?: true;
35
+ /** Seconds since the epoch; also the token's `exp` and the membership's `expiresAt`. */
36
+ readonly expiresAt: number;
37
+ };
38
+ type LinkPrincipal = Principal & {
39
+ readonly kind: "link";
40
+ readonly capability: Capability;
41
+ };
42
+ type CapabilityInput = {
43
+ readonly id: string;
44
+ readonly on: {
45
+ readonly resource: Permission | PermissionTree;
46
+ readonly id: string;
47
+ };
48
+ readonly roles: readonly string[];
49
+ readonly permissions?: readonly Permission[];
50
+ readonly redeemer?: CapabilityRedeemer;
51
+ readonly once?: boolean;
52
+ readonly expiresAt: number;
53
+ };
54
+ /**
55
+ * What one scope instance (a tenant, a customer) allows for links on its
56
+ * resources. Every field only tightens; several policies must all hold.
57
+ */
58
+ type LinkPolicy = {
59
+ /** Longest a link may live, in seconds from when it was issued. */
60
+ readonly maxLifetime?: number;
61
+ /** Redeemer kinds allowed; `anyone` also covers a capability without `redeemer`. */
62
+ readonly redeemers?: readonly ("anyone" | "signed-in" | "user" | "scope")[];
63
+ /** Every link must be one-time. */
64
+ readonly once?: boolean;
65
+ };
66
+ type LinkPolicyViolation = "lifetime" | "redeemer" | "once";
67
+ type SignCapabilityOptions = {
68
+ readonly audience?: string | readonly string[];
69
+ /** Refuse to sign a link these policies would refuse at resolution. */
70
+ readonly linkPolicy?: LinkPolicy | readonly LinkPolicy[];
71
+ };
72
+ /**
73
+ * The first rule of `policy` the capability breaks, or `undefined`. A
74
+ * lifetime rule without a known `issuedAt`, or one that is not a finite
75
+ * non-negative number, is broken: the check fails closed.
76
+ */
77
+ declare function linkPolicyViolation(capability: Capability, policy: LinkPolicy | readonly LinkPolicy[], issuedAt: number | undefined): LinkPolicyViolation | undefined;
78
+ /**
79
+ * Validates an untrusted `capability` claim and returns a frozen copy with
80
+ * only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
81
+ * type in a known field rejects the whole claim.
82
+ */
83
+ declare function parseCapability(input: unknown): Capability | undefined;
84
+ /**
85
+ * Signs a capability as a `permdock-capability+jwt`: `sub` is the link id,
86
+ * `exp` is `expiresAt`, and the signer sets `iss`, `iat` and a fresh `jti`.
87
+ */
88
+ declare function signCapability(input: CapabilityInput, signer: TokenSigner, options?: SignCapabilityOptions): Promise<string>;
89
+ /**
90
+ * The subject a verified capability acts as: a `link` principal holding
91
+ * `roles` on `on` and nothing else, with `delegation.scopes` narrowing it to
92
+ * `permissions` when the capability lists them. A `key` holder resolves to
93
+ * the anonymous subject until user-bound credentials ship.
94
+ */
95
+ declare function capabilitySubject(capability: Capability, options?: {
96
+ readonly issuer?: string;
97
+ }): Subject<LinkPrincipal> | Subject;
98
+ //#endregion
99
+ export { LinkPolicyViolation as a, capabilitySubject as c, signCapability as d, LinkPolicy as i, linkPolicyViolation as l, CapabilityInput as n, LinkPrincipal as o, CapabilityRedeemer as r, SignCapabilityOptions as s, Capability as t, parseCapability as u };
@@ -0,0 +1,12 @@
1
+ import { a as CatalogDocument, c as CatalogResource, d as CatalogSupportAccess, f as CatalogUsage, i as CatalogDelegation, l as CatalogRole, n as CatalogApproval, o as CatalogGrant, p as CatalogValidity, r as CatalogBreakGlass, s as CatalogPermission, t as CatalogActivation, u as CatalogScope } from "../types-Dnemwd77.js";
2
+ //#region src/catalog/parse.d.ts
3
+ /**
4
+ * Reads a `permissions.catalog.json` document (parsed, or the JSON text) and
5
+ * validates it against `schemas/catalog-v1.json`. Returns a deep-frozen copy
6
+ * built from own keys; throws `PermDockValidationError` with every issue.
7
+ */
8
+ export declare function parseCatalog(json: unknown): CatalogDocument;
9
+ /** Keys of the permissions the catalog marks `rowConditions: true`: the SQL helpers alone cannot enforce them. */
10
+ export declare function rowConditionKeys(catalog: CatalogDocument): ReadonlySet<string>;
11
+ //#endregion
12
+ export type { CatalogActivation, CatalogApproval, CatalogBreakGlass, CatalogDelegation, CatalogDocument, CatalogGrant, CatalogPermission, CatalogResource, CatalogRole, CatalogScope, CatalogSupportAccess, CatalogUsage, CatalogValidity };
@@ -0,0 +1,2 @@
1
+ import { n as rowConditionKeys, t as parseCatalog } from "../parse-BuyjxhZV.js";
2
+ export { parseCatalog, rowConditionKeys };
@@ -0,0 +1,2 @@
1
+ import { t as runCatalog } from "./catalog-z8q6bi_r.js";
2
+ export { runCatalog };