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,306 @@
1
+ import { Nr as Principal, et as AuthEvent } from "./policy-CFZAr_Al.js";
2
+ import { t as ClientNames } from "./clients-C7zLFuWT.js";
3
+ import { StandardSchemaV1 } from "@standard-schema/spec";
4
+ //#region src/supabase/claims.d.ts
5
+ /** One entry of the `memberships` claim, as `schemas/supabase-claims-v1.json` defines it. */
6
+ type SupabaseMembershipClaim = {
7
+ readonly scope?: string;
8
+ /** Canonical text of the scope instance id, compared exactly. */
9
+ readonly id?: string;
10
+ /** The id of every ancestor scope instance, by scope name. */
11
+ readonly within?: Readonly<Record<string, string>>;
12
+ readonly on?: {
13
+ readonly resource: string;
14
+ readonly id: string;
15
+ };
16
+ readonly tenant?: string;
17
+ readonly team?: string;
18
+ readonly roles: readonly string[];
19
+ readonly via?: string;
20
+ /** Seconds since the epoch. */
21
+ readonly expiresAt?: number;
22
+ readonly grantedBy?: string;
23
+ readonly reason?: string;
24
+ /** The subgroup a membership source's `group` fills: a fixed name or a column. */
25
+ readonly member?: {
26
+ readonly group: string;
27
+ };
28
+ readonly managedBy?: "idp";
29
+ readonly entitlements?: readonly string[];
30
+ /** The instance or an ancestor is suspended: the permission keys the membership still grants. */
31
+ readonly keep?: readonly string[];
32
+ /** Custom roles in compact form, read by the RLS helpers in `jwt` mode. */
33
+ readonly grants?: Readonly<Record<string, unknown>>;
34
+ };
35
+ /** An RFC 8693 `act` claim: the acting party, optionally acting for another. */
36
+ type SupabaseActClaim = {
37
+ readonly sub?: string;
38
+ readonly act?: SupabaseActClaim;
39
+ readonly [claim: string]: unknown;
40
+ };
41
+ /** The claims the hook writes; each may also sit under `app_metadata`. */
42
+ type SupabasePermDockClaims<TenantClaim extends string = "tenant_id"> = {
43
+ /** Global roles: one name, a list, or `null` for none. */
44
+ readonly user_role?: string | readonly string[] | null;
45
+ readonly roles?: readonly string[];
46
+ readonly memberships?: readonly SupabaseMembershipClaim[];
47
+ /** `true` when the size budget cut `memberships` or `attrs`. */
48
+ readonly memberships_truncated?: boolean;
49
+ /** Allow-listed server-owned attributes, read as `principal.claims.attrs.<key>`. */
50
+ readonly attrs?: Readonly<Record<string, unknown>>;
51
+ /** The principal's authorization version. */
52
+ readonly authz_ver?: number;
53
+ } & { readonly [K in TenantClaim]?: string; };
54
+ /**
55
+ * A Supabase access token in PermDock's claim contract
56
+ * (`schemas/supabase-claims-v1.json`). Claims it does not name pass through.
57
+ */
58
+ type SupabaseClaims<TenantClaim extends string = "tenant_id"> = SupabasePermDockClaims<TenantClaim> & {
59
+ /** The OAuth client of a third-party app (Supabase OAuth server). */
60
+ readonly client_id?: string;
61
+ /** OAuth scopes, space-separated or as a list. */
62
+ readonly scope?: string | readonly string[];
63
+ readonly act?: SupabaseActClaim;
64
+ readonly app_metadata?: SupabasePermDockClaims<TenantClaim> & {
65
+ readonly [claim: string]: unknown;
66
+ };
67
+ readonly [claim: string]: unknown;
68
+ };
69
+ /**
70
+ * A Standard Schema v1 over {@link SupabaseClaims}. `extend(app)` adds an
71
+ * application's own claim schema: both validate the same claims, their issues
72
+ * are combined, and the app's output is merged over the base.
73
+ */
74
+ type SupabaseClaimsSchema<TenantClaim extends string = "tenant_id", Extra = unknown> = StandardSchemaV1<unknown, SupabaseClaims<TenantClaim> & Extra> & {
75
+ extend<App extends StandardSchemaV1>(app: App): SupabaseClaimsSchema<TenantClaim, Extra & StandardSchemaV1.InferOutput<App>>;
76
+ };
77
+ type SupabaseClaimsOptions<TenantClaim extends string = "tenant_id"> = {
78
+ /** The claim holding the active tenant; `rls.tenantClaim`, default `tenant_id`. */
79
+ readonly tenantClaim?: TenantClaim;
80
+ };
81
+ /**
82
+ * A Standard Schema v1 for PermDock's Supabase claims. Unknown claims pass
83
+ * through unchanged; a known claim with the wrong shape is an issue, so the
84
+ * whole token is rejected as `schemas/supabase-claims-v1.json` rejects it.
85
+ * Needs no validation library.
86
+ *
87
+ * ```ts
88
+ * sb.claims(supabaseClaims().extend(z.object({ datetime_preferences: Prefs })))
89
+ * ```
90
+ */
91
+ declare function supabaseClaims<TenantClaim extends string = "tenant_id">(options?: SupabaseClaimsOptions<TenantClaim>): SupabaseClaimsSchema<TenantClaim>;
92
+ //#endregion
93
+ //#region src/supabase/types.d.ts
94
+ type SupabasePrincipal = Principal & {
95
+ readonly claims?: Readonly<Record<string, unknown>>;
96
+ readonly email?: string;
97
+ readonly phone?: string;
98
+ readonly is_anonymous?: boolean;
99
+ };
100
+ type SupabaseInclude = "email" | "phone" | "is_anonymous";
101
+ /**
102
+ * A column that holds a foreign key: the value is `column` of `through`,
103
+ * joined on `on`. A role reads its key from a roles table
104
+ * (`{ through: 'roles', on: { role_id: 'id' }, column: 'key' }`); a
105
+ * membership source's user can read its user id from a profile table
106
+ * (`{ through: 'contact_profiles', on: { contact_profile_id: 'id' }, column: 'user_id' }`).
107
+ */
108
+ type RoleThrough = {
109
+ /** The referenced table; unqualified, it is in the schema of the table that references it. */
110
+ readonly through: string;
111
+ /** One entry: the referencing column to the column of `through` it references. */
112
+ readonly on: Readonly<Record<string, string>>;
113
+ /** The column of `through` that holds the value: the role key, or the user id. */
114
+ readonly column: string;
115
+ };
116
+ type SupabaseMembershipTable = {
117
+ readonly table: string;
118
+ readonly user: string;
119
+ /**
120
+ * The role key column, a reference to a roles table that holds the key, or
121
+ * several of them: the row holds every non-null key.
122
+ */
123
+ readonly role: string | RoleThrough | readonly (string | RoleThrough)[];
124
+ /** Per scope name, the column holding that scope's id: the table's own scope and its ancestors. */
125
+ readonly columns?: Readonly<Record<string, string>>;
126
+ readonly tenant?: string;
127
+ readonly team?: string;
128
+ readonly id?: string;
129
+ readonly expiresAt?: string;
130
+ readonly disabledAt?: string;
131
+ };
132
+ /** A table whose row says whether a user or a scope instance is active. A missing row counts as suspended. */
133
+ type SupabaseActiveRow = {
134
+ readonly table: string;
135
+ /** Column holding the user id or the scope instance id. */
136
+ readonly id: string;
137
+ /** Nullable timestamp column; a row with a value is suspended. */
138
+ readonly disabledAt?: string;
139
+ /** Status column; only a row whose value is in `active` counts as active. */
140
+ readonly status?: string;
141
+ readonly active?: readonly string[];
142
+ };
143
+ /** A scope's active-row table, with the permissions its suspended instances keep. */
144
+ type SupabaseSuspendedScope = SupabaseActiveRow & {
145
+ /**
146
+ * Permissions (references or keys) members of a suspended instance, and of
147
+ * every instance nested in it, still hold; such a membership carries them
148
+ * as `keep`.
149
+ */
150
+ readonly keep?: readonly (string | {
151
+ readonly key: string;
152
+ })[];
153
+ };
154
+ type SupabaseSuspendedMembership = {
155
+ readonly keep?: readonly (string | {
156
+ readonly key: string;
157
+ })[];
158
+ };
159
+ type SupabaseSuspension = {
160
+ /** A suspended user holds no role and no membership. */
161
+ readonly users?: SupabaseActiveRow;
162
+ /** Per scope name: a suspended instance voids its memberships and every membership nested under it, except for `keep`. */
163
+ readonly scopes?: Readonly<Record<string, SupabaseSuspendedScope>>;
164
+ readonly memberships?: SupabaseSuspendedMembership;
165
+ };
166
+ type SupabaseMemberships = {
167
+ /** The membership table of each named scope. */
168
+ readonly scopes?: Readonly<Record<string, SupabaseMembershipTable>>;
169
+ readonly tenant?: SupabaseMembershipTable;
170
+ readonly team?: SupabaseMembershipTable;
171
+ readonly resource?: Readonly<Record<string, SupabaseMembershipTable>>;
172
+ };
173
+ type AuthorizeSqlOptions = {
174
+ /** Postgres schema of `authorize`, `user_roles`, `role_permissions` and `app_permission`. Default `permdock`. */
175
+ readonly schema?: string;
176
+ /** `database` (default) reads the tables on every call; `jwt` reads the hook-injected claims. */
177
+ readonly authorize?: "database" | "jwt";
178
+ /** The policy's first scope, which `requested_tenant` is an instance of. Default `tenant`. */
179
+ readonly scope?: string;
180
+ /** Membership table for tenant requests in `database` mode; without one they deny. */
181
+ readonly tenant?: boolean | SupabaseMembershipTable;
182
+ /**
183
+ * Tenant requests also answer from custom roles, through the `permdock_custom_keys` function
184
+ * `permdock rls generate --custom-roles` emits: the `custom_role_*` tables in `database` mode,
185
+ * the `memberships[].grants` claim in `jwt` mode. `declared` role names never resolve as custom.
186
+ */
187
+ readonly customRoles?: {
188
+ readonly declared: readonly string[];
189
+ /** Stored allows may carry a level (`custom_role_permissions.level`). */
190
+ readonly levels?: true;
191
+ };
192
+ /** A suspended user, or a suspended instance of `scope` for a tenant request, answers `false`. */
193
+ readonly suspension?: SupabaseSuspension;
194
+ };
195
+ /** A permission reference; `rls generate` reads only its `key`. */
196
+ type SupabasePermissionRef = {
197
+ readonly key: string;
198
+ };
199
+ /**
200
+ * Private Realtime channels: topic patterns such as `org:{organization}:chat`,
201
+ * with one `{<scope>}` segment that holds a scope instance id.
202
+ */
203
+ type SupabaseRealtime = {
204
+ readonly topics: Readonly<Record<string, {
205
+ /** Receive broadcast and presence: `select` on `realtime.messages`. */
206
+ readonly read: SupabasePermissionRef;
207
+ /** Send broadcast and track presence: `insert`. */
208
+ readonly write?: SupabasePermissionRef;
209
+ }>>;
210
+ };
211
+ /** Storage buckets whose object paths hold a scope instance id in folder `folder` (default 1). */
212
+ type SupabaseStorage = {
213
+ readonly buckets: Readonly<Record<string, {
214
+ readonly scope: string;
215
+ readonly folder?: number;
216
+ readonly read?: SupabasePermissionRef;
217
+ readonly write?: SupabasePermissionRef;
218
+ readonly delete?: SupabasePermissionRef;
219
+ }>>;
220
+ };
221
+ type SupabaseRlsOptions = {
222
+ readonly roleClaim?: string;
223
+ readonly tenantClaim?: string;
224
+ /** Postgres type of tenant columns; the tenant claim is cast to it. `rls generate` defaults to `uuid`. */
225
+ readonly tenantType?: string;
226
+ readonly memberships?: SupabaseMembershipTable | SupabaseMemberships;
227
+ readonly suspension?: SupabaseSuspension;
228
+ readonly realtime?: SupabaseRealtime;
229
+ readonly storage?: SupabaseStorage;
230
+ };
231
+ type SupabaseRlsConfig = {
232
+ readonly dialect: "supabase";
233
+ readonly roleClaim: string;
234
+ readonly tenantClaim: string;
235
+ readonly tenantType?: string;
236
+ readonly memberships?: SupabaseMemberships;
237
+ readonly suspension?: SupabaseSuspension;
238
+ readonly realtime?: SupabaseRealtime;
239
+ readonly storage?: SupabaseStorage;
240
+ };
241
+ /**
242
+ * The structural shape `subjectFromSupabaseSession` reads: a discriminant and the verified JWT claims.
243
+ * Matches any session object of that shape without importing its library.
244
+ */
245
+ type SupabaseSessionLike = {
246
+ readonly kind: string;
247
+ readonly claims?: unknown;
248
+ };
249
+ type SupabaseSubjectOptions = {
250
+ readonly roles?: string;
251
+ readonly tenant?: string;
252
+ readonly memberships?: string;
253
+ readonly schema?: StandardSchemaV1;
254
+ readonly include?: readonly SupabaseInclude[];
255
+ readonly declared?: readonly string[];
256
+ /** Claim holding plan names per tenant id; the active tenant's entry becomes `principal.plans`. */
257
+ readonly plans?: string;
258
+ /** Names for OAuth client ids: an `oauth-client` actor gets `client` set to the name of its id, which a policy delegation matches with `to: { kind: 'oauth-client', client }`. */
259
+ readonly clients?: ClientNames;
260
+ /** `'deny'` maps a token with `is_anonymous: true` (`signInAnonymously()`) to the anonymous subject, as `rls.anonymousSignIns: 'deny'` does in RLS. */
261
+ readonly anonymousSignIns?: "deny";
262
+ /**
263
+ * `true` once the caller checked the session against the Auth server for this request
264
+ * (`auth.getUser()` or an equivalent session check): a token with a `session_id` gets
265
+ * `subject.liveSession`, which `{ subject: { session: { live: true } } }` requires. Never read from claims.
266
+ */
267
+ readonly liveSession?: boolean;
268
+ /** Audit hook: `membership-dropped` for a `memberships` entry that could not be read, `invalid-chain` for a malformed `act`. */
269
+ readonly onAuth?: (event: AuthEvent) => void;
270
+ };
271
+ /**
272
+ * Who acts for the user. `oauth-client`: a third-party app or an agent chain (`client_id`, or an
273
+ * `act` without `kind`). `support`: a support session (`act.kind: "support"` with `session_id`).
274
+ * `impersonation`: an admin acting as the user (`act.kind: "impersonation"`). `chain` is a copy of
275
+ * the token's `act` claim when it has one.
276
+ */
277
+ type SupabaseActor = {
278
+ readonly id: string;
279
+ readonly kind: "oauth-client";
280
+ readonly chain?: SupabaseActClaim;
281
+ } | {
282
+ readonly id: string;
283
+ readonly kind: "support";
284
+ readonly sessionId: string;
285
+ readonly readOnly: boolean;
286
+ readonly reason?: string;
287
+ readonly chain: SupabaseActClaim;
288
+ } | {
289
+ readonly id: string;
290
+ readonly kind: "impersonation";
291
+ readonly reason?: string;
292
+ readonly chain: SupabaseActClaim;
293
+ };
294
+ /** `actorOf` output: `{ ok: false }` must deny. */
295
+ type SupabaseActorResult = {
296
+ readonly ok: true;
297
+ readonly actor?: SupabaseActor;
298
+ } | {
299
+ readonly ok: false;
300
+ readonly reason: "invalid-chain";
301
+ };
302
+ type SupabaseDelegation = {
303
+ readonly scopes: readonly string[];
304
+ };
305
+ //#endregion
306
+ export { SupabaseClaimsSchema as C, supabaseClaims as E, SupabaseClaimsOptions as S, SupabasePermDockClaims as T, SupabaseSuspendedMembership as _, SupabaseActorResult as a, SupabaseActClaim as b, SupabaseMembershipTable as c, SupabaseRealtime as d, SupabaseRlsConfig as f, SupabaseSubjectOptions as g, SupabaseStorage as h, SupabaseActor as i, SupabasePermissionRef as l, SupabaseSessionLike as m, RoleThrough as n, SupabaseDelegation as o, SupabaseRlsOptions as p, SupabaseActiveRow as r, SupabaseInclude as s, AuthorizeSqlOptions as t, SupabasePrincipal as u, SupabaseSuspendedScope as v, SupabaseMembershipClaim as w, SupabaseClaims as x, SupabaseSuspension as y };
@@ -0,0 +1,7 @@
1
+ import { a as PermDockPluginOptions } from "../types-BPxgszlT.js";
2
+ import { createUnplugin } from "unplugin";
3
+ //#region src/unplugin/index.d.ts
4
+ type CreateUnplugin = typeof createUnplugin<PermDockPluginOptions | undefined>;
5
+ export declare const createPermDockUnplugin: ReturnType<CreateUnplugin>;
6
+ //#endregion
7
+ export type { PermDockPluginOptions };
@@ -0,0 +1,31 @@
1
+ import { n as createCollectScheduler, r as report } from "../watch-UihESpsJ.js";
2
+ import { t as peerHint } from "../peer-BOr_kJE1.js";
3
+ import { createRequire } from "node:module";
4
+ //#region src/unplugin/index.ts
5
+ function loadCreateUnplugin() {
6
+ try {
7
+ return createRequire(import.meta.url)("unplugin").createUnplugin;
8
+ } catch {
9
+ throw new Error(peerHint("unplugin", "permdock/unplugin"));
10
+ }
11
+ }
12
+ function collectPlugin(options) {
13
+ const schedulers = /* @__PURE__ */ new Map();
14
+ function schedulerFor(cwd) {
15
+ const scheduler = schedulers.get(cwd) ?? createCollectScheduler(cwd, options);
16
+ schedulers.set(cwd, scheduler);
17
+ return scheduler;
18
+ }
19
+ return {
20
+ name: "permdock-collect",
21
+ async buildStart() {
22
+ report(await schedulerFor(process.cwd()).run(options?.check === true));
23
+ },
24
+ watchChange(id) {
25
+ schedulerFor(process.cwd()).changed(id);
26
+ }
27
+ };
28
+ }
29
+ const createPermDockUnplugin = loadCreateUnplugin()(collectPlugin);
30
+ //#endregion
31
+ export { createPermDockUnplugin };
@@ -0,0 +1,42 @@
1
+ import { a as listArg, i as globalArgs, t as COMMAND_DESCRIPTIONS } from "./commands-DWOrSQic.js";
2
+ import { defineCommand } from "citty";
3
+ //#region src/cli/commands/usage.ts
4
+ function usage(ctx) {
5
+ return defineCommand({
6
+ meta: {
7
+ name: "usage",
8
+ description: COMMAND_DESCRIPTIONS.usage
9
+ },
10
+ args: {
11
+ ...globalArgs,
12
+ strict: {
13
+ type: "boolean",
14
+ description: "Exit 1 on any finding"
15
+ },
16
+ ignore: {
17
+ type: "string",
18
+ description: "Permission keys or globs to skip, repeatable",
19
+ valueHint: "glob"
20
+ },
21
+ "dynamic-as-used": {
22
+ type: "boolean",
23
+ description: "Count computed permission references as uses"
24
+ }
25
+ },
26
+ async run({ args: parsed, rawArgs }) {
27
+ const result = await (await import("./usage-D82l1CwK.js")).runUsage({
28
+ cwd: ctx.cwd,
29
+ config: ctx.config,
30
+ ignore: listArg(rawArgs, "ignore"),
31
+ strict: parsed.strict === true,
32
+ json: ctx.json,
33
+ dynamicAsUsed: parsed["dynamic-as-used"] === true,
34
+ now: ctx.now,
35
+ io: ctx.io
36
+ });
37
+ ctx.report(result);
38
+ }
39
+ });
40
+ }
41
+ //#endregion
42
+ export { usage };
@@ -0,0 +1,2 @@
1
+ import { t as runUsage } from "./usage-DG1oeCca.js";
2
+ export { runUsage };