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,82 @@
1
+ import { C as Policy, D as PolicyVocabulary, Nr as Principal, Pr as Subject, ln as PermDock } from "../policy-CFZAr_Al.js";
2
+ import { f as Permission } from "../permissions-DttnqqxC.js";
3
+ import { t as InstanceOptions } from "../instance-options-BK_rNOSC.js";
4
+ import { n as OpenApiHooks } from "../create-BWyx3jua.js";
5
+ import { n as ServerAdapterServices } from "../bind-CVy3Espv.js";
6
+ import { Middleware } from "@supabase/middleware";
7
+ //#region src/supabase/middleware.d.ts
8
+ /**
9
+ * The verified Supabase Auth access-token payload as `@supabase/server`
10
+ * contributes it under `ctx.jwtClaims`. Structural, so the `JWTClaims`
11
+ * interface from `@supabase/server` satisfies it without an import.
12
+ */
13
+ export type SupabaseJwtClaims = {
14
+ readonly sub: string;
15
+ readonly iss?: string;
16
+ readonly aud?: string | readonly string[];
17
+ readonly exp?: number;
18
+ readonly iat?: number;
19
+ readonly role?: string;
20
+ readonly email?: string;
21
+ readonly app_metadata?: Readonly<Record<string, unknown>>;
22
+ readonly user_metadata?: Readonly<Record<string, unknown>>;
23
+ readonly [claim: string]: unknown;
24
+ };
25
+ /**
26
+ * What `withPermDock` requires upstream: a `jwtClaims` contribution. Supabase's
27
+ * `withClaims`, `withRequiredClaims` and `withSupabase` all provide it; `null`
28
+ * is the anonymous caller (no bearer token or an `sb_*` API key), unless
29
+ * `secretKeys` names the secret key `withSupabase` matched.
30
+ */
31
+ export type SupabaseMiddlewareContext = {
32
+ readonly jwtClaims: SupabaseJwtClaims | null;
33
+ };
34
+ /**
35
+ * A Supabase secret key that acts as a tenant service principal. `id` is the
36
+ * principal id, `roles` are held in `tenant` only, and `permissions` caps
37
+ * what the key may do, as a `service` credential does.
38
+ */
39
+ export type SupabaseSecretKey = {
40
+ readonly id: string;
41
+ readonly tenant: string;
42
+ readonly roles: readonly string[];
43
+ readonly permissions: readonly Permission[];
44
+ };
45
+ export type SupabaseMiddlewarePermDockOptions<TUser = unknown> = InstanceOptions & ServerAdapterServices & {
46
+ /**
47
+ * Named secret keys (`SUPABASE_SECRET_KEYS`) that act as service
48
+ * principals when `withSupabase` matched one (`authMode: 'secret'` with
49
+ * that `authKeyName`). Any other key, an unnamed `secret` and every
50
+ * `publishable` key stay anonymous.
51
+ */
52
+ readonly secretKeys?: Readonly<Record<string, SupabaseSecretKey>>;
53
+ readonly subject: (ctx: SupabaseMiddlewareContext, request: Request) => TUser | Subject | null | Promise<TUser | Subject | null>;
54
+ readonly tenant?: string | ((ctx: SupabaseMiddlewareContext, request: Request) => string | undefined | Promise<string | undefined>);
55
+ };
56
+ export type WithPermDockConfig = {
57
+ /** Run `protect` before the handler; a denial short-circuits with Problem Details. */
58
+ readonly protect?: Permission;
59
+ /**
60
+ * The OAuth scopes that reach the handler: a delegated token holding none
61
+ * of them is refused with `insufficient_scope`. Without `protect`, the
62
+ * handler needs a signed-in principal and checks no permission.
63
+ */
64
+ readonly oauthScopes?: readonly string[];
65
+ /** Load the row `protect` decides on; `null` or `undefined` yields 404. */
66
+ readonly data?: (ctx: SupabaseMiddlewareContext, request: Request) => unknown;
67
+ /** `true` when `data` returns a row the server loaded; anything else is validated before the check. */
68
+ readonly trusted?: boolean;
69
+ };
70
+ /**
71
+ * A terminal pipeline handler. Generic over the accumulated context so
72
+ * `pipeline([withClaims()], permdockHandler())` infers without a wrapping
73
+ * lambda; the constraint still requires an upstream `jwtClaims` contribution.
74
+ */
75
+ export type SupabaseMiddlewareHandler = <Ctx extends SupabaseMiddlewareContext>(request: Request, ctx: Ctx) => Promise<Response>;
76
+ export type SupabaseMiddlewarePermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
77
+ readonly withPermDock: Middleware<"permdock", WithPermDockConfig | undefined, SupabaseMiddlewareContext, PermDock<V>>;
78
+ readonly permdockHandler: () => SupabaseMiddlewareHandler;
79
+ readonly openapi: OpenApiHooks;
80
+ };
81
+ export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: SupabaseMiddlewarePermDockOptions<TUser>): SupabaseMiddlewarePermDock<V>;
82
+ //#endregion
@@ -0,0 +1,102 @@
1
+ import { t as compact } from "../compact-y6vfu2_f.js";
2
+ import { r as credentialSubject } from "../credential-8P81ff4u.js";
3
+ import { i as methodNotAllowed } from "../problem-B43ztKIm.js";
4
+ import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
5
+ import { n as createServerKernel } from "../create-CPhDL6qx.js";
6
+ import { n as attached } from "../bind-VnYn2HKq.js";
7
+ import { defineMiddleware } from "@supabase/middleware";
8
+ //#region src/supabase/middleware.ts
9
+ const SECRET_KEY_NAME = /^[A-Za-z0-9_-]+$/u;
10
+ function secretKeySubjects(keys, permissions) {
11
+ const subjects = /* @__PURE__ */ new Map();
12
+ for (const [name, key] of Object.entries(keys ?? {})) {
13
+ if (!SECRET_KEY_NAME.test(name)) throw new Error(`PermDock: secretKeys name '${name}' must be a key name from SUPABASE_SECRET_KEYS, not a pattern`);
14
+ if (key.id === "" || key.tenant === "") throw new Error(`PermDock: secretKeys.${name} needs a non-empty id and tenant`);
15
+ const credential = {
16
+ v: 1,
17
+ id: `supabase-secret:${name}`,
18
+ kind: "service",
19
+ principal: key.id,
20
+ tenant: key.tenant,
21
+ roles: [...key.roles],
22
+ permissions: key.permissions.map((permission) => ({ permission: permission.key })),
23
+ createdBy: key.id,
24
+ createdAt: 0,
25
+ name
26
+ };
27
+ subjects.set(name, credentialSubject(credential, { permissions }));
28
+ }
29
+ return subjects;
30
+ }
31
+ function readString(ctx, key) {
32
+ const value = Reflect.get(ctx, key);
33
+ return typeof value === "string" ? value : void 0;
34
+ }
35
+ /**
36
+ * `authMode` and `authKeyName` are optional upstream contributions (only
37
+ * `withSupabase` makes them), so they are read here instead of being part of
38
+ * the entry's declared prerequisites.
39
+ */
40
+ function secretKeySubject(subjects, ctx) {
41
+ if (subjects.size === 0 || ctx.jwtClaims !== null || readString(ctx, "authMode") !== "secret") return;
42
+ const name = readString(ctx, "authKeyName");
43
+ return name === void 0 ? void 0 : subjects.get(name);
44
+ }
45
+ function createPermDock(policy, options) {
46
+ const contexts = /* @__PURE__ */ new WeakMap();
47
+ const tenantOption = options.tenant;
48
+ const contextFor = (request) => contexts.get(request) ?? { jwtClaims: null };
49
+ const secretKeys = secretKeySubjects(options.secretKeys, policy.permissions);
50
+ const kernel = createServerKernel(policy, compact({
51
+ subject: (request) => {
52
+ const ctx = contextFor(request);
53
+ return secretKeySubject(secretKeys, ctx) ?? options.subject(ctx, request);
54
+ },
55
+ tenant: typeof tenantOption === "function" ? (request) => tenantOption(contextFor(request), request) : tenantOption,
56
+ ...instanceOptions(options),
57
+ store: options.store,
58
+ pdp: options.pdp,
59
+ webBotAuth: options.webBotAuth,
60
+ adapter: "supabase-middleware",
61
+ wrap: options.otel
62
+ }));
63
+ const bind = (request, ctx) => {
64
+ contexts.set(request, ctx);
65
+ return request;
66
+ };
67
+ const withPermDock = defineMiddleware({
68
+ key: "permdock",
69
+ run: (config) => async (request, ctx) => {
70
+ bind(request, ctx);
71
+ if (config?.protect === void 0 && config?.oauthScopes === void 0) {
72
+ const instance = await attached(() => kernel.permdock(request));
73
+ return instance.ok ? { permdock: instance.permdock } : instance.response;
74
+ }
75
+ const loadData = config.data;
76
+ const guard = await kernel.protect(config.protect ?? null, loadData === void 0 ? void 0 : () => loadData(ctx, request), compact({
77
+ trusted: config.trusted,
78
+ oauthScopes: config.oauthScopes
79
+ }))(request);
80
+ if (!guard.ok) return guard.response;
81
+ return { permdock: guard.permdock };
82
+ }
83
+ });
84
+ const permdockHandler = () => {
85
+ const { POST, GET } = kernel.permdockHandler();
86
+ return (request, ctx) => {
87
+ bind(request, ctx);
88
+ switch (request.method) {
89
+ case "POST": return POST(request);
90
+ case "GET": return GET(request);
91
+ default: return Promise.resolve(methodNotAllowed("GET, POST"));
92
+ }
93
+ };
94
+ };
95
+ return {
96
+ withPermDock,
97
+ permdockHandler,
98
+ openapi: kernel.openapi
99
+ };
100
+ }
101
+ //#endregion
102
+ export { createPermDock };
@@ -0,0 +1,83 @@
1
+ import { i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-DWOrSQic.js";
2
+ import { defineCommand } from "citty";
3
+ //#region src/cli/commands/supabase.ts
4
+ function supabase(ctx) {
5
+ return defineCommand({
6
+ meta: {
7
+ name: "supabase",
8
+ description: COMMAND_DESCRIPTIONS.supabase
9
+ },
10
+ args: {
11
+ ...globalArgs,
12
+ area: {
13
+ type: "positional",
14
+ required: false,
15
+ description: "hook or inspect"
16
+ },
17
+ verb: {
18
+ type: "positional",
19
+ required: false,
20
+ description: "hook: generate"
21
+ },
22
+ out: {
23
+ type: "string",
24
+ description: "File to write; a bare --out on inspect writes permdock.manifest.json",
25
+ valueHint: "file"
26
+ },
27
+ check: {
28
+ type: "boolean",
29
+ description: "Exit 1 when the file on disk is stale; write nothing"
30
+ },
31
+ db: {
32
+ type: "string",
33
+ description: "Postgres connection string",
34
+ valueHint: "url"
35
+ },
36
+ "active-from": {
37
+ type: "string",
38
+ description: "Where the hook reads the active tenant",
39
+ valueHint: "source"
40
+ },
41
+ budget: {
42
+ type: "string",
43
+ description: "Byte budget for the memberships claim",
44
+ valueHint: "bytes"
45
+ },
46
+ schema: {
47
+ type: "string",
48
+ description: "Schema for the hook function",
49
+ valueHint: "name"
50
+ },
51
+ "grants-out": {
52
+ type: "string",
53
+ description: "File for the privileges db diff drops",
54
+ valueHint: "file"
55
+ }
56
+ },
57
+ async run({ args: parsed }) {
58
+ const out = parsed.out === "" ? true : stringArg(parsed.out);
59
+ const db = stringArg(parsed.db);
60
+ const activeFrom = stringArg(parsed["active-from"]);
61
+ const budget = stringArg(parsed.budget);
62
+ const schema = stringArg(parsed.schema);
63
+ const grantsOut = stringArg(parsed["grants-out"]);
64
+ const { runSupabase } = await import("./supabase-hook-D5qVd_D8.js");
65
+ ctx.report(await runSupabase({
66
+ cwd: ctx.cwd,
67
+ config: ctx.config,
68
+ rest: parsed._,
69
+ check: parsed.check === true,
70
+ json: ctx.json,
71
+ io: ctx.io,
72
+ ...out === void 0 ? {} : { out },
73
+ ...db === void 0 ? {} : { db },
74
+ ...activeFrom === void 0 ? {} : { activeFrom },
75
+ ...budget === void 0 ? {} : { budget },
76
+ ...schema === void 0 ? {} : { schema },
77
+ ...grantsOut === void 0 ? {} : { grantsOut }
78
+ }));
79
+ }
80
+ });
81
+ }
82
+ //#endregion
83
+ export { supabase };