permdock 0.6.0 → 0.8.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.
- package/README.md +2 -3
- package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
- package/dist/a2a/index.d.ts +7 -7
- package/dist/a2a/index.js +9 -9
- package/dist/action-result-CL-QCITA.d.ts +19 -0
- package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
- package/dist/{adoption-scan-DCYe60Pi.js → adoption-scan-BLs67P1l.js} +5 -5
- package/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +31 -10
- package/dist/ai-sdk/index.js +22 -12
- package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
- package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
- package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
- package/dist/{approval-prompt-DvSSPQJX.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
- package/dist/approvals/index.d.ts +5 -5
- package/dist/approvals/index.js +7 -7
- package/dist/{approvals-p1PGoVjb.js → approvals-DnIBTuXE.js} +128 -78
- package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
- package/dist/{arazzo-41WuzHou.js → arazzo-3RhGfkAK.js} +2 -2
- package/dist/{arazzo-CaUVBn7D.js → arazzo-B5-ulWif.js} +6 -6
- package/dist/{args-IIolxxKA.js → args-0FrVs5EH.js} +125 -8
- package/dist/astro/index.d.ts +30 -12
- package/dist/astro/index.js +2 -2
- package/dist/{audience-DabClFLQ.js → audience-BAkBDMqn.js} +8 -8
- package/dist/{auth-DRLEizbL.js → auth--yPyZNgr.js} +21 -10
- package/dist/authzen/index.d.ts +171 -25
- package/dist/authzen/index.js +321 -149
- package/dist/{automation-BNM3TtDo.d.ts → automation-DqEoWHBc.d.ts} +42 -32
- package/dist/{automation-DVjOckjV.js → automation-x3KEUusw.js} +22 -21
- package/dist/base-url-BQbddZO5.js +9 -0
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +13 -7
- package/dist/better-supabase/index.d.ts +392 -220
- package/dist/better-supabase/index.js +293 -152
- package/dist/{bind-DOyrv6zi.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
- package/dist/{bind-CAvgUuKs.js → bind-D_sZSVA3.js} +22 -10
- package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
- package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
- package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
- package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
- package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
- package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
- package/dist/{build-instance-Bu_eDqYw.js → build-instance-CNWaYJyr.js} +3 -3
- package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
- package/dist/{capability-N1K9IpqS.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-Drg-1YhL.d.ts → capability-ChuiONQU.d.ts} +41 -29
- package/dist/{casbin-Dyu2gnUD.js → casbin-H0rKxBx2.js} +16 -8
- package/dist/{casbin-Cr7RLtA3.js → casbin-cbSbhT_k.js} +2 -2
- package/dist/{casl-64gpT-8x.js → casl-C4OINZHI.js} +2 -2
- package/dist/{casl-DjEDhTCP.js → casl-CHHoCldP.js} +19 -10
- package/dist/catalog/index.d.ts +104 -23
- package/dist/catalog/index.js +117 -8
- package/dist/{catalog-HD2gf5mY.js → catalog-BFpz2EmT.js} +57 -26
- package/dist/{catalog-DZVbrF-z.js → catalog-DCspHDc8.js} +3 -3
- package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-DjMKzJp9.js} +53 -16
- package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-e6aCWosn.js} +19 -15
- package/dist/catalog-mRQQQhNK.js +1 -0
- package/dist/catalog-operations-Dadrl7Z-.js +60 -0
- package/dist/{create-CQWIpUG-.js → challenge-DImNcR7B.js} +157 -39
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +13 -10
- package/dist/chat-sdk/index.d.ts +44 -26
- package/dist/chat-sdk/index.js +17 -17
- package/dist/checks-CGkP3Z7A.js +40 -0
- package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
- package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
- package/dist/claude-agent/index.d.ts +6 -6
- package/dist/claude-agent/index.js +6 -3
- package/dist/clerk/index.d.ts +11 -7
- package/dist/clerk/index.js +6 -6
- package/dist/cli/bin.js +4 -4
- package/dist/cli/index.d.ts +82 -7
- package/dist/cli/index.js +6 -6
- package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
- package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
- package/dist/cloud/index.d.ts +186 -38
- package/dist/cloud/index.js +293 -31
- package/dist/{cloud-ytQ3uviA.js → cloud-BFlGMaak.js} +5 -6
- package/dist/{codemod-5mpSpnUY.js → codemod-DLQ9Zpo4.js} +3 -4
- package/dist/{codemod-ua2hHy7w.js → codemod-DWSN2erG.js} +523 -201
- package/dist/collect-B5BL3klN.js +1 -0
- package/dist/{collect-mLTY4nwb.js → collect-B7ZFAJU3.js} +36 -64
- package/dist/{collect-Ci6akVwH.js → collect-Bzv3le0A.js} +6 -6
- package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
- package/dist/compile/index.d.ts +2 -2
- package/dist/compile/index.js +1 -1
- package/dist/{compile-1bsAezL0.d.ts → compile-BFzysW3o.d.ts} +36 -12
- package/dist/{compile-CMqMx_IN.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BTFrHZhX.js → completion-saoYiRFO.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-Bj2Ixq3d.js → config-DBeXXmBF.js} +2 -2
- package/dist/{config-report-DSpsLpCE.js → config-report-BipSWA6V.js} +9 -6
- package/dist/config-shape-ykV0Vm2n.js +134 -0
- package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
- package/dist/connector-schema-CYLQNMYq.js +434 -0
- package/dist/{context-B_u3_bDJ.js → context-BnIzxTNE.js} +4 -3
- package/dist/convex/index.d.ts +13 -7
- package/dist/convex/index.js +9 -6
- package/dist/core-H-mbhpZc.js +341 -0
- package/dist/core-hWIARPDz.d.ts +206 -0
- package/dist/{create-CBMmFie-.d.ts → create-BSNrVuxh.d.ts} +87 -34
- package/dist/{create-B30OMUOJ.d.ts → create-BVq1lNQE.d.ts} +49 -28
- package/dist/{create-D_NmPOdH.d.ts → create-CM1FciYG.d.ts} +37 -29
- package/dist/{create-CGm28gyI.js → create-Cq4Uox0f.js} +13 -9
- package/dist/{create-DCF2SvoT.js → create-_noSrY1T.js} +15 -21
- package/dist/{credential-BcoiejpY.js → credential-CyyyvCsL.js} +42 -39
- package/dist/{credentials-DPyHmYz5.js → credentials-CdDxp7jN.js} +6 -6
- package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-NB4wcyBf.js} +13 -2
- package/dist/{delegation-j6-rc37o.js → delegation-CDB6_keF.js} +31 -22
- package/dist/delivery/index.d.ts +5 -5
- package/dist/delivery/index.js +6 -5
- package/dist/{delivery-DCAgNyCn.js → delivery-BupfvJIV.js} +81 -20
- package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
- package/dist/denied-text-CHNlVInN.d.ts +22 -0
- package/dist/{describe-BybMRY7A.js → describe-Bb4hGK5d.js} +6 -5
- package/dist/{describe-B5qgDvEW.d.ts → describe-ByS9LgHK.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-CmuSD3vc.js → diff-CN8IYhC_.js} +2 -2
- package/dist/{diff-3jbx6Rm4.js → diff-iZWV65nC.js} +23 -14
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BdZw53-k.js → doctor-CHD1M9R5.js} +485 -141
- package/dist/{doctor-3ZqNHX_G.js → doctor-D3wo-yuz.js} +4 -4
- package/dist/drizzle/index.d.ts +33 -19
- package/dist/drizzle/index.js +17 -9
- package/dist/elysia/index.d.ts +17 -11
- package/dist/elysia/index.js +5 -5
- package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
- package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
- package/dist/{errors-CWTY6uih.js → errors-Vpu6rKHl.js} +14 -10
- package/dist/{errors-DH5QEGXh.d.ts → errors-zi_4T-rx.d.ts} +22 -6
- package/dist/{evaluate-CNClBvcj.js → evaluate-Dd8Ta0Ie.js} +185 -80
- package/dist/{evaluations-beAooV0n.js → evaluations-IBceAeKT.js} +41 -20
- package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-z8dQFDaN.d.ts} +12 -6
- package/dist/eve/index.d.ts +9 -6
- package/dist/eve/index.js +4 -4
- package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
- package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
- package/dist/express/index.d.ts +9 -6
- package/dist/express/index.js +9 -6
- package/dist/fastify/index.d.ts +16 -10
- package/dist/fastify/index.js +8 -5
- package/dist/{fetch-adapter-Dw0MTS3D.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
- package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-JL43jD3E.js} +14 -11
- package/dist/fields-D0vUI6dq.js +498 -0
- package/dist/{files-C5ZI27eV.js → files-B3AA05f1.js} +21 -5
- package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
- package/dist/{fixtures-B7XrLeY7.js → fixtures-A1_sp_tR.js} +15 -6
- package/dist/{flags-C3DktBDY.js → flags-DXjoTVbS.js} +2 -2
- package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
- package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-DCakWRsr.js} +26 -16
- package/dist/gen-B5kvbAoZ.js +58 -0
- package/dist/gen-DWCYcMQM.js +827 -0
- package/dist/generate-CRVV5V7l.js +165 -0
- package/dist/generate-CezbCaTI.js +275 -0
- package/dist/{grantee-hxrUsbpM.js → grantee-Dke-9rd1.js} +4 -4
- package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-BrYPe-w0.js} +12 -12
- package/dist/{grantee-match-DbENBHLB.js → grantee-match-7RZZvoT_.js} +12 -6
- package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
- package/dist/h3/index.d.ts +10 -7
- package/dist/h3/index.js +3 -3
- package/dist/headers-B9jQxjtW.d.ts +10 -0
- package/dist/{helpers-CBYVMjwh.js → helpers-DJicaG6f.js} +40 -28
- package/dist/hono/index.d.ts +16 -10
- package/dist/hono/index.js +5 -5
- package/dist/{hosted-BPk51-kX.d.ts → hosted-Cmtxogd0.d.ts} +44 -20
- package/dist/{hosted-B46-5LYE.js → hosted-D0IzESu_.js} +68 -25
- package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
- package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
- package/dist/{http-DXJ37RDA.js → http-DOL33cO0.js} +11 -8
- package/dist/{import-wyqXUyjm.js → import-CST57XLp.js} +64 -51
- package/dist/{import-CNV7I2Dw.js → import-_YqhhwvX.js} +6 -6
- package/dist/{index-B8YjkEZ4.d.ts → index-B8s204GL.d.ts} +64 -52
- package/dist/{index-Ch8LpNDp.d.ts → index-BT5-1VsX.d.ts} +64 -25
- package/dist/{index-DuWxc5dt.d.ts → index-BW_0MZOS.d.ts} +388 -149
- package/dist/index-BhxEUY9J.d.ts +233 -0
- package/dist/index-Bv5iXPqU.d.ts +210 -0
- package/dist/{index-C-6Letxg.d.ts → index-_9UiQIkt.d.ts} +164 -77
- package/dist/index.d.ts +22 -21
- package/dist/index.js +35 -33
- package/dist/{init-GG6Jh8HD.js → init-Dz_PsHdv.js} +5 -5
- package/dist/{init-DeMYsnYJ.js → init-cE3A8aXq.js} +10 -10
- package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
- package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot--JWiTrvO.js} +81 -56
- package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
- package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
- package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
- package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
- package/dist/jwt/index.d.ts +125 -17
- package/dist/jwt/index.js +157 -16
- package/dist/{kernel-D0NVb1cK.js → kernel-C-fYydV2.js} +151 -16
- package/dist/kysely/index.d.ts +49 -33
- package/dist/kysely/index.js +9 -7
- package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
- package/dist/{load-DFS_ry0W.js → load-DjSU5KXO.js} +6 -6
- package/dist/load-Dm0pSYH3.js +1 -0
- package/dist/{login-Dfe5RlYk.js → login-D-8tMqzo.js} +4 -4
- package/dist/{login-imhuwvn3.js → login-DplQ0s84.js} +18 -15
- package/dist/{manifest-dvL2XEe1.js → manifest-Cgiq5oqc.js} +67 -37
- package/dist/{manifest-mx5ghSFM.d.ts → manifest-CzzWtnAb.d.ts} +144 -28
- package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-2r37XRhD.js} +80 -9
- package/dist/{manifest-C8IzW3Do.js → manifest-wg8WkkpD.js} +11 -7
- package/dist/{map-claims-D3oRmTk0.js → map-claims-BNWCJtmP.js} +27 -18
- package/dist/{map-error-Dr70oA_3.js → map-error-pasIGqMT.js} +7 -7
- package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
- package/dist/mcp/index.d.ts +154 -47
- package/dist/mcp/index.js +200 -41
- package/dist/{migrate-CIq4-E9F.js → migrate-B7oP_sQU.js} +102 -31
- package/dist/module-values-BJTBdo6y.js +107 -0
- package/dist/nest/index.d.ts +23 -13
- package/dist/nest/index.js +18 -11
- package/dist/next/client.d.ts +5 -2
- package/dist/next/client.js +1 -1
- package/dist/next/index.d.ts +72 -26
- package/dist/next/index.js +110 -6
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +4 -3
- package/dist/node/index.d.ts +5 -5
- package/dist/node/index.js +3 -3
- package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
- package/dist/openai/index.d.ts +13 -7
- package/dist/openai/index.js +3 -3
- package/dist/openapi/index.d.ts +61 -30
- package/dist/openapi/index.js +2 -2
- package/dist/{openapi-B7HZ0f-r.js → openapi-BOsx0xn9.js} +34 -24
- package/dist/{openapi-C4dDTVEd.js → openapi-CBZUhA3l.js} +4 -5
- package/dist/{openapi-DD1SV-5-.js → openapi-VeHHU2l9.js} +23 -14
- package/dist/{operation-findings-DgATDpvh.js → operation-findings-CXtFzlKJ.js} +3 -3
- package/dist/{operations-X0VM7F3m.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
- package/dist/orpc/index.d.ts +68 -14
- package/dist/orpc/index.js +62 -13
- package/dist/otel/index.d.ts +7 -4
- package/dist/otel/index.js +8 -5
- package/dist/output-files-BHOIlrfD.js +1 -0
- package/dist/{output-files-DhRBBE4n.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/{output-1im__-08.js → output-tkju6U7R.js} +15 -7
- package/dist/ownership-B4L59T9u.js +1054 -0
- package/dist/parse-1_ZheTW5.js +151 -0
- package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
- package/dist/parse-local-manifest-DEiCF4ah.js +69 -0
- package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
- package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
- package/dist/pdp/index.d.ts +9 -6
- package/dist/pdp/index.js +23 -12
- package/dist/{peer-CRvC7Hg1.js → peer-C9LvBCcb.js} +1 -1
- package/dist/peer-Q0fuZ6hx.js +982 -0
- package/dist/{permdock-SV8ZINYT.d.ts → permdock-B6Sf4T_S.d.ts} +270 -117
- package/dist/{permdock-BrAscV28.js → permdock-L-_I_3zP.js} +226 -74
- package/dist/{permission-registry-Br4jSNVi.js → permission-registry-B8tYxPIt.js} +24 -11
- package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-CAY-GU7e.d.ts} +130 -104
- package/dist/{permissions-u_KHg-sN.d.ts → permissions-Bx6UI8n1.d.ts} +6 -2
- package/dist/{permissions-B-wCP5ZC.js → permissions-CVXmRILq.js} +3 -3
- package/dist/{permissions-BPxlwVhN.js → permissions-mDcTWoBs.js} +8 -5
- package/dist/pg-DQTqRrou.js +60 -0
- package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
- package/dist/pkce-CnmmYqUZ.js +21 -0
- package/dist/{policy-77FSAq_V.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
- package/dist/{policy-DbM5YYtV.js → policy-CLQ8__GF.js} +49 -20
- package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-CJgOm6aq.js} +28 -25
- package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
- package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-CCiDRZBH.d.ts} +802 -334
- package/dist/postgres-store-DcyrPS-r.js +1028 -0
- package/dist/{postgrest-DAjUkF9w.js → postgrest-D4nuPXIQ.js} +88 -36
- package/dist/{postgrest-CEgRbefE.d.ts → postgrest-DicQyqm-.d.ts} +60 -30
- package/dist/powersync-DHNQX06W.js +1117 -0
- package/dist/{powersync-DISt6SUe.js → powersync-DXqGuq9A.js} +3 -3
- package/dist/powersync-Djf-zCpB.js +1 -0
- package/dist/preset/index.d.ts +38 -28
- package/dist/preset/index.js +1 -1
- package/dist/{preset-DZdU0tne.js → preset-BjLzeFpp.js} +58 -34
- package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
- package/dist/prisma/index.d.ts +69 -41
- package/dist/prisma/index.js +21 -17
- package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
- package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
- package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
- package/dist/prompt-BYc6drYW.js +938 -0
- package/dist/protected-action-BE7N_Luo.d.ts +58 -0
- package/dist/protected-action-DUYqb-Ma.js +80 -0
- package/dist/{protected-BlF0F6wL.js → protected-action-QEA8arRB.js} +48 -14
- package/dist/{provider-B1al-AZz.js → provider-C55OGXJ7.js} +5 -4
- package/dist/{provider-DILL9oPK.d.ts → provider-DXfq5c2d.d.ts} +1 -1
- package/dist/{provider-store-DM6DNcta.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/pull-B65ndFNZ.js +1 -0
- package/dist/{pull-jEwbf80J.js → pull-CwpGaQSi.js} +12 -11
- package/dist/{push-BD4f15co.js → push-DgssgzkK.js} +62 -16
- package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
- package/dist/{pushed-policy-CqtxkV4G.js → pushed-policy-ITwYKvvH.js} +10 -7
- package/dist/react/index.d.ts +9 -8
- package/dist/react/index.js +7 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +104 -51
- package/dist/react-native/index.js +394 -67
- package/dist/{refs-K6eWUJ0H.js → refs-C8BKxc_e.js} +17 -3
- package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
- package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
- package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
- package/dist/{replay-Bkm-Ne4l.d.ts → replay-DNftIb_R.d.ts} +1 -1
- package/dist/{request-context-C81Pip9n.js → request-context-C25ilqiJ.js} +8 -8
- package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
- package/dist/resend/index.d.ts +34 -28
- package/dist/resend/index.js +29 -29
- package/dist/resolve-names-CF7xXLSG.js +201 -0
- package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
- package/dist/{retire-CALjIQ7e.js → retire-B2xffQgY.js} +15 -6
- package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
- package/dist/{rls-DTvYd-lI.js → rls-CNEH2_BG.js} +743 -624
- package/dist/{rls-BAqP4q66.js → rls-Ca8Jz9b5.js} +41 -10
- package/dist/{role-builder-uWQZ4v84.js → role-builder-BK2-T6oD.js} +41 -20
- package/dist/rolldown-runtime-C3I60J0A.js +4 -0
- package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
- package/dist/{rpc-VSl5ylaQ.js → rpc-fNqAIqQk.js} +8 -5
- package/dist/{run-CUKuz0A8.js → run-Bz26OTfO.js} +26 -23
- package/dist/run-D-JE8QWb.js +1 -0
- package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-DbWI9f99.d.ts} +33 -13
- package/dist/{run-ticket-sxFI6LAk.js → run-ticket-Dv7aF7Dk.js} +29 -8
- package/dist/{runtime-D3VTAiCA.js → runtime-BGnrOkVH.js} +5 -2
- package/dist/{saas-BCXRuXca.js → saas-iWnUdwCt.js} +42 -29
- package/dist/{scan-qvOe0hS3.js → scan-DCj1KQfn.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-yLuBWWsh.js → schema-Dst9I9Gs.js} +9 -5
- package/dist/scim/index.d.ts +3 -2
- package/dist/scim/index.js +3 -1
- package/dist/scim-D8YupzX1.js +44 -0
- package/dist/{scim-ClHtpyV3.js → scim-jJBJ7g1Z.js} +35 -551
- package/dist/{scopes-CUPSjo9q.js → scopes-0Up_UA2t.js} +42 -24
- package/dist/server/index.d.ts +12 -12
- package/dist/server/index.js +13 -13
- package/dist/{server-C3WXAHZj.js → server-3cVlTLde.js} +31 -31
- package/dist/{server-types-CKQiCnON.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
- package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
- package/dist/{shared-BAK8t4Uo.js → shared-Afctg7B0.js} +100 -61
- package/dist/{shared-DvvFzYXe.js → shared-l0oGGetg.js} +9 -6
- package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
- package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
- package/dist/{sink-4-eQIRWf.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
- package/dist/{skills-B6lVdD_W.js → skills-Bjj7BNEQ.js} +16 -12
- package/dist/{skills-CTYwkl44.js → skills-OuoMR49L.js} +3 -3
- package/dist/{snapshot-B7DkYg6g.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
- package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-Bx_4xC_6.js} +14 -11
- package/dist/solid/index.d.ts +55 -15
- package/dist/solid/index.js +46 -12
- package/dist/solid-start/index.d.ts +30 -12
- package/dist/solid-start/index.js +3 -3
- package/dist/sources-B1Os_YUu.d.ts +312 -0
- package/dist/{sources-vs5dGOsS.js → sources-CMAM-2A3.js} +156 -51
- package/dist/sources-qoIJQrJv.js +11 -0
- package/dist/{sql-B5T1IL83.js → sql-0WjxIp9g.js} +32 -7
- package/dist/sql-B80DFdpG.d.ts +10 -0
- package/dist/{src-Cu2m75uo.js → src-DZ0l9UAg.js} +305 -123
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +665 -224
- package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
- package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
- package/dist/{store-BDutJkDL.js → store-RNFvaJJv.js} +43 -29
- package/dist/{store-options-u0ycEe8s.js → store-options-Dil3lraY.js} +105 -15
- package/dist/stores-C0Kta5Ft.d.ts +59 -0
- package/dist/{stores-CGhM8BN_.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{stream-CeCMJmBB.d.ts → stream-ltuLdtTG.d.ts} +4 -3
- package/dist/{style-DiKWnAvn.js → style-DblOtSga.js} +1 -1
- package/dist/{style-Uao76wO7.js → style-Ds11Hmk4.js} +3 -1
- package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
- package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
- package/dist/supabase/index.d.ts +48 -37
- package/dist/supabase/index.js +6 -6
- package/dist/supabase/middleware.d.ts +19 -13
- package/dist/supabase/middleware.js +7 -7
- package/dist/{supabase-x5JtR2tc.js → supabase-BL1qJzzY.js} +82 -36
- package/dist/{supabase-By_frk3U.js → supabase-D39cuGPt.js} +3 -3
- package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-B-yXnzUl.js} +1206 -286
- package/dist/supabase-hook-H-MtE9Wd.js +1 -0
- package/dist/supautils-BU-pAEpf.js +808 -0
- package/dist/{support-session-C6xJQYut.js → support-session-BsmPCbz8.js} +22 -22
- package/dist/svelte/PermissionBoundary.svelte +2 -6
- package/dist/svelte/Protected.svelte +2 -8
- package/dist/svelte/index.d.ts +9 -8
- package/dist/svelte/index.js +10 -9
- package/dist/svelte/runtime.d.ts +4 -4
- package/dist/svelte/runtime.js +4 -4
- package/dist/svelte/source.d.ts +9 -8
- package/dist/svelte/source.js +6 -5
- package/dist/sveltekit/index.d.ts +30 -12
- package/dist/sveltekit/index.js +2 -2
- package/dist/{ownership-DqaJNJPn.js → tables-DeMNEy6V.js} +1025 -1085
- package/dist/tanstack-start/index.d.ts +22 -10
- package/dist/tanstack-start/index.js +2 -2
- package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
- package/dist/{tenancy-DN2QAx9z.js → tenancy-5d1zVBvK.js} +36 -21
- package/dist/terminal/index.d.ts +23 -14
- package/dist/terminal/index.js +17 -20
- package/dist/testing/core.d.ts +2 -0
- package/dist/testing/core.js +1 -0
- package/dist/testing/fixtures/index.d.ts +15 -0
- package/dist/testing/fixtures/index.js +831 -0
- package/dist/testing/index.d.ts +235 -285
- package/dist/testing/index.js +502 -927
- package/dist/testing/saas/index.d.ts +43 -27
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -1
- package/dist/text-diff-BtfSmdUo.js +444 -0
- package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
- package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
- package/dist/{token-BLZcjQgt.js → token-DC9EQiet.js} +15 -13
- package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-Qpjs_W6M.js} +5 -2
- package/dist/trpc/index.d.ts +11 -8
- package/dist/trpc/index.js +15 -9
- package/dist/type-helpers-BIPIDa6a.d.ts +50 -0
- package/dist/{types-8RnwUAvE.d.ts → types-AMJ5qoU_.d.ts} +49 -30
- package/dist/{types-C_IiEs64.d.ts → types-B2mlGuhW.d.ts} +14 -11
- package/dist/{types-_WhUP7ud.d.ts → types-B4uqKDnp.d.ts} +25 -12
- package/dist/{types-CX7AvRqP.d.ts → types-BJk0BKRX.d.ts} +24 -14
- package/dist/types-B_d_g7T3.d.ts +262 -0
- package/dist/{types-BdtSDbBO.d.ts → types-B_tiYvk8.d.ts} +59 -32
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-Dfv0aTER.d.ts → types-DC1Loeh3.d.ts} +449 -168
- package/dist/{types-lUlG3TVd.d.ts → types-DHKPcqzr.d.ts} +2 -2
- package/dist/{types-C791HFu9.d.ts → types-DjuMBNF9.d.ts} +68 -32
- package/dist/{types-C863OQiR.d.ts → types-HzqOtvsJ.d.ts} +23 -12
- package/dist/{types-Druu9wLM.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-BzzaHxt3.d.ts → types-ah9NlU6j.d.ts} +137 -48
- package/dist/{types-CVZSNocA.d.ts → types-djVzLlIV.d.ts} +31 -14
- package/dist/{types-BtHtcKMr.d.ts → types-yUuPR5Hy.d.ts} +47 -24
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CYeXek0p.js +1 -0
- package/dist/{usage-SveTRTyr.js → usage-CxEzS4ey.js} +50 -26
- package/dist/{usage-CRVl9V3t.js → usage-ab0PdusX.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-DHUrAkku.d.ts → validation-error-YGg2mXyH.d.ts} +5 -2
- package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
- package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
- package/dist/{verify-BaAKx7t6.js → verify-DZeqoWu5.js} +417 -489
- package/dist/version-DMQ0dnN5.js +48 -0
- package/dist/version-DizhmD72.js +1 -0
- package/dist/{views-DTIIO-oQ.js → views-CD8wuL4Z.js} +19 -6
- package/dist/vocabulary-DEJ5j4mR.d.ts +70 -0
- package/dist/vue/index.d.ts +71 -21
- package/dist/vue/index.js +50 -13
- package/dist/{waiter-B986w1oK.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-vea54PRw.js → watch-Cx_WciLE.js} +8 -8
- package/dist/watch-DB42U1ib.js +1 -0
- package/dist/webmcp/index.d.ts +11 -11
- package/dist/webmcp/index.js +8 -5
- package/dist/{where-scope-C9vfEphl.js → where-scope-DlCdCM_8.js} +56 -30
- package/dist/{who-can-DWBAcaCQ.js → who-can-rI7dCR9Q.js} +23 -20
- package/dist/workflow/index.d.ts +3 -3
- package/dist/workflow/index.js +13 -13
- package/dist/workflow-sdk/index.d.ts +19 -13
- package/dist/workflow-sdk/index.js +6 -6
- package/dist/{wrap-gX61EtpB.js → wrap-B2wziJI_.js} +11 -5
- package/dist/{wrap-C5jC6sKI.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
- package/package.json +25 -14
- package/schemas/catalog-v1.json +3 -0
- package/schemas/cli-result-v1.json +1 -0
- package/schemas/cloud-api-v1.json +152 -7
- package/schemas/connector-v1.json +8 -0
- package/schemas/supabase-claims-v1.json +5 -0
- package/schemas/supabase-manifest-v1.json +308 -75
- package/skills/permdock/SKILL.md +1 -0
- package/skills/permdock-agents/references/runtimes.md +3 -1
- package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
- package/skills/permdock-data/references/queries-and-rls.md +6 -2
- package/skills/permdock-tenancy/SKILL.md +1 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -1
- package/skills/permdock-wire/references/adapters.md +28 -22
- package/skills/permdock-wire/references/policy-options.md +1 -0
- package/dist/catalog-BoWglDPI.js +0 -1
- package/dist/collect-D7eQDffE.js +0 -1
- package/dist/config-bs_kZeYq.js +0 -162
- package/dist/denied-text-CiFQNuMV.d.ts +0 -19
- package/dist/fields-OYG_JR78.js +0 -203
- package/dist/generate-CNU1pIOo.js +0 -171
- package/dist/headers-BIjfMaoC.js +0 -8
- package/dist/headers-CIbDTUTK.d.ts +0 -7
- package/dist/index-Cp_ilKi1.d.ts +0 -91
- package/dist/index-CueFnxQc.d.ts +0 -110
- package/dist/load-BxEtwlBS.js +0 -1
- package/dist/output-files-B3IZJksC.js +0 -1
- package/dist/package-root-Dk_ETdkp.js +0 -31
- package/dist/parse-Cxq0WxrA.js +0 -53
- package/dist/parse-local-manifest-5ODwqu8b.d.ts +0 -10
- package/dist/parse-local-manifest-CVSs6J9I.js +0 -34
- package/dist/peer-C8swJ2GH.js +0 -50
- package/dist/policies-DP2nqRoF.js +0 -295
- package/dist/powersync-BkWWCS1K.js +0 -538
- package/dist/powersync-MMJ2mI2q.js +0 -1
- package/dist/problem-details-B45V5d2b.d.ts +0 -7
- package/dist/prompt-DfZLJLIn.js +0 -32
- package/dist/protected-RFGpakN9.d.ts +0 -38
- package/dist/pull-CvpINcMK.js +0 -1
- package/dist/run-DDwUaJDU.js +0 -1
- package/dist/sources-Xc4zkszI.d.ts +0 -190
- package/dist/stores-BUGNbJTt.d.ts +0 -30
- package/dist/supabase-hook-CCw5m35C.js +0 -1
- package/dist/supautils-B6HYL9eL.js +0 -91
- package/dist/text-diff-BQcUapOb.js +0 -15
- package/dist/types-B3_ooZgZ.d.ts +0 -172
- package/dist/usage-CZpSQP6L.js +0 -1
- package/dist/version-CEbQ5UeM.js +0 -18
- package/dist/version-DXkYUISx.js +0 -1
- package/dist/watch--ovlPOc0.js +0 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Rt as Instant, St as ApiKeyPrincipal, T as Policy, U as CredentialVerifier,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { c as AccessReviewStore } from "../types-
|
|
5
|
-
import { i as SupabaseRpcCaller } from "../postgrest-
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
1
|
+
import { Rt as Instant, St as ApiKeyPrincipal, T as Policy, U as CredentialVerifier, Zt as AuthEvent, _n as ApproverInput, gt as SupportSession, lr as Subject, sr as Principal } from "../policy-types-CCiDRZBH.js";
|
|
2
|
+
import { f as PermissionTree, u as Permission } from "../permission-types-CAY-GU7e.js";
|
|
3
|
+
import { _ as PrincipalSource, a as PermDock, h as PrincipalIdentity, o as PermDockOptions } from "../permdock-B6Sf4T_S.js";
|
|
4
|
+
import { c as AccessReviewStore } from "../types-B2mlGuhW.js";
|
|
5
|
+
import { i as SupabaseRpcCaller } from "../postgrest-DicQyqm-.js";
|
|
6
|
+
import { a as CatalogDocument } from "../types-ZzRGoViD.js";
|
|
7
|
+
import { d as SupabasePrincipal, g as SupabaseSessionLike, v as SupabaseSubjectOptions } from "../types-ah9NlU6j.js";
|
|
8
|
+
import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-ChuiONQU.js";
|
|
8
9
|
import { AuthorizationProvider } from "better-supabase/config";
|
|
9
10
|
import { AuthSession, AuthorizationHooks, Authorizer, SupportAuthorize, SupportAuthorizeInput } from "better-supabase/server";
|
|
10
11
|
import { EntitlementClaimOptions } from "better-supabase/blocks/entitlements";
|
|
@@ -17,32 +18,38 @@ import { AuthorizeHookOptions, ProtectWebHandlerOptions } from "better-supabase/
|
|
|
17
18
|
//#region src/better-supabase/access-reviews.d.ts
|
|
18
19
|
type AccessReviewApplierOptions = {
|
|
19
20
|
/**
|
|
20
|
-
* A supabase-js client that may call the organizations and invitations
|
|
21
|
-
*
|
|
22
|
-
*
|
|
21
|
+
* A supabase-js client that may call the organizations and invitations block
|
|
22
|
+
* functions. Pass the reviewer's client so the block's own permission and
|
|
23
|
+
* role-ceiling checks run as the reviewer.
|
|
23
24
|
*/
|
|
24
25
|
readonly client: SupabaseRpcCaller;
|
|
25
26
|
readonly reviews: AccessReviewStore;
|
|
26
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Decides whether a fallback role or an invitation's role grants the reviewed
|
|
29
|
+
* permission.
|
|
30
|
+
*/
|
|
27
31
|
readonly policy: Policy;
|
|
28
32
|
/**
|
|
29
|
-
* The role a revoked member moves to with `update_member_role`: one role,
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
+
* The role a revoked member moves to with `update_member_role`: one role, or
|
|
34
|
+
* a map from the roles in the item's `via` to their fallback. A fallback that
|
|
35
|
+
* still grants the permission, or none, removes the member with
|
|
36
|
+
* `remove_member` instead.
|
|
33
37
|
*/
|
|
34
38
|
readonly demoteTo?: string | Readonly<Record<string, string>>;
|
|
35
39
|
/**
|
|
36
|
-
* The member's email, for revoking the tenant's open invitations to it
|
|
37
|
-
*
|
|
40
|
+
* The member's email, for revoking the tenant's open invitations to it whose
|
|
41
|
+
* role grants the permission. Without it invitations are left alone.
|
|
38
42
|
*/
|
|
39
43
|
readonly email?: (userId: string) => string | null | undefined | Promise<string | null | undefined>;
|
|
40
44
|
/**
|
|
41
|
-
* An instance for the member in the review's tenant, read after the
|
|
42
|
-
*
|
|
45
|
+
* An instance for the member in the review's tenant, read after the change.
|
|
46
|
+
* An item it still grants is not marked applied.
|
|
43
47
|
*/
|
|
44
48
|
readonly permdockFor?: (principalId: string, tenant: string) => PermDock | Promise<PermDock>;
|
|
45
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* The schema of the block functions; better-supabase's default is
|
|
51
|
+
* `better_supabase`.
|
|
52
|
+
*/
|
|
46
53
|
readonly schema?: string;
|
|
47
54
|
/** The scope review tenants are; defaults to the policy's first scope. */
|
|
48
55
|
readonly scope?: string;
|
|
@@ -55,66 +62,32 @@ type AccessReviewApplyFailure = {
|
|
|
55
62
|
type AccessReviewApplyResult = {
|
|
56
63
|
/** Items marked applied, including those whose member was already gone. */
|
|
57
64
|
readonly applied: readonly string[];
|
|
58
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Items left unapplied, with the error the block function or the re-check
|
|
67
|
+
* gave.
|
|
68
|
+
*/
|
|
59
69
|
readonly failed: readonly AccessReviewApplyFailure[];
|
|
60
70
|
};
|
|
61
71
|
/**
|
|
62
72
|
* Applies the revoked items of an access review to better-supabase's
|
|
63
|
-
* organizations and invitations blocks, then marks each one applied. A
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* unknown review.
|
|
73
|
+
* organizations and invitations blocks, then marks each one applied. A revoked
|
|
74
|
+
* member moves to the `demoteTo` role when the policy says that role lacks the
|
|
75
|
+
* permission, and is removed otherwise. With `email`, the tenant's open
|
|
76
|
+
* invitations to the member whose role grants the permission are revoked too. A
|
|
77
|
+
* member who is no longer in the organization counts as applied. Any other
|
|
78
|
+
* error leaves the item unapplied in `failed`, and one item's failure never
|
|
79
|
+
* stops the others. Throws `review-not-found` for an unknown review.
|
|
71
80
|
*/
|
|
72
81
|
export declare function accessReviewApplier(options: AccessReviewApplierOptions): (reviewId: string) => Promise<AccessReviewApplyResult>;
|
|
73
82
|
//#endregion
|
|
74
83
|
//#region src/better-supabase/approvers.d.ts
|
|
75
84
|
/**
|
|
76
|
-
* Who may approve each better-supabase request kind: `'ai-tool'` (a tool
|
|
77
|
-
*
|
|
78
|
-
*
|
|
85
|
+
* Who may approve each better-supabase request kind: `'ai-tool'` (a tool call),
|
|
86
|
+
* `'support-session'`, or `'<subject type>.<action>'` from the approvals
|
|
87
|
+
* block.
|
|
79
88
|
*/
|
|
80
89
|
type ProviderApprovers = Readonly<Record<string, ApproverInput>>;
|
|
81
90
|
//#endregion
|
|
82
|
-
//#region src/better-supabase/subscribers.d.ts
|
|
83
|
-
/** The fields of better-supabase's `OutboxEvent` the policy reads. */
|
|
84
|
-
type SubscriberPolicyEvent = {
|
|
85
|
-
readonly type: string;
|
|
86
|
-
readonly tenant: string | null;
|
|
87
|
-
readonly actorId: string | null;
|
|
88
|
-
readonly payload: unknown;
|
|
89
|
-
};
|
|
90
|
-
type SubscriberPolicyOptions<E extends SubscriberPolicyEvent = SubscriberPolicyEvent> = {
|
|
91
|
-
readonly policy: Policy;
|
|
92
|
-
/** Loads the sender and every subscriber's principal. */
|
|
93
|
-
readonly principals: PrincipalSource;
|
|
94
|
-
/**
|
|
95
|
-
* The permission a subscriber needs for each event type: an exact type,
|
|
96
|
-
* `prefix.*` or `*`, with the exact type first and then the longest
|
|
97
|
-
* pattern. A type with no entry reaches no one.
|
|
98
|
-
*/
|
|
99
|
-
readonly events: Readonly<Record<string, Permission>>;
|
|
100
|
-
/** The row the permission is decided on. Defaults to `event.payload`, validated against the resource schema. */
|
|
101
|
-
readonly row?: (event: E) => unknown;
|
|
102
|
-
/** The principal the fan-out runs as in the event's tenant. Defaults to `event.actorId`. */
|
|
103
|
-
readonly sender?: (event: E) => string | null | undefined;
|
|
104
|
-
/** Sources for the sender's and subscribers' instances. */
|
|
105
|
-
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt" | "principals">;
|
|
106
|
-
};
|
|
107
|
-
/**
|
|
108
|
-
* The per-subscriber check for better-supabase's webhooks-out, outbox and
|
|
109
|
-
* realtime fan-out: the subscribers whose `principal` `decideFor` grants
|
|
110
|
-
* the event type's permission on its row, in the event's tenant, as the
|
|
111
|
-
* sender. An unmapped type, an event without a tenant or sender, a sender
|
|
112
|
-
* outside the tenant and a throw reach no one.
|
|
113
|
-
*/
|
|
114
|
-
export declare function subscriberPolicy<E extends SubscriberPolicyEvent = SubscriberPolicyEvent>(options: SubscriberPolicyOptions<E>): <S extends {
|
|
115
|
-
readonly principal: string;
|
|
116
|
-
}>(event: E, subscribers: readonly S[]) => Promise<S[]>;
|
|
117
|
-
//#endregion
|
|
118
91
|
//#region src/better-supabase/api-keys.d.ts
|
|
119
92
|
/** The roles a tenant key holds in its tenant: a list, or one per key. */
|
|
120
93
|
type ServiceRoles<K> = readonly string[] | ((key: K) => readonly string[]);
|
|
@@ -122,8 +95,8 @@ type ApiKeyVerifierOptions = {
|
|
|
122
95
|
/** `createApiKeys()` over a service transport. */
|
|
123
96
|
readonly keys: Pick<ApiKeys, "verify">;
|
|
124
97
|
/**
|
|
125
|
-
* `permdock.manifest.json`, whose `rls.apiKeys.serviceRoles` is the
|
|
126
|
-
*
|
|
98
|
+
* `permdock.manifest.json`, whose `rls.apiKeys.serviceRoles` is the default
|
|
99
|
+
* for `serviceRoles`.
|
|
127
100
|
*/
|
|
128
101
|
readonly manifest?: unknown;
|
|
129
102
|
/**
|
|
@@ -132,95 +105,167 @@ type ApiKeyVerifierOptions = {
|
|
|
132
105
|
* `null`.
|
|
133
106
|
*/
|
|
134
107
|
readonly serviceRoles?: ServiceRoles<ApiKey>;
|
|
135
|
-
/**
|
|
108
|
+
/**
|
|
109
|
+
* The permissions `*` stands for. Without it, a key with `*` verifies to
|
|
110
|
+
* `null`.
|
|
111
|
+
*/
|
|
136
112
|
readonly allPermissions?: readonly Permission[];
|
|
137
113
|
};
|
|
138
114
|
/**
|
|
139
|
-
* better-supabase's API keys as a `CredentialVerifier`, for
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
115
|
+
* better-supabase's API keys as a `CredentialVerifier`, for `subjectFromApiKey`
|
|
116
|
+
* from `permdock/server`, which reads PermDock's `pdk_<id>_<secret>` format:
|
|
117
|
+
* create the keys with `prefix: "pdk"`. The credential id is the key's
|
|
118
|
+
* `publicId`, the id in the token. A personal key is a `user` credential acting
|
|
119
|
+
* as its user (inside its tenant when the key is limited to one), a tenant key
|
|
120
|
+
* a `service` credential holding `serviceRoles` in its tenant, and the key's
|
|
121
|
+
* scopes are the credential's permissions. better-supabase records the use when
|
|
122
|
+
* it verifies, so there is no `touch`. A rotated key in its grace period
|
|
123
|
+
* verifies, and its credential expires when the grace period ends. An invalid,
|
|
124
|
+
* revoked, expired or rate-limited key, and a failed lookup, are `null`.
|
|
125
|
+
* `permdock/server` exports a different `apiKeyVerifier`, over the
|
|
126
|
+
* application's own key records.
|
|
151
127
|
*/
|
|
152
128
|
export declare function apiKeyVerifier(options: ApiKeyVerifierOptions): CredentialVerifier;
|
|
153
129
|
/**
|
|
154
|
-
* The `claim` and `tenantClaim` options of better-supabase's
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
130
|
+
* The `claim` and `tenantClaim` options of better-supabase's `apiKeyClaims()`,
|
|
131
|
+
* from the manifest's `rls.apiKeys`, so a key's token carries the scopes
|
|
132
|
+
* ceiling, tenant and roles the `rls generate` helpers read. Throws when the
|
|
133
|
+
* manifest has no `rls.apiKeys`.
|
|
158
134
|
*/
|
|
159
135
|
export declare function apiKeyClaimOptions(manifest: unknown): Pick<ApiKeyClaimsOptions, "claim" | "tenantClaim">;
|
|
160
136
|
//#endregion
|
|
161
137
|
//#region src/better-supabase/subject.d.ts
|
|
162
|
-
/**
|
|
138
|
+
/**
|
|
139
|
+
* An `AuthSession` of kind `apiKey`, from better-supabase's api-keys
|
|
140
|
+
* middleware.
|
|
141
|
+
*/
|
|
163
142
|
type ApiKeySession = Extract<AuthSession, {
|
|
164
143
|
readonly kind: "apiKey";
|
|
165
144
|
}>;
|
|
166
145
|
type ApiKeySessionOptions = {
|
|
167
|
-
/**
|
|
146
|
+
/**
|
|
147
|
+
* The definitions: the key's scopes become the subject's delegation, and `*`
|
|
148
|
+
* stands for all of them.
|
|
149
|
+
*/
|
|
168
150
|
readonly permissions: PermissionTree;
|
|
169
|
-
/**
|
|
151
|
+
/**
|
|
152
|
+
* `permdock.manifest.json`, whose `rls.apiKeys.serviceRoles` is the default
|
|
153
|
+
* for `serviceRoles`.
|
|
154
|
+
*/
|
|
170
155
|
readonly manifest?: unknown;
|
|
171
|
-
/**
|
|
156
|
+
/**
|
|
157
|
+
* The roles a tenant key holds in its tenant. Without it or a manifest with
|
|
158
|
+
* `rls.apiKeys`, a tenant key is anonymous.
|
|
159
|
+
*/
|
|
172
160
|
readonly serviceRoles?: ServiceRoles<ApiKeySession>;
|
|
173
161
|
};
|
|
174
162
|
/** The claim, and the short code better-supabase writes for each feature key. */
|
|
175
163
|
type FeatureClaim = EntitlementClaimOptions;
|
|
176
164
|
type BetterSupabaseSubjectOptions = Omit<SupabaseSubjectOptions, "claims"> & {
|
|
177
|
-
/**
|
|
165
|
+
/**
|
|
166
|
+
* Where the token carries roles, the active tenant and memberships; plans
|
|
167
|
+
* come from `plans`.
|
|
168
|
+
*/
|
|
178
169
|
readonly claims?: Omit<NonNullable<SupabaseSubjectOptions["claims"]>, "plans">;
|
|
179
170
|
/** How `kind: 'apiKey'` sessions map. Without it they are anonymous. */
|
|
180
171
|
readonly apiKeys?: ApiKeySessionOptions;
|
|
181
172
|
/**
|
|
182
|
-
* The claim `principal.plans` reads: its name (default `features`), or
|
|
183
|
-
*
|
|
184
|
-
* writes short codes with, so `plans` holds the feature keys. A code
|
|
185
|
-
*
|
|
173
|
+
* The claim `principal.plans` reads: its name (default `features`), or `{
|
|
174
|
+
* claim, keys }` with the same `entitlements.claim.keys` better-supabase
|
|
175
|
+
* writes short codes with, so `plans` holds the feature keys. A code without
|
|
176
|
+
* a key is dropped.
|
|
186
177
|
*/
|
|
187
178
|
readonly plans?: string | FeatureClaim;
|
|
188
179
|
};
|
|
189
180
|
/**
|
|
190
181
|
* `subjectFromSupabaseSession` for better-supabase's `AuthSession`, reading
|
|
191
182
|
* `memberships` for the memberships and the entitlements module's `features`
|
|
192
|
-
* claim for `principal.plans` (`plans` names another claim). With `apiKeys`,
|
|
193
|
-
*
|
|
183
|
+
* claim for `principal.plans` (`plans` names another claim). With `apiKeys`, a
|
|
184
|
+
* verified `apiKey` session is the key's credential subject: a personal key
|
|
194
185
|
* acts as its user within the key's scopes, a tenant key as a `service`
|
|
195
186
|
* principal holding `serviceRoles`. Without `apiKeys`, and for `anon`,
|
|
196
187
|
* `service` and `invalid` sessions, the subject is anonymous.
|
|
197
188
|
*/
|
|
198
189
|
export declare function subjectFromBetterSupabase(session: SupabaseSessionLike | ApiKeySession | null | undefined, options?: BetterSupabaseSubjectOptions): Subject<SupabasePrincipal> | Subject<ApiKeyPrincipal> | Subject;
|
|
199
190
|
//#endregion
|
|
191
|
+
//#region src/better-supabase/subscribers.d.ts
|
|
192
|
+
/** The fields of better-supabase's `OutboxEvent` the policy reads. */
|
|
193
|
+
type SubscriberPolicyEvent = {
|
|
194
|
+
readonly type: string;
|
|
195
|
+
readonly tenant: string | null;
|
|
196
|
+
readonly actorId: string | null;
|
|
197
|
+
readonly payload: unknown;
|
|
198
|
+
};
|
|
199
|
+
type SubscriberPolicyOptions<E extends SubscriberPolicyEvent = SubscriberPolicyEvent> = {
|
|
200
|
+
readonly policy: Policy;
|
|
201
|
+
/** Loads the sender and every subscriber's principal. */
|
|
202
|
+
readonly principals: PrincipalSource;
|
|
203
|
+
/**
|
|
204
|
+
* The permission a subscriber needs for each event type: an exact type,
|
|
205
|
+
* `prefix.*` or `*`, with the exact type first and then the longest pattern.
|
|
206
|
+
* A type with no entry reaches no one.
|
|
207
|
+
*/
|
|
208
|
+
readonly events: Readonly<Record<string, Permission>>;
|
|
209
|
+
/**
|
|
210
|
+
* The row the permission is decided on. Defaults to `event.payload`,
|
|
211
|
+
* validated against the resource schema.
|
|
212
|
+
*/
|
|
213
|
+
readonly row?: (event: E) => unknown;
|
|
214
|
+
/**
|
|
215
|
+
* The principal the fan-out runs as in the event's tenant. Defaults to
|
|
216
|
+
* `event.actorId`.
|
|
217
|
+
*/
|
|
218
|
+
readonly sender?: (event: E) => string | null | undefined;
|
|
219
|
+
/** Sources for the sender's and subscribers' instances. */
|
|
220
|
+
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt" | "principals">;
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* The per-subscriber check for better-supabase's webhooks-out, outbox and
|
|
224
|
+
* realtime fan-out: the subscribers whose `principal` `decideFor` grants the
|
|
225
|
+
* event type's permission on its row, in the event's tenant, as the sender. An
|
|
226
|
+
* unmapped type, an event without a tenant or sender, a sender outside the
|
|
227
|
+
* tenant and a throw reach no one.
|
|
228
|
+
*/
|
|
229
|
+
export declare function subscriberPolicy<E extends SubscriberPolicyEvent = SubscriberPolicyEvent>(options: SubscriberPolicyOptions<E>): <S extends {
|
|
230
|
+
readonly principal: string;
|
|
231
|
+
}>(event: E, subscribers: readonly S[]) => Promise<S[]>;
|
|
232
|
+
//#endregion
|
|
200
233
|
//#region src/better-supabase/support.d.ts
|
|
201
|
-
/**
|
|
234
|
+
/**
|
|
235
|
+
* A start `decideSupportSession` holds for approval: the session it would start
|
|
236
|
+
* and the token an approval binds to.
|
|
237
|
+
*/
|
|
202
238
|
type PendingSupportSession = {
|
|
203
239
|
readonly token: string;
|
|
204
240
|
readonly session: SupportSession;
|
|
205
241
|
};
|
|
206
242
|
type SupportPolicyOptions = {
|
|
207
243
|
readonly policy: Policy;
|
|
208
|
-
/**
|
|
244
|
+
/**
|
|
245
|
+
* How the admin's verified claims map to a subject; the defaults of
|
|
246
|
+
* `subjectFromBetterSupabase`.
|
|
247
|
+
*/
|
|
209
248
|
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
210
|
-
/**
|
|
249
|
+
/**
|
|
250
|
+
* Sources and sinks for the admin's instance; `settings` also supplies the
|
|
251
|
+
* tenant's `supportSessions` rules.
|
|
252
|
+
*/
|
|
211
253
|
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt">;
|
|
212
254
|
/**
|
|
213
|
-
* The session's permissions when a start asks for `readOnly: false`.
|
|
214
|
-
*
|
|
215
|
-
*
|
|
255
|
+
* The session's permissions when a start asks for `readOnly: false`. Without
|
|
256
|
+
* it such a start is refused; a read-only start gets every `readOnlyHint`
|
|
257
|
+
* permission the admin can use.
|
|
216
258
|
*/
|
|
217
259
|
readonly writable?: readonly Permission[];
|
|
218
|
-
/**
|
|
260
|
+
/**
|
|
261
|
+
* Approval by someone other than the admin is required unless this is
|
|
262
|
+
* `false`.
|
|
263
|
+
*/
|
|
219
264
|
readonly approval?: boolean;
|
|
220
265
|
/**
|
|
221
|
-
* The approval the application recorded for `pending.token`, or
|
|
222
|
-
*
|
|
223
|
-
*
|
|
266
|
+
* The approval the application recorded for `pending.token`, or `undefined`
|
|
267
|
+
* while none exists. `approvedBy` is the approver's principal id and never
|
|
268
|
+
* the admin's.
|
|
224
269
|
*/
|
|
225
270
|
readonly approved?: (input: SupportAuthorizeInput, pending: PendingSupportSession) => {
|
|
226
271
|
readonly approvedBy: string;
|
|
@@ -233,8 +278,8 @@ type SupportPolicyOptions = {
|
|
|
233
278
|
* verified claims become a PermDock subject, and the start is decided with
|
|
234
279
|
* `permdock.decideSupportSession` in the requested tenant. `true` only for
|
|
235
280
|
* `granted`: an `approval-required` start passes once `approved` returns a
|
|
236
|
-
* distinct approver for its token. `readOnly: false` needs `writable`. A
|
|
237
|
-
*
|
|
281
|
+
* distinct approver for its token. `readOnly: false` needs `writable`. A throw
|
|
282
|
+
* is `false`.
|
|
238
283
|
*/
|
|
239
284
|
export declare function supportPolicy(options: SupportPolicyOptions): SupportAuthorize;
|
|
240
285
|
//#endregion
|
|
@@ -250,30 +295,42 @@ type AuthorizationHooksOptions = {
|
|
|
250
295
|
readonly claims: (userId: string, options: {
|
|
251
296
|
readonly tenant?: string;
|
|
252
297
|
}) => Maybe$1<Claims>;
|
|
253
|
-
/**
|
|
298
|
+
/**
|
|
299
|
+
* How the claims map to a subject; the defaults of
|
|
300
|
+
* `subjectFromBetterSupabase`.
|
|
301
|
+
*/
|
|
254
302
|
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
255
303
|
/** Sources for every instance the hooks build. */
|
|
256
304
|
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt">;
|
|
257
305
|
/**
|
|
258
|
-
* The claims an organization-owned automation runs as in `tenant`, such
|
|
259
|
-
*
|
|
260
|
-
*
|
|
306
|
+
* The claims an organization-owned automation runs as in `tenant`, such as
|
|
307
|
+
* its default service principal's. Without it such an automation runs as no
|
|
308
|
+
* one.
|
|
261
309
|
*/
|
|
262
310
|
readonly service?: (tenant: string | null) => Maybe$1<Claims>;
|
|
263
|
-
/**
|
|
311
|
+
/**
|
|
312
|
+
* The `principalSource` for `identities` and `delivery`; without it neither
|
|
313
|
+
* hook is set.
|
|
314
|
+
*/
|
|
264
315
|
readonly principals?: PrincipalSource;
|
|
265
|
-
/**
|
|
316
|
+
/**
|
|
317
|
+
* The permission each event type needs, for `delivery` (`subscriberPolicy`'s
|
|
318
|
+
* `events`).
|
|
319
|
+
*/
|
|
266
320
|
readonly events?: Readonly<Record<string, Permission>>;
|
|
267
321
|
/** The row a delivery check decides on; defaults to `event.payload`. */
|
|
268
322
|
readonly row?: (event: SubscriberPolicyEvent) => unknown;
|
|
269
|
-
/**
|
|
323
|
+
/**
|
|
324
|
+
* Who may approve each request kind, as for `authorizationProvider`; sets
|
|
325
|
+
* `approverOf`.
|
|
326
|
+
*/
|
|
270
327
|
readonly approvers?: ProviderApprovers;
|
|
271
328
|
/** `supportPolicy`'s options without `policy`; sets `support.authorize`. */
|
|
272
329
|
readonly support?: Omit<SupportPolicyOptions, "policy">;
|
|
273
330
|
/**
|
|
274
|
-
* The user and tenant a run ticket stands for, looked up in the app's
|
|
275
|
-
*
|
|
276
|
-
*
|
|
331
|
+
* The user and tenant a run ticket stands for, looked up in the app's store;
|
|
332
|
+
* `null` refuses the ticket. Sets `tickets.subject`, which loads the user's
|
|
333
|
+
* current claims, so a suspended user's ticket runs as no one.
|
|
277
334
|
*/
|
|
278
335
|
readonly tickets?: (ticket: string) => Maybe$1<{
|
|
279
336
|
readonly userId: string;
|
|
@@ -281,91 +338,110 @@ type AuthorizationHooksOptions = {
|
|
|
281
338
|
}>;
|
|
282
339
|
};
|
|
283
340
|
/**
|
|
284
|
-
* better-supabase's `AuthorizationHooks` (`createServer(betterSupabase,
|
|
285
|
-
*
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
*
|
|
289
|
-
* `
|
|
290
|
-
*
|
|
291
|
-
*
|
|
292
|
-
*
|
|
341
|
+
* better-supabase's `AuthorizationHooks` (`createServer(betterSupabase, {
|
|
342
|
+
* authorization })`), decided by `policy`. Every hook builds the principal's
|
|
343
|
+
* instance from the claims `claims` loads now, never from the request, and
|
|
344
|
+
* fails closed: a throw, an unknown key and `approval-required` refuse.
|
|
345
|
+
* `automation` and `delegation` are always set; `identities`, `delivery`,
|
|
346
|
+
* `approverOf`, `support` and `tickets` only with the options they read.
|
|
347
|
+
* `delegation.permissions` maps each scope to the keys whose `.scope` it is,
|
|
348
|
+
* was renamed from, or that a policy `oauthScopes` entry covers, and reads no
|
|
349
|
+
* `authorization_details`.
|
|
293
350
|
*/
|
|
294
351
|
export declare function authorizationHooks(options: AuthorizationHooksOptions): AuthorizationHooks;
|
|
295
352
|
//#endregion
|
|
296
353
|
//#region src/better-supabase/provider.d.ts
|
|
297
354
|
type AuthorizationProviderOptions = {
|
|
298
|
-
/**
|
|
355
|
+
/**
|
|
356
|
+
* `permdock.manifest.json`, parsed or as JSON text, from `permdock supabase
|
|
357
|
+
* inspect --out`.
|
|
358
|
+
*/
|
|
299
359
|
readonly manifest: unknown;
|
|
300
360
|
/**
|
|
301
|
-
* `permissions.catalog.json` from `permdock catalog`. Without it the
|
|
302
|
-
*
|
|
303
|
-
*
|
|
361
|
+
* `permissions.catalog.json` from `permdock catalog`. Without it the provider
|
|
362
|
+
* lists no permissions, so better-supabase refuses every key in a bucket,
|
|
363
|
+
* topic or module check.
|
|
304
364
|
*/
|
|
305
365
|
readonly catalog?: unknown;
|
|
306
366
|
/** The scope tenants are; defaults to the manifest's one root scope. */
|
|
307
367
|
readonly scope?: string;
|
|
308
368
|
/**
|
|
309
|
-
* The permission that lets a user decide a tool call waiting for
|
|
310
|
-
*
|
|
311
|
-
*
|
|
369
|
+
* The permission that lets a user decide a tool call waiting for approval:
|
|
370
|
+
* the `'ai-tool'` entry of `approvers` (`holder(approver)`) unless
|
|
371
|
+
* `approvers` names one. The requester is never their own approver.
|
|
312
372
|
*/
|
|
313
373
|
readonly approver?: Permission;
|
|
314
374
|
/**
|
|
315
375
|
* Who may approve each request kind, for better-supabase's `isApprover`:
|
|
316
|
-
* `'ai-tool'`, `'support-session'` or the approvals block's
|
|
317
|
-
*
|
|
318
|
-
*
|
|
319
|
-
*
|
|
320
|
-
*
|
|
376
|
+
* `'ai-tool'`, `'support-session'` or the approvals block's `'<subject
|
|
377
|
+
* type>.<action>'`, each mapped to `user()`, `holder()` or `anyOf()`
|
|
378
|
+
* approvers. A kind it does not name has no provider approver, which for tool
|
|
379
|
+
* calls and support sessions means nobody but the service role. Needs
|
|
380
|
+
* `permdock_is_approver` from `rls.approvals`.
|
|
321
381
|
*/
|
|
322
382
|
readonly approvers?: ProviderApprovers;
|
|
323
383
|
};
|
|
324
384
|
/**
|
|
325
385
|
* better-supabase's `authorization` config value, built from PermDock's
|
|
326
386
|
* manifest and catalog: the scopes, the `rls generate` helpers as SQL
|
|
327
|
-
* templates, the membership tables, suspension rows, the token hook and
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
* `approvers` and `permdock_is_approver`, and otherwise `canApprove` only
|
|
332
|
-
*
|
|
387
|
+
* templates, the membership tables, suspension rows, the token hook and every
|
|
388
|
+
* catalog key with `sqlComplete` set from its `rowConditions`. A `_for`
|
|
389
|
+
* template and `permissionsFor` are set only when the manifest lists their
|
|
390
|
+
* helper, which `rls.mode: 'database'` writes; `isApprover` only with
|
|
391
|
+
* `approvers` and `permdock_is_approver`, and otherwise `canApprove` only with
|
|
392
|
+
* `approver`. `holdersOf` (`permitted_<tenant scope>_users`) and
|
|
333
393
|
* `actorMayWrite` (`permdock_actor_may_write()`) are set when the manifest
|
|
334
|
-
* lists their helper
|
|
335
|
-
*
|
|
394
|
+
* lists their helper, and so is `teamIdsOf` (`member_<scope>_ids_of({user})`)
|
|
395
|
+
* for a scope named `team` or `teams`. Throws when the manifest or catalog is
|
|
396
|
+
* invalid, or when the tenant scope is ambiguous.
|
|
336
397
|
*/
|
|
337
398
|
export declare function authorizationProvider(options: AuthorizationProviderOptions): AuthorizationProvider;
|
|
338
399
|
//#endregion
|
|
339
400
|
//#region src/better-supabase/authorizer.d.ts
|
|
340
|
-
/**
|
|
401
|
+
/**
|
|
402
|
+
* The table operations better-supabase's `permissions: true` resolves through
|
|
403
|
+
* `forOperation`.
|
|
404
|
+
*/
|
|
341
405
|
type AuthorizerOperation = "list" | "get" | "create" | "update" | "delete";
|
|
342
406
|
type AuthorizerOptions = {
|
|
343
407
|
readonly policy: Policy;
|
|
344
|
-
/**
|
|
408
|
+
/**
|
|
409
|
+
* How the verified claims map to a subject; the defaults of
|
|
410
|
+
* `subjectFromBetterSupabase`.
|
|
411
|
+
*/
|
|
345
412
|
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
346
413
|
/**
|
|
347
|
-
* The permission of each table operation, so a resource with
|
|
348
|
-
*
|
|
414
|
+
* The permission of each table operation, so a resource with `permissions:
|
|
415
|
+
* true` is checked. Without it such a resource is refused.
|
|
349
416
|
*/
|
|
350
417
|
readonly operations?: Readonly<Record<string, Partial<Record<AuthorizerOperation, Permission>>>>;
|
|
351
|
-
/**
|
|
418
|
+
/**
|
|
419
|
+
* Sources and sinks for each instance. The subject, actor and tenant always
|
|
420
|
+
* come from the verified request.
|
|
421
|
+
*/
|
|
352
422
|
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt">;
|
|
353
423
|
};
|
|
354
424
|
/**
|
|
355
425
|
* better-supabase's `authorizer` for PermDock: every resource, action, route
|
|
356
|
-
* guard and MCP tool that declares a `permission` is decided with `decide`.
|
|
357
|
-
*
|
|
358
|
-
*
|
|
359
|
-
*
|
|
360
|
-
*
|
|
426
|
+
* guard and MCP tool that declares a `permission` is decided with `decide`. The
|
|
427
|
+
* subject is mapped from the verified claims with `subjectFromBetterSupabase`;
|
|
428
|
+
* the request's `context.tenant` selects the active tenant only among the
|
|
429
|
+
* memberships the claims hold. A caller without claims is anonymous, and a
|
|
430
|
+
* throw denies.
|
|
361
431
|
*/
|
|
362
432
|
export declare function authorizer(options: AuthorizerOptions): Authorizer<Permission>;
|
|
363
433
|
//#endregion
|
|
364
434
|
//#region src/better-supabase/policies.d.ts
|
|
365
435
|
type AccessScope = {
|
|
366
|
-
/**
|
|
436
|
+
/**
|
|
437
|
+
* A scope in the policy's scopes (or the manifest's `rls.scopes`), or
|
|
438
|
+
* `platform` for permissions granted globally.
|
|
439
|
+
*/
|
|
367
440
|
readonly scope: string;
|
|
368
|
-
/**
|
|
441
|
+
/**
|
|
442
|
+
* 1-based path or topic segment holding the scope id; better-supabase's
|
|
443
|
+
* default is the `{organizationId}` segment.
|
|
444
|
+
*/
|
|
369
445
|
readonly segment?: number;
|
|
370
446
|
};
|
|
371
447
|
/**
|
|
@@ -374,16 +450,28 @@ type AccessScope = {
|
|
|
374
450
|
* the scopes a permission is granted at come from the definitions.
|
|
375
451
|
*/
|
|
376
452
|
type AccessPolicyOptions = AccessScope & ({
|
|
377
|
-
/**
|
|
453
|
+
/**
|
|
454
|
+
* `permdock.manifest.json`, parsed or as JSON text: it names the
|
|
455
|
+
* helpers' schema and the scopes.
|
|
456
|
+
*/
|
|
378
457
|
readonly manifest: unknown;
|
|
379
|
-
/**
|
|
458
|
+
/**
|
|
459
|
+
* `permissions.catalog.json`: only keys it marks `rowConditions: false`
|
|
460
|
+
* are accepted.
|
|
461
|
+
*/
|
|
380
462
|
readonly catalog: unknown;
|
|
381
463
|
readonly policy?: undefined;
|
|
382
464
|
readonly schema?: undefined;
|
|
383
465
|
} | {
|
|
384
|
-
/**
|
|
466
|
+
/**
|
|
467
|
+
* The `definePolicy` result: only keys with no row condition in it are
|
|
468
|
+
* accepted.
|
|
469
|
+
*/
|
|
385
470
|
readonly policy: Policy;
|
|
386
|
-
/**
|
|
471
|
+
/**
|
|
472
|
+
* The schema `rls generate` put the helpers in (`rls.schema`). Default
|
|
473
|
+
* `permdock`.
|
|
474
|
+
*/
|
|
387
475
|
readonly schema?: string;
|
|
388
476
|
readonly manifest?: undefined;
|
|
389
477
|
readonly catalog?: undefined;
|
|
@@ -403,11 +491,10 @@ type TopicAccess = {
|
|
|
403
491
|
readonly send?: Permission;
|
|
404
492
|
};
|
|
405
493
|
/**
|
|
406
|
-
* A better-supabase bucket `policy` that checks PermDock permissions with
|
|
407
|
-
*
|
|
408
|
-
*
|
|
409
|
-
*
|
|
410
|
-
* `scope`, throws.
|
|
494
|
+
* A better-supabase bucket `policy` that checks PermDock permissions with the
|
|
495
|
+
* `rls generate` helpers at `scope`. The helpers check role and scope only, so
|
|
496
|
+
* a permission with row conditions (`rowConditions: true` in the catalog, or a
|
|
497
|
+
* conditioned grant in `policy`), or one not granted at `scope`, throws.
|
|
411
498
|
*/
|
|
412
499
|
export declare function bucketPolicy(access: BucketAccess, options: AccessPolicyOptions): AccessBucketPolicy;
|
|
413
500
|
/** As {@link bucketPolicy}, for a better-supabase Realtime topic. */
|
|
@@ -417,7 +504,10 @@ export declare function topicPolicy(access: TopicAccess, options: AccessPolicyOp
|
|
|
417
504
|
type CredentialGuardOptions = {
|
|
418
505
|
/** The request's PermDock instance. */
|
|
419
506
|
readonly permdock: () => PermDock | Promise<PermDock>;
|
|
420
|
-
/**
|
|
507
|
+
/**
|
|
508
|
+
* The permission that resolves a token or connects an account; decided on the
|
|
509
|
+
* ref.
|
|
510
|
+
*/
|
|
421
511
|
readonly use: Permission;
|
|
422
512
|
/** The permission that revokes a stored credential; defaults to `use`. */
|
|
423
513
|
readonly revoke?: Permission;
|
|
@@ -425,10 +515,10 @@ type CredentialGuardOptions = {
|
|
|
425
515
|
/**
|
|
426
516
|
* `provider` with every `getToken`, `startAuthorization`,
|
|
427
517
|
* `completeAuthorization` and `revoke` decided by PermDock first, on the
|
|
428
|
-
* `CredentialRef` as the row. Anything but `granted` is a `forbidden`
|
|
429
|
-
*
|
|
430
|
-
*
|
|
431
|
-
*
|
|
518
|
+
* `CredentialRef` as the row. Anything but `granted` is a `forbidden` error
|
|
519
|
+
* with hint `PERMDOCK_DENIED`, and a failed check is one too. `capabilities`
|
|
520
|
+
* and `verifyInbound` (a third party's request, with no user) pass through.
|
|
521
|
+
* Build it per request, with that request's PermDock.
|
|
432
522
|
*/
|
|
433
523
|
export declare function credentialGuard(provider: CredentialProvider, options: CredentialGuardOptions): CredentialProvider;
|
|
434
524
|
//#endregion
|
|
@@ -441,9 +531,9 @@ type ToolPolicyOptions<C> = {
|
|
|
441
531
|
/** The request's PermDock instance, from the hook's context. */
|
|
442
532
|
readonly permdock: (ctx: C) => PermDock | Promise<PermDock>;
|
|
443
533
|
/**
|
|
444
|
-
* The row an instance permission is decided on, from the validated
|
|
445
|
-
*
|
|
446
|
-
*
|
|
534
|
+
* The row an instance permission is decided on, from the validated arguments.
|
|
535
|
+
* Without it the call is decided without a row, which an instance permission
|
|
536
|
+
* with a row condition denies.
|
|
447
537
|
*/
|
|
448
538
|
readonly data?: (ctx: C, tool: McpToolRef, args: unknown) => unknown;
|
|
449
539
|
};
|
|
@@ -453,17 +543,49 @@ type ToolPolicy<C> = {
|
|
|
453
543
|
};
|
|
454
544
|
/**
|
|
455
545
|
* The `authorize` and `visible` hooks of better-supabase's `createMcp`, for
|
|
456
|
-
* tools whose `meta` is a PermDock permission. A tool without a permission
|
|
457
|
-
*
|
|
458
|
-
* approval-required call is refused, because `createMcp`
|
|
459
|
-
*
|
|
546
|
+
* tools whose `meta` is a PermDock permission. A tool without a permission is
|
|
547
|
+
* hidden and refused. `authorize` grants only a `granted` decision: an
|
|
548
|
+
* approval-required call is refused, because `createMcp` has no approval flow.
|
|
549
|
+
* A throw anywhere refuses.
|
|
460
550
|
*/
|
|
461
551
|
export declare function toolPolicy<C>(options: ToolPolicyOptions<C>): ToolPolicy<C>;
|
|
462
552
|
//#endregion
|
|
553
|
+
//#region src/better-supabase/memberships.d.ts
|
|
554
|
+
/**
|
|
555
|
+
* A row of the better-supabase `memberships` table (organizations block), as
|
|
556
|
+
* `select user_id, organization_id, role, disabled_at` returns it.
|
|
557
|
+
*/
|
|
558
|
+
type BetterSupabaseMembershipRow = {
|
|
559
|
+
readonly user_id: string;
|
|
560
|
+
readonly organization_id: string;
|
|
561
|
+
readonly role: string;
|
|
562
|
+
readonly disabled_at?: string | null;
|
|
563
|
+
};
|
|
564
|
+
type PrincipalFromMembershipsOptions = {
|
|
565
|
+
/**
|
|
566
|
+
* The policy scope an `organization_id` is an instance of; defaults to
|
|
567
|
+
* `tenant`, the first declared scope.
|
|
568
|
+
*/
|
|
569
|
+
readonly scope?: string;
|
|
570
|
+
/**
|
|
571
|
+
* The organization the request acts in, the principal's active tenant. A
|
|
572
|
+
* scoped grant applies only there; without it, pick one per request with
|
|
573
|
+
* `permdock.tenant(id)`, or every scoped check denies with `no-tenant`.
|
|
574
|
+
*/
|
|
575
|
+
readonly tenant?: string;
|
|
576
|
+
};
|
|
577
|
+
/**
|
|
578
|
+
* The principal `userId` is in the better-supabase organizations block: one
|
|
579
|
+
* membership per organization, keyed on `organization_id`, holding the role of
|
|
580
|
+
* each of the user's rows. Rows of another user, disabled rows and malformed
|
|
581
|
+
* rows are dropped, so a user with none holds no membership.
|
|
582
|
+
*/
|
|
583
|
+
export declare function principalFromMemberships(userId: string, rows: readonly BetterSupabaseMembershipRow[], options?: PrincipalFromMembershipsOptions): Principal;
|
|
584
|
+
//#endregion
|
|
463
585
|
//#region src/better-supabase/principals.d.ts
|
|
464
586
|
/**
|
|
465
|
-
* Where an identity link points: an app user, whose claims `principal`
|
|
466
|
-
*
|
|
587
|
+
* Where an identity link points: an app user, whose claims `principal` loads,
|
|
588
|
+
* or a contact the app stores itself, which must be `kind: 'contact'`.
|
|
467
589
|
*/
|
|
468
590
|
type BetterSupabaseIdentityLink = {
|
|
469
591
|
readonly user: string;
|
|
@@ -474,36 +596,71 @@ type Maybe<T> = T | null | undefined | Promise<T | null | undefined>;
|
|
|
474
596
|
type PrincipalSourceOptions = {
|
|
475
597
|
/**
|
|
476
598
|
* The claims better-supabase mints for `userId` now, or `null` for a user
|
|
477
|
-
* deleted, suspended or unknown. `sqlSupportStore(…).claims`, which runs
|
|
478
|
-
*
|
|
599
|
+
* deleted, suspended or unknown. `sqlSupportStore(…).claims`, which runs the
|
|
600
|
+
* custom access token hook, fills it.
|
|
479
601
|
*/
|
|
480
602
|
readonly claims: (userId: string, options: {
|
|
481
603
|
readonly tenant?: string;
|
|
482
604
|
}) => Maybe<Readonly<Record<string, unknown>>>;
|
|
483
605
|
/**
|
|
484
|
-
* The identity link for an email address or chat user. Only links the
|
|
485
|
-
*
|
|
486
|
-
*
|
|
606
|
+
* The identity link for an email address or chat user. Only links the app
|
|
607
|
+
* created through a signed-in link flow or a verified address count. Without
|
|
608
|
+
* it the source has no `principalByIdentity`.
|
|
487
609
|
*/
|
|
488
610
|
readonly identities?: (identity: PrincipalIdentity) => Maybe<BetterSupabaseIdentityLink>;
|
|
489
|
-
/**
|
|
611
|
+
/**
|
|
612
|
+
* How the claims map to a principal; the defaults of
|
|
613
|
+
* `subjectFromBetterSupabase`.
|
|
614
|
+
*/
|
|
490
615
|
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
491
616
|
};
|
|
492
617
|
/**
|
|
493
618
|
* A `PrincipalSource` over better-supabase: `principal(id)` maps the claims
|
|
494
619
|
* `claims` loads with `subjectFromBetterSupabase`, and `principalByIdentity`
|
|
495
|
-
* follows `identities` to a user or a contact. Claims for another user, a
|
|
496
|
-
*
|
|
620
|
+
* follows `identities` to a user or a contact. Claims for another user, a link
|
|
621
|
+
* to a non-contact principal and a missing link are `null`.
|
|
497
622
|
*/
|
|
498
623
|
export declare function principalSource(options: PrincipalSourceOptions): PrincipalSource;
|
|
499
624
|
//#endregion
|
|
625
|
+
//#region src/better-supabase/role-order.d.ts
|
|
626
|
+
type RoleOrderOptions = {
|
|
627
|
+
/**
|
|
628
|
+
* Keep only roles declared `on` this scope, such as the scope SSO assigns
|
|
629
|
+
* memberships in.
|
|
630
|
+
*/
|
|
631
|
+
readonly scope?: string;
|
|
632
|
+
/**
|
|
633
|
+
* The owner role, left out because better-supabase's `roleOrder` must not
|
|
634
|
+
* list it.
|
|
635
|
+
*/
|
|
636
|
+
readonly owner?: string;
|
|
637
|
+
};
|
|
638
|
+
/**
|
|
639
|
+
* The catalog's role keys highest first, for better-supabase's
|
|
640
|
+
* `blocks.sso.options.roleOrder`: a role that `assigns` another comes before
|
|
641
|
+
* it, and roles the `assigns` lists do not order keep catalog order. Roles that
|
|
642
|
+
* assign each other stay together in catalog order, at the first one's place.
|
|
643
|
+
*/
|
|
644
|
+
export declare function roleOrderFromCatalog(catalog: CatalogDocument, options?: RoleOrderOptions): readonly string[];
|
|
645
|
+
//#endregion
|
|
500
646
|
//#region src/better-supabase/share-links.d.ts
|
|
501
|
-
/**
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
647
|
+
/**
|
|
648
|
+
* The fields of better-supabase's `ResolvedShareLink` a link subject is built
|
|
649
|
+
* from: `subject` from better-supabase 0.14, `subjectType` and `subjectId`
|
|
650
|
+
* before it.
|
|
651
|
+
*/
|
|
652
|
+
type ShareLinkRow = ShareLinkRowFields & ({
|
|
653
|
+
readonly subject: {
|
|
654
|
+
readonly type: string;
|
|
655
|
+
readonly id: string;
|
|
656
|
+
};
|
|
657
|
+
} | {
|
|
505
658
|
readonly subjectType: string;
|
|
506
659
|
readonly subjectId: string;
|
|
660
|
+
});
|
|
661
|
+
type ShareLinkRowFields = {
|
|
662
|
+
readonly id: string;
|
|
663
|
+
readonly organizationId: string;
|
|
507
664
|
readonly role: string;
|
|
508
665
|
/** Set on a link pinned to one version, which `subjectFromShareLink` refuses. */
|
|
509
666
|
readonly versionId?: string;
|
|
@@ -511,7 +668,7 @@ type ShareLinkRow = {
|
|
|
511
668
|
};
|
|
512
669
|
/** better-supabase's `ShareLinks`, or anything with its `resolve`. */
|
|
513
670
|
type ShareLinkResolver = {
|
|
514
|
-
resolve(token: string)
|
|
671
|
+
resolve: (token: string) => PromiseLike<{
|
|
515
672
|
readonly ok: true;
|
|
516
673
|
readonly data: ShareLinkRow | null;
|
|
517
674
|
} | {
|
|
@@ -520,21 +677,33 @@ type ShareLinkResolver = {
|
|
|
520
677
|
};
|
|
521
678
|
/** How links on one better-supabase subject type map to PermDock. */
|
|
522
679
|
type ShareLinkTarget = {
|
|
523
|
-
/**
|
|
680
|
+
/**
|
|
681
|
+
* The resource the subject type's rows are; RLS matches it against
|
|
682
|
+
* `capability.on.resource`.
|
|
683
|
+
*/
|
|
524
684
|
readonly resource: Permission | PermissionTree;
|
|
525
|
-
/**
|
|
685
|
+
/**
|
|
686
|
+
* PermDock roles for each share-link role (`{ view: ['guest'] }`). A role
|
|
687
|
+
* with no entry is refused.
|
|
688
|
+
*/
|
|
526
689
|
readonly roles: Readonly<Record<string, readonly string[]>>;
|
|
527
690
|
};
|
|
528
691
|
type ShareLinkSubjectOptions = {
|
|
529
692
|
readonly shareLinks: ShareLinkResolver;
|
|
530
|
-
/**
|
|
693
|
+
/**
|
|
694
|
+
* One entry per subject type a guest page serves, keyed by better-supabase's
|
|
695
|
+
* `subjectType`.
|
|
696
|
+
*/
|
|
531
697
|
readonly links: Readonly<Record<string, ShareLinkTarget>>;
|
|
532
|
-
/**
|
|
698
|
+
/**
|
|
699
|
+
* Lifetime of the subject in seconds, capped by the link's own expiry.
|
|
700
|
+
* Default 300, at most 3600.
|
|
701
|
+
*/
|
|
533
702
|
readonly ttl?: number;
|
|
534
703
|
/**
|
|
535
|
-
* The link policies of the link's organization (`row.organizationId`);
|
|
536
|
-
*
|
|
537
|
-
*
|
|
704
|
+
* The link policies of the link's organization (`row.organizationId`); every
|
|
705
|
+
* one must hold, and a throw denies. A row carries no creation time, so a
|
|
706
|
+
* `maxLifetime` rule refuses every share link.
|
|
538
707
|
*/
|
|
539
708
|
readonly linkPolicy?: (capability: Capability, row: ShareLinkRow) => LinkPolicy | readonly LinkPolicy[] | undefined | Promise<LinkPolicy | readonly LinkPolicy[] | undefined>;
|
|
540
709
|
readonly onAuth?: (event: AuthEvent) => void;
|
|
@@ -542,34 +711,37 @@ type ShareLinkSubjectOptions = {
|
|
|
542
711
|
readonly now?: Instant;
|
|
543
712
|
};
|
|
544
713
|
/**
|
|
545
|
-
* Resolves a better-supabase share-link token into the `link` subject it
|
|
546
|
-
*
|
|
547
|
-
*
|
|
548
|
-
*
|
|
549
|
-
*
|
|
550
|
-
*
|
|
551
|
-
*
|
|
714
|
+
* Resolves a better-supabase share-link token into the `link` subject it acts
|
|
715
|
+
* as, for `exchangeCapability` and `--capabilities` RLS. The row is read on
|
|
716
|
+
* every call, so a revoked or expired link stops resolving at once. An unknown
|
|
717
|
+
* token, subject type or role, a malformed row, a broken link policy, a
|
|
718
|
+
* `resolve` error and a throw are the anonymous subject. So is a link pinned to
|
|
719
|
+
* a version: a capability grants the subject's current rows, so a pinned link
|
|
720
|
+
* reads through `versions.getShared(token)` instead.
|
|
552
721
|
*/
|
|
553
722
|
export declare function subjectFromShareLink(token: string | undefined | null, options: ShareLinkSubjectOptions): Promise<Subject<CapabilityPrincipal>>;
|
|
554
723
|
//#endregion
|
|
555
724
|
//#region src/better-supabase/workflow.d.ts
|
|
556
|
-
/**
|
|
725
|
+
/**
|
|
726
|
+
* Where `handlerCan` gets the request's instance, such as `permdock/server`'s
|
|
727
|
+
* `createPermDock` result.
|
|
728
|
+
*/
|
|
557
729
|
type HandlerPermDockSource = {
|
|
558
730
|
readonly getPermDock: (request: Request) => PermDock | Promise<PermDock>;
|
|
559
731
|
};
|
|
560
732
|
/**
|
|
561
733
|
* The `can` option of better-supabase's `authorizeHook`, for the caller's
|
|
562
|
-
* `permdock`: `true` only when the caller is a member of the hook's tenant
|
|
563
|
-
*
|
|
564
|
-
*
|
|
734
|
+
* `permdock`: `true` only when the caller is a member of the hook's tenant and
|
|
735
|
+
* `decide` grants the permission its `hookMetadata` names there. An unknown
|
|
736
|
+
* key, `approval-required` and a throw are `false`.
|
|
565
737
|
*/
|
|
566
738
|
export declare function hookCan(permdock: PermDock): NonNullable<AuthorizeHookOptions["can"]>;
|
|
567
739
|
/**
|
|
568
|
-
* The `can` option of better-supabase's `protectWebHandler`: `undefined`
|
|
569
|
-
*
|
|
570
|
-
*
|
|
571
|
-
*
|
|
740
|
+
* The `can` option of better-supabase's `protectWebHandler`: `undefined` (401)
|
|
741
|
+
* when the request has no signed-in principal or `getPermDock` throws,
|
|
742
|
+
* otherwise whether `decide` grants the permission in the request's active
|
|
743
|
+
* tenant. An unknown key and `approval-required` are `false` (403).
|
|
572
744
|
*/
|
|
573
745
|
export declare function handlerCan(source: HandlerPermDockSource): ProtectWebHandlerOptions["can"];
|
|
574
746
|
//#endregion
|
|
575
|
-
export type { AccessPolicyOptions, AccessReviewApplierOptions, AccessReviewApplyFailure, AccessReviewApplyResult, ApiKeySession, ApiKeySessionOptions, ApiKeyVerifierOptions, AuthorizationHooksOptions, AuthorizationProviderOptions, AuthorizerOperation, AuthorizerOptions, BetterSupabaseIdentityLink, BetterSupabaseSubjectOptions, BucketAccess, CredentialGuardOptions, HandlerPermDockSource, McpToolDecision, McpToolRef, PendingSupportSession, PrincipalSourceOptions, ProviderApprovers, ServiceRoles, ShareLinkResolver, ShareLinkRow, ShareLinkSubjectOptions, ShareLinkTarget, SubscriberPolicyEvent, SubscriberPolicyOptions, SupabasePrincipal, SupportPolicyOptions, ToolPolicy, ToolPolicyOptions, TopicAccess };
|
|
747
|
+
export type { AccessPolicyOptions, AccessReviewApplierOptions, AccessReviewApplyFailure, AccessReviewApplyResult, ApiKeySession, ApiKeySessionOptions, ApiKeyVerifierOptions, AuthorizationHooksOptions, AuthorizationProviderOptions, AuthorizerOperation, AuthorizerOptions, BetterSupabaseIdentityLink, BetterSupabaseMembershipRow, BetterSupabaseSubjectOptions, BucketAccess, CredentialGuardOptions, HandlerPermDockSource, McpToolDecision, McpToolRef, PendingSupportSession, PrincipalFromMembershipsOptions, PrincipalSourceOptions, ProviderApprovers, RoleOrderOptions, ServiceRoles, ShareLinkResolver, ShareLinkRow, ShareLinkSubjectOptions, ShareLinkTarget, SubscriberPolicyEvent, SubscriberPolicyOptions, SupabasePrincipal, SupportPolicyOptions, ToolPolicy, ToolPolicyOptions, TopicAccess };
|