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,9 +1,9 @@
|
|
|
1
|
-
import { n as RoleThrough } from "./types-
|
|
2
|
-
import {
|
|
1
|
+
import { n as RoleMap, r as RoleThrough } from "./types-ah9NlU6j.js";
|
|
2
|
+
import { s as SqlMembershipSource } from "./sources-B1Os_YUu.js";
|
|
3
3
|
//#region src/cli/core/errors.d.ts
|
|
4
4
|
/**
|
|
5
|
-
* 0 success, 1 failure, 2 usage, 3 action required, 130 interrupted (SIGINT
|
|
6
|
-
*
|
|
5
|
+
* 0 success, 1 failure, 2 usage, 3 action required, 130 interrupted (SIGINT or
|
|
6
|
+
* a cancelled prompt), 143 terminated (SIGTERM).
|
|
7
7
|
*/
|
|
8
8
|
type ExitCode = 0 | 1 | 2 | 3 | 130 | 143;
|
|
9
9
|
//#endregion
|
|
@@ -25,13 +25,12 @@ type RlsMembershipTable = {
|
|
|
25
25
|
* The role key column, a reference to a roles table that holds the key, or
|
|
26
26
|
* several of them: the row holds every non-null key.
|
|
27
27
|
*/
|
|
28
|
-
readonly role: string | RoleThrough | readonly (string | RoleThrough)[];
|
|
29
|
-
/**
|
|
28
|
+
readonly role: string | RoleMap | RoleThrough | readonly (string | RoleMap | RoleThrough)[];
|
|
29
|
+
/**
|
|
30
|
+
* Per scope name, the column holding that scope's id: the table's own scope
|
|
31
|
+
* and its ancestors.
|
|
32
|
+
*/
|
|
30
33
|
readonly columns?: Readonly<Record<string, string>>;
|
|
31
|
-
/** Column of the first scope's id; shorthand for `columns[<first scope>]`. */
|
|
32
|
-
readonly tenant?: string;
|
|
33
|
-
/** Column of the second scope's id; shorthand for `columns[<second scope>]`. */
|
|
34
|
-
readonly team?: string;
|
|
35
34
|
readonly id?: string;
|
|
36
35
|
readonly expiresAt?: string;
|
|
37
36
|
readonly disabledAt?: string;
|
|
@@ -46,13 +45,12 @@ type RlsMembershipTable = {
|
|
|
46
45
|
type RlsMemberships = {
|
|
47
46
|
/** The membership table of each named scope. */
|
|
48
47
|
readonly scopes?: Readonly<Record<string, RlsMembershipTable>>;
|
|
49
|
-
/** The first scope's table; shorthand for `scopes[<first scope>]`. */
|
|
50
|
-
readonly tenant?: RlsMembershipTable;
|
|
51
|
-
/** The second scope's table; shorthand for `scopes[<second scope>]`. */
|
|
52
|
-
readonly team?: RlsMembershipTable;
|
|
53
48
|
readonly resource?: Readonly<Record<string, RlsMembershipTable>>;
|
|
54
49
|
};
|
|
55
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* A table whose row says whether a user or a scope instance is active. A
|
|
52
|
+
* missing row counts as suspended.
|
|
53
|
+
*/
|
|
56
54
|
type RlsActiveRow = {
|
|
57
55
|
readonly table: string;
|
|
58
56
|
/** Column holding the user id or the scope instance id. */
|
|
@@ -63,7 +61,10 @@ type RlsActiveRow = {
|
|
|
63
61
|
readonly status?: string;
|
|
64
62
|
readonly active?: readonly string[];
|
|
65
63
|
};
|
|
66
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* A scope's active-row table, with the permissions its suspended instances
|
|
66
|
+
* keep.
|
|
67
|
+
*/
|
|
67
68
|
type RlsSuspendedScope = RlsActiveRow & {
|
|
68
69
|
/**
|
|
69
70
|
* Permissions (references or keys) members of a suspended instance, and of
|
|
@@ -82,7 +83,10 @@ type RlsSuspendedMembership = {
|
|
|
82
83
|
type RlsSuspension = {
|
|
83
84
|
/** A suspended user holds no role and no membership. */
|
|
84
85
|
readonly users?: RlsActiveRow;
|
|
85
|
-
/**
|
|
86
|
+
/**
|
|
87
|
+
* Per scope name: a suspended instance voids its memberships and every
|
|
88
|
+
* membership nested under it, except for `keep`.
|
|
89
|
+
*/
|
|
86
90
|
readonly scopes?: Readonly<Record<string, RlsSuspendedScope>>;
|
|
87
91
|
readonly memberships?: RlsSuspendedMembership;
|
|
88
92
|
};
|
|
@@ -90,45 +94,102 @@ type RlsFunctionMapping = {
|
|
|
90
94
|
readonly twin: unknown;
|
|
91
95
|
readonly args?: readonly string[];
|
|
92
96
|
};
|
|
97
|
+
/**
|
|
98
|
+
* A table whose rows reach their scope through a parent table (`rls.tables`,
|
|
99
|
+
* `via`): the table's `key` column holds the parent's id, and the parent's
|
|
100
|
+
* `column` holds the scope instance id. The generated policies call
|
|
101
|
+
* `permitted_<parent, singular>_ids(p_grant)`, a `security definer` helper that
|
|
102
|
+
* joins the parent to `permitted_<scope>_ids`.
|
|
103
|
+
*/
|
|
104
|
+
type RlsTableVia = {
|
|
105
|
+
/** `schema.table` of the parent. */
|
|
106
|
+
readonly table: string;
|
|
107
|
+
/** The parent's column holding the scope instance id. */
|
|
108
|
+
readonly column: string;
|
|
109
|
+
/**
|
|
110
|
+
* This table's column holding the parent's id. Default `<parent table,
|
|
111
|
+
* singular>_id`.
|
|
112
|
+
*/
|
|
113
|
+
readonly key?: string;
|
|
114
|
+
/** The parent's id column. Default `id`. */
|
|
115
|
+
readonly id?: string;
|
|
116
|
+
/**
|
|
117
|
+
* SQL type of the parent's id column. Default `uuid` in the `supabase`
|
|
118
|
+
* dialect, else `text`.
|
|
119
|
+
*/
|
|
120
|
+
readonly type?: string;
|
|
121
|
+
/** The scope `column` holds. Default the policy's root scope. */
|
|
122
|
+
readonly scope?: string;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* A resource's table: its `schema.table`, an object that adds `via`, or `false`
|
|
126
|
+
* for a resource with no table (a console permission), which gets no policies
|
|
127
|
+
* while its role grants are still seeded.
|
|
128
|
+
*/
|
|
129
|
+
type RlsTable = string | false | {
|
|
130
|
+
readonly table?: string;
|
|
131
|
+
readonly via: RlsTableVia;
|
|
132
|
+
};
|
|
93
133
|
type RlsConfig = {
|
|
94
|
-
|
|
134
|
+
/**
|
|
135
|
+
* Per resource, the table its policies target; the table is named after the
|
|
136
|
+
* resource when unset, and `false` means it has none.
|
|
137
|
+
*/
|
|
138
|
+
readonly tables?: Readonly<Record<string, RlsTable>>;
|
|
95
139
|
readonly dialect?: RlsDialect;
|
|
96
140
|
readonly memberships?: RlsMemberships;
|
|
97
141
|
/**
|
|
98
|
-
* `database` mode: the `tableMembershipSource` / `junctionMembershipSource`
|
|
99
|
-
* read for every scope `memberships` maps no table for.
|
|
100
|
-
* `supabase.hook.memberships`, so the helpers and the token hook run
|
|
101
|
-
* same SQL. Setting it selects `database` mode.
|
|
142
|
+
* `database` mode: the `tableMembershipSource` / `junctionMembershipSource`
|
|
143
|
+
* sources the helpers read for every scope `memberships` maps no table for.
|
|
144
|
+
* Default `supabase.hook.memberships`, so the helpers and the token hook run
|
|
145
|
+
* the same SQL. Setting it selects `database` mode.
|
|
102
146
|
*/
|
|
103
147
|
readonly membershipSources?: readonly SqlMembershipSource[];
|
|
104
|
-
/**
|
|
148
|
+
/**
|
|
149
|
+
* Tables the helpers, `authorize()` and the token hook read to drop suspended
|
|
150
|
+
* users and scope instances.
|
|
151
|
+
*/
|
|
105
152
|
readonly suspension?: RlsSuspension;
|
|
106
153
|
readonly functions?: Readonly<Record<string, RlsFunctionMapping>>;
|
|
107
154
|
readonly inlineFunctions?: boolean;
|
|
108
|
-
/**
|
|
155
|
+
/**
|
|
156
|
+
* Emit FORCE ROW LEVEL SECURITY so the table owner is subject to the
|
|
157
|
+
* policies.
|
|
158
|
+
*/
|
|
109
159
|
readonly force?: boolean;
|
|
110
160
|
readonly fixtures?: string;
|
|
161
|
+
/**
|
|
162
|
+
* `rls verify` findings accepted as a baseline. `id` is the
|
|
163
|
+
* `<code>:<table>:<key>` the finding prints; `reason` is required. An entry
|
|
164
|
+
* no finding matches is a warning, so the baseline shrinks.
|
|
165
|
+
*/
|
|
166
|
+
readonly verify?: {
|
|
167
|
+
readonly ignore?: readonly {
|
|
168
|
+
readonly id: string;
|
|
169
|
+
readonly reason: string;
|
|
170
|
+
}[];
|
|
171
|
+
};
|
|
111
172
|
readonly tenantClaim?: string;
|
|
112
173
|
/**
|
|
113
174
|
* Which tenants the helpers and `memberOf` checks admit. `'active'`
|
|
114
175
|
* (default): when the token carries a non-empty `tenantClaim`, only that
|
|
115
176
|
* tenant; without one, every tenant the subject is a member of. `'all'`:
|
|
116
|
-
* every such tenant whatever the claim says, for apps whose tenant comes
|
|
117
|
-
*
|
|
177
|
+
* every such tenant whatever the claim says, for apps whose tenant comes from
|
|
178
|
+
* the URL or the query.
|
|
118
179
|
*/
|
|
119
180
|
readonly tenants?: "active" | "all";
|
|
120
|
-
/**
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
181
|
+
/**
|
|
182
|
+
* Postgres type of each named scope's id column, `uuid` by default. The first
|
|
183
|
+
* scope's type also types the tenant claim and the helper results cast to
|
|
184
|
+
* it.
|
|
185
|
+
*/
|
|
125
186
|
readonly scopeTypes?: Readonly<Record<string, string>>;
|
|
126
187
|
readonly roleClaim?: string;
|
|
127
188
|
/**
|
|
128
|
-
* Role values the existing SQL compares against (a string literal or an
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
189
|
+
* Role values the existing SQL compares against (a string literal or an enum
|
|
190
|
+
* label) and the PermDock role each one is. `rls import` writes the PermDock
|
|
191
|
+
* name for a mapped value; `rls migrate` filters a `role` helper by it. An
|
|
192
|
+
* unmapped value must already be a declared role.
|
|
132
193
|
*/
|
|
133
194
|
readonly roleValues?: Readonly<Record<string, string>>;
|
|
134
195
|
readonly gucPrefix?: string;
|
|
@@ -137,37 +198,56 @@ type RlsConfig = {
|
|
|
137
198
|
readonly drizzle?: {
|
|
138
199
|
/** Module exporting the tables, as imported from `out`. Default `./schema`. */
|
|
139
200
|
readonly schema?: string;
|
|
140
|
-
/**
|
|
201
|
+
/**
|
|
202
|
+
* Export name per table name; defaults to the camelCased table name without
|
|
203
|
+
* its schema.
|
|
204
|
+
*/
|
|
141
205
|
readonly exports?: Readonly<Record<string, string>>;
|
|
142
206
|
};
|
|
143
207
|
/** `--target prisma`: the model each table maps to. */
|
|
144
208
|
readonly prisma?: {
|
|
145
|
-
/**
|
|
209
|
+
/**
|
|
210
|
+
* Model name per table name; defaults to the PascalCased table name without
|
|
211
|
+
* its schema.
|
|
212
|
+
*/
|
|
146
213
|
readonly models?: Readonly<Record<string, string>>;
|
|
147
214
|
};
|
|
148
|
-
/**
|
|
215
|
+
/**
|
|
216
|
+
* Schema of `role_permissions` and the RLS helpers (`permdock_has`,
|
|
217
|
+
* `permitted_<scope>_ids`, `member_<scope>_ids`) (and the RBAC scaffold).
|
|
218
|
+
* Default `permdock`; keep it out of `[api] schemas`.
|
|
219
|
+
*/
|
|
149
220
|
readonly schema?: string;
|
|
150
|
-
/**
|
|
221
|
+
/**
|
|
222
|
+
* Where the helpers read roles and memberships: `database` tables or `jwt`
|
|
223
|
+
* claims.
|
|
224
|
+
*/
|
|
151
225
|
readonly authorize?: "database" | "jwt";
|
|
152
226
|
/** One policy per role and permission instead of one per table and command. */
|
|
153
227
|
readonly policyPerRole?: boolean;
|
|
154
228
|
/**
|
|
155
|
-
* Resolve tenant-defined custom roles in the helpers:
|
|
156
|
-
* `
|
|
157
|
-
*
|
|
158
|
-
* object turns them on and names
|
|
159
|
-
* that `--backfill-out` copies from.
|
|
229
|
+
* Resolve tenant-defined custom roles in the helpers:
|
|
230
|
+
* `custom_role_permissions` and `custom_role_includes` in `database` mode,
|
|
231
|
+
* the `memberships[].grants` claim in `jwt` mode, always intersected with the
|
|
232
|
+
* `permdock_ceiling` view. Off by default. An object turns them on and names
|
|
233
|
+
* the application's existing role tables that `--backfill-out` copies from.
|
|
160
234
|
*/
|
|
161
235
|
readonly customRoles?: boolean | RlsCustomRolesConfig;
|
|
162
236
|
/**
|
|
163
|
-
* Triggers the application owns on tables `generate` creates, by table
|
|
164
|
-
*
|
|
165
|
-
*
|
|
237
|
+
* Triggers the application owns on tables `generate` creates, by table name
|
|
238
|
+
* without the schema (`custom_role_permissions`): written after the tables,
|
|
239
|
+
* each as `drop trigger if exists` and `create trigger`.
|
|
166
240
|
*/
|
|
167
241
|
readonly triggers?: Readonly<Record<string, readonly RlsTrigger[]>>;
|
|
168
|
-
/**
|
|
242
|
+
/**
|
|
243
|
+
* Register generated tables with an audit function, such as
|
|
244
|
+
* `better_supabase.audit`.
|
|
245
|
+
*/
|
|
169
246
|
readonly audit?: RlsAudit;
|
|
170
|
-
/**
|
|
247
|
+
/**
|
|
248
|
+
* How the generated custom-role write functions check the caller (`database`
|
|
249
|
+
* mode with `customRoles`).
|
|
250
|
+
*/
|
|
171
251
|
readonly customRoleWrites?: {
|
|
172
252
|
/**
|
|
173
253
|
* Who may change custom roles at all, checked before the hand-out check:
|
|
@@ -178,23 +258,30 @@ type RlsConfig = {
|
|
|
178
258
|
*/
|
|
179
259
|
readonly requires?: "manageRoles" | readonly string[];
|
|
180
260
|
/**
|
|
181
|
-
* The application's own roles table, one row per custom role. A trigger
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
261
|
+
* The application's own roles table, one row per custom role. A trigger on
|
|
262
|
+
* it moves a role's grants and includes when the row's name, tenant, scope
|
|
263
|
+
* or instance changes, and deletes them with the row. A signed-in caller
|
|
264
|
+
* goes through the same checks as the write functions; a trusted path (a
|
|
265
|
+
* migration, a job, a nested trigger) moves the rows directly.
|
|
186
266
|
*/
|
|
187
267
|
readonly roles?: RlsCustomRoleTable;
|
|
268
|
+
/**
|
|
269
|
+
* The audit function the by-id writers call after a save
|
|
270
|
+
* (`permdock_replace_custom_role_grants_by_id`), with `event_type`,
|
|
271
|
+
* `target_type`, `record_id`, `tenant` and `metadata` plus `args`. Needs
|
|
272
|
+
* `roles.primaryKey`.
|
|
273
|
+
*/
|
|
274
|
+
readonly audit?: RlsCustomRoleAudit;
|
|
188
275
|
};
|
|
189
276
|
/**
|
|
190
|
-
* Let link capabilities reach resource-scoped grants: `anon` policies that
|
|
191
|
-
* `permdock_capability_ids`, which reads the `capability` claim
|
|
192
|
-
* mints. Off by default.
|
|
277
|
+
* Let link capabilities reach resource-scoped grants: `anon` policies that
|
|
278
|
+
* call `permdock_capability_ids`, which reads the `capability` claim
|
|
279
|
+
* `exchangeCapability` mints. Off by default.
|
|
193
280
|
*/
|
|
194
281
|
readonly capabilities?: boolean;
|
|
195
282
|
/**
|
|
196
|
-
* `'deny'` (Supabase only): a token with `is_anonymous: true` reaches no
|
|
197
|
-
* but those to `anyone()`. Supabase gives an anonymous sign-in the
|
|
283
|
+
* `'deny'` (Supabase only): a token with `is_anonymous: true` reaches no
|
|
284
|
+
* grant but those to `anyone()`. Supabase gives an anonymous sign-in the
|
|
198
285
|
* `authenticated` role, so without it the grants to roles and to
|
|
199
286
|
* `authenticated()` reach it. The subject mapper has to refuse it in process
|
|
200
287
|
* too. Off by default.
|
|
@@ -209,20 +296,20 @@ type RlsConfig = {
|
|
|
209
296
|
readonly anonExecute?: boolean;
|
|
210
297
|
/**
|
|
211
298
|
* Check role assignments in the database: a trigger on each scope's
|
|
212
|
-
* `rls.memberships` table, the global-roles table `rls.roles` and each
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
299
|
+
* `rls.memberships` table, the global-roles table `rls.roles` and each table
|
|
300
|
+
* in `tables` (such as invitations) refuses a client write that assigns,
|
|
301
|
+
* changes or removes a role the caller may not assign there, by the policy's
|
|
302
|
+
* `assigns` graph or, for a custom role, by what the caller may hand out.
|
|
303
|
+
* Writes that do not run as a client role (the table owner, a `security
|
|
304
|
+
* definer` function, a backend role) are trusted. Needs a role that declares
|
|
305
|
+
* `assigns`.
|
|
219
306
|
*/
|
|
220
307
|
readonly assignments?: true | {
|
|
221
308
|
readonly tables?: readonly RlsAssignmentTable[];
|
|
222
309
|
/**
|
|
223
310
|
* `'refuse'`: a client write to a row whose user is the caller is
|
|
224
|
-
* refused on every guarded table with a user column, whatever the
|
|
225
|
-
*
|
|
311
|
+
* refused on every guarded table with a user column, whatever the role.
|
|
312
|
+
* A map refuses it on the tables it names (`schema.table` as
|
|
226
313
|
* configured). Unset, a caller may change their own row within what
|
|
227
314
|
* they may assign.
|
|
228
315
|
*/
|
|
@@ -231,73 +318,111 @@ type RlsConfig = {
|
|
|
231
318
|
/**
|
|
232
319
|
* Add the approval store `supabaseApprovalStore` reads and writes: the
|
|
233
320
|
* `approval_requests` table and one function per `ApprovalStore` method, in
|
|
234
|
-
* the helper schema, executable by no client role. Off by default. An
|
|
235
|
-
*
|
|
236
|
-
*
|
|
321
|
+
* the helper schema, executable by no client role. Off by default. An object
|
|
322
|
+
* with `table` adopts a table the app already has instead, and `delegations:
|
|
323
|
+
* true` adds the out-of-office covers.
|
|
237
324
|
*/
|
|
238
325
|
readonly approvals?: boolean | RlsApprovalsAdopt;
|
|
239
326
|
/**
|
|
240
|
-
* A pg_jsonschema check constraint on generated `jsonb` columns: the
|
|
241
|
-
*
|
|
242
|
-
*
|
|
243
|
-
*
|
|
327
|
+
* A pg_jsonschema check constraint on generated `jsonb` columns: the approval
|
|
328
|
+
* store's `body` must match `approval-request-v1.json`. `true` installs the
|
|
329
|
+
* extension into `extensions`; `'auto'` adds the constraint only where
|
|
330
|
+
* `pg_available_extensions` lists it. Off by default.
|
|
244
331
|
*/
|
|
245
332
|
readonly jsonSchema?: "auto" | boolean;
|
|
246
333
|
/**
|
|
247
|
-
* `false` leaves out the holder-count and transfer-only triggers `min`,
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
334
|
+
* `false` leaves out the holder-count and transfer-only triggers `min`, `max`
|
|
335
|
+
* and `transferOnly` put on the membership tables; a map with `<scope>:
|
|
336
|
+
* false` leaves them out for those scopes only. Those rules are then checked
|
|
337
|
+
* by `decideRoleChange` alone. On by default.
|
|
251
338
|
*/
|
|
252
339
|
readonly ownershipTriggers?: false | Readonly<Record<string, false>>;
|
|
253
340
|
/**
|
|
254
|
-
* Make a session acting for a user read-only in the database: one
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
* `
|
|
341
|
+
* Make a session acting for a user read-only in the database: one restrictive
|
|
342
|
+
* policy per table and write command the generated policies allow, refusing
|
|
343
|
+
* the write when the token's `act` claim names one of these actor kinds,
|
|
344
|
+
* unless `act.read_only` is `false`. `true` is `['support',
|
|
345
|
+
* 'impersonation']`; with `support`, an `act` with a `session_id` and no
|
|
346
|
+
* `kind` counts too. Off by default.
|
|
260
347
|
*/
|
|
261
348
|
readonly readOnlyActors?: boolean | readonly string[];
|
|
262
349
|
readonly apiKeys?: true | RlsApiKeys;
|
|
263
|
-
/**
|
|
350
|
+
/**
|
|
351
|
+
* Narrow a delegated token (a `client_id`, or an `act` that is not a support
|
|
352
|
+
* or impersonation session) by its `scope` claim in every helper and policy:
|
|
353
|
+
* a grant passes only when one of the token's scopes reaches its permission
|
|
354
|
+
* (the permission's own scope, a former scope, or a policy `oauthScopes`
|
|
355
|
+
* entry). Denies always apply. Off by default.
|
|
356
|
+
*/
|
|
357
|
+
readonly tokenScopes?: boolean;
|
|
358
|
+
/**
|
|
359
|
+
* Supabase Realtime: policies on `realtime.messages` for private channels.
|
|
360
|
+
* Supabase dialect only.
|
|
361
|
+
*/
|
|
264
362
|
readonly realtime?: RlsRealtime;
|
|
265
|
-
/**
|
|
363
|
+
/**
|
|
364
|
+
* Supabase Storage: policies on `storage.objects` for buckets keyed by a
|
|
365
|
+
* scope folder. Supabase dialect only.
|
|
366
|
+
*/
|
|
266
367
|
readonly storage?: RlsStorage;
|
|
267
368
|
/**
|
|
268
|
-
* `'views'`: one `security_invoker` view `<table>_visible` per table with
|
|
269
|
-
* read grants, whose restricted columns are `case when
|
|
369
|
+
* `'views'`: one `security_invoker` view `<table>_visible` per table with
|
|
370
|
+
* field-limited read grants, whose restricted columns are `case when
|
|
371
|
+
* <permitted> then col end`. `'mask'`: the same views plus
|
|
372
|
+
* `<schema>.<table>_mask(p_row)`, which nulls the restricted columns of one
|
|
373
|
+
* row by the same masks, for SQL that reads the table without the view. Off
|
|
374
|
+
* by default.
|
|
270
375
|
*/
|
|
271
|
-
readonly fields?: "views";
|
|
376
|
+
readonly fields?: "views" | "mask";
|
|
272
377
|
/**
|
|
273
|
-
* With `fields: 'views'`, grant `anon` and `authenticated` only
|
|
274
|
-
* the base table, so restricted columns are read
|
|
378
|
+
* With `fields: 'views'` or `'mask'`, grant `anon` and `authenticated` only
|
|
379
|
+
* the unrestricted columns of the base table, so restricted columns are read
|
|
380
|
+
* through the view. Breaks `select *`.
|
|
275
381
|
*/
|
|
276
382
|
readonly revokeColumns?: boolean;
|
|
277
|
-
/**
|
|
383
|
+
/**
|
|
384
|
+
* Policy name template: `{table}`, `{op}`, plus `{role}` and `{permission}`
|
|
385
|
+
* with `policyPerRole`.
|
|
386
|
+
*/
|
|
278
387
|
readonly policyName?: string;
|
|
279
388
|
/** `rls generate --rbac supabase` defaults; flags override. */
|
|
280
389
|
readonly rbac?: {
|
|
281
390
|
readonly schema?: string;
|
|
282
391
|
readonly authorize?: "database" | "jwt";
|
|
283
392
|
};
|
|
284
|
-
/**
|
|
393
|
+
/**
|
|
394
|
+
* The global-roles table `permdock_has` reads in `database` mode. Default
|
|
395
|
+
* `<schema>.user_roles (user_id, role)`, which the helpers create.
|
|
396
|
+
*/
|
|
285
397
|
readonly roles?: GlobalRoles;
|
|
286
398
|
/**
|
|
287
399
|
* The SQL command each action verb compiles to, merged over the defaults
|
|
288
|
-
* (`read`, `list`, `get` → `select`; `create` → `insert`; `update`;
|
|
289
|
-
* `'none'` compiles no policy. Every granted action is seeded into
|
|
400
|
+
* (`read`, `list`, `get` → `select`; `create` → `insert`; `update`;
|
|
401
|
+
* `delete`). `'none'` compiles no policy. Every granted action is seeded into
|
|
290
402
|
* `role_permissions` either way, so `permdock_has` answers for it.
|
|
291
403
|
*/
|
|
292
404
|
readonly actions?: RlsActions;
|
|
293
|
-
/**
|
|
405
|
+
/**
|
|
406
|
+
* Emit only the helpers, their seeds and the scaffold; the table policies
|
|
407
|
+
* stay hand-written.
|
|
408
|
+
*/
|
|
294
409
|
readonly helpersOnly?: boolean;
|
|
295
410
|
/**
|
|
296
411
|
* Emit `permitted_<resource>_rows(p_permission)` and its `_for` form for
|
|
297
|
-
* these resources, or for every resource a grant reaches with `true`: the
|
|
298
|
-
*
|
|
412
|
+
* these resources, or for every resource a grant reaches with `true`: the row
|
|
413
|
+
* ids the caller may act on, as the generated policies decide them.
|
|
299
414
|
*/
|
|
300
415
|
readonly rowHelpers?: true | readonly string[];
|
|
416
|
+
/**
|
|
417
|
+
* `'function'`: the `role_permissions` rows live in `<schema>.seed()`, which
|
|
418
|
+
* the helpers part creates. Declarative workflows (pg-delta, migra) then need
|
|
419
|
+
* no seeds migration: call `select <schema>.seed();` after each deploy.
|
|
420
|
+
*
|
|
421
|
+
* `'view'`: `role_permissions` is a `security_invoker` view over a `values`
|
|
422
|
+
* list, so the rows travel with the declarative schema and need no seeding
|
|
423
|
+
* step. Nothing can write the rows, so the view cannot take hand-added ones.
|
|
424
|
+
*/
|
|
425
|
+
readonly seeds?: "function" | "view";
|
|
301
426
|
readonly trustedReaders?: readonly string[];
|
|
302
427
|
readonly treeValues?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
303
428
|
/** `rls migrate`: how existing helper calls map onto the generated helpers. */
|
|
@@ -310,19 +435,22 @@ type RlsConfig = {
|
|
|
310
435
|
readonly shims?: boolean | RlsShimsConfig;
|
|
311
436
|
};
|
|
312
437
|
/**
|
|
313
|
-
* `rls.approvals` on a table the app already has: the store functions keep
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
438
|
+
* `rls.approvals` on a table the app already has: the store functions keep each
|
|
439
|
+
* request's body in `body` and its token in `token` (both added when missing)
|
|
440
|
+
* and read every field from the body; `mirror` copies request fields into the
|
|
441
|
+
* app's own columns on each write, converted to their types.
|
|
317
442
|
*/
|
|
318
443
|
type RlsApprovalsAdopt = {
|
|
319
|
-
/**
|
|
444
|
+
/**
|
|
445
|
+
* `table` or `schema.table`. Without it the store is the generated
|
|
446
|
+
* `approval_requests`.
|
|
447
|
+
*/
|
|
320
448
|
readonly table?: string;
|
|
321
449
|
/**
|
|
322
450
|
* Add `approval_delegations`, the out-of-office covers a user writes for
|
|
323
|
-
* themselves, and the four-argument `permdock_is_approver` that answers for
|
|
324
|
-
*
|
|
325
|
-
*
|
|
451
|
+
* themselves, and the four-argument `permdock_is_approver` that answers for a
|
|
452
|
+
* delegate inside an active cover. `tableApprovalDelegationSource` reads the
|
|
453
|
+
* same rows for `approvalsHandler`. Off by default.
|
|
326
454
|
*/
|
|
327
455
|
readonly delegations?: boolean;
|
|
328
456
|
/** A text column unique per request. Default `token`. */
|
|
@@ -354,18 +482,30 @@ type RlsApiKeys = {
|
|
|
354
482
|
readonly roles?: string;
|
|
355
483
|
readonly serviceRoles?: readonly string[];
|
|
356
484
|
};
|
|
357
|
-
/**
|
|
485
|
+
/**
|
|
486
|
+
* One more table whose rows assign a role, such as invitations
|
|
487
|
+
* (`rls.assignments.tables`).
|
|
488
|
+
*/
|
|
358
489
|
type RlsAssignmentTable = {
|
|
359
490
|
readonly table: string;
|
|
360
491
|
/** The declared scope the row assigns the role at. */
|
|
361
492
|
readonly scope: string;
|
|
362
493
|
/** The column holding the scope instance id. */
|
|
363
494
|
readonly id: string;
|
|
364
|
-
/**
|
|
495
|
+
/**
|
|
496
|
+
* The tenant column for a scope below the first; defaults to `id` at the
|
|
497
|
+
* first scope.
|
|
498
|
+
*/
|
|
365
499
|
readonly tenant?: string;
|
|
366
|
-
/**
|
|
367
|
-
|
|
368
|
-
|
|
500
|
+
/**
|
|
501
|
+
* The role key column, a reference to a roles table that holds the key, or
|
|
502
|
+
* several of them.
|
|
503
|
+
*/
|
|
504
|
+
readonly role: string | RoleMap | RoleThrough | readonly (string | RoleMap | RoleThrough)[];
|
|
505
|
+
/**
|
|
506
|
+
* The column holding the user the row assigns to, which `ownRole` compares
|
|
507
|
+
* with the caller.
|
|
508
|
+
*/
|
|
369
509
|
readonly user?: string;
|
|
370
510
|
};
|
|
371
511
|
/** `rls.customRoleWrites.roles`: the application's table of custom roles. */
|
|
@@ -373,20 +513,44 @@ type RlsCustomRoleTable = {
|
|
|
373
513
|
readonly table: string;
|
|
374
514
|
/** The column holding the role name. */
|
|
375
515
|
readonly key: string;
|
|
376
|
-
/**
|
|
516
|
+
/**
|
|
517
|
+
* The tenant column; a row with no tenant is a platform custom role (`scope:
|
|
518
|
+
* 'global'`). Without it every row is a platform role.
|
|
519
|
+
*/
|
|
377
520
|
readonly tenant?: string;
|
|
378
|
-
/**
|
|
521
|
+
/**
|
|
522
|
+
* A text column holding the scope name; without it a row with a tenant lives
|
|
523
|
+
* at the first scope.
|
|
524
|
+
*/
|
|
379
525
|
readonly scope?: string;
|
|
380
526
|
/** A column pinning the role to one instance of its scope. */
|
|
381
527
|
readonly id?: string;
|
|
382
|
-
/**
|
|
528
|
+
/**
|
|
529
|
+
* The row's id column: turns on the by-id write and read functions
|
|
530
|
+
* (`permdock_replace_custom_role_grants_by_id`).
|
|
531
|
+
*/
|
|
532
|
+
readonly primaryKey?: string;
|
|
533
|
+
/**
|
|
534
|
+
* A boolean column marking rows that are not custom roles (declared or system
|
|
535
|
+
* roles); those rows are skipped.
|
|
536
|
+
*/
|
|
383
537
|
readonly skip?: string;
|
|
384
|
-
/**
|
|
538
|
+
/**
|
|
539
|
+
* A boolean column marking a row with no tenant as a shared custom role, held
|
|
540
|
+
* at `scope` (default the first scope) in every tenant. Without it a row with
|
|
541
|
+
* no tenant is a platform role.
|
|
542
|
+
*/
|
|
385
543
|
readonly shared?: string;
|
|
386
544
|
};
|
|
387
|
-
/**
|
|
545
|
+
/**
|
|
546
|
+
* `rls.customRoles` as an object: custom roles on, plus where existing ones
|
|
547
|
+
* live.
|
|
548
|
+
*/
|
|
388
549
|
type RlsCustomRolesConfig = {
|
|
389
|
-
/**
|
|
550
|
+
/**
|
|
551
|
+
* The application's role tables `--backfill-out` copies into
|
|
552
|
+
* `custom_role_permissions` and `custom_role_includes`.
|
|
553
|
+
*/
|
|
390
554
|
readonly from?: RlsCustomRolesFrom;
|
|
391
555
|
};
|
|
392
556
|
/**
|
|
@@ -395,12 +559,26 @@ type RlsCustomRolesConfig = {
|
|
|
395
559
|
* instance and `skip` flag.
|
|
396
560
|
*/
|
|
397
561
|
type RlsCustomRolesFrom = {
|
|
562
|
+
/**
|
|
563
|
+
* `'trigger'`: after-row triggers on the permissions table and the includes
|
|
564
|
+
* table rebuild the affected role through
|
|
565
|
+
* `permdock_trusted_replace_custom_role_grants` on every legacy write, so the
|
|
566
|
+
* PermDock grants follow the application's editor. Without it the backfill
|
|
567
|
+
* copies once.
|
|
568
|
+
*/
|
|
569
|
+
readonly sync?: "trigger";
|
|
398
570
|
readonly permissions: {
|
|
399
571
|
/** `table` or `schema.table`: one row per permission a role holds. */
|
|
400
572
|
readonly table: string;
|
|
401
|
-
/**
|
|
573
|
+
/**
|
|
574
|
+
* The reference to the roles table: `{ through: 'roles', on: { role_id:
|
|
575
|
+
* 'id' }, column: 'key' }`.
|
|
576
|
+
*/
|
|
402
577
|
readonly role: RoleThrough;
|
|
403
|
-
/**
|
|
578
|
+
/**
|
|
579
|
+
* The permission key column, or a reference to a permissions table that
|
|
580
|
+
* holds the key.
|
|
581
|
+
*/
|
|
404
582
|
readonly permission: string | RoleThrough;
|
|
405
583
|
/** A text column holding `allow` or `deny`. Without it every row allows. */
|
|
406
584
|
readonly effect?: string;
|
|
@@ -430,15 +608,34 @@ type RlsTrigger = {
|
|
|
430
608
|
};
|
|
431
609
|
/**
|
|
432
610
|
* `rls.audit`: one `select <function>('<schema>.<table>'::regclass, <args>)`
|
|
433
|
-
* per generated table, for an audit module that registers a table by
|
|
434
|
-
*
|
|
611
|
+
* per generated table, for an audit module that registers a table by creating
|
|
612
|
+
* its own trigger.
|
|
435
613
|
*/
|
|
436
614
|
type RlsAudit = {
|
|
437
615
|
/** `schema.function` taking the table as its first argument. */
|
|
438
616
|
readonly function: string;
|
|
439
|
-
/**
|
|
617
|
+
/**
|
|
618
|
+
* Generated tables, without the schema. Default the custom-role tables and
|
|
619
|
+
* `user_roles`, those this run creates.
|
|
620
|
+
*/
|
|
440
621
|
readonly tables?: readonly string[];
|
|
441
|
-
/**
|
|
622
|
+
/**
|
|
623
|
+
* Named text arguments: `{ tenant_column: 'tenant_id' }` passes
|
|
624
|
+
* `tenant_column => 'tenant_id'`.
|
|
625
|
+
*/
|
|
626
|
+
readonly args?: Readonly<Record<string, string>>;
|
|
627
|
+
};
|
|
628
|
+
/** `rls.customRoleWrites.audit`: the function a by-id custom-role save calls. */
|
|
629
|
+
type RlsCustomRoleAudit = {
|
|
630
|
+
/**
|
|
631
|
+
* `schema.function` taking named `event_type`, `target_type`, `record_id`,
|
|
632
|
+
* `tenant` and `metadata` arguments.
|
|
633
|
+
*/
|
|
634
|
+
readonly function: string;
|
|
635
|
+
/**
|
|
636
|
+
* Extra named text arguments: `{ actor_kind: 'user' }` passes `actor_kind =>
|
|
637
|
+
* 'user'`.
|
|
638
|
+
*/
|
|
442
639
|
readonly args?: Readonly<Record<string, string>>;
|
|
443
640
|
};
|
|
444
641
|
/** `rls.shims`: where the legacy-named wrappers go. */
|
|
@@ -446,12 +643,16 @@ type RlsShimsConfig = {
|
|
|
446
643
|
/** Schema of the legacy helpers. Default `public`. */
|
|
447
644
|
readonly schema?: string;
|
|
448
645
|
};
|
|
449
|
-
/**
|
|
646
|
+
/**
|
|
647
|
+
* An action verb's SQL command, or `'none'` for a verb that only `permdock_has`
|
|
648
|
+
* answers.
|
|
649
|
+
*/
|
|
450
650
|
type RlsActions = Readonly<Record<string, "select" | "insert" | "update" | "delete" | "none">>;
|
|
451
651
|
/**
|
|
452
652
|
* One existing SQL helper `rls migrate` rewrites. `form` names its arguments:
|
|
453
|
-
* `ids(key)` returns scope ids, `row(id, key)` and `membership(id)` test one
|
|
454
|
-
* `scoped(scope, id, key)` takes the scope as a literal, `global(key)`
|
|
653
|
+
* `ids(key)` returns scope ids, `row(id, key)` and `membership(id)` test one
|
|
654
|
+
* id, `scoped(scope, id, key)` takes the scope as a literal, `global(key)`
|
|
655
|
+
* returns a boolean.
|
|
455
656
|
*/
|
|
456
657
|
type RlsMigrateHelper = {
|
|
457
658
|
readonly form: "ids" | "row" | "membership";
|
|
@@ -471,20 +672,29 @@ type RlsMigrateConfig = {
|
|
|
471
672
|
readonly keys?: Readonly<Record<string, string>>;
|
|
472
673
|
/** Key prefix renames, longest first: `{ 'organization.': '' }`. */
|
|
473
674
|
readonly prefixes?: Readonly<Record<string, string>>;
|
|
474
|
-
/**
|
|
675
|
+
/**
|
|
676
|
+
* For `scoped` helpers, the scope literals that mean a global check, such as
|
|
677
|
+
* `system`.
|
|
678
|
+
*/
|
|
475
679
|
readonly globalScopes?: readonly string[];
|
|
476
|
-
/**
|
|
680
|
+
/**
|
|
681
|
+
* For `scoped` helpers, a scope literal's PermDock scope when the names
|
|
682
|
+
* differ.
|
|
683
|
+
*/
|
|
477
684
|
readonly scopes?: Readonly<Record<string, string>>;
|
|
478
685
|
/**
|
|
479
686
|
* Materialised permission tables to retire, by `schema.table`: a table the
|
|
480
687
|
* application keeps in step with triggers and reads instead of the grants.
|
|
481
|
-
* `rls migrate --retire-out` drops it with its refresh triggers once
|
|
482
|
-
*
|
|
688
|
+
* `rls migrate --retire-out` drops it with its refresh triggers once nothing
|
|
689
|
+
* else reads it.
|
|
483
690
|
*/
|
|
484
691
|
readonly tables?: Readonly<Record<string, RlsMigrateTable>>;
|
|
485
692
|
};
|
|
486
693
|
type RlsMigrateTable = {
|
|
487
|
-
/**
|
|
694
|
+
/**
|
|
695
|
+
* The functions that keep the table in step. Default: every function in
|
|
696
|
+
* `--sql` whose body writes it, and every function that calls one.
|
|
697
|
+
*/
|
|
488
698
|
readonly refresh?: readonly string[];
|
|
489
699
|
};
|
|
490
700
|
/** Where global roles live: `table (user, role)`. Defaults `user_id` and `role`. */
|
|
@@ -527,11 +737,20 @@ type RlsStorage = {
|
|
|
527
737
|
};
|
|
528
738
|
/** `permdock supabase hook generate` input. */
|
|
529
739
|
type SupabaseHookConfig = {
|
|
530
|
-
/**
|
|
740
|
+
/**
|
|
741
|
+
* The same `tableMembershipSource` / `junctionMembershipSource` sources the
|
|
742
|
+
* app passes as `memberships`.
|
|
743
|
+
*/
|
|
531
744
|
readonly memberships: readonly SqlMembershipSource[];
|
|
532
|
-
/**
|
|
745
|
+
/**
|
|
746
|
+
* Schema of the hook and the version table. Default `rls.schema`, else
|
|
747
|
+
* `permdock`.
|
|
748
|
+
*/
|
|
533
749
|
readonly schema?: string;
|
|
534
|
-
/**
|
|
750
|
+
/**
|
|
751
|
+
* Global roles: `user_role` and `roles`. Default `rls.roles`, else the
|
|
752
|
+
* `<schema>.user_roles (user_id, role)` table; `false` for none.
|
|
753
|
+
*/
|
|
535
754
|
readonly roles?: GlobalRoles | false;
|
|
536
755
|
/**
|
|
537
756
|
* Where the active first-scope id comes from: `app_metadata.<key>` (default
|
|
@@ -555,32 +774,50 @@ type SupabaseHookConfig = {
|
|
|
555
774
|
readonly columns: readonly string[];
|
|
556
775
|
};
|
|
557
776
|
/**
|
|
558
|
-
* Claims other packages own, each `claim: '<schema>.<function>'`, for
|
|
559
|
-
*
|
|
560
|
-
*
|
|
561
|
-
*
|
|
562
|
-
* suspended user gets none.
|
|
777
|
+
* Claims other packages own, each `claim: '<schema>.<function>'`, for example
|
|
778
|
+
* `{ features: 'public.feature_claims' }`. The function takes the user id
|
|
779
|
+
* (`uuid`) and returns `jsonb`; `null` omits the claim. Reserved names are
|
|
780
|
+
* refused, the claims sit outside `budget`, and a suspended user gets none.
|
|
563
781
|
*/
|
|
564
782
|
readonly claims?: Readonly<Record<string, string>>;
|
|
783
|
+
/**
|
|
784
|
+
* The `team_ids` claim: the uuid of every team the user belongs to, read from
|
|
785
|
+
* `table` (`user` and `team` columns; `tenant` puts the active tenant's teams
|
|
786
|
+
* first). It shares the `memberships` budget, so a user with many teams gets
|
|
787
|
+
* a prefix and `memberships_truncated`. A suspended user gets none. Clients
|
|
788
|
+
* must not write the table.
|
|
789
|
+
*/
|
|
790
|
+
readonly teams?: {
|
|
791
|
+
readonly table: string;
|
|
792
|
+
readonly user: string;
|
|
793
|
+
readonly team: string;
|
|
794
|
+
readonly tenant?: string;
|
|
795
|
+
};
|
|
565
796
|
readonly before?: string | readonly string[];
|
|
566
797
|
/**
|
|
567
798
|
* Check the claims the hook wrote against `supabase-claims-v1.json` with
|
|
568
|
-
* pg_jsonschema, and drop them all on a mismatch so the user signs in with
|
|
569
|
-
*
|
|
799
|
+
* pg_jsonschema, and drop them all on a mismatch so the user signs in with no
|
|
800
|
+
* PermDock access instead of an error. Needs the extension. Default `false`.
|
|
570
801
|
*/
|
|
571
802
|
readonly validate?: boolean;
|
|
572
|
-
/**
|
|
803
|
+
/**
|
|
804
|
+
* Bytes of JSON the `memberships` claim may use. Default
|
|
805
|
+
* `supabaseMembershipsBudget` (1024).
|
|
806
|
+
*/
|
|
573
807
|
readonly budget?: number;
|
|
574
|
-
/**
|
|
808
|
+
/**
|
|
809
|
+
* Keep `permdock_authz_version` and write the `authz_ver` claim. Default
|
|
810
|
+
* `true`.
|
|
811
|
+
*/
|
|
575
812
|
readonly version?: boolean;
|
|
576
813
|
/**
|
|
577
814
|
* Write PostgREST wrappers for `subject_for`, `members_of` and
|
|
578
815
|
* `authz_version_for` into `schema` (default `public`), named
|
|
579
|
-
* `<prefix>subject_for` and so on (default prefix `permdock_`), for a
|
|
580
|
-
*
|
|
581
|
-
*
|
|
582
|
-
*
|
|
583
|
-
*
|
|
816
|
+
* `<prefix>subject_for` and so on (default prefix `permdock_`), for a backend
|
|
817
|
+
* that reaches Postgres through the Data API while the hook schema is not
|
|
818
|
+
* exposed. Each wrapper is `security definer`, revoked from `public`, `anon`
|
|
819
|
+
* and `authenticated`, and granted to `service_role`: the one place the hook
|
|
820
|
+
* grants to it. Pass the same setting to `postgrestSources`.
|
|
584
821
|
*/
|
|
585
822
|
readonly api?: {
|
|
586
823
|
readonly schema?: string;
|
|
@@ -593,10 +830,10 @@ type SupabaseHookConfig = {
|
|
|
593
830
|
readonly out?: string;
|
|
594
831
|
};
|
|
595
832
|
/**
|
|
596
|
-
* How the project turns SQL into Supabase migrations: `'pg-delta'`
|
|
597
|
-
*
|
|
598
|
-
*
|
|
599
|
-
*
|
|
833
|
+
* How the project turns SQL into Supabase migrations: `'pg-delta'` (Declarative
|
|
834
|
+
* Schemas 2.0, `supabase db schema declarative sync`), `'migra'` (declarative
|
|
835
|
+
* schemas on `supabase db diff`) or `'migrations'` (hand-written migrations, no
|
|
836
|
+
* declarative schemas).
|
|
600
837
|
*/
|
|
601
838
|
type SupabaseSchemas = "pg-delta" | "migra" | "migrations";
|
|
602
839
|
type SupabaseConfig = {
|
|
@@ -610,27 +847,47 @@ type SupabaseConfig = {
|
|
|
610
847
|
};
|
|
611
848
|
type DoctorConfig = {
|
|
612
849
|
/**
|
|
613
|
-
* Directories or globs the source checks read (PD001, PD002, PD007 to
|
|
614
|
-
*
|
|
615
|
-
*
|
|
850
|
+
* Directories or globs the source checks read (PD001, PD002, PD007 to PD015,
|
|
851
|
+
* PD044 and the other checks over files), default `collect.srcPath`. The
|
|
852
|
+
* catalog `collect` writes still comes from `collect.srcPath`, and PD004
|
|
616
853
|
* compares the catalog on disk with that one.
|
|
617
854
|
*/
|
|
618
855
|
readonly srcPath?: readonly string[];
|
|
619
856
|
readonly sensitiveActions?: readonly string[];
|
|
620
857
|
readonly memberships?: string;
|
|
621
|
-
/**
|
|
858
|
+
/**
|
|
859
|
+
* A JSON fixture `{ credentials?, settings? }` of API-key credentials and
|
|
860
|
+
* per-tenant settings (the `memorySettingsSource` input) for PD029.
|
|
861
|
+
*/
|
|
622
862
|
readonly credentials?: string;
|
|
623
|
-
/**
|
|
863
|
+
/**
|
|
864
|
+
* Globs or directories whose files are client entries for PD001, for
|
|
865
|
+
* frameworks with no `'use client'` convention.
|
|
866
|
+
*/
|
|
624
867
|
readonly clientEntries?: readonly string[];
|
|
625
|
-
/**
|
|
868
|
+
/**
|
|
869
|
+
* Globs or directories of SQL migrations PD022 scans for views; defaults to
|
|
870
|
+
* the usual migration folders.
|
|
871
|
+
*/
|
|
626
872
|
readonly migrations?: readonly string[];
|
|
627
|
-
/**
|
|
873
|
+
/**
|
|
874
|
+
* A JSON array of sample decoded token claims; PD039 measures each
|
|
875
|
+
* `supabase.hook.claims` entry in it.
|
|
876
|
+
*/
|
|
628
877
|
readonly claims?: string;
|
|
878
|
+
/**
|
|
879
|
+
* Tables two resources map to on purpose, over disjoint rows; PD075 skips
|
|
880
|
+
* them.
|
|
881
|
+
*/
|
|
882
|
+
readonly sharedTables?: readonly string[];
|
|
629
883
|
};
|
|
630
884
|
type PermDockConfig = {
|
|
631
885
|
readonly permissions?: string;
|
|
632
886
|
readonly policy?: string;
|
|
633
|
-
/**
|
|
887
|
+
/**
|
|
888
|
+
* A module exporting the `defineOperations` map as `operations` or default;
|
|
889
|
+
* `collect` writes it to the catalog's `operations`.
|
|
890
|
+
*/
|
|
634
891
|
readonly operations?: string;
|
|
635
892
|
readonly collect?: CollectConfig;
|
|
636
893
|
readonly catalog?: CatalogConfig;
|
|
@@ -641,16 +898,40 @@ type PermDockConfig = {
|
|
|
641
898
|
readonly supabase?: SupabaseConfig;
|
|
642
899
|
readonly powersync?: PowerSyncConfig;
|
|
643
900
|
readonly doctor?: DoctorConfig;
|
|
901
|
+
readonly gen?: GenConfig;
|
|
902
|
+
};
|
|
903
|
+
/** What `permdock gen --kind` writes. */
|
|
904
|
+
type GenKind = "zod" | "valibot" | "arktype" | "json-schema" | "standard-schema" | "constants" | "factories" | "react" | "vue" | "svelte" | "solid" | "messages";
|
|
905
|
+
/** `permdock gen` input. */
|
|
906
|
+
type GenConfig = {
|
|
907
|
+
/** The directory the generated files go to; default `src/generated`. */
|
|
908
|
+
readonly out?: string;
|
|
909
|
+
/** The kinds `permdock gen` writes without `--kind`; default `['constants']`. */
|
|
910
|
+
readonly kinds?: readonly GenKind[];
|
|
911
|
+
/**
|
|
912
|
+
* The schema kinds also export `<resource>Fields`: per field its `label`,
|
|
913
|
+
* `required`, enum `options` and bounds, for forms.
|
|
914
|
+
*/
|
|
915
|
+
readonly fieldMeta?: boolean;
|
|
644
916
|
};
|
|
645
|
-
/**
|
|
917
|
+
/**
|
|
918
|
+
* `permdock powersync generate` and `verify` input. Tables and memberships come
|
|
919
|
+
* from `rls`.
|
|
920
|
+
*/
|
|
646
921
|
type PowerSyncConfig = {
|
|
647
922
|
/** The Sync Streams file; default `sync-config.yaml`. */
|
|
648
923
|
readonly out?: string;
|
|
649
|
-
/**
|
|
924
|
+
/**
|
|
925
|
+
* Resources that get a stream; default every resource with a grant of
|
|
926
|
+
* `action`.
|
|
927
|
+
*/
|
|
650
928
|
readonly resources?: readonly string[];
|
|
651
929
|
/** The action whose grants decide which rows sync; default `read`. */
|
|
652
930
|
readonly action?: string;
|
|
653
|
-
/**
|
|
931
|
+
/**
|
|
932
|
+
* Where `generate` writes `localSnapshotManifest(policy)` as JSON for
|
|
933
|
+
* `localSnapshot` and `powerSyncSource`; none by default.
|
|
934
|
+
*/
|
|
654
935
|
readonly manifest?: string;
|
|
655
936
|
};
|
|
656
937
|
type CliIo = {
|
|
@@ -683,11 +964,11 @@ type PermDockPluginOptions = {
|
|
|
683
964
|
readonly collect?: CollectConfig;
|
|
684
965
|
readonly onDrift?: "error" | "warn";
|
|
685
966
|
/**
|
|
686
|
-
* Unplugin only: compare instead of write in `buildStart`, failing the
|
|
687
|
-
*
|
|
688
|
-
*
|
|
967
|
+
* Unplugin only: compare instead of write in `buildStart`, failing the build
|
|
968
|
+
* on drift (as `permdock collect --check` does). The Next plugin checks in
|
|
969
|
+
* `phase-production-build` unless `PERMDOCK_COLLECT=write`.
|
|
689
970
|
*/
|
|
690
971
|
readonly check?: boolean;
|
|
691
972
|
};
|
|
692
973
|
//#endregion
|
|
693
|
-
export {
|
|
974
|
+
export { RlsSuspension as _, GenKind as a, RlsActiveRow as c, RlsDialect as d, RlsFunctionMapping as f, RlsSuspendedScope as g, RlsSuspendedMembership as h, GenConfig as i, RlsApiKeys as l, RlsMemberships as m, CliIo as n, PermDockConfig as o, RlsMembershipTable as p, CollectConfig as r, PermDockPluginOptions as s, CatalogConfig as t, RlsConfig as u, RlsTarget as v, RunResult as y };
|