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,206 @@
1
+ //#region src/supabase/manifest.d.ts
2
+ /**
3
+ * What `permdock supabase inspect --json` prints and `--out` writes to
4
+ * `permdock.manifest.json`: the contract between the generated hook and SQL
5
+ * helpers and a package that writes policies or claims next to them.
6
+ * `version` is the major of this shape; a field is only
7
+ * ever added within it. `schemas/supabase-manifest-v1.json` is its JSON Schema.
8
+ */
9
+ type SupabaseHookManifest = {
10
+ readonly $schema: "https://permdock.com/schemas/supabase-manifest-v1.json";
11
+ readonly version: 1;
12
+ readonly hook: {
13
+ readonly schema: string;
14
+ readonly function: "custom_access_token_hook";
15
+ readonly out: string;
16
+ readonly before?: readonly string[];
17
+ };
18
+ readonly helpers: {
19
+ readonly schema: string;
20
+ /**
21
+ * `permdock_has` and, per declared scope, `permitted_<scope>_ids`, each
22
+ * `(p_grant text)`, the membership-only `member_<scope>_ids()` and, for a
23
+ * scope with a membership source, `member_<scope>_ids_for(p_user uuid)`.
24
+ */
25
+ readonly functions: readonly string[];
26
+ };
27
+ readonly tenantClaim: string;
28
+ readonly budget: {
29
+ readonly bytes: number;
30
+ readonly measure: string;
31
+ };
32
+ readonly claims: readonly SupabaseHookClaim[];
33
+ readonly authzVersion: boolean;
34
+ /**
35
+ * With `authzVersion`, the function that bumps the listed users' `authz_ver`,
36
+ * for a membership source outside the hook. It is `security definer` and no
37
+ * client role may execute it: call it from a trigger owned by the table's owner.
38
+ */
39
+ readonly authzVersionBump?: {
40
+ readonly schema: string;
41
+ readonly function: "permdock_bump_authz_version_for";
42
+ readonly args: "p_users uuid[]";
43
+ };
44
+ /** The `supabase.hook.memberships` sources, in the order the hook reads them. */
45
+ readonly memberships: readonly SupabaseManifestMembership[];
46
+ readonly rls: SupabaseManifestRls;
47
+ /**
48
+ * Every `schema.table.column` a membership or an `attrs` claim is computed
49
+ * from. A client role that can insert or update one can grant itself access.
50
+ */
51
+ readonly decidingColumns: readonly string[];
52
+ /** The majors of the `-- permdock:hook` and `-- permdock:grants` marker lines. */
53
+ readonly markers: {
54
+ readonly hook: "v1";
55
+ readonly grants: "v1";
56
+ };
57
+ /**
58
+ * The `supabase/sdk` capability-matrix feature ids the hook, the helpers and
59
+ * `subjectFromSupabase` depend on, as of the `matrix` release tag. A client
60
+ * SDK that lacks one cannot serve this policy.
61
+ */
62
+ readonly requires?: SupabaseManifestRequires;
63
+ };
64
+ type SupabaseManifestRequires = {
65
+ /** The capability-matrix release tag, `capability-matrix-v1.<minor>.<patch>`. */
66
+ readonly matrix: string;
67
+ /** Sorted three-segment feature ids, such as `auth.session.get_claims`. */
68
+ readonly capabilities: readonly string[];
69
+ };
70
+ type SupabaseHookClaim = {
71
+ readonly name: string;
72
+ /** `permdock`, or the `<schema>.<function>` of a `supabase.hook.claims` entry. */
73
+ readonly source: string;
74
+ /** Whether the claim counts toward `budget.bytes`. */
75
+ readonly budget: boolean;
76
+ };
77
+ type SupabaseManifestColumn = {
78
+ readonly column: string;
79
+ };
80
+ /** A column of the source table, or a value every row has. */
81
+ type SupabaseManifestValue = SupabaseManifestColumn | {
82
+ readonly value: string | readonly string[];
83
+ };
84
+ /** A column that references another table: the value (role key or user id) is `column` of `table`, matched on `id`. */
85
+ type SupabaseManifestThrough = {
86
+ readonly table: string;
87
+ readonly id: string;
88
+ readonly column: string;
89
+ };
90
+ /** A role column (with `through` when it references a roles table), or the fixed roles every row holds. */
91
+ type SupabaseManifestRole = SupabaseManifestValue | (SupabaseManifestColumn & {
92
+ readonly through: SupabaseManifestThrough;
93
+ });
94
+ /** One `fromTable` or `fromJunction` source. */
95
+ type SupabaseManifestMembership = {
96
+ /** `schema.table`, `public` when the source names no schema. */
97
+ readonly table: string;
98
+ /** The user id column, with `through` when it references the table that holds the user id. */
99
+ readonly user: SupabaseManifestColumn | (SupabaseManifestColumn & {
100
+ readonly through: SupabaseManifestThrough;
101
+ });
102
+ /** A column for `fromTable`, the fixed scope for `fromJunction`. */
103
+ readonly scope: SupabaseManifestValue;
104
+ readonly id: SupabaseManifestColumn;
105
+ /** A role column, the fixed roles every row holds, or several role columns whose keys the row holds together. */
106
+ readonly role: SupabaseManifestRole | readonly SupabaseManifestRole[];
107
+ /** A `jsonb` column of ancestor ids keyed by scope, or one column per ancestor scope. */
108
+ readonly within?: SupabaseManifestColumn | {
109
+ readonly columns: Readonly<Record<string, string>>;
110
+ };
111
+ readonly via?: SupabaseManifestValue;
112
+ readonly expiresAt?: SupabaseManifestColumn;
113
+ readonly disabledAt?: SupabaseManifestColumn;
114
+ /** The columns of `table` that decide the membership. */
115
+ readonly columns: readonly string[];
116
+ };
117
+ type SupabaseManifestHelper = {
118
+ readonly name: string;
119
+ /** The argument list, `p_grant text`, or `''` for none. */
120
+ readonly args: string;
121
+ readonly returns: string;
122
+ /** The roles granted `execute`; a field view `anon` reads adds `anon` to the `authenticated` ones. */
123
+ readonly execute: readonly string[];
124
+ };
125
+ /** A table whose row says whether a user or a scope instance is active (`rls.suspension`); a missing row counts as suspended. */
126
+ type SupabaseManifestActiveRow = {
127
+ /** `schema.table`. */
128
+ readonly table: string;
129
+ /** The column holding the user id or the scope instance id. */
130
+ readonly id: string;
131
+ /** A nullable timestamp column; a row with a value is suspended. */
132
+ readonly disabledAt?: string;
133
+ /** A status column; only a row whose value is in `active` is active. */
134
+ readonly status?: string;
135
+ readonly active?: readonly string[];
136
+ /** A scope only: the permission keys members of a suspended instance still hold. */
137
+ readonly keep?: readonly string[];
138
+ };
139
+ type SupabaseManifestRls = {
140
+ readonly schema: string;
141
+ /** Where the helpers read roles and memberships: the claims (`jwt`) or the tables (`database`). */
142
+ readonly mode: "jwt" | "database";
143
+ readonly tenantClaim: string;
144
+ /** The declared scopes, root first, with the Postgres type of their ids. */
145
+ readonly scopes: readonly {
146
+ readonly name: string;
147
+ readonly type: string;
148
+ readonly within?: string;
149
+ }[];
150
+ /**
151
+ * Every function `rls generate` writes for policies and trusted SQL to
152
+ * call: `permdock_has`, `permitted_<scope>_ids`, `member_<scope>_ids` and
153
+ * `permdock_user_id`, the caller's user id; in `database` mode `permdock_has_for`, `permitted_<scope>_ids_for` and
154
+ * `member_<scope>_ids_for`; and when a role declares `assigns`,
155
+ * `permdock_can_assign`, `permdock_can_assign_any` and, with custom roles,
156
+ * `permdock_can_assign_custom_role`, each with its `_for` form where one
157
+ * is written. A helper whose `execute` is empty is for trusted SQL only.
158
+ */
159
+ readonly helpers: readonly SupabaseManifestHelper[];
160
+ /**
161
+ * The tables `member_<scope>_ids_for` reads: an `rls.memberships` table
162
+ * mapped for the scope, else `rls.membershipSources`, else the hook's
163
+ * `memberships`.
164
+ */
165
+ readonly memberships: readonly SupabaseManifestMembership[];
166
+ /** Whether custom roles live in the helpers' tables (`rls.customRoles` in `database` mode). */
167
+ readonly customRoles?: boolean;
168
+ /** The global-roles table the hook and the `database` mode helpers read. */
169
+ readonly roles?: {
170
+ readonly table: string;
171
+ readonly user: SupabaseManifestColumn;
172
+ readonly role: SupabaseManifestRole | readonly SupabaseManifestRole[];
173
+ };
174
+ /** `rls.suspension`: a suspended user, or a suspended scope instance, holds nothing but its scope's `keep`. */
175
+ readonly suspension?: {
176
+ readonly users?: SupabaseManifestActiveRow;
177
+ readonly scopes?: Readonly<Record<string, SupabaseManifestActiveRow>>;
178
+ readonly memberships?: {
179
+ readonly keep: readonly string[];
180
+ };
181
+ };
182
+ /**
183
+ * `rls.assignments`: the tables whose client writes the assignment
184
+ * triggers check against `permdock_can_assign_any`, so SQL writing rows
185
+ * there needs no role-ceiling check of its own.
186
+ */
187
+ readonly assignments?: {
188
+ readonly tables: readonly string[];
189
+ };
190
+ readonly apiKeys?: {
191
+ readonly claim: string;
192
+ readonly scopes: string;
193
+ readonly tenant: string;
194
+ readonly roles: string;
195
+ readonly serviceRoles: readonly string[];
196
+ };
197
+ };
198
+ /**
199
+ * Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
200
+ * validates it against `schemas/supabase-manifest-v1.json`. Returns a
201
+ * deep-frozen copy built from own keys; throws `PermDockValidationError`
202
+ * with every issue, so a manifest of another major is refused.
203
+ */
204
+ declare function parseSupabaseManifest(json: unknown): SupabaseHookManifest;
205
+ //#endregion
206
+ export { SupabaseManifestHelper as a, SupabaseManifestRls as c, SupabaseManifestValue as d, parseSupabaseManifest as f, SupabaseManifestColumn as i, SupabaseManifestRole as l, SupabaseHookManifest as n, SupabaseManifestMembership as o, SupabaseManifestActiveRow as r, SupabaseManifestRequires as s, SupabaseHookClaim as t, SupabaseManifestThrough as u };
@@ -0,0 +1,147 @@
1
+ import { t as compact } from "./compact-y6vfu2_f.js";
2
+ import { t as itemResourceData } from "./evaluation-items-CfCCejQd.js";
3
+ //#region src/authzen/map.ts
4
+ const UNKNOWN = {
5
+ outcome: "denied",
6
+ denials: [{
7
+ role: null,
8
+ reason: "no-grant",
9
+ detail: "unknown-permission"
10
+ }],
11
+ alternatives: []
12
+ };
13
+ const UNAVAILABLE = {
14
+ outcome: "denied",
15
+ denials: [{
16
+ role: null,
17
+ reason: "no-grant",
18
+ detail: "resource-unavailable"
19
+ }],
20
+ alternatives: []
21
+ };
22
+ function isRecord(value) {
23
+ return value !== null && typeof value === "object" && !Array.isArray(value);
24
+ }
25
+ function actionNameOf(item) {
26
+ if (typeof item.action?.name === "string") return item.action.name;
27
+ if (!isRecord(item.action?.properties)) return;
28
+ const scope = item.action.properties["scope"];
29
+ return typeof scope === "string" ? scope : void 0;
30
+ }
31
+ function permissionOf(lookup, item) {
32
+ return lookup(actionNameOf(item), item.resource);
33
+ }
34
+ function resourceData(item) {
35
+ return itemResourceData(item.resource);
36
+ }
37
+ function resourceIdOf(item) {
38
+ const id = item.resource?.id;
39
+ if (typeof id === "string" || typeof id === "number") return String(id);
40
+ }
41
+ function userFromEntity(entity) {
42
+ if (entity === void 0) return null;
43
+ const result = {};
44
+ if (typeof entity.id === "string" || typeof entity.id === "number") result["id"] = String(entity.id);
45
+ if (isRecord(entity.properties)) for (const [key, value] of Object.entries(entity.properties)) {
46
+ if (key === "actor" || key === "delegation") continue;
47
+ result[key] = value;
48
+ }
49
+ return Object.keys(result).length === 0 ? null : result;
50
+ }
51
+ function actorOf(item) {
52
+ const context = isRecord(item.context) ? item.context : {};
53
+ const fromSubject = isRecord(item.subject?.properties) ? item.subject.properties["actor"] : void 0;
54
+ const raw = context["actor"] ?? fromSubject;
55
+ if (!isRecord(raw) || typeof raw["id"] !== "string") return;
56
+ const kind = typeof raw["kind"] === "string" ? raw["kind"] : "oauth-client";
57
+ return {
58
+ id: raw["id"],
59
+ kind
60
+ };
61
+ }
62
+ function delegationOf(item) {
63
+ const context = isRecord(item.context) ? item.context : {};
64
+ const fromSubject = isRecord(item.subject?.properties) ? item.subject.properties["delegation"] : void 0;
65
+ const raw = context["delegation"] ?? fromSubject;
66
+ if (!isRecord(raw)) return;
67
+ const scopes = raw["scopes"];
68
+ const authorizationDetails = raw["authorizationDetails"];
69
+ return compact({
70
+ scopes: Array.isArray(scopes) ? scopes.filter((scope) => typeof scope === "string") : void 0,
71
+ authorizationDetails: Array.isArray(authorizationDetails) ? authorizationDetails : void 0
72
+ });
73
+ }
74
+ function tenantOf(item) {
75
+ if (!isRecord(item.context) || typeof item.context["tenant"] !== "string") return;
76
+ return item.context["tenant"];
77
+ }
78
+ function permdockContext(decision) {
79
+ switch (decision.outcome) {
80
+ case "granted": return { outcome: "granted" };
81
+ case "denied": {
82
+ const unknown = decision.denials.some((denial) => denial.detail === "unknown-permission");
83
+ return compact({
84
+ outcome: "denied",
85
+ denials: decision.denials.map((denial) => ({
86
+ role: denial.role,
87
+ reason: denial.reason
88
+ })),
89
+ reason: unknown ? "unknown-permission" : void 0
90
+ });
91
+ }
92
+ case "approval-required": return {
93
+ outcome: "approval-required",
94
+ token: decision.token
95
+ };
96
+ default: return decision;
97
+ }
98
+ }
99
+ function evaluationContext(decision) {
100
+ return { permdock: permdockContext(decision) };
101
+ }
102
+ function evaluationRow(decision) {
103
+ return {
104
+ decision: decision.outcome === "granted",
105
+ context: evaluationContext(decision)
106
+ };
107
+ }
108
+ function pathnameOf(request) {
109
+ return new URL(request.url).pathname;
110
+ }
111
+ function endsWithPath(pathname, suffix) {
112
+ return pathname === suffix || pathname.endsWith(suffix);
113
+ }
114
+ function mergeItem(shared, item) {
115
+ if (!isRecord(item)) return shared;
116
+ return compact({
117
+ subject: isRecord(item["subject"]) ? item["subject"] : shared.subject,
118
+ action: isRecord(item["action"]) ? item["action"] : shared.action,
119
+ resource: isRecord(item["resource"]) ? item["resource"] : shared.resource,
120
+ context: item["context"] ?? shared.context
121
+ });
122
+ }
123
+ function pageOf(body) {
124
+ const page = isRecord(body["page"]) ? body["page"] : {};
125
+ const raw = typeof page["token"] === "string" ? page["token"] : typeof page["next_token"] === "string" ? page["next_token"] : "0";
126
+ const parsed = Math.trunc(Number(raw));
127
+ const sizeRaw = page["limit"] ?? page["size"];
128
+ const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) : 50;
129
+ return {
130
+ offset: Number.isFinite(parsed) && parsed > 0 ? parsed : 0,
131
+ size
132
+ };
133
+ }
134
+ function paged(items, offset, size) {
135
+ const slice = items.slice(offset, offset + size);
136
+ const next = offset + slice.length;
137
+ return {
138
+ results: slice,
139
+ page: {
140
+ next_token: next < items.length ? String(next) : "",
141
+ count: slice.length,
142
+ total: items.length
143
+ }
144
+ };
145
+ }
146
+ //#endregion
147
+ export { endsWithPath as a, mergeItem as c, pathnameOf as d, permissionOf as f, userFromEntity as g, tenantOf as h, delegationOf as i, pageOf as l, resourceIdOf as m, UNKNOWN as n, evaluationRow as o, resourceData as p, actorOf as r, isRecord as s, UNAVAILABLE as t, paged as u };