permdock 0.3.1 → 0.5.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 (552) hide show
  1. package/README.md +37 -35
  2. package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
  3. package/dist/a2a/index.d.ts +8 -6
  4. package/dist/a2a/index.js +21 -31
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -23
  10. package/dist/ai-sdk/index.js +38 -21
  11. package/dist/app-data-MuyzVqX8.js +60 -0
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  19. package/dist/arazzo-B6lebmiQ.js +36 -0
  20. package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
  21. package/dist/args-IIolxxKA.js +197 -0
  22. package/dist/astro/index.d.ts +43 -0
  23. package/dist/astro/index.js +27 -0
  24. package/dist/audience-Dg8XsRaO.js +55 -0
  25. package/dist/auth-DRLEizbL.js +178 -0
  26. package/dist/authzen/index.d.ts +26 -6
  27. package/dist/authzen/index.js +228 -75
  28. package/dist/automation-BMZPIVUM.d.ts +114 -0
  29. package/dist/automation-DVjOckjV.js +157 -0
  30. package/dist/better-auth/index.d.ts +8 -6
  31. package/dist/better-auth/index.js +11 -23
  32. package/dist/better-supabase/index.d.ts +438 -86
  33. package/dist/better-supabase/index.js +1027 -184
  34. package/dist/bind--9EFVYWF.d.ts +38 -0
  35. package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
  36. package/dist/body-CH5of8Ne.js +10 -0
  37. package/dist/body-text-QcXok_SI.js +52 -0
  38. package/dist/build-instance-BMnAudHn.js +52 -0
  39. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
  40. package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
  41. package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
  42. package/dist/casbin-Cr7RLtA3.js +30 -0
  43. package/dist/casbin-Dyu2gnUD.js +234 -0
  44. package/dist/casl-64gpT-8x.js +24 -0
  45. package/dist/casl-DjEDhTCP.js +299 -0
  46. package/dist/catalog/index.d.ts +74 -2
  47. package/dist/catalog/index.js +51 -2
  48. package/dist/catalog-BECMPrwc.js +100 -0
  49. package/dist/catalog-DjhMYYCq.js +1 -0
  50. package/dist/catalog-R_A__RsH.js +52 -0
  51. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
  52. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  53. package/dist/chat/index.d.ts +2 -0
  54. package/dist/chat/index.js +224 -0
  55. package/dist/chat-sdk/index.d.ts +87 -0
  56. package/dist/chat-sdk/index.js +197 -0
  57. package/dist/claims-map-7oQ3ue4X.js +13 -0
  58. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  59. package/dist/claude-agent/index.d.ts +7 -14
  60. package/dist/claude-agent/index.js +26 -30
  61. package/dist/clerk/index.d.ts +9 -8
  62. package/dist/clerk/index.js +15 -45
  63. package/dist/cli/bin.js +36 -17
  64. package/dist/cli/index.d.ts +20 -6
  65. package/dist/cli/index.js +164 -4
  66. package/dist/cloud/index.d.ts +102 -63
  67. package/dist/cloud/index.js +240 -347
  68. package/dist/cloud-CIoHNevm.js +87 -0
  69. package/dist/codemod-Bmj9dWMH.js +37 -0
  70. package/dist/codemod-Cxvvc70T.js +2084 -0
  71. package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
  72. package/dist/collect-DloHbDVa.js +55 -0
  73. package/dist/collect-FlXJlhus.js +1 -0
  74. package/dist/command-L8EstFNm.js +6 -0
  75. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  76. package/dist/compile/index.d.ts +1 -1
  77. package/dist/compile/index.js +1 -2
  78. package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
  79. package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  80. package/dist/completion-BqhRBJD8.js +143 -0
  81. package/dist/config-B46rm9sc.js +26 -0
  82. package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
  83. package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
  84. package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
  85. package/dist/constants-DcJABbLW.js +20 -0
  86. package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
  87. package/dist/convex/index.d.ts +11 -10
  88. package/dist/convex/index.js +18 -18
  89. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  90. package/dist/create-BDS7wc3y.d.ts +138 -0
  91. package/dist/create-BFfm17UA.d.ts +110 -0
  92. package/dist/create-BWRSXgOF.js +403 -0
  93. package/dist/create-C3b4B5eF.js +130 -0
  94. package/dist/create-DnrmLnLW.js +323 -0
  95. package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
  96. package/dist/credentials-DPyHmYz5.js +74 -0
  97. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  98. package/dist/delegation-DaXVdDhM.js +286 -0
  99. package/dist/delegation-input-FTxMK3ji.js +19 -0
  100. package/dist/delivery/index.d.ts +5 -0
  101. package/dist/delivery/index.js +5 -0
  102. package/dist/delivery-DCAgNyCn.js +499 -0
  103. package/dist/delivery-event-xX4obB8F.js +40 -0
  104. package/dist/denied-text-D8jDHgsl.d.ts +19 -0
  105. package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
  106. package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
  107. package/dist/device-BARQ8eYG.js +193 -0
  108. package/dist/diff-CxZo9pTq.js +37 -0
  109. package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
  110. package/dist/doctor-CxiwSfqH.js +44 -0
  111. package/dist/doctor-DFjUxf2f.js +2361 -0
  112. package/dist/drizzle/index.d.ts +5 -3
  113. package/dist/drizzle/index.js +6 -14
  114. package/dist/elysia/index.d.ts +16 -13
  115. package/dist/elysia/index.js +14 -13
  116. package/dist/env-DJZrPjRi.js +8 -0
  117. package/dist/errors-BDUwg2qC.js +27 -0
  118. package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
  119. package/dist/errors-BWXBMaKK.d.ts +11 -0
  120. package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  121. package/dist/errors-CWTY6uih.js +143 -0
  122. package/dist/evaluate-_R8QkWaf.js +1732 -0
  123. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  124. package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
  125. package/dist/eve/index.d.ts +12 -16
  126. package/dist/eve/index.js +23 -29
  127. package/dist/event-time-CsegxXxB.js +23 -0
  128. package/dist/expiry-D4_YKRKD.js +52 -0
  129. package/dist/express/index.d.ts +13 -10
  130. package/dist/express/index.js +14 -12
  131. package/dist/fastify/index.d.ts +26 -13
  132. package/dist/fastify/index.js +17 -36
  133. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  134. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  135. package/dist/fields-D9tPVUUS.js +203 -0
  136. package/dist/files-C5ZI27eV.js +124 -0
  137. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  138. package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
  139. package/dist/flags-C3DktBDY.js +86 -0
  140. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
  141. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  142. package/dist/grantee-Cn1HyUsI.js +254 -0
  143. package/dist/grantee-conditions-CcXf8hMM.js +271 -0
  144. package/dist/grantee-match-DHArqY82.js +142 -0
  145. package/dist/h3/index.d.ts +37 -0
  146. package/dist/h3/index.js +35 -0
  147. package/dist/headers-BIjfMaoC.js +8 -0
  148. package/dist/headers-CIbDTUTK.d.ts +7 -0
  149. package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
  150. package/dist/hono/index.d.ts +12 -9
  151. package/dist/hono/index.js +14 -13
  152. package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
  153. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  154. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  155. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  156. package/dist/http-DXJ37RDA.js +46 -0
  157. package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
  158. package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
  159. package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
  160. package/dist/index-BcHcPyIo.d.ts +110 -0
  161. package/dist/index-CaxrMD1A.d.ts +1 -0
  162. package/dist/index-Chrs5fQ-.d.ts +210 -0
  163. package/dist/index-CxGUswIC.d.ts +431 -0
  164. package/dist/index-D8EovfsP.d.ts +91 -0
  165. package/dist/index-DOVf7RJv.d.ts +900 -0
  166. package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
  167. package/dist/index.d.ts +20 -14
  168. package/dist/index.js +33 -23
  169. package/dist/init-DeMYsnYJ.js +96 -0
  170. package/dist/init-GG6Jh8HD.js +95 -0
  171. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  172. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  173. package/dist/instant-BluqDvyS.js +19 -0
  174. package/dist/internals-Dk8A8fX3.js +17 -0
  175. package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
  176. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  177. package/dist/jwt/index.d.ts +18 -11
  178. package/dist/jwt/index.js +166 -145
  179. package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
  180. package/dist/kysely/index.d.ts +5 -3
  181. package/dist/kysely/index.js +6 -14
  182. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  183. package/dist/load-BxEtwlBS.js +1 -0
  184. package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
  185. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  186. package/dist/login-Dfe5RlYk.js +68 -0
  187. package/dist/login-imhuwvn3.js +254 -0
  188. package/dist/manifest-C8IzW3Do.js +42 -0
  189. package/dist/manifest-CtKR3GXL.js +370 -0
  190. package/dist/manifest-json-CAGzls-C.js +9 -0
  191. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  192. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  193. package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
  194. package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
  195. package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
  196. package/dist/mcp/index.d.ts +36 -9
  197. package/dist/mcp/index.js +476 -448
  198. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
  199. package/dist/nest/index.d.ts +12 -9
  200. package/dist/nest/index.js +20 -20
  201. package/dist/next/index.d.ts +40 -20
  202. package/dist/next/index.js +37 -39
  203. package/dist/next/plugin.d.ts +1 -1
  204. package/dist/next/plugin.js +2 -2
  205. package/dist/node/index.d.ts +10 -10
  206. package/dist/node/index.js +7 -9
  207. package/dist/ocsf-BFp-PZZA.js +126 -0
  208. package/dist/openai/index.d.ts +9 -16
  209. package/dist/openai/index.js +18 -25
  210. package/dist/openapi/index.d.ts +3 -3
  211. package/dist/openapi/index.js +1 -1
  212. package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
  213. package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
  214. package/dist/openapi-ahr8rHu3.js +138 -0
  215. package/dist/operation-findings-DgATDpvh.js +36 -0
  216. package/dist/operations-CxybZErY.d.ts +59 -0
  217. package/dist/orpc/index.d.ts +13 -10
  218. package/dist/orpc/index.js +23 -20
  219. package/dist/otel/index.d.ts +3 -2
  220. package/dist/otel/index.js +53 -27
  221. package/dist/output-Dyw8fyPF.js +88 -0
  222. package/dist/output-files-B3IZJksC.js +1 -0
  223. package/dist/output-files-DhRBBE4n.js +138 -0
  224. package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
  225. package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
  226. package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
  227. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
  228. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  229. package/dist/parse-request-D_tUXG6M.js +26 -0
  230. package/dist/paths-DXSHAMIa.js +42 -0
  231. package/dist/pdp/index.d.ts +7 -3
  232. package/dist/pdp/index.js +47 -29
  233. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  234. package/dist/peer-CRvC7Hg1.js +1 -0
  235. package/dist/permdock-B9JxkBwC.js +868 -0
  236. package/dist/permdock-D7eeLJER.d.ts +502 -0
  237. package/dist/permission-registry-Br4jSNVi.js +385 -0
  238. package/dist/permissions-B-wCP5ZC.js +30 -0
  239. package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
  240. package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  241. package/dist/policies-CO1oOymN.js +295 -0
  242. package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  243. package/dist/policy-DLZJ5gAp.js +399 -0
  244. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  245. package/dist/policy-module-CTlwMvLI.js +89 -0
  246. package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
  247. package/dist/postgrest-CW0IqC-U.js +566 -0
  248. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  249. package/dist/powersync-BHfuehf3.js +62 -0
  250. package/dist/powersync-CbzkqL_M.js +1 -0
  251. package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
  252. package/dist/preset/index.d.ts +146 -0
  253. package/dist/preset/index.js +1 -0
  254. package/dist/preset-DZdU0tne.js +1768 -0
  255. package/dist/principal-source-pHneukrx.js +103 -0
  256. package/dist/prisma/index.d.ts +6 -3
  257. package/dist/prisma/index.js +6 -12
  258. package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
  259. package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  260. package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
  261. package/dist/problem-types-CJ2325SZ.js +5 -0
  262. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  263. package/dist/protected-DEPHc2xV.d.ts +38 -0
  264. package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
  265. package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
  266. package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  267. package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
  268. package/dist/pull-BgIfno6w.js +256 -0
  269. package/dist/pull-ByOks_Tg.js +1 -0
  270. package/dist/push-CmFVBOeI.js +116 -0
  271. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  272. package/dist/pushed-policy-DobP7AHI.js +238 -0
  273. package/dist/react/index.d.ts +8 -8
  274. package/dist/react/index.js +6 -6
  275. package/dist/react/provider-client.d.ts +1 -1
  276. package/dist/react/provider-client.js +1 -2
  277. package/dist/react-native/index.d.ts +24 -63
  278. package/dist/react-native/index.js +45 -27
  279. package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
  280. package/dist/relation-walk-3OyDBF0S.js +186 -0
  281. package/dist/relations-BnCWnJGI.js +163 -0
  282. package/dist/renames-CGj7YwcQ.js +175 -0
  283. package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  284. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  285. package/dist/request-context-BTRTG7OT.js +71 -0
  286. package/dist/request-context-C2_1lchh.d.ts +5 -0
  287. package/dist/request-schema-CMreVuFM.js +148 -0
  288. package/dist/resend/index.d.ts +126 -0
  289. package/dist/resend/index.js +379 -0
  290. package/dist/resource-relations-D_jw0BFx.js +243 -0
  291. package/dist/retire-CALjIQ7e.js +240 -0
  292. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  293. package/dist/rls-BA8an5Ap.js +336 -0
  294. package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
  295. package/dist/role-builder-CXbis5-X.js +623 -0
  296. package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
  297. package/dist/run-CNsApDpd.js +1 -0
  298. package/dist/run-DOfMtc9V.js +723 -0
  299. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  300. package/dist/run-ticket-sxFI6LAk.js +337 -0
  301. package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
  302. package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
  303. package/dist/scan-BOI5tJ-6.js +29 -0
  304. package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
  305. package/dist/schema-yLuBWWsh.js +130 -0
  306. package/dist/scim/index.d.ts +2 -2
  307. package/dist/scim/index.js +1 -2
  308. package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
  309. package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
  310. package/dist/server/index.d.ts +13 -134
  311. package/dist/server/index.js +13 -10
  312. package/dist/server-DqCT4CgZ.js +453 -0
  313. package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
  314. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  315. package/dist/shared-CD11nBbC.js +304 -0
  316. package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
  317. package/dist/signals-D3NcTKUS.js +32 -0
  318. package/dist/sink-BEZSlMS_.js +957 -0
  319. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  320. package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
  321. package/dist/skills-CTYwkl44.js +51 -0
  322. package/dist/snapshot-CXUWfsNy.js +269 -0
  323. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  324. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  325. package/dist/solid/index.d.ts +24 -25
  326. package/dist/solid/index.js +41 -11
  327. package/dist/solid-start/index.d.ts +52 -0
  328. package/dist/solid-start/index.js +49 -0
  329. package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
  330. package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
  331. package/dist/sql-B5T1IL83.js +55 -0
  332. package/dist/src-DLfUWFAI.js +1851 -0
  333. package/dist/ssf/index.d.ts +4 -4
  334. package/dist/ssf/index.js +440 -106
  335. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  336. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  337. package/dist/storage-C2bWdvJH.js +132 -0
  338. package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
  339. package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
  340. package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
  341. package/dist/stores-ClZUgeoP.d.ts +30 -0
  342. package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  343. package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
  344. package/dist/style-DiKWnAvn.js +1 -0
  345. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  346. package/dist/subject-BGoM5o8B.js +17 -0
  347. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  348. package/dist/supabase/index.d.ts +23 -106
  349. package/dist/supabase/index.js +5 -4
  350. package/dist/supabase/middleware.d.ts +13 -6
  351. package/dist/supabase/middleware.js +16 -11
  352. package/dist/supabase-9pqI57pW.js +92 -0
  353. package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
  354. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  355. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
  356. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  357. package/dist/support-session-C6xJQYut.js +158 -0
  358. package/dist/svelte/Protected.svelte +11 -4
  359. package/dist/svelte/index.d.ts +7 -7
  360. package/dist/svelte/index.js +26 -12
  361. package/dist/svelte/runtime.d.ts +10 -3
  362. package/dist/svelte/runtime.js +4 -3
  363. package/dist/svelte/source.d.ts +7 -7
  364. package/dist/svelte/source.js +5 -5
  365. package/dist/sveltekit/index.d.ts +51 -0
  366. package/dist/sveltekit/index.js +27 -0
  367. package/dist/tanstack-start/index.d.ts +51 -0
  368. package/dist/tanstack-start/index.js +40 -0
  369. package/dist/target-Bw37TFNA.js +51 -0
  370. package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
  371. package/dist/terminal/index.d.ts +11 -9
  372. package/dist/terminal/index.js +36 -316
  373. package/dist/testing/index.d.ts +391 -106
  374. package/dist/testing/index.js +4574 -1286
  375. package/dist/testing/saas/index.d.ts +9 -8
  376. package/dist/testing/saas/index.js +2 -2
  377. package/dist/testing/saas/permissions.d.ts +1 -1
  378. package/dist/testing/saas/permissions.js +1 -2
  379. package/dist/text-BMFRfBqc.js +8 -0
  380. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  381. package/dist/thenable-yD7SabqG.js +31 -0
  382. package/dist/time-DkWjdL98.js +71 -0
  383. package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
  384. package/dist/tool-refusal-CMLN5xhn.js +41 -0
  385. package/dist/trpc/index.d.ts +12 -9
  386. package/dist/trpc/index.js +18 -17
  387. package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
  388. package/dist/types-BNORmDM8.d.ts +172 -0
  389. package/dist/types-BjV-fqcA.d.ts +57 -0
  390. package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
  391. package/dist/types-C8-KNsFf.d.ts +107 -0
  392. package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  393. package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
  394. package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
  395. package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
  396. package/dist/types-DX0LaKTb.d.ts +157 -0
  397. package/dist/types-DiQjupG2.d.ts +332 -0
  398. package/dist/types-DqzsnlSA.js +67 -0
  399. package/dist/types-_sHy8BQf.d.ts +65 -0
  400. package/dist/types-fbZ7JEXr.d.ts +89 -0
  401. package/dist/types-tIgIeIKJ.d.ts +66 -0
  402. package/dist/unplugin/index.d.ts +1 -1
  403. package/dist/unplugin/index.js +2 -2
  404. package/dist/usage-CHOtwL19.js +1 -0
  405. package/dist/usage-DHtE8j4E.js +32 -0
  406. package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
  407. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  408. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  409. package/dist/validity-CZ7-y0Cj.js +79 -0
  410. package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
  411. package/dist/verify-DbCL9bnB.js +1770 -0
  412. package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
  413. package/dist/version-DXkYUISx.js +1 -0
  414. package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
  415. package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
  416. package/dist/vue/index.d.ts +25 -21
  417. package/dist/vue/index.js +25 -9
  418. package/dist/waiter-BGUtGYoU.js +67 -0
  419. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  420. package/dist/watch-Cb-NcaUw.js +1 -0
  421. package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
  422. package/dist/webmcp/index.d.ts +2 -2
  423. package/dist/webmcp/index.js +13 -37
  424. package/dist/where-scope-Dv-WTP-w.js +306 -0
  425. package/dist/who-can-D0QoYbEb.js +364 -0
  426. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  427. package/dist/wire-denial-C7PaVYEM.js +27 -0
  428. package/dist/workflow/index.d.ts +5 -0
  429. package/dist/workflow/index.js +223 -0
  430. package/dist/workflow-sdk/index.d.ts +56 -0
  431. package/dist/workflow-sdk/index.js +78 -0
  432. package/dist/wrap-Bd1Tejur.d.ts +15 -0
  433. package/dist/wrap-gX61EtpB.js +27 -0
  434. package/package.json +140 -41
  435. package/schemas/access-event-v1.json +118 -0
  436. package/schemas/approval-request-v1.json +34 -1
  437. package/schemas/approval-signature-v1.json +94 -0
  438. package/schemas/automation-event-v1.json +113 -0
  439. package/schemas/capability-v1.json +84 -0
  440. package/schemas/catalog-event-v1.json +87 -0
  441. package/schemas/catalog-v1.json +129 -12
  442. package/schemas/cli-commands-v1.json +164 -0
  443. package/schemas/cli-result-v1.json +96 -0
  444. package/schemas/cloud-api-v1.json +5407 -0
  445. package/schemas/connector-v1.json +408 -0
  446. package/schemas/credential-event-v1.json +81 -0
  447. package/schemas/credential-v1.json +134 -0
  448. package/schemas/decision-event-v1.json +288 -0
  449. package/schemas/delivery-event-v1.json +117 -0
  450. package/schemas/directory-event-v1.json +85 -0
  451. package/schemas/evidence-export-v1.json +54 -0
  452. package/schemas/membership-event-v1.json +93 -0
  453. package/schemas/policy-v1.json +68 -0
  454. package/schemas/pushed-policy-v1.json +236 -0
  455. package/schemas/run-v1.json +162 -0
  456. package/schemas/snapshot-v1.json +138 -0
  457. package/schemas/supabase-claims-v1.json +4 -4
  458. package/schemas/supabase-manifest-v1.json +5 -1
  459. package/schemas/support-session-v1.json +111 -0
  460. package/skills/permdock/SKILL.md +16 -12
  461. package/skills/permdock-agents/SKILL.md +40 -23
  462. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  463. package/skills/permdock-agents/references/runtimes.md +22 -18
  464. package/skills/permdock-approvals/SKILL.md +29 -13
  465. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  466. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  467. package/skills/permdock-audit/SKILL.md +3 -3
  468. package/skills/permdock-credentials/SKILL.md +5 -5
  469. package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
  470. package/skills/permdock-data/SKILL.md +6 -6
  471. package/skills/permdock-data/references/queries-and-rls.md +13 -8
  472. package/skills/permdock-data/references/relationships.md +3 -3
  473. package/skills/permdock-tenancy/SKILL.md +20 -7
  474. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  475. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  476. package/skills/permdock-wire/SKILL.md +18 -12
  477. package/skills/permdock-wire/references/adapters.md +146 -50
  478. package/skills/permdock-wire/references/policy-options.md +15 -6
  479. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  480. package/dist/approvals-DbYAuNkG.js +0 -224
  481. package/dist/arazzo-C9chp3ST.js +0 -54
  482. package/dist/bind-C_ob3LKa.d.ts +0 -25
  483. package/dist/catalog-CRW5Mx_B.js +0 -2
  484. package/dist/catalog-CYj-mX2O.js +0 -48
  485. package/dist/catalog-DWF5cYqB.js +0 -55
  486. package/dist/cloud-CfwZ39Rl.js +0 -50
  487. package/dist/cloud-DWLXO2af.js +0 -118
  488. package/dist/collect-CHB22Sx4.js +0 -83
  489. package/dist/collect-DSWOk19R.js +0 -2
  490. package/dist/commands-BeaGNj_o.js +0 -97
  491. package/dist/config-ir40y8m0.js +0 -36
  492. package/dist/create-CMwIl-w2.js +0 -253
  493. package/dist/delegation-D8pUEuce.js +0 -103
  494. package/dist/diff-C9RDjjhs.js +0 -48
  495. package/dist/doctor-Djh6JDEk.js +0 -53
  496. package/dist/doctor-DvH0IQff.js +0 -1194
  497. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  498. package/dist/duration-xK2jGFVc.js +0 -25
  499. package/dist/errors-CWfoNg9N.js +0 -47
  500. package/dist/errors-DRnGZHzF.js +0 -30
  501. package/dist/evaluation-items-CfCCejQd.js +0 -40
  502. package/dist/expiry-BoBJ8Tvc.js +0 -7
  503. package/dist/fields-BMl1RxoX.js +0 -26
  504. package/dist/grantee-Cv5Sogfv.js +0 -602
  505. package/dist/headers-BZSDieNT.js +0 -6
  506. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  507. package/dist/ids-DC4V4CFu.js +0 -18
  508. package/dist/index-0nNqHspG.d.ts +0 -6
  509. package/dist/index-BNc7Wer_.d.ts +0 -483
  510. package/dist/index-C7Tw7MaW.d.ts +0 -201
  511. package/dist/instance-options-Dhhcnm3y.js +0 -22
  512. package/dist/load-DwJUafYN.js +0 -2
  513. package/dist/manifest-iaoBXHKc.js +0 -783
  514. package/dist/map-AcxK9o_D.js +0 -147
  515. package/dist/may-use-DndQ5tQ-.js +0 -77
  516. package/dist/openapi-CQTsgKoB.js +0 -164
  517. package/dist/permdock-CbgvLnuo.js +0 -3479
  518. package/dist/permissions-DVoF6dMt.js +0 -662
  519. package/dist/policy-xyWg7QdR.js +0 -1122
  520. package/dist/powersync-CrBX8hY6.js +0 -2
  521. package/dist/powersync-DE19b9dT.js +0 -62
  522. package/dist/protected-BdnIEFkY.d.ts +0 -27
  523. package/dist/protected-xAr24FEC.d.ts +0 -40
  524. package/dist/relations-cjOL01hZ.js +0 -505
  525. package/dist/rls-P-BeBx0n.js +0 -238
  526. package/dist/rls-graph-CHwx0V8q.js +0 -435
  527. package/dist/rls-ownership-DcYlZ09B.js +0 -843
  528. package/dist/rls-shared-Cewd_-zI.js +0 -495
  529. package/dist/rls-verify-CMv9H3wV.js +0 -746
  530. package/dist/run-BWc9qqvE.js +0 -174
  531. package/dist/server-DlZ28Oz5.js +0 -268
  532. package/dist/sink-B1fZzIMf.d.ts +0 -104
  533. package/dist/sink-Bd9PSyfq.js +0 -141
  534. package/dist/skills-C5CbhhpG.js +0 -56
  535. package/dist/snapshot-Enxd0n-s.js +0 -975
  536. package/dist/sql-xdg5f4Fi.js +0 -27
  537. package/dist/src-BDwEZWrZ.js +0 -568
  538. package/dist/store-jOBYpiXC.d.ts +0 -36
  539. package/dist/stores-C0IMQrGI.d.ts +0 -52
  540. package/dist/subject-C6dLxqHU.js +0 -24
  541. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  542. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  543. package/dist/supabase-s4o9s1O1.js +0 -83
  544. package/dist/thenable-okc2xDsj.js +0 -10
  545. package/dist/types-BnIEz1sU.d.ts +0 -48
  546. package/dist/types-Bvc4oWT6.d.ts +0 -9
  547. package/dist/types-CKNSyIf_.d.ts +0 -52
  548. package/dist/types-Cq_H8N_X.d.ts +0 -197
  549. package/dist/usage-B0YuTQRO.js +0 -42
  550. package/dist/usage-DorAJiU_.js +0 -2
  551. package/dist/vocabulary-DA8a8zif.d.ts +0 -56
  552. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -1,5 +1,6 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
2
- import { a as quoteSqlTable, i as quoteSqlLiteral, r as quoteSqlIdent } from "./sql-xdg5f4Fi.js";
1
+ import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
+ import { i as readAppData } from "./app-data-MuyzVqX8.js";
3
+ import { a as quoteQualifiedTable, c as quoteSqlTable, i as qualifySqlTable, o as quoteSqlIdent, s as quoteSqlLiteral, u as sqlTextArray } from "./sql-B5T1IL83.js";
3
4
  //#region src/supabase/keep.ts
4
5
  /** The permission keys of a suspended scope's `keep`, references read by `key`, sorted and unique. */
5
6
  function keptKeys(row) {
@@ -11,123 +12,22 @@ function keptKeys(row) {
11
12
  return [...new Set(valid)].toSorted();
12
13
  }
13
14
  //#endregion
14
- //#region src/supabase/roles.ts
15
- function isRoleList(role) {
16
- return Array.isArray(role);
17
- }
18
- /**
19
- * Resolves the role sources of `table` (`schema.table`, or `public`). An
20
- * unqualified `through` table is in `table`'s schema. `label` names the
21
- * option in the error for an `on` that is not exactly one column; `prefix`
22
- * starts every error. A row with several sources holds the union of their
23
- * non-null keys.
24
- */
25
- function roleColumn(role, table, alias, options) {
26
- if (!isRoleList(role)) return singleRole(role, table, alias, options);
27
- const prefix = options.prefix ?? "PermDock";
28
- const parts = role.map((part, index) => singleRole(part, table, alias, {
29
- ...options,
30
- label: `${options.label}[${String(index)}]`
31
- }));
32
- const [first] = parts;
33
- if (first === void 0) throw new TypeError(`${prefix}: ${options.label} needs at least one role source`);
34
- if (parts.length === 1) return first;
35
- const rows = quoteSqlIdent(`${alias}r`, prefix);
36
- const values = quoteSqlIdent(`${alias}v`, prefix);
37
- const sql = `${rows}.permdock_role`;
38
- return {
39
- column: first.column,
40
- sql,
41
- join: `${options.indent === void 0 ? " " : `\n${options.indent}`}cross join lateral (select ${values}.role from (values ${parts.map((part) => `(${part.lookup})`).join(", ")}) ${values}(role) where ${values}.role is not null) ${rows}(permdock_role)`,
42
- lookup: sql,
43
- columns: [...new Set(parts.map((part) => part.column))],
44
- throughs: parts.flatMap((part) => part.throughs),
45
- lateral: true
46
- };
47
- }
48
- function singleRole(role, table, alias, options) {
49
- const prefix = options.prefix ?? "PermDock";
50
- const q = (name) => quoteSqlIdent(name, prefix);
51
- if (typeof role === "string") return {
52
- column: role,
53
- sql: `${alias}.${q(role)}::text`,
54
- join: "",
55
- lookup: `${alias}.${q(role)}::text`,
56
- columns: [role],
57
- throughs: [],
58
- lateral: false
59
- };
60
- const pairs = Object.entries(role.on);
61
- const [pair] = pairs;
62
- if (pair === void 0 || pairs.length !== 1) throw new TypeError(`${prefix}: ${options.label}.on must map exactly one column of ${table} to ${role.through}, for example ${options.example ?? "{ role_id: 'id' }"}`);
63
- const [ref, id] = pair;
64
- const schema = table.includes(".") ? table.split(".")[0] ?? "public" : "public";
65
- const through = role.through.includes(".") ? role.through : `${schema}.${role.through}`;
66
- const keys = options.joined ?? `${alias}k`;
67
- const target = quoteSqlTable(through, prefix);
68
- const keyed = {
69
- table: through,
70
- id,
71
- key: role.column,
72
- ref
73
- };
74
- return {
75
- column: ref,
76
- sql: `${keys}.${q(role.column)}::text`,
77
- join: `${options.indent === void 0 ? " " : `\n${options.indent}`}join ${target} ${keys} on ${keys}.${q(id)} = ${alias}.${q(ref)}`,
78
- lookup: `(select ${keys}.${q(role.column)}::text from ${target} ${keys} where ${keys}.${q(id)} = ${alias}.${q(ref)})`,
79
- through: keyed,
80
- columns: [ref],
81
- throughs: [keyed],
82
- lateral: false
83
- };
84
- }
85
- /** The manifest entry of one role source: the column, and the roles table it references. */
86
- function sourceManifest(column, through) {
87
- return through === void 0 ? { column } : {
88
- column,
89
- through: {
90
- table: through.table,
91
- id: through.id,
92
- column: through.key
93
- }
94
- };
95
- }
96
- /** The manifest entry of a single-source column, such as a membership's user. */
97
- function columnManifest(role) {
98
- return sourceManifest(role.column, role.through);
99
- }
100
- /** The manifest entry of a role column, or one entry per source of a row with several. */
101
- function roleManifest(role) {
102
- if (!role.lateral) return sourceManifest(role.column, role.through);
103
- return role.columns.map((column) => sourceManifest(column, role.throughs.find((through) => through.ref === column)));
104
- }
105
- //#endregion
106
- //#region src/supabase/sources.ts
107
- const ident = (name) => quoteSqlIdent(name);
108
- const literal = quoteSqlLiteral;
109
- function qualifiedName(name) {
110
- return name.includes(".") ? name : `public.${name}`;
111
- }
112
- function qualified(name) {
113
- return quoteSqlTable(qualifiedName(name));
114
- }
15
+ //#region src/supabase/membership-sql.ts
16
+ const ident$1 = (name) => quoteSqlIdent(name);
17
+ const literal$1 = quoteSqlLiteral;
115
18
  function col(name) {
116
- return `m.${ident(name)}`;
19
+ return `m.${ident$1(name)}`;
117
20
  }
118
21
  function activeRow(row, id) {
119
- const parts = [`s.${ident(row.id)}::text = (${id})::text`];
120
- if (row.disabledAt !== void 0) parts.push(`s.${ident(row.disabledAt)} is null`);
22
+ const parts = [`s.${ident$1(row.id)}::text = (${id})::text`];
23
+ if (row.disabledAt !== void 0) parts.push(`s.${ident$1(row.disabledAt)} is null`);
121
24
  if (row.status !== void 0) {
122
25
  const values = row.active ?? [];
123
26
  if (values.length === 0) throw new TypeError("PermDock: a suspension status column needs its active values");
124
- parts.push(`s.${ident(row.status)}::text = any(array[${values.map(literal).join(", ")}]::text[])`);
27
+ parts.push(`s.${ident$1(row.status)}::text = any(array[${values.map(literal$1).join(", ")}]::text[])`);
125
28
  }
126
29
  if (row.disabledAt === void 0 && row.status === void 0) throw new TypeError("PermDock: a suspension table needs disabledAt or status");
127
- return `exists (select 1 from ${qualified(row.table)} s where ${parts.join(" and ")})`;
128
- }
129
- function textArray(values) {
130
- return `array[${values.map(literal).join(", ")}]::text[]`;
30
+ return `exists (select 1 from ${quoteQualifiedTable(row.table)} s where ${parts.join(" and ")})`;
131
31
  }
132
32
  /**
133
33
  * The suspendable instances on the row's chain whose scope keeps
@@ -163,8 +63,8 @@ function keptSql(shape) {
163
63
  const list = keeping(shape);
164
64
  if (list.length === 0) return;
165
65
  const keys = [...new Set(list.flatMap((item) => item.keep))].toSorted();
166
- const each = list.map((item) => `(${item.active} or k = any(${textArray(item.keep)}))`).join(" and ");
167
- return `(select jsonb_agg(k order by k) from unnest(${textArray(keys)}) k where ${each})`;
66
+ const each = list.map((item) => `(${item.active} or k = any(${sqlTextArray(item.keep)}))`).join(" and ");
67
+ return `(select jsonb_agg(k order by k) from unnest(${sqlTextArray(keys)}) k where ${each})`;
168
68
  }
169
69
  function allActive(shape) {
170
70
  return keeping(shape).map((item) => item.active).join(" and ");
@@ -204,6 +104,7 @@ function selectOf(shape, where, user, keep) {
204
104
  `${shape.memberGroup} as member_group`,
205
105
  `${shape.managed} as managed_by`,
206
106
  `${shape.seats} as seats`,
107
+ ...shape.x === void 0 ? [] : [`${col(shape.x)} as x`],
207
108
  ...keep ? [`${keepColumn(shape)} as keep`] : []
208
109
  ];
209
110
  const group = [
@@ -212,14 +113,14 @@ function selectOf(shape, where, user, keep) {
212
113
  ...keepsDisabled(shape) && shape.disabledAt !== void 0 ? [`(${enabled(shape.disabledAt)})`] : []
213
114
  ];
214
115
  return `select ${fields.join(", ")}
215
- from ${qualified(shape.table)} m${shape.join}
116
+ from ${quoteQualifiedTable(shape.table)} m${shape.join}
216
117
  where ${where.join("\n and ")}
217
118
  group by ${group.join(", ")}`;
218
119
  }
219
120
  function holdersOf(shape) {
220
- const id = ident(shape.idColumn);
121
+ const id = ident$1(shape.idColumn);
221
122
  return {
222
- idType: `${qualified(shape.table)}.${id}%type`,
123
+ idType: `${quoteQualifiedTable(shape.table)}.${id}%type`,
223
124
  id: (scope, row) => {
224
125
  const filter = shape.holds(scope, row);
225
126
  return filter === void 0 ? "null::text" : filter === "true" ? `${row}.${id}::text` : `case when ${filter} then ${row}.${id}::text end`;
@@ -231,7 +132,7 @@ function holdersOf(shape) {
231
132
  const live = conditions.length === 0 ? "true" : conditions.length === 1 ? conditions.join("") : `(${conditions.join(" and ")})`;
232
133
  const kept = where.filter((part) => part !== "true");
233
134
  return `select m.${id}::text as id, ${shape.userSql}::text as user_id, ${shape.roleKey} as role, ${shape.via} as via, ${live} as live
234
- from ${options.from ?? qualified(shape.table)} m${shape.join}${shape.roleJoin}${kept.length === 0 ? "" : `\nwhere ${kept.join(" and ")}`}`;
135
+ from ${options.from ?? quoteQualifiedTable(shape.table)} m${shape.join}${shape.roleJoin}${kept.length === 0 ? "" : `\nwhere ${kept.join(" and ")}`}`;
235
136
  }
236
137
  };
237
138
  }
@@ -242,14 +143,14 @@ function sqlOf(shape) {
242
143
  table: shape.table,
243
144
  user: shape.user,
244
145
  userThrough: shape.userThrough,
245
- userType: shape.userThrough === void 0 ? `${qualified(shape.table)}.${ident(shape.user)}%type` : `${quoteSqlTable(shape.userThrough.table)}.${ident(shape.userThrough.key)}%type`,
146
+ userType: shape.userThrough === void 0 ? `${quoteQualifiedTable(shape.table)}.${ident$1(shape.user)}%type` : `${quoteSqlTable(shape.userThrough.table)}.${ident$1(shape.userThrough.key)}%type`,
246
147
  reads: [...new Set([suspension?.users, ...Object.values(suspension?.scopes ?? {})].flatMap((row) => row === void 0 ? [] : [row.table]))],
247
148
  managed: shape.managedColumn,
248
149
  through: shape.through,
249
150
  throughs: shape.throughs,
250
151
  columns: [...new Set(shape.columns)],
251
152
  manifest: {
252
- table: qualifiedName(shape.table),
153
+ table: qualifySqlTable(shape.table),
253
154
  ...shape.manifest,
254
155
  columns: [...new Set(shape.columns)]
255
156
  },
@@ -258,19 +159,115 @@ function sqlOf(shape) {
258
159
  list: (keep = keptSql(shape) !== void 0) => selectOf(shape, filters(shape, `${shape.scope} = $1::text and ${shape.id} = $2::text`), true, keep)
259
160
  });
260
161
  }
162
+ //#endregion
163
+ //#region src/supabase/roles.ts
164
+ function isRoleList(role) {
165
+ return Array.isArray(role);
166
+ }
167
+ /**
168
+ * Resolves the role sources of `table` (`schema.table`, or `public`). An
169
+ * unqualified `through` table is in `table`'s schema. `label` names the
170
+ * option in the error for an `on` that is not exactly one column; `prefix`
171
+ * starts every error. A row with several sources holds the union of their
172
+ * non-null keys.
173
+ */
174
+ function roleColumn(role, table, alias, options) {
175
+ if (!isRoleList(role)) return singleRole(role, table, alias, options);
176
+ const prefix = options.prefix ?? "PermDock";
177
+ const parts = role.map((part, index) => singleRole(part, table, alias, {
178
+ ...options,
179
+ label: `${options.label}[${String(index)}]`
180
+ }));
181
+ const [first] = parts;
182
+ if (first === void 0) throw new TypeError(`${prefix}: ${options.label} needs at least one role source`);
183
+ if (parts.length === 1) return first;
184
+ const rows = quoteSqlIdent(`${alias}r`, prefix);
185
+ const values = quoteSqlIdent(`${alias}v`, prefix);
186
+ const sql = `${rows}.permdock_role`;
187
+ return {
188
+ column: first.column,
189
+ sql,
190
+ join: `${options.indent === void 0 ? " " : `\n${options.indent}`}cross join lateral (select ${values}.role from (values ${parts.map((part) => `(${part.lookup})`).join(", ")}) ${values}(role) where ${values}.role is not null) ${rows}(permdock_role)`,
191
+ lookup: sql,
192
+ columns: [...new Set(parts.map((part) => part.column))],
193
+ throughs: parts.flatMap((part) => part.throughs),
194
+ lateral: true
195
+ };
196
+ }
197
+ function singleRole(role, table, alias, options) {
198
+ const prefix = options.prefix ?? "PermDock";
199
+ const q = (name) => quoteSqlIdent(name, prefix);
200
+ if (typeof role === "string") return {
201
+ column: role,
202
+ sql: `${alias}.${q(role)}::text`,
203
+ join: "",
204
+ lookup: `${alias}.${q(role)}::text`,
205
+ columns: [role],
206
+ throughs: [],
207
+ lateral: false
208
+ };
209
+ const pairs = Object.entries(role.on);
210
+ const [pair] = pairs;
211
+ if (pair === void 0 || pairs.length !== 1) throw new TypeError(`${prefix}: ${options.label}.on must map exactly one column of ${table} to ${role.through}, for example ${options.example ?? "{ role_id: 'id' }"}`);
212
+ const [ref, id] = pair;
213
+ const schema = table.includes(".") ? table.split(".")[0] ?? "public" : "public";
214
+ const through = role.through.includes(".") ? role.through : `${schema}.${role.through}`;
215
+ const keys = options.joined ?? `${alias}k`;
216
+ const target = quoteSqlTable(through, prefix);
217
+ const keyed = {
218
+ table: through,
219
+ id,
220
+ key: role.column,
221
+ ref
222
+ };
223
+ return {
224
+ column: ref,
225
+ sql: `${keys}.${q(role.column)}::text`,
226
+ join: `${options.indent === void 0 ? " " : `\n${options.indent}`}join ${target} ${keys} on ${keys}.${q(id)} = ${alias}.${q(ref)}`,
227
+ lookup: `(select ${keys}.${q(role.column)}::text from ${target} ${keys} where ${keys}.${q(id)} = ${alias}.${q(ref)})`,
228
+ through: keyed,
229
+ columns: [ref],
230
+ throughs: [keyed],
231
+ lateral: false
232
+ };
233
+ }
234
+ /** The manifest entry of one role source: the column, and the roles table it references. */
235
+ function sourceManifest(column, through) {
236
+ return through === void 0 ? { column } : {
237
+ column,
238
+ through: {
239
+ table: through.table,
240
+ id: through.id,
241
+ column: through.key
242
+ }
243
+ };
244
+ }
245
+ /** The manifest entry of a single-source column, such as a membership's user. */
246
+ function columnManifest(role) {
247
+ return sourceManifest(role.column, role.through);
248
+ }
249
+ /** The manifest entry of a role column, or one entry per source of a row with several. */
250
+ function roleManifest(role) {
251
+ if (!role.lateral) return sourceManifest(role.column, role.through);
252
+ return role.columns.map((column) => sourceManifest(column, role.throughs.find((through) => through.ref === column)));
253
+ }
254
+ //#endregion
255
+ //#region src/supabase/sources.ts
256
+ const ident = (name) => quoteSqlIdent(name);
257
+ const literal = quoteSqlLiteral;
261
258
  function isFixed(roles) {
262
259
  return Array.isArray(roles);
263
260
  }
264
261
  /** A role column of the membership table, aliased `m`; a `through` column joins its roles table as `mk`. */
265
262
  function memberRole(role, table, label) {
266
- return roleColumn(role, qualifiedName(table), "m", {
263
+ return roleColumn(role, qualifySqlTable(table), "m", {
267
264
  label,
268
265
  indent: ""
269
266
  });
270
267
  }
271
268
  /** The user of the membership table, aliased `m`; a `through` user joins its table as `mu`. */
272
269
  function memberUser(user, table, label) {
273
- const column = roleColumn(user, qualifiedName(table), "m", {
270
+ const column = roleColumn(user, qualifySqlTable(table), "m", {
274
271
  label,
275
272
  indent: "",
276
273
  joined: "mu",
@@ -294,7 +291,8 @@ function membershipOf(row) {
294
291
  const roles = strings(row["roles"]);
295
292
  if (typeof row["scope"] !== "string" || typeof row["id"] !== "string") return;
296
293
  if (roles.length === 0) return;
297
- const within = row["within"] !== null && typeof row["within"] === "object" && !Array.isArray(row["within"]) ? Object.fromEntries(Object.entries(row["within"]).filter((entry) => typeof entry[1] === "string")) : void 0;
294
+ const rawWithin = row["within"];
295
+ const within = isRecord(rawWithin) ? Object.fromEntries(Object.entries(rawWithin).filter((entry) => typeof entry[1] === "string")) : void 0;
298
296
  const expires = typeof row["expires_at"] === "number" ? row["expires_at"] : typeof row["expires_at"] === "string" && row["expires_at"] !== "" ? Number(row["expires_at"]) : void 0;
299
297
  const seats = strings(row["seats"]);
300
298
  const keep = row["keep"];
@@ -311,7 +309,8 @@ function membershipOf(row) {
311
309
  member: typeof row["member_group"] === "string" && row["member_group"] !== "" ? { group: row["member_group"] } : void 0,
312
310
  managedBy: row["managed_by"] === "idp" ? "idp" : void 0,
313
311
  entitlements: seats.length === 0 ? void 0 : seats,
314
- keep: keep === null || keep === void 0 ? void 0 : strings(keep)
312
+ keep: keep === null || keep === void 0 ? void 0 : strings(keep),
313
+ x: row["x"] === null ? void 0 : readAppData(void 0, row["x"])
315
314
  });
316
315
  }
317
316
  function sourceOf(sql, query) {
@@ -340,11 +339,14 @@ function sourceOf(sql, query) {
340
339
  }
341
340
  /**
342
341
  * `ctx.postgres` (from `withPostgresClient`) or `ctx.postgresAdmin` as a
343
- * `SqlQuery` for `fromTable`, `fromJunction` and `supabaseApprovalStore`.
342
+ * `SqlQuery` for `tableMembershipSource`, `junctionMembershipSource` and `supabaseApprovalStore`.
344
343
  * `ctx.postgres` runs as the caller under RLS, so the membership tables must
345
344
  * be readable by `authenticated`; `ctx.postgresAdmin` bypasses RLS.
346
345
  */
347
- function fromSupabasePostgres(postgres) {
346
+ function optionalColumn(name, cast) {
347
+ return name === void 0 ? `null::${cast}` : `${col(name)}::${cast}`;
348
+ }
349
+ function supabasePostgresQuery(postgres) {
348
350
  return (text, values) => postgres.queryRaw(text, [...values]);
349
351
  }
350
352
  /**
@@ -353,14 +355,13 @@ function fromSupabasePostgres(postgres) {
353
355
  * `within`, `via`, expiry, owner and seat columns. Rows of the same instance
354
356
  * merge into one membership.
355
357
  */
356
- function fromTable(options) {
358
+ function tableMembershipSource(options) {
357
359
  const c = options.columns ?? {};
358
360
  const scope = `${col(c.scope ?? "scope")}::text`;
359
361
  const id = `${col(c.id ?? "scope_id")}::text`;
360
362
  const within = c.within === void 0 ? "null::jsonb" : col(c.within);
361
- const optional = (name, cast) => name === void 0 ? `null::${cast}` : `${col(name)}::${cast}`;
362
- const user = memberUser(c.user ?? "user_id", options.table, "fromTable columns.user");
363
- const role = memberRole(c.role ?? "role", options.table, "fromTable columns.role");
363
+ const user = memberUser(c.user ?? "user_id", options.table, "tableMembershipSource columns.user");
364
+ const role = memberRole(c.role ?? "role", options.table, "tableMembershipSource columns.role");
364
365
  return sourceOf(sqlOf({
365
366
  table: options.table,
366
367
  join: `${user.column.join}${role.join}`,
@@ -373,15 +374,16 @@ function fromTable(options) {
373
374
  id,
374
375
  within,
375
376
  roles: roleAgg(role),
376
- via: optional(c.via, "text"),
377
+ via: optionalColumn(c.via, "text"),
377
378
  expiresAt: c.expiresAt,
378
379
  disabledAt: c.disabledAt,
379
- grantedBy: optional(c.grantedBy, "text"),
380
- reason: optional(c.reason, "text"),
381
- memberGroup: optional(c.group, "text"),
382
- managed: optional(c.managedBy, "text"),
380
+ grantedBy: optionalColumn(c.grantedBy, "text"),
381
+ reason: optionalColumn(c.reason, "text"),
382
+ memberGroup: optionalColumn(c.group, "text"),
383
+ managed: optionalColumn(c.managedBy, "text"),
383
384
  managedColumn: c.managedBy,
384
385
  seats: c.seats === void 0 ? "null::jsonb" : `to_jsonb(${col(c.seats)})`,
386
+ x: c.x,
385
387
  idOf: (name) => `coalesce(case when ${scope} = ${literal(name)} then ${id} end${c.within === void 0 ? "" : `, ${within} ->> ${literal(name)}`})`,
386
388
  idColumn: c.id ?? "scope_id",
387
389
  holds: (name, alias) => `${alias}.${ident(c.scope ?? "scope")}::text = ${literal(name)}`,
@@ -398,7 +400,8 @@ function fromTable(options) {
398
400
  c.reason,
399
401
  c.group,
400
402
  c.managedBy,
401
- c.seats
403
+ c.seats,
404
+ c.x
402
405
  ].filter((name) => name !== void 0).map(col)
403
406
  ],
404
407
  suspension: options.suspension,
@@ -431,15 +434,15 @@ function fromTable(options) {
431
434
  * membership of `scope`, with roles from a column or fixed (`['contact']`), a
432
435
  * fixed `via`, and ancestor ids from `within` columns.
433
436
  */
434
- function fromJunction(options) {
437
+ function junctionMembershipSource(options) {
435
438
  if (!/^[a-z][a-z0-9_]*$/u.test(options.scope)) throw new TypeError(`PermDock: unsafe scope name '${options.scope}'`);
436
439
  const idColumn = options.id ?? `${options.scope}_id`;
437
440
  const withinEntries = Object.entries(options.within ?? {});
438
441
  const roles = options.roles;
439
442
  const fixed = isFixed(roles) ? roles : void 0;
440
- if (fixed?.length === 0) throw new TypeError("PermDock: fromJunction needs at least one role");
441
- const role = isFixed(roles) ? void 0 : memberRole(typeof roles === "object" && "sources" in roles ? roles.sources : roles, options.table, "fromJunction roles");
442
- const user = memberUser(options.user ?? "user_id", options.table, "fromJunction user");
443
+ if (fixed?.length === 0) throw new TypeError("PermDock: junctionMembershipSource needs at least one role");
444
+ const role = isFixed(roles) ? void 0 : memberRole(typeof roles === "object" && "sources" in roles ? roles.sources : roles, options.table, "junctionMembershipSource roles");
445
+ const user = memberUser(options.user ?? "user_id", options.table, "junctionMembershipSource user");
443
446
  const managedColumn = options.managedBy === void 0 ? void 0 : options.managedBy === "idp" ? "" : options.managedBy.column;
444
447
  const groupColumn = options.group === void 0 || typeof options.group === "string" ? void 0 : options.group.column;
445
448
  const shape = {
@@ -463,6 +466,7 @@ function fromJunction(options) {
463
466
  managed: managedColumn === void 0 ? "null::text" : managedColumn === "" ? `'idp'::text` : `${col(managedColumn)}::text`,
464
467
  managedColumn,
465
468
  seats: options.seats === void 0 ? "null::jsonb" : `to_jsonb(${col(options.seats)})`,
469
+ x: options.x,
466
470
  idColumn,
467
471
  holds: (name) => name === options.scope ? "true" : void 0,
468
472
  roleKey: role === void 0 ? "mf.role" : role.sql,
@@ -481,7 +485,8 @@ function fromJunction(options) {
481
485
  options.reason,
482
486
  groupColumn,
483
487
  managedColumn === "" ? void 0 : managedColumn,
484
- options.seats
488
+ options.seats,
489
+ options.x
485
490
  ].filter((name) => name !== void 0).map(col)
486
491
  ],
487
492
  suspension: options.suspension,
@@ -534,7 +539,7 @@ function hookApiNames(prefix = HOOK_API_PREFIX) {
534
539
  * `<schema>.permdock_authz_version`: pass it to `claimsFirst(sources, { version })`.
535
540
  */
536
541
  function authzVersion(options) {
537
- const table = qualified(`${options.schema ?? "permdock"}.${AUTHZ_VERSION_TABLE}`);
542
+ const table = quoteQualifiedTable(`${options.schema ?? "permdock"}.${AUTHZ_VERSION_TABLE}`);
538
543
  return async (principal) => {
539
544
  const value = rowsOf(await options.query(`select version from ${table} where user_id = $1`, [principal.id]))[0]?.["version"];
540
545
  const version = typeof value === "number" ? value : value === void 0 ? 0 : Number(value);
@@ -542,4 +547,4 @@ function authzVersion(options) {
542
547
  };
543
548
  }
544
549
  //#endregion
545
- export { fromJunction as a, hookApiNames as c, keptKeys as d, authzVersion as i, roleColumn as l, HOOK_API_SCHEMA as n, fromSupabasePostgres as o, PERMDOCK_SCHEMA as r, fromTable as s, AUTHZ_VERSION_TABLE as t, roleManifest as u };
550
+ export { hookApiNames as a, tableMembershipSource as c, keptKeys as d, authzVersion as i, roleColumn as l, HOOK_API_SCHEMA as n, junctionMembershipSource as o, PERMDOCK_SCHEMA as r, supabasePostgresQuery as s, AUTHZ_VERSION_TABLE as t, roleManifest as u };
@@ -0,0 +1,55 @@
1
+ //#region src/core/sql.ts
2
+ /** A bare Postgres identifier PermDock emits unquoted-safe: letters, digits and `_`, not starting with a digit. */
3
+ const SQL_IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/u;
4
+ /** A validated, double-quoted identifier; anything outside `SQL_IDENT` throws. */
5
+ function quoteSqlIdent(name, prefix = "PermDock") {
6
+ return `"${assertSqlIdent(name, prefix)}"`;
7
+ }
8
+ /** A schema-qualified name, each part validated by `quoteSqlIdent`. */
9
+ function quoteSqlTable(name, prefix = "PermDock") {
10
+ return name.split(".").map((part) => quoteSqlIdent(part, prefix)).join(".");
11
+ }
12
+ /** A single-quoted string literal with embedded quotes doubled. */
13
+ function quoteSqlLiteral(value) {
14
+ return `'${value.replaceAll("'", "''")}'`;
15
+ }
16
+ /** A double-quoted identifier read back from a database, embedded quotes doubled rather than refused. */
17
+ function escapeSqlIdent(name) {
18
+ return `"${name.replaceAll("\"", "\"\"")}"`;
19
+ }
20
+ const PLAIN_IDENT = /^[a-z_][a-z0-9_]*$/u;
21
+ /** An identifier left bare when it is already lower snake case, otherwise quoted by `escapeSqlIdent`. */
22
+ function sqlIdent(name) {
23
+ return PLAIN_IDENT.test(name) ? name : escapeSqlIdent(name);
24
+ }
25
+ /** The plain-identifier check behind `quoteSqlIdent`, returning the name unquoted. */
26
+ function assertSqlIdent(name, prefix = "PermDock") {
27
+ if (!SQL_IDENT.test(name)) throw new TypeError(`${prefix}: unsafe SQL identifier '${name}'`);
28
+ return name;
29
+ }
30
+ /** `name` with `public.` added when it names no schema; generated functions run with `search_path = ''`. */
31
+ function qualifySqlTable(name) {
32
+ return name.includes(".") ? name : `public.${name}`;
33
+ }
34
+ /** `qualifySqlTable`, then each part quoted by `quoteSqlIdent`. */
35
+ function quoteQualifiedTable(name, prefix = "PermDock") {
36
+ return quoteSqlTable(qualifySqlTable(name), prefix);
37
+ }
38
+ /** A `text[]` literal of `values`, each quoted by `quoteSqlLiteral`. */
39
+ function sqlTextArray(values) {
40
+ return values.length === 0 ? `'{}'::text[]` : `array[${values.map(quoteSqlLiteral).join(", ")}]::text[]`;
41
+ }
42
+ /** The SQL command a default verb runs: `read`, `list` and `get` select, `create` inserts, `update` and `delete` keep their name. */
43
+ function defaultSqlCommand(action) {
44
+ switch (action) {
45
+ case "read":
46
+ case "list":
47
+ case "get": return "select";
48
+ case "create": return "insert";
49
+ case "update": return "update";
50
+ case "delete": return "delete";
51
+ default: return;
52
+ }
53
+ }
54
+ //#endregion
55
+ export { quoteQualifiedTable as a, quoteSqlTable as c, qualifySqlTable as i, sqlIdent as l, defaultSqlCommand as n, quoteSqlIdent as o, escapeSqlIdent as r, quoteSqlLiteral as s, SQL_IDENT as t, sqlTextArray as u };