permdock 0.7.0 → 0.9.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 +1 -3
- package/dist/a2a/index.d.ts +7 -7
- package/dist/a2a/index.js +8 -8
- package/dist/action-result-BcudBQOF.d.ts +19 -0
- package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
- package/dist/{adoption-scan-D-feE7BE.js → adoption-scan-Ch07MdxN.js} +5 -5
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +19 -13
- package/dist/ai-sdk/index.js +6 -6
- 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-K0faOLFp.d.ts → approval-prompt-3BqWczTt.d.ts} +13 -11
- package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
- package/dist/approvals/index.d.ts +4 -4
- package/dist/approvals/index.js +6 -6
- package/dist/{approvals-CMRfsbBh.js → approvals-DnIBTuXE.js} +66 -42
- package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
- package/dist/{arazzo-ClrF3PVb.js → arazzo-BpS7LnV0.js} +2 -2
- package/dist/{arazzo-rdeJ8n1J.js → arazzo-CmQaGPkM.js} +6 -6
- package/dist/{args-CC3OwyHW.js → args-0FrVs5EH.js} +14 -7
- package/dist/astro/index.d.ts +30 -12
- package/dist/astro/index.js +2 -2
- package/dist/{audience-BrMs8c4o.js → audience-DTjR8xet.js} +8 -8
- package/dist/{auth-CscUX8Sy.js → auth--yPyZNgr.js} +19 -7
- package/dist/authzen/index.d.ts +34 -28
- package/dist/authzen/index.js +23 -20
- package/dist/{automation-DOtAFWdy.d.ts → automation-C6Jg75xq.d.ts} +42 -32
- package/dist/{automation-ySsxp_Yp.js → automation-x3KEUusw.js} +22 -21
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +13 -7
- package/dist/better-supabase/index.d.ts +357 -227
- package/dist/better-supabase/index.js +219 -140
- package/dist/{bind-D1nO6fiC.js → bind-BNQA9JK9.js} +26 -10
- package/dist/{bind-JDuvxjuW.d.ts → bind-YYjvfpB9.d.ts} +32 -12
- 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-DxE7czo9.js → build-instance-BWXqwQYU.js} +3 -3
- package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-D4UC9TTW.d.ts → capability-Di9tiUvi.d.ts} +41 -29
- package/dist/{casbin-BHijLuHY.js → casbin-B7_yS-oo.js} +2 -2
- package/dist/{casbin-BW9pS47J.js → casbin-bHyIxTNQ.js} +16 -8
- package/dist/{casl-CmJlgziS.js → casl-C4OINZHI.js} +2 -2
- package/dist/{casl-UbI8v-Wq.js → casl-CHHoCldP.js} +19 -10
- package/dist/catalog/index.d.ts +51 -30
- package/dist/catalog/index.js +18 -15
- package/dist/{catalog-D69WhFii.js → catalog-CGlSwU6j.js} +20 -19
- package/dist/catalog-D3oS2GH3.js +1 -0
- package/dist/{catalog-BaMQfQ6Y.js → catalog-amPDr0JQ.js} +3 -3
- package/dist/{catalog-doc-CV9s6B1S.js → catalog-doc-DjMKzJp9.js} +28 -14
- package/dist/{catalog-fingerprint-C144oW4M.js → catalog-fingerprint-e6aCWosn.js} +18 -14
- package/dist/catalog-operations-DeHTrJSV.js +60 -0
- package/dist/{challenge-nGWma08S.js → challenge-DImNcR7B.js} +48 -27
- 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-BC_0mPIq.js → checks-CGkP3Z7A.js} +4 -1
- 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 +84 -52
- package/dist/cloud/index.js +53 -39
- package/dist/{cloud-CO8pYtwr.js → cloud-3kWfjnYy.js} +4 -5
- package/dist/{codemod-BP6n8N9L.js → codemod-Bv5i-Mzo.js} +523 -201
- package/dist/{codemod-i4N2BhDc.js → codemod-D9Aiii1r.js} +3 -4
- package/dist/{collect-DNm3oKOk.js → collect-B80GYEot.js} +4 -5
- package/dist/collect-D-eroIfV.js +1 -0
- package/dist/{collect-BaWeMjwV.js → collect-WCl8cJQV.js} +26 -63
- 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-COM2VKuN.d.ts → compile-BEklRUYo.d.ts} +36 -12
- package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BNdVf7X2.js → completion-_bc0OUQ-.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-DGZzMV1B.js → config-D5XrLWpk.js} +2 -2
- package/dist/{config-report-Cm7UITNA.js → config-report-BmWIskD7.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-_VCSsdtD.js → connector-schema-CYLQNMYq.js} +3 -2
- package/dist/{context--uM9V3Ui.js → context-BnIzxTNE.js} +4 -3
- package/dist/convex/index.d.ts +13 -7
- package/dist/convex/index.js +9 -6
- package/dist/{core-CQkE8Esr.d.ts → core-CFepFiDP.d.ts} +49 -22
- package/dist/{core-B5-w6Kw9.js → core-DzVINFbU.js} +26 -20
- package/dist/{create-Cb86Z8Im.js → create-6EwRQlig.js} +10 -7
- package/dist/{create-DJrlhEp9.js → create-BLPKnJKa.js} +35 -25
- package/dist/{create-UTnUVETj.d.ts → create-BPUopdfL.d.ts} +70 -37
- package/dist/{create-QHuuPw3q.d.ts → create-BamXmeob.d.ts} +37 -29
- package/dist/{create-B2-CQqCI.d.ts → create-DBvUsgzK.d.ts} +49 -28
- package/dist/{credential-CIM7wHwA.js → credential-CyyyvCsL.js} +41 -38
- package/dist/{credentials-BpuTwd7a.js → credentials-CdDxp7jN.js} +6 -6
- package/dist/{deciding-columns-DRo2QM6E.js → deciding-columns-NB4wcyBf.js} +2 -2
- package/dist/{delegation-C5rOdTp5.js → delegation-CDB6_keF.js} +31 -22
- package/dist/delivery/index.d.ts +4 -4
- package/dist/delivery/index.js +5 -5
- package/dist/{delivery-rwOKLWRm.js → delivery-BupfvJIV.js} +34 -22
- package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
- package/dist/denied-text-DHldhVUv.d.ts +22 -0
- package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
- package/dist/{describe-O0SwYIK8.d.ts → describe-BbFPBSms.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-Btr1c1Ow.js → diff-BwR1JdP2.js} +2 -2
- package/dist/{diff-DzT-xD13.js → diff-CQegtBAo.js} +22 -13
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BU1szn63.js → doctor-ClRVAtXQ.js} +287 -135
- package/dist/{doctor-BoK_y0KO.js → doctor-LPMYjSqO.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-B_Qg9D3e.d.ts → errors-BIM4MFsJ.d.ts} +22 -6
- package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
- package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
- package/dist/{evaluate-B_oqFbWC.js → evaluate-BAmf_AQd.js} +153 -82
- package/dist/{evaluations-BCddEOfO.d.ts → evaluations-DOWuBpWv.d.ts} +11 -5
- package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
- 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-CuhyYwC1.d.ts → fetch-adapter-BIbBAtPZ.d.ts} +9 -6
- package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-dPTgJVHd.js} +14 -11
- package/dist/fields-D0vUI6dq.js +498 -0
- package/dist/{files-acUbNwWt.js → files-B3AA05f1.js} +8 -5
- package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
- package/dist/{fixtures-BTMW6zgU.js → fixtures-A1_sp_tR.js} +15 -6
- package/dist/{flags-aaeRAdiD.js → flags-DXjoTVbS.js} +2 -2
- package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
- package/dist/{from-snapshot-Bz469dIh.js → from-snapshot-DCakWRsr.js} +18 -15
- package/dist/gen-BFfzZSLH.js +58 -0
- package/dist/gen-BtfFWGbz.js +827 -0
- package/dist/{generate-3FNO5P5Q.js → generate-CRVV5V7l.js} +14 -8
- package/dist/generate-CezbCaTI.js +275 -0
- package/dist/{grantee-BrRANrpT.js → grantee-Dke-9rd1.js} +4 -4
- package/dist/{grantee-conditions-C6P1Tvol.js → grantee-conditions-BrYPe-w0.js} +12 -12
- package/dist/{grantee-match-0RtHWQDx.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-DY3vXuGs.js → helpers-DJicaG6f.js} +40 -28
- package/dist/hono/index.d.ts +16 -10
- package/dist/hono/index.js +5 -5
- package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -21
- package/dist/{hosted-BmjzxQhp.d.ts → hosted-DVxlLZMe.d.ts} +33 -21
- package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
- package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
- package/dist/{http-Ca3Sr5x1.js → http-DOL33cO0.js} +11 -8
- package/dist/{import-DB2EG_iy.js → import-ACkOrv6g.js} +6 -6
- package/dist/{import-Bz0GefWg.js → import-CST57XLp.js} +64 -51
- package/dist/{index-CMiPH2Tv.d.ts → index-BinlXeU-.d.ts} +64 -37
- package/dist/{index-BSfRl0hZ.d.ts → index-CV-7DWeD.d.ts} +64 -52
- package/dist/{index-BE8y3moU.d.ts → index-DJwEgYzA.d.ts} +127 -82
- package/dist/{index-DH9DUDEM.d.ts → index-Dj2qF9VC.d.ts} +54 -30
- package/dist/{index-BTkwrK7v.d.ts → index-vYjMrXyK.d.ts} +336 -173
- package/dist/{index-DLwcuCN_.d.ts → index-ymept53A.d.ts} +51 -30
- package/dist/index.d.ts +22 -22
- package/dist/index.js +34 -34
- package/dist/{init-B-4t1NzC.js → init-BjuFDYT1.js} +10 -10
- package/dist/{init-5TXNji88.js → init-txYTuW9u.js} +5 -5
- package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-CoHn-0e8.d.ts} +4 -4
- package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot-DuWf1cT3.js} +86 -61
- 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 +57 -27
- package/dist/jwt/index.js +24 -21
- package/dist/{kernel-DVExUwkp.js → kernel-qv4cr9w8.js} +32 -23
- 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-DxroEzH1.js → load-DjSU5KXO.js} +6 -6
- package/dist/load-Dm0pSYH3.js +1 -0
- package/dist/{login-ClSJh5t5.js → login-CfImTJGb.js} +4 -4
- package/dist/{login-WC9HPJpU.js → login-CgfCTO3F.js} +16 -9
- package/dist/{manifest-Dv6q4i5s.js → manifest-B2QPh19C.js} +49 -38
- package/dist/{manifest-BVhExYhw.d.ts → manifest-CzzWtnAb.d.ts} +126 -31
- package/dist/{manifest-schema-Cv492Qev.js → manifest-schema-2r37XRhD.js} +44 -3
- package/dist/{manifest-B79YuF2T.js → manifest-wg8WkkpD.js} +6 -6
- package/dist/{map-claims-etGIS_Dv.js → map-claims-C-nv08_n.js} +16 -9
- package/dist/{map-error-BQGyDm_M.js → map-error-pasIGqMT.js} +7 -7
- package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
- package/dist/mcp/index.d.ts +114 -61
- package/dist/mcp/index.js +70 -40
- package/dist/{migrate-Dodel0IJ.js → migrate-B7oP_sQU.js} +35 -17
- 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 +79 -26
- package/dist/next/index.js +121 -10
- 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 +51 -30
- package/dist/openapi/index.js +2 -2
- package/dist/{openapi-ztVaux6j.js → openapi-BGeuunWC.js} +23 -14
- package/dist/{openapi-DMocl1bh.js → openapi-BIpw3Mb7.js} +4 -5
- package/dist/{openapi-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
- package/dist/{operation-findings-kRcEp8lE.js → operation-findings-CXtFzlKJ.js} +3 -3
- package/dist/{operations-BNLes61x.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-DgSDLrta.js → output-DV5dwOTs.js} +9 -5
- package/dist/output-files-BHOIlrfD.js +1 -0
- package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/ownership-DA5YdYTm.js +1059 -0
- package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
- package/dist/parse-local-manifest-CCmbhnxP.d.ts +10 -0
- package/dist/{parse-local-manifest-T1Q8X3A2.js → parse-local-manifest-DEiCF4ah.js} +19 -7
- 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 +20 -13
- package/dist/{peer-DOzzMfZL.js → peer-C9LvBCcb.js} +1 -1
- package/dist/{peer-12Q5I_RH.js → peer-Q0fuZ6hx.js} +9 -3
- package/dist/{permdock-BfWEeMqk.js → permdock-BvjivVb9.js} +200 -140
- package/dist/{permdock-Dco6dyCK.d.ts → permdock-CprAPN3w.d.ts} +260 -129
- package/dist/{permission-registry-DpPtSKNZ.js → permission-registry-B8tYxPIt.js} +23 -10
- package/dist/{permission-types-DhNEmoRG.d.ts → permission-types-CAY-GU7e.d.ts} +127 -41
- package/dist/{permissions-CoqCOfJ3.d.ts → permissions-Bx6UI8n1.d.ts} +6 -3
- package/dist/{permissions-CyH2MV_B.js → permissions-CVXmRILq.js} +3 -3
- package/dist/{permissions-DArULThq.js → permissions-CYcHj_w7.js} +8 -5
- package/dist/pg-DQTqRrou.js +60 -0
- package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
- package/dist/{pkce-5h8NgMQJ.js → pkce-CnmmYqUZ.js} +1 -1
- package/dist/{policy-B7dg_yzu.d.ts → policy-BycVKnXv.d.ts} +5 -5
- package/dist/{policy-DaJy4nK4.js → policy-CLQ8__GF.js} +43 -23
- package/dist/{policy-from-catalog-DFWYkNdu.js → policy-from-catalog-CU3An8uP.js} +28 -25
- package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
- package/dist/{policy-types-B-F-qAZk.d.ts → policy-types-DGIO_gxq.d.ts} +782 -357
- package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
- package/dist/{postgrest-r5faDIzD.js → postgrest-5Dr3W64L.js} +84 -86
- package/dist/{postgrest-CYacM_u7.d.ts → postgrest-D5nUGm-c.d.ts} +55 -35
- package/dist/powersync-B701tvhE.js +1 -0
- package/dist/{powersync-13odBwiM.js → powersync-Bg8u-JcR.js} +3 -3
- package/dist/{powersync-53ryOZip.js → powersync-CJrT1DSc.js} +127 -69
- package/dist/preset/index.d.ts +38 -28
- package/dist/preset/index.js +1 -1
- package/dist/{preset-CHTbd-DQ.js → preset-BjLzeFpp.js} +56 -32
- 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-DwtVemER.js → prompt-BYc6drYW.js} +4 -1
- package/dist/protected-action-D8x73IGm.d.ts +58 -0
- package/dist/protected-action-DUYqb-Ma.js +80 -0
- package/dist/{protected-DXE3cQYg.js → protected-action-QEA8arRB.js} +48 -14
- package/dist/{provider-BQsTYYy0.js → provider-C55OGXJ7.js} +5 -4
- package/dist/{provider-Csk-THAn.d.ts → provider-DfLeek9O.d.ts} +1 -1
- package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/{pull-CN5OLxrF.js → pull-2nJr0qg_.js} +12 -11
- package/dist/pull-C3EEGzSw.js +1 -0
- package/dist/{push-tVdG8dUL.js → push-Bn-lMEmI.js} +19 -13
- package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-CDuOL2de.js} +10 -7
- package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-CryQheKq.d.ts} +12 -6
- 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 +94 -55
- package/dist/react-native/index.js +200 -61
- package/dist/{refs-CNJBiTFo.js → refs-C8BKxc_e.js} +2 -2
- 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-DCDD_ZfL.d.ts → replay-Bs9Df2fQ.d.ts} +1 -1
- package/dist/{request-context-BykKLmyE.js → request-context-Duzdf0cd.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-ConCSj1y.js +201 -0
- package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
- package/dist/{retire-Wj6dkyDE.js → retire-B2xffQgY.js} +15 -6
- package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
- package/dist/{rls-Ck_PocSp.js → rls-Ba9wN0SP.js} +13 -6
- package/dist/{rls-CxBZb4rZ.js → rls-Cx0dtsB7.js} +310 -128
- package/dist/{role-builder-C1VJzvcr.js → role-builder-BK2-T6oD.js} +41 -20
- package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
- package/dist/{rpc-Bk1bE-ch.js → rpc-vHIwyXCp.js} +8 -5
- package/dist/run-Ck22anC2.js +1 -0
- package/dist/{run-uLD2aWuO.js → run-PbRlXTfh.js} +26 -23
- package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-B2o2Kxz8.d.ts} +29 -14
- package/dist/{run-ticket-B5d_63Ma.js → run-ticket-Dv7aF7Dk.js} +9 -9
- package/dist/{runtime-Vif3_-zf.js → runtime-BGnrOkVH.js} +5 -2
- package/dist/{saas-Az_Kz-4D.js → saas-DK4V-3Is.js} +42 -29
- package/dist/{scan-DSljDE1Y.js → scan-CRTj6fke.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-gIcCx7zM.js → schema-BTsE1WRT.js} +8 -4
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +2 -2
- package/dist/{scim-C7JYhySg.js → scim-D8YupzX1.js} +2 -2
- package/dist/{scim-YNieBO1U.js → scim-jJBJ7g1Z.js} +33 -15
- package/dist/{scopes-BHsc-wp-.js → scopes-0Up_UA2t.js} +41 -23
- package/dist/server/index.d.ts +11 -11
- package/dist/server/index.js +12 -12
- package/dist/{server-Bnga6I50.js → server-3cVlTLde.js} +31 -31
- package/dist/{server-types-C4gZUEZy.d.ts → server-types-CyRN0-Cd.d.ts} +88 -46
- package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
- package/dist/{shared-fMKOv8hP.js → shared-Afctg7B0.js} +65 -32
- package/dist/{shared-C8LjUdVU.js → shared-l0oGGetg.js} +9 -6
- package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
- package/dist/{sink-Cp_Eot9W.d.ts → sink-B5zoUW_O.d.ts} +44 -20
- package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
- package/dist/{skills-g_3BS9NC.js → skills-C9uKfSF5.js} +3 -3
- package/dist/{skills-Dcjw9_1C.js → skills-CQQcuGBi.js} +12 -8
- package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BjAWkchD.d.ts} +21 -12
- package/dist/{snapshot-cache-DT2Kx1F8.js → snapshot-cache-Bx_4xC_6.js} +14 -11
- package/dist/solid/index.d.ts +55 -16
- 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-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
- package/dist/{sources-DEEuGb8S.d.ts → sources-CWG32C0G.d.ts} +126 -53
- package/dist/{sql-B96movIM.js → sql-0WjxIp9g.js} +28 -7
- package/dist/{sql-CDEPCA0g.d.ts → sql-B80DFdpG.d.ts} +2 -2
- package/dist/{src-DLFrtrrC.js → src-C_pi2Rnh.js} +292 -101
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +47 -35
- package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
- package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-DOYEuOLx.d.ts} +7 -7
- package/dist/{store-DSP9oGvh.js → store-RNFvaJJv.js} +32 -26
- package/dist/{store-options-B_poyYvg.js → store-options-Dil3lraY.js} +105 -15
- package/dist/stores-DZJvxFIZ.d.ts +59 -0
- package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-2Vwhl7Er.d.ts → stream-9y9qw51m.d.ts} +4 -3
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{style-Ds1gNm77.js → style-DblOtSga.js} +1 -1
- package/dist/{style-Cqo7-73x.js → style-Ds11Hmk4.js} +2 -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 -38
- package/dist/supabase/index.js +5 -5
- package/dist/supabase/middleware.d.ts +19 -13
- package/dist/supabase/middleware.js +7 -7
- package/dist/{supabase--0aJdLEd.js → supabase-DnMMg5Fn.js} +79 -35
- package/dist/{supabase-Bqp7iIY2.js → supabase-SBs3MYUE.js} +3 -3
- package/dist/supabase-hook-C0FyEACZ.js +1 -0
- package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-CrgU06WH.js} +175 -196
- package/dist/{supautils-MESd81bF.js → supautils-ByezN3b8.js} +385 -219
- package/dist/{support-session-Cna49-3f.js → support-session-BsmPCbz8.js} +21 -21
- 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-Z2LpxsGa.js → tables-BqrxBCir.js} +641 -1104
- 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-CmeBQ6Nv.js → tenancy-5d1zVBvK.js} +25 -19
- package/dist/terminal/index.d.ts +23 -14
- package/dist/terminal/index.js +17 -20
- package/dist/testing/core.d.ts +1 -1
- package/dist/testing/core.js +1 -1
- package/dist/testing/fixtures/index.d.ts +8 -5
- package/dist/testing/fixtures/index.js +78 -17
- package/dist/testing/index.d.ts +225 -141
- package/dist/testing/index.js +352 -234
- 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-DhITNCnD.js → text-diff-BtfSmdUo.js} +2 -2
- package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
- package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
- package/dist/{token-2qYDvXz2.js → token-DC9EQiet.js} +14 -12
- package/dist/{tool-refusal-reAhIzdl.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-c7Xo_2Cu.d.ts +50 -0
- package/dist/{types-CfiKC5aN.d.ts → types-B2efzoSX.d.ts} +14 -11
- package/dist/{types-CIeZcG8v.d.ts → types-B6ExllNo.d.ts} +2 -2
- package/dist/{types-DBHftjgS.d.ts → types-BB-zWDcR.d.ts} +45 -33
- package/dist/{types-BfVmNJO5.d.ts → types-BMVDHvI0.d.ts} +128 -50
- package/dist/{types-DXmwu78Z.d.ts → types-CEinc15V.d.ts} +31 -14
- package/dist/{types-g7Oy6Zg4.d.ts → types-CN0LsqbK.d.ts} +47 -24
- package/dist/{types-CeIscIKp.d.ts → types-CWBsAwqn.d.ts} +23 -12
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-BWZybqs9.d.ts → types-CzOeVvcC.d.ts} +384 -203
- package/dist/{types-DC44-hqb.d.ts → types-DLvhVm1r.d.ts} +59 -32
- package/dist/{types-D3A19w4A.d.ts → types-DlelvQk4.d.ts} +22 -13
- package/dist/{types-cTos-H7p.d.ts → types-DsHGPtkR.d.ts} +68 -32
- package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-CQVEQawv.d.ts → types-rCRV4Ge-.d.ts} +24 -14
- package/dist/types-tQB2CEnY.d.ts +262 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-0hjZPIRX.js +1 -0
- package/dist/{usage-Bybmck7f.js → usage-B9EtHWLa.js} +50 -26
- package/dist/{usage-CDaLXCfL.js → usage-CBzgwfIs.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-CQpoquwj.d.ts → validation-error-uvp-kyfO.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-pe8rL_Qw.js → verify-DlUcTDBz.js} +148 -487
- package/dist/version-DMQ0dnN5.js +48 -0
- package/dist/version-DizhmD72.js +1 -0
- package/dist/{views-BB8E9dTP.js → views-CD8wuL4Z.js} +19 -6
- package/dist/{vocabulary-Bg3eeT2H.d.ts → vocabulary-DEJ5j4mR.d.ts} +7 -4
- package/dist/vue/index.d.ts +71 -22
- package/dist/vue/index.js +50 -13
- package/dist/{waiter-DwEyouan.d.ts → waiter-CqUKX6CY.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-C-4VmFlL.js → watch-BFDKqmUa.js} +8 -8
- package/dist/watch-ClLuO2TL.js +1 -0
- package/dist/webmcp/index.d.ts +11 -11
- package/dist/webmcp/index.js +8 -5
- package/dist/{where-scope-wq2coopv.js → where-scope-DlCdCM_8.js} +24 -18
- package/dist/{who-can-BwNsI_Js.js → who-can-BoDJm0Nc.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-CiSc_KCq.js → wrap-B2wziJI_.js} +4 -4
- package/dist/{wrap-B6R0cMRL.d.ts → wrap-DxXB54Wu.d.ts} +8 -5
- package/package.json +8 -8
- package/schemas/catalog-v1.json +3 -0
- package/schemas/supabase-manifest-v1.json +33 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
- package/skills/permdock-data/references/queries-and-rls.md +2 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -2
- package/skills/permdock-wire/references/adapters.md +16 -23
- package/dist/catalog-BCCjSAdH.js +0 -1
- package/dist/collect-k_Dulxr5.js +0 -1
- package/dist/config-CoQHDrDi.js +0 -166
- package/dist/denied-text-D4qkEtFz.d.ts +0 -19
- package/dist/fields-ClcQLrVc.js +0 -238
- package/dist/generate-CNU1pIOo.js +0 -171
- package/dist/headers-BIjfMaoC.js +0 -8
- package/dist/headers-CIbDTUTK.d.ts +0 -7
- package/dist/load-DrMHXzgN.js +0 -1
- package/dist/output-files-DPAY7-GX.js +0 -1
- package/dist/package-root-Dk_ETdkp.js +0 -31
- package/dist/parse-local-manifest-e4mdwAKd.d.ts +0 -10
- package/dist/policies-B2lZIurj.js +0 -295
- package/dist/powersync-CExtTLyA.js +0 -1
- package/dist/problem-details-Tcfmj3bV.d.ts +0 -7
- package/dist/protected-BwZYL1X_.d.ts +0 -39
- package/dist/pull-Cty6Ovyu.js +0 -1
- package/dist/run-Bz7DXGEv.js +0 -1
- package/dist/stores-BAZwSYZA.d.ts +0 -31
- package/dist/supabase-hook-DJxC4PoP.js +0 -1
- package/dist/types-CKV71kKh.d.ts +0 -172
- package/dist/usage-y-kBNdqs.js +0 -1
- package/dist/version-CEbQ5UeM.js +0 -18
- package/dist/version-DXkYUISx.js +0 -1
- package/dist/watch-Bd9mx3rd.js +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { n as RoleMap, r as RoleThrough } from "./types-
|
|
2
|
-
import { s as SqlMembershipSource } from "./sources-
|
|
1
|
+
import { n as RoleMap, r as RoleThrough } from "./types-BMVDHvI0.js";
|
|
2
|
+
import { s as SqlMembershipSource } from "./sources-CWG32C0G.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
|
|
@@ -26,12 +26,11 @@ type RlsMembershipTable = {
|
|
|
26
26
|
* several of them: the row holds every non-null key.
|
|
27
27
|
*/
|
|
28
28
|
readonly role: string | RoleMap | RoleThrough | readonly (string | RoleMap | RoleThrough)[];
|
|
29
|
-
/**
|
|
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
|
};
|
|
@@ -91,52 +95,67 @@ type RlsFunctionMapping = {
|
|
|
91
95
|
readonly args?: readonly string[];
|
|
92
96
|
};
|
|
93
97
|
/**
|
|
94
|
-
* A table whose rows reach their scope through a parent table
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
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`.
|
|
99
103
|
*/
|
|
100
104
|
type RlsTableVia = {
|
|
101
105
|
/** `schema.table` of the parent. */
|
|
102
106
|
readonly table: string;
|
|
103
107
|
/** The parent's column holding the scope instance id. */
|
|
104
108
|
readonly column: string;
|
|
105
|
-
/**
|
|
109
|
+
/**
|
|
110
|
+
* This table's column holding the parent's id. Default `<parent table,
|
|
111
|
+
* singular>_id`.
|
|
112
|
+
*/
|
|
106
113
|
readonly key?: string;
|
|
107
114
|
/** The parent's id column. Default `id`. */
|
|
108
115
|
readonly id?: string;
|
|
109
|
-
/**
|
|
116
|
+
/**
|
|
117
|
+
* SQL type of the parent's id column. Default `uuid` in the `supabase`
|
|
118
|
+
* dialect, else `text`.
|
|
119
|
+
*/
|
|
110
120
|
readonly type?: string;
|
|
111
121
|
/** The scope `column` holds. Default the policy's root scope. */
|
|
112
122
|
readonly scope?: string;
|
|
113
123
|
};
|
|
114
124
|
/**
|
|
115
|
-
* A resource's table: its `schema.table`, an object that adds `via`, or
|
|
116
|
-
*
|
|
117
|
-
*
|
|
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.
|
|
118
128
|
*/
|
|
119
129
|
type RlsTable = string | false | {
|
|
120
130
|
readonly table?: string;
|
|
121
131
|
readonly via: RlsTableVia;
|
|
122
132
|
};
|
|
123
133
|
type RlsConfig = {
|
|
124
|
-
/**
|
|
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
|
+
*/
|
|
125
138
|
readonly tables?: Readonly<Record<string, RlsTable>>;
|
|
126
139
|
readonly dialect?: RlsDialect;
|
|
127
140
|
readonly memberships?: RlsMemberships;
|
|
128
141
|
/**
|
|
129
|
-
* `database` mode: the `tableMembershipSource` / `junctionMembershipSource`
|
|
130
|
-
* read for every scope `memberships` maps no table for.
|
|
131
|
-
* `supabase.hook.memberships`, so the helpers and the token hook run
|
|
132
|
-
* 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.
|
|
133
146
|
*/
|
|
134
147
|
readonly membershipSources?: readonly SqlMembershipSource[];
|
|
135
|
-
/**
|
|
148
|
+
/**
|
|
149
|
+
* Tables the helpers, `authorize()` and the token hook read to drop suspended
|
|
150
|
+
* users and scope instances.
|
|
151
|
+
*/
|
|
136
152
|
readonly suspension?: RlsSuspension;
|
|
137
153
|
readonly functions?: Readonly<Record<string, RlsFunctionMapping>>;
|
|
138
154
|
readonly inlineFunctions?: boolean;
|
|
139
|
-
/**
|
|
155
|
+
/**
|
|
156
|
+
* Emit FORCE ROW LEVEL SECURITY so the table owner is subject to the
|
|
157
|
+
* policies.
|
|
158
|
+
*/
|
|
140
159
|
readonly force?: boolean;
|
|
141
160
|
readonly fixtures?: string;
|
|
142
161
|
/**
|
|
@@ -155,22 +174,22 @@ type RlsConfig = {
|
|
|
155
174
|
* Which tenants the helpers and `memberOf` checks admit. `'active'`
|
|
156
175
|
* (default): when the token carries a non-empty `tenantClaim`, only that
|
|
157
176
|
* tenant; without one, every tenant the subject is a member of. `'all'`:
|
|
158
|
-
* every such tenant whatever the claim says, for apps whose tenant comes
|
|
159
|
-
*
|
|
177
|
+
* every such tenant whatever the claim says, for apps whose tenant comes from
|
|
178
|
+
* the URL or the query.
|
|
160
179
|
*/
|
|
161
180
|
readonly tenants?: "active" | "all";
|
|
162
|
-
/**
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
+
*/
|
|
167
186
|
readonly scopeTypes?: Readonly<Record<string, string>>;
|
|
168
187
|
readonly roleClaim?: string;
|
|
169
188
|
/**
|
|
170
|
-
* Role values the existing SQL compares against (a string literal or an
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
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.
|
|
174
193
|
*/
|
|
175
194
|
readonly roleValues?: Readonly<Record<string, string>>;
|
|
176
195
|
readonly gucPrefix?: string;
|
|
@@ -179,37 +198,56 @@ type RlsConfig = {
|
|
|
179
198
|
readonly drizzle?: {
|
|
180
199
|
/** Module exporting the tables, as imported from `out`. Default `./schema`. */
|
|
181
200
|
readonly schema?: string;
|
|
182
|
-
/**
|
|
201
|
+
/**
|
|
202
|
+
* Export name per table name; defaults to the camelCased table name without
|
|
203
|
+
* its schema.
|
|
204
|
+
*/
|
|
183
205
|
readonly exports?: Readonly<Record<string, string>>;
|
|
184
206
|
};
|
|
185
207
|
/** `--target prisma`: the model each table maps to. */
|
|
186
208
|
readonly prisma?: {
|
|
187
|
-
/**
|
|
209
|
+
/**
|
|
210
|
+
* Model name per table name; defaults to the PascalCased table name without
|
|
211
|
+
* its schema.
|
|
212
|
+
*/
|
|
188
213
|
readonly models?: Readonly<Record<string, string>>;
|
|
189
214
|
};
|
|
190
|
-
/**
|
|
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
|
+
*/
|
|
191
220
|
readonly schema?: string;
|
|
192
|
-
/**
|
|
221
|
+
/**
|
|
222
|
+
* Where the helpers read roles and memberships: `database` tables or `jwt`
|
|
223
|
+
* claims.
|
|
224
|
+
*/
|
|
193
225
|
readonly authorize?: "database" | "jwt";
|
|
194
226
|
/** One policy per role and permission instead of one per table and command. */
|
|
195
227
|
readonly policyPerRole?: boolean;
|
|
196
228
|
/**
|
|
197
|
-
* Resolve tenant-defined custom roles in the helpers:
|
|
198
|
-
* `
|
|
199
|
-
*
|
|
200
|
-
* object turns them on and names
|
|
201
|
-
* 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.
|
|
202
234
|
*/
|
|
203
235
|
readonly customRoles?: boolean | RlsCustomRolesConfig;
|
|
204
236
|
/**
|
|
205
|
-
* Triggers the application owns on tables `generate` creates, by table
|
|
206
|
-
*
|
|
207
|
-
*
|
|
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`.
|
|
208
240
|
*/
|
|
209
241
|
readonly triggers?: Readonly<Record<string, readonly RlsTrigger[]>>;
|
|
210
|
-
/**
|
|
242
|
+
/**
|
|
243
|
+
* Register generated tables with an audit function, such as
|
|
244
|
+
* `better_supabase.audit`.
|
|
245
|
+
*/
|
|
211
246
|
readonly audit?: RlsAudit;
|
|
212
|
-
/**
|
|
247
|
+
/**
|
|
248
|
+
* How the generated custom-role write functions check the caller (`database`
|
|
249
|
+
* mode with `customRoles`).
|
|
250
|
+
*/
|
|
213
251
|
readonly customRoleWrites?: {
|
|
214
252
|
/**
|
|
215
253
|
* Who may change custom roles at all, checked before the hand-out check:
|
|
@@ -220,30 +258,30 @@ type RlsConfig = {
|
|
|
220
258
|
*/
|
|
221
259
|
readonly requires?: "manageRoles" | readonly string[];
|
|
222
260
|
/**
|
|
223
|
-
* The application's own roles table, one row per custom role. A trigger
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
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.
|
|
228
266
|
*/
|
|
229
267
|
readonly roles?: RlsCustomRoleTable;
|
|
230
268
|
/**
|
|
231
269
|
* The audit function the by-id writers call after a save
|
|
232
270
|
* (`permdock_replace_custom_role_grants_by_id`), with `event_type`,
|
|
233
|
-
* `target_type`, `record_id`, `tenant` and `metadata` plus `args`.
|
|
234
|
-
*
|
|
271
|
+
* `target_type`, `record_id`, `tenant` and `metadata` plus `args`. Needs
|
|
272
|
+
* `roles.primaryKey`.
|
|
235
273
|
*/
|
|
236
274
|
readonly audit?: RlsCustomRoleAudit;
|
|
237
275
|
};
|
|
238
276
|
/**
|
|
239
|
-
* Let link capabilities reach resource-scoped grants: `anon` policies that
|
|
240
|
-
* `permdock_capability_ids`, which reads the `capability` claim
|
|
241
|
-
* 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.
|
|
242
280
|
*/
|
|
243
281
|
readonly capabilities?: boolean;
|
|
244
282
|
/**
|
|
245
|
-
* `'deny'` (Supabase only): a token with `is_anonymous: true` reaches no
|
|
246
|
-
* 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
|
|
247
285
|
* `authenticated` role, so without it the grants to roles and to
|
|
248
286
|
* `authenticated()` reach it. The subject mapper has to refuse it in process
|
|
249
287
|
* too. Off by default.
|
|
@@ -258,20 +296,20 @@ type RlsConfig = {
|
|
|
258
296
|
readonly anonExecute?: boolean;
|
|
259
297
|
/**
|
|
260
298
|
* Check role assignments in the database: a trigger on each scope's
|
|
261
|
-
* `rls.memberships` table, the global-roles table `rls.roles` and each
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
*
|
|
266
|
-
*
|
|
267
|
-
*
|
|
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`.
|
|
268
306
|
*/
|
|
269
307
|
readonly assignments?: true | {
|
|
270
308
|
readonly tables?: readonly RlsAssignmentTable[];
|
|
271
309
|
/**
|
|
272
310
|
* `'refuse'`: a client write to a row whose user is the caller is
|
|
273
|
-
* refused on every guarded table with a user column, whatever the
|
|
274
|
-
*
|
|
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
|
|
275
313
|
* configured). Unset, a caller may change their own row within what
|
|
276
314
|
* they may assign.
|
|
277
315
|
*/
|
|
@@ -280,88 +318,107 @@ type RlsConfig = {
|
|
|
280
318
|
/**
|
|
281
319
|
* Add the approval store `supabaseApprovalStore` reads and writes: the
|
|
282
320
|
* `approval_requests` table and one function per `ApprovalStore` method, in
|
|
283
|
-
* the helper schema, executable by no client role. Off by default. An
|
|
284
|
-
*
|
|
285
|
-
*
|
|
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.
|
|
286
324
|
*/
|
|
287
325
|
readonly approvals?: boolean | RlsApprovalsAdopt;
|
|
288
326
|
/**
|
|
289
|
-
* A pg_jsonschema check constraint on generated `jsonb` columns: the
|
|
290
|
-
*
|
|
291
|
-
*
|
|
292
|
-
*
|
|
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.
|
|
293
331
|
*/
|
|
294
332
|
readonly jsonSchema?: "auto" | boolean;
|
|
295
333
|
/**
|
|
296
|
-
* `false` leaves out the holder-count and transfer-only triggers `min`,
|
|
297
|
-
*
|
|
298
|
-
*
|
|
299
|
-
*
|
|
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.
|
|
300
338
|
*/
|
|
301
339
|
readonly ownershipTriggers?: false | Readonly<Record<string, false>>;
|
|
302
340
|
/**
|
|
303
|
-
* Make a session acting for a user read-only in the database: one
|
|
304
|
-
*
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
* `
|
|
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.
|
|
309
347
|
*/
|
|
310
348
|
readonly readOnlyActors?: boolean | readonly string[];
|
|
311
349
|
readonly apiKeys?: true | RlsApiKeys;
|
|
312
350
|
/**
|
|
313
|
-
* Narrow a delegated token (a `client_id`, or an `act` that is not a
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
317
|
-
*
|
|
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.
|
|
318
356
|
*/
|
|
319
357
|
readonly tokenScopes?: boolean;
|
|
320
|
-
/**
|
|
358
|
+
/**
|
|
359
|
+
* Supabase Realtime: policies on `realtime.messages` for private channels.
|
|
360
|
+
* Supabase dialect only.
|
|
361
|
+
*/
|
|
321
362
|
readonly realtime?: RlsRealtime;
|
|
322
|
-
/**
|
|
363
|
+
/**
|
|
364
|
+
* Supabase Storage: policies on `storage.objects` for buckets keyed by a
|
|
365
|
+
* scope folder. Supabase dialect only.
|
|
366
|
+
*/
|
|
323
367
|
readonly storage?: RlsStorage;
|
|
324
368
|
/**
|
|
325
|
-
* `'views'`: one `security_invoker` view `<table>_visible` per table with
|
|
326
|
-
* read grants, whose restricted columns are `case when
|
|
327
|
-
*
|
|
328
|
-
*
|
|
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.
|
|
329
375
|
*/
|
|
330
376
|
readonly fields?: "views" | "mask";
|
|
331
377
|
/**
|
|
332
|
-
* With `fields: 'views'` or `'mask'`, grant `anon` and `authenticated` only
|
|
333
|
-
* 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 *`.
|
|
334
381
|
*/
|
|
335
382
|
readonly revokeColumns?: boolean;
|
|
336
|
-
/**
|
|
383
|
+
/**
|
|
384
|
+
* Policy name template: `{table}`, `{op}`, plus `{role}` and `{permission}`
|
|
385
|
+
* with `policyPerRole`.
|
|
386
|
+
*/
|
|
337
387
|
readonly policyName?: string;
|
|
338
388
|
/** `rls generate --rbac supabase` defaults; flags override. */
|
|
339
389
|
readonly rbac?: {
|
|
340
390
|
readonly schema?: string;
|
|
341
391
|
readonly authorize?: "database" | "jwt";
|
|
342
392
|
};
|
|
343
|
-
/**
|
|
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
|
+
*/
|
|
344
397
|
readonly roles?: GlobalRoles;
|
|
345
398
|
/**
|
|
346
399
|
* The SQL command each action verb compiles to, merged over the defaults
|
|
347
|
-
* (`read`, `list`, `get` → `select`; `create` → `insert`; `update`;
|
|
348
|
-
* `'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
|
|
349
402
|
* `role_permissions` either way, so `permdock_has` answers for it.
|
|
350
403
|
*/
|
|
351
404
|
readonly actions?: RlsActions;
|
|
352
|
-
/**
|
|
405
|
+
/**
|
|
406
|
+
* Emit only the helpers, their seeds and the scaffold; the table policies
|
|
407
|
+
* stay hand-written.
|
|
408
|
+
*/
|
|
353
409
|
readonly helpersOnly?: boolean;
|
|
354
410
|
/**
|
|
355
|
-
* Emit `permitted_<resource>_rows(p_permission)
|
|
356
|
-
*
|
|
357
|
-
*
|
|
411
|
+
* Emit `permitted_<resource>_rows(p_permission)`, its `_for` form,
|
|
412
|
+
* `permitted_<resource>_rows(p_permission, p_ids)` limited to candidate ids
|
|
413
|
+
* and the row-valued `permitted_<resource>_row(p_row, p_permission)` for
|
|
414
|
+
* these resources, or for every resource a grant reaches with `true`: the row
|
|
415
|
+
* ids the caller may act on, as the generated policies decide them.
|
|
358
416
|
*/
|
|
359
417
|
readonly rowHelpers?: true | readonly string[];
|
|
360
418
|
/**
|
|
361
|
-
* `'function'`: the `role_permissions` rows live in
|
|
362
|
-
*
|
|
363
|
-
*
|
|
364
|
-
* `select <schema>.seed();` after each deploy.
|
|
419
|
+
* `'function'`: the `role_permissions` rows live in `<schema>.seed()`, which
|
|
420
|
+
* the helpers part creates. Declarative workflows (pg-delta, migra) then need
|
|
421
|
+
* no seeds migration: call `select <schema>.seed();` after each deploy.
|
|
365
422
|
*
|
|
366
423
|
* `'view'`: `role_permissions` is a `security_invoker` view over a `values`
|
|
367
424
|
* list, so the rows travel with the declarative schema and need no seeding
|
|
@@ -380,19 +437,22 @@ type RlsConfig = {
|
|
|
380
437
|
readonly shims?: boolean | RlsShimsConfig;
|
|
381
438
|
};
|
|
382
439
|
/**
|
|
383
|
-
* `rls.approvals` on a table the app already has: the store functions keep
|
|
384
|
-
*
|
|
385
|
-
*
|
|
386
|
-
*
|
|
440
|
+
* `rls.approvals` on a table the app already has: the store functions keep each
|
|
441
|
+
* request's body in `body` and its token in `token` (both added when missing)
|
|
442
|
+
* and read every field from the body; `mirror` copies request fields into the
|
|
443
|
+
* app's own columns on each write, converted to their types.
|
|
387
444
|
*/
|
|
388
445
|
type RlsApprovalsAdopt = {
|
|
389
|
-
/**
|
|
446
|
+
/**
|
|
447
|
+
* `table` or `schema.table`. Without it the store is the generated
|
|
448
|
+
* `approval_requests`.
|
|
449
|
+
*/
|
|
390
450
|
readonly table?: string;
|
|
391
451
|
/**
|
|
392
452
|
* Add `approval_delegations`, the out-of-office covers a user writes for
|
|
393
|
-
* themselves, and the four-argument `permdock_is_approver` that answers for
|
|
394
|
-
*
|
|
395
|
-
*
|
|
453
|
+
* themselves, and the four-argument `permdock_is_approver` that answers for a
|
|
454
|
+
* delegate inside an active cover. `tableApprovalDelegationSource` reads the
|
|
455
|
+
* same rows for `approvalsHandler`. Off by default.
|
|
396
456
|
*/
|
|
397
457
|
readonly delegations?: boolean;
|
|
398
458
|
/** A text column unique per request. Default `token`. */
|
|
@@ -424,18 +484,30 @@ type RlsApiKeys = {
|
|
|
424
484
|
readonly roles?: string;
|
|
425
485
|
readonly serviceRoles?: readonly string[];
|
|
426
486
|
};
|
|
427
|
-
/**
|
|
487
|
+
/**
|
|
488
|
+
* One more table whose rows assign a role, such as invitations
|
|
489
|
+
* (`rls.assignments.tables`).
|
|
490
|
+
*/
|
|
428
491
|
type RlsAssignmentTable = {
|
|
429
492
|
readonly table: string;
|
|
430
493
|
/** The declared scope the row assigns the role at. */
|
|
431
494
|
readonly scope: string;
|
|
432
495
|
/** The column holding the scope instance id. */
|
|
433
496
|
readonly id: string;
|
|
434
|
-
/**
|
|
497
|
+
/**
|
|
498
|
+
* The tenant column for a scope below the first; defaults to `id` at the
|
|
499
|
+
* first scope.
|
|
500
|
+
*/
|
|
435
501
|
readonly tenant?: string;
|
|
436
|
-
/**
|
|
502
|
+
/**
|
|
503
|
+
* The role key column, a reference to a roles table that holds the key, or
|
|
504
|
+
* several of them.
|
|
505
|
+
*/
|
|
437
506
|
readonly role: string | RoleMap | RoleThrough | readonly (string | RoleMap | RoleThrough)[];
|
|
438
|
-
/**
|
|
507
|
+
/**
|
|
508
|
+
* The column holding the user the row assigns to, which `ownRole` compares
|
|
509
|
+
* with the caller.
|
|
510
|
+
*/
|
|
439
511
|
readonly user?: string;
|
|
440
512
|
};
|
|
441
513
|
/** `rls.customRoleWrites.roles`: the application's table of custom roles. */
|
|
@@ -443,22 +515,44 @@ type RlsCustomRoleTable = {
|
|
|
443
515
|
readonly table: string;
|
|
444
516
|
/** The column holding the role name. */
|
|
445
517
|
readonly key: string;
|
|
446
|
-
/**
|
|
518
|
+
/**
|
|
519
|
+
* The tenant column; a row with no tenant is a platform custom role (`scope:
|
|
520
|
+
* 'global'`). Without it every row is a platform role.
|
|
521
|
+
*/
|
|
447
522
|
readonly tenant?: string;
|
|
448
|
-
/**
|
|
523
|
+
/**
|
|
524
|
+
* A text column holding the scope name; without it a row with a tenant lives
|
|
525
|
+
* at the first scope.
|
|
526
|
+
*/
|
|
449
527
|
readonly scope?: string;
|
|
450
528
|
/** A column pinning the role to one instance of its scope. */
|
|
451
529
|
readonly id?: string;
|
|
452
|
-
/**
|
|
530
|
+
/**
|
|
531
|
+
* The row's id column: turns on the by-id write and read functions
|
|
532
|
+
* (`permdock_replace_custom_role_grants_by_id`).
|
|
533
|
+
*/
|
|
453
534
|
readonly primaryKey?: string;
|
|
454
|
-
/**
|
|
535
|
+
/**
|
|
536
|
+
* A boolean column marking rows that are not custom roles (declared or system
|
|
537
|
+
* roles); those rows are skipped.
|
|
538
|
+
*/
|
|
455
539
|
readonly skip?: string;
|
|
456
|
-
/**
|
|
540
|
+
/**
|
|
541
|
+
* A boolean column marking a row with no tenant as a shared custom role, held
|
|
542
|
+
* at `scope` (default the first scope) in every tenant. Without it a row with
|
|
543
|
+
* no tenant is a platform role.
|
|
544
|
+
*/
|
|
457
545
|
readonly shared?: string;
|
|
458
546
|
};
|
|
459
|
-
/**
|
|
547
|
+
/**
|
|
548
|
+
* `rls.customRoles` as an object: custom roles on, plus where existing ones
|
|
549
|
+
* live.
|
|
550
|
+
*/
|
|
460
551
|
type RlsCustomRolesConfig = {
|
|
461
|
-
/**
|
|
552
|
+
/**
|
|
553
|
+
* The application's role tables `--backfill-out` copies into
|
|
554
|
+
* `custom_role_permissions` and `custom_role_includes`.
|
|
555
|
+
*/
|
|
462
556
|
readonly from?: RlsCustomRolesFrom;
|
|
463
557
|
};
|
|
464
558
|
/**
|
|
@@ -468,19 +562,25 @@ type RlsCustomRolesConfig = {
|
|
|
468
562
|
*/
|
|
469
563
|
type RlsCustomRolesFrom = {
|
|
470
564
|
/**
|
|
471
|
-
* `'trigger'`: after-row triggers on the permissions table and the
|
|
472
|
-
*
|
|
473
|
-
* `permdock_trusted_replace_custom_role_grants` on every legacy write, so
|
|
474
|
-
*
|
|
475
|
-
*
|
|
565
|
+
* `'trigger'`: after-row triggers on the permissions table and the includes
|
|
566
|
+
* table rebuild the affected role through
|
|
567
|
+
* `permdock_trusted_replace_custom_role_grants` on every legacy write, so the
|
|
568
|
+
* PermDock grants follow the application's editor. Without it the backfill
|
|
569
|
+
* copies once.
|
|
476
570
|
*/
|
|
477
571
|
readonly sync?: "trigger";
|
|
478
572
|
readonly permissions: {
|
|
479
573
|
/** `table` or `schema.table`: one row per permission a role holds. */
|
|
480
574
|
readonly table: string;
|
|
481
|
-
/**
|
|
575
|
+
/**
|
|
576
|
+
* The reference to the roles table: `{ through: 'roles', on: { role_id:
|
|
577
|
+
* 'id' }, column: 'key' }`.
|
|
578
|
+
*/
|
|
482
579
|
readonly role: RoleThrough;
|
|
483
|
-
/**
|
|
580
|
+
/**
|
|
581
|
+
* The permission key column, or a reference to a permissions table that
|
|
582
|
+
* holds the key.
|
|
583
|
+
*/
|
|
484
584
|
readonly permission: string | RoleThrough;
|
|
485
585
|
/** A text column holding `allow` or `deny`. Without it every row allows. */
|
|
486
586
|
readonly effect?: string;
|
|
@@ -510,22 +610,34 @@ type RlsTrigger = {
|
|
|
510
610
|
};
|
|
511
611
|
/**
|
|
512
612
|
* `rls.audit`: one `select <function>('<schema>.<table>'::regclass, <args>)`
|
|
513
|
-
* per generated table, for an audit module that registers a table by
|
|
514
|
-
*
|
|
613
|
+
* per generated table, for an audit module that registers a table by creating
|
|
614
|
+
* its own trigger.
|
|
515
615
|
*/
|
|
516
616
|
type RlsAudit = {
|
|
517
617
|
/** `schema.function` taking the table as its first argument. */
|
|
518
618
|
readonly function: string;
|
|
519
|
-
/**
|
|
619
|
+
/**
|
|
620
|
+
* Generated tables, without the schema. Default the custom-role tables and
|
|
621
|
+
* `user_roles`, those this run creates.
|
|
622
|
+
*/
|
|
520
623
|
readonly tables?: readonly string[];
|
|
521
|
-
/**
|
|
624
|
+
/**
|
|
625
|
+
* Named text arguments: `{ tenant_column: 'tenant_id' }` passes
|
|
626
|
+
* `tenant_column => 'tenant_id'`.
|
|
627
|
+
*/
|
|
522
628
|
readonly args?: Readonly<Record<string, string>>;
|
|
523
629
|
};
|
|
524
630
|
/** `rls.customRoleWrites.audit`: the function a by-id custom-role save calls. */
|
|
525
631
|
type RlsCustomRoleAudit = {
|
|
526
|
-
/**
|
|
632
|
+
/**
|
|
633
|
+
* `schema.function` taking named `event_type`, `target_type`, `record_id`,
|
|
634
|
+
* `tenant` and `metadata` arguments.
|
|
635
|
+
*/
|
|
527
636
|
readonly function: string;
|
|
528
|
-
/**
|
|
637
|
+
/**
|
|
638
|
+
* Extra named text arguments: `{ actor_kind: 'user' }` passes `actor_kind =>
|
|
639
|
+
* 'user'`.
|
|
640
|
+
*/
|
|
529
641
|
readonly args?: Readonly<Record<string, string>>;
|
|
530
642
|
};
|
|
531
643
|
/** `rls.shims`: where the legacy-named wrappers go. */
|
|
@@ -533,12 +645,16 @@ type RlsShimsConfig = {
|
|
|
533
645
|
/** Schema of the legacy helpers. Default `public`. */
|
|
534
646
|
readonly schema?: string;
|
|
535
647
|
};
|
|
536
|
-
/**
|
|
648
|
+
/**
|
|
649
|
+
* An action verb's SQL command, or `'none'` for a verb that only `permdock_has`
|
|
650
|
+
* answers.
|
|
651
|
+
*/
|
|
537
652
|
type RlsActions = Readonly<Record<string, "select" | "insert" | "update" | "delete" | "none">>;
|
|
538
653
|
/**
|
|
539
654
|
* One existing SQL helper `rls migrate` rewrites. `form` names its arguments:
|
|
540
|
-
* `ids(key)` returns scope ids, `row(id, key)` and `membership(id)` test one
|
|
541
|
-
* `scoped(scope, id, key)` takes the scope as a literal, `global(key)`
|
|
655
|
+
* `ids(key)` returns scope ids, `row(id, key)` and `membership(id)` test one
|
|
656
|
+
* id, `scoped(scope, id, key)` takes the scope as a literal, `global(key)`
|
|
657
|
+
* returns a boolean.
|
|
542
658
|
*/
|
|
543
659
|
type RlsMigrateHelper = {
|
|
544
660
|
readonly form: "ids" | "row" | "membership";
|
|
@@ -558,20 +674,29 @@ type RlsMigrateConfig = {
|
|
|
558
674
|
readonly keys?: Readonly<Record<string, string>>;
|
|
559
675
|
/** Key prefix renames, longest first: `{ 'organization.': '' }`. */
|
|
560
676
|
readonly prefixes?: Readonly<Record<string, string>>;
|
|
561
|
-
/**
|
|
677
|
+
/**
|
|
678
|
+
* For `scoped` helpers, the scope literals that mean a global check, such as
|
|
679
|
+
* `system`.
|
|
680
|
+
*/
|
|
562
681
|
readonly globalScopes?: readonly string[];
|
|
563
|
-
/**
|
|
682
|
+
/**
|
|
683
|
+
* For `scoped` helpers, a scope literal's PermDock scope when the names
|
|
684
|
+
* differ.
|
|
685
|
+
*/
|
|
564
686
|
readonly scopes?: Readonly<Record<string, string>>;
|
|
565
687
|
/**
|
|
566
688
|
* Materialised permission tables to retire, by `schema.table`: a table the
|
|
567
689
|
* application keeps in step with triggers and reads instead of the grants.
|
|
568
|
-
* `rls migrate --retire-out` drops it with its refresh triggers once
|
|
569
|
-
*
|
|
690
|
+
* `rls migrate --retire-out` drops it with its refresh triggers once nothing
|
|
691
|
+
* else reads it.
|
|
570
692
|
*/
|
|
571
693
|
readonly tables?: Readonly<Record<string, RlsMigrateTable>>;
|
|
572
694
|
};
|
|
573
695
|
type RlsMigrateTable = {
|
|
574
|
-
/**
|
|
696
|
+
/**
|
|
697
|
+
* The functions that keep the table in step. Default: every function in
|
|
698
|
+
* `--sql` whose body writes it, and every function that calls one.
|
|
699
|
+
*/
|
|
575
700
|
readonly refresh?: readonly string[];
|
|
576
701
|
};
|
|
577
702
|
/** Where global roles live: `table (user, role)`. Defaults `user_id` and `role`. */
|
|
@@ -614,11 +739,20 @@ type RlsStorage = {
|
|
|
614
739
|
};
|
|
615
740
|
/** `permdock supabase hook generate` input. */
|
|
616
741
|
type SupabaseHookConfig = {
|
|
617
|
-
/**
|
|
742
|
+
/**
|
|
743
|
+
* The same `tableMembershipSource` / `junctionMembershipSource` sources the
|
|
744
|
+
* app passes as `memberships`.
|
|
745
|
+
*/
|
|
618
746
|
readonly memberships: readonly SqlMembershipSource[];
|
|
619
|
-
/**
|
|
747
|
+
/**
|
|
748
|
+
* Schema of the hook and the version table. Default `rls.schema`, else
|
|
749
|
+
* `permdock`.
|
|
750
|
+
*/
|
|
620
751
|
readonly schema?: string;
|
|
621
|
-
/**
|
|
752
|
+
/**
|
|
753
|
+
* Global roles: `user_role` and `roles`. Default `rls.roles`, else the
|
|
754
|
+
* `<schema>.user_roles (user_id, role)` table; `false` for none.
|
|
755
|
+
*/
|
|
622
756
|
readonly roles?: GlobalRoles | false;
|
|
623
757
|
/**
|
|
624
758
|
* Where the active first-scope id comes from: `app_metadata.<key>` (default
|
|
@@ -642,19 +776,18 @@ type SupabaseHookConfig = {
|
|
|
642
776
|
readonly columns: readonly string[];
|
|
643
777
|
};
|
|
644
778
|
/**
|
|
645
|
-
* Claims other packages own, each `claim: '<schema>.<function>'`, for
|
|
646
|
-
*
|
|
647
|
-
*
|
|
648
|
-
*
|
|
649
|
-
* suspended user gets none.
|
|
779
|
+
* Claims other packages own, each `claim: '<schema>.<function>'`, for example
|
|
780
|
+
* `{ features: 'public.feature_claims' }`. The function takes the user id
|
|
781
|
+
* (`uuid`) and returns `jsonb`; `null` omits the claim. Reserved names are
|
|
782
|
+
* refused, the claims sit outside `budget`, and a suspended user gets none.
|
|
650
783
|
*/
|
|
651
784
|
readonly claims?: Readonly<Record<string, string>>;
|
|
652
785
|
/**
|
|
653
|
-
* The `team_ids` claim: the uuid of every team the user belongs to, read
|
|
654
|
-
*
|
|
655
|
-
*
|
|
656
|
-
*
|
|
657
|
-
*
|
|
786
|
+
* The `team_ids` claim: the uuid of every team the user belongs to, read from
|
|
787
|
+
* `table` (`user` and `team` columns; `tenant` puts the active tenant's teams
|
|
788
|
+
* first). It shares the `memberships` budget, so a user with many teams gets
|
|
789
|
+
* a prefix and `memberships_truncated`. A suspended user gets none. Clients
|
|
790
|
+
* must not write the table.
|
|
658
791
|
*/
|
|
659
792
|
readonly teams?: {
|
|
660
793
|
readonly table: string;
|
|
@@ -665,22 +798,28 @@ type SupabaseHookConfig = {
|
|
|
665
798
|
readonly before?: string | readonly string[];
|
|
666
799
|
/**
|
|
667
800
|
* Check the claims the hook wrote against `supabase-claims-v1.json` with
|
|
668
|
-
* pg_jsonschema, and drop them all on a mismatch so the user signs in with
|
|
669
|
-
*
|
|
801
|
+
* pg_jsonschema, and drop them all on a mismatch so the user signs in with no
|
|
802
|
+
* PermDock access instead of an error. Needs the extension. Default `false`.
|
|
670
803
|
*/
|
|
671
804
|
readonly validate?: boolean;
|
|
672
|
-
/**
|
|
805
|
+
/**
|
|
806
|
+
* Bytes of JSON the `memberships` claim may use. Default
|
|
807
|
+
* `supabaseMembershipsBudget` (1024).
|
|
808
|
+
*/
|
|
673
809
|
readonly budget?: number;
|
|
674
|
-
/**
|
|
810
|
+
/**
|
|
811
|
+
* Keep `permdock_authz_version` and write the `authz_ver` claim. Default
|
|
812
|
+
* `true`.
|
|
813
|
+
*/
|
|
675
814
|
readonly version?: boolean;
|
|
676
815
|
/**
|
|
677
816
|
* Write PostgREST wrappers for `subject_for`, `members_of` and
|
|
678
817
|
* `authz_version_for` into `schema` (default `public`), named
|
|
679
|
-
* `<prefix>subject_for` and so on (default prefix `permdock_`), for a
|
|
680
|
-
*
|
|
681
|
-
*
|
|
682
|
-
*
|
|
683
|
-
*
|
|
818
|
+
* `<prefix>subject_for` and so on (default prefix `permdock_`), for a backend
|
|
819
|
+
* that reaches Postgres through the Data API while the hook schema is not
|
|
820
|
+
* exposed. Each wrapper is `security definer`, revoked from `public`, `anon`
|
|
821
|
+
* and `authenticated`, and granted to `service_role`: the one place the hook
|
|
822
|
+
* grants to it. Pass the same setting to `postgrestSources`.
|
|
684
823
|
*/
|
|
685
824
|
readonly api?: {
|
|
686
825
|
readonly schema?: string;
|
|
@@ -693,10 +832,10 @@ type SupabaseHookConfig = {
|
|
|
693
832
|
readonly out?: string;
|
|
694
833
|
};
|
|
695
834
|
/**
|
|
696
|
-
* How the project turns SQL into Supabase migrations: `'pg-delta'`
|
|
697
|
-
*
|
|
698
|
-
*
|
|
699
|
-
*
|
|
835
|
+
* How the project turns SQL into Supabase migrations: `'pg-delta'` (Declarative
|
|
836
|
+
* Schemas 2.0, `supabase db schema declarative sync`), `'migra'` (declarative
|
|
837
|
+
* schemas on `supabase db diff`) or `'migrations'` (hand-written migrations, no
|
|
838
|
+
* declarative schemas).
|
|
700
839
|
*/
|
|
701
840
|
type SupabaseSchemas = "pg-delta" | "migra" | "migrations";
|
|
702
841
|
type SupabaseConfig = {
|
|
@@ -710,29 +849,47 @@ type SupabaseConfig = {
|
|
|
710
849
|
};
|
|
711
850
|
type DoctorConfig = {
|
|
712
851
|
/**
|
|
713
|
-
* Directories or globs the source checks read (PD001, PD002, PD007 to
|
|
714
|
-
*
|
|
715
|
-
*
|
|
852
|
+
* Directories or globs the source checks read (PD001, PD002, PD007 to PD015,
|
|
853
|
+
* PD044 and the other checks over files), default `collect.srcPath`. The
|
|
854
|
+
* catalog `collect` writes still comes from `collect.srcPath`, and PD004
|
|
716
855
|
* compares the catalog on disk with that one.
|
|
717
856
|
*/
|
|
718
857
|
readonly srcPath?: readonly string[];
|
|
719
858
|
readonly sensitiveActions?: readonly string[];
|
|
720
859
|
readonly memberships?: string;
|
|
721
|
-
/**
|
|
860
|
+
/**
|
|
861
|
+
* A JSON fixture `{ credentials?, settings? }` of API-key credentials and
|
|
862
|
+
* per-tenant settings (the `memorySettingsSource` input) for PD029.
|
|
863
|
+
*/
|
|
722
864
|
readonly credentials?: string;
|
|
723
|
-
/**
|
|
865
|
+
/**
|
|
866
|
+
* Globs or directories whose files are client entries for PD001, for
|
|
867
|
+
* frameworks with no `'use client'` convention.
|
|
868
|
+
*/
|
|
724
869
|
readonly clientEntries?: readonly string[];
|
|
725
|
-
/**
|
|
870
|
+
/**
|
|
871
|
+
* Globs or directories of SQL migrations PD022 scans for views; defaults to
|
|
872
|
+
* the usual migration folders.
|
|
873
|
+
*/
|
|
726
874
|
readonly migrations?: readonly string[];
|
|
727
|
-
/**
|
|
875
|
+
/**
|
|
876
|
+
* A JSON array of sample decoded token claims; PD039 measures each
|
|
877
|
+
* `supabase.hook.claims` entry in it.
|
|
878
|
+
*/
|
|
728
879
|
readonly claims?: string;
|
|
729
|
-
/**
|
|
880
|
+
/**
|
|
881
|
+
* Tables two resources map to on purpose, over disjoint rows; PD075 skips
|
|
882
|
+
* them.
|
|
883
|
+
*/
|
|
730
884
|
readonly sharedTables?: readonly string[];
|
|
731
885
|
};
|
|
732
886
|
type PermDockConfig = {
|
|
733
887
|
readonly permissions?: string;
|
|
734
888
|
readonly policy?: string;
|
|
735
|
-
/**
|
|
889
|
+
/**
|
|
890
|
+
* A module exporting the `defineOperations` map as `operations` or default;
|
|
891
|
+
* `collect` writes it to the catalog's `operations`.
|
|
892
|
+
*/
|
|
736
893
|
readonly operations?: string;
|
|
737
894
|
readonly collect?: CollectConfig;
|
|
738
895
|
readonly catalog?: CatalogConfig;
|
|
@@ -743,16 +900,40 @@ type PermDockConfig = {
|
|
|
743
900
|
readonly supabase?: SupabaseConfig;
|
|
744
901
|
readonly powersync?: PowerSyncConfig;
|
|
745
902
|
readonly doctor?: DoctorConfig;
|
|
903
|
+
readonly gen?: GenConfig;
|
|
746
904
|
};
|
|
747
|
-
/** `permdock
|
|
905
|
+
/** What `permdock gen --kind` writes. */
|
|
906
|
+
type GenKind = "zod" | "valibot" | "arktype" | "json-schema" | "standard-schema" | "constants" | "factories" | "react" | "vue" | "svelte" | "solid" | "messages";
|
|
907
|
+
/** `permdock gen` input. */
|
|
908
|
+
type GenConfig = {
|
|
909
|
+
/** The directory the generated files go to; default `src/generated`. */
|
|
910
|
+
readonly out?: string;
|
|
911
|
+
/** The kinds `permdock gen` writes without `--kind`; default `['constants']`. */
|
|
912
|
+
readonly kinds?: readonly GenKind[];
|
|
913
|
+
/**
|
|
914
|
+
* The schema kinds also export `<resource>Fields`: per field its `label`,
|
|
915
|
+
* `required`, enum `options` and bounds, for forms.
|
|
916
|
+
*/
|
|
917
|
+
readonly fieldMeta?: boolean;
|
|
918
|
+
};
|
|
919
|
+
/**
|
|
920
|
+
* `permdock powersync generate` and `verify` input. Tables and memberships come
|
|
921
|
+
* from `rls`.
|
|
922
|
+
*/
|
|
748
923
|
type PowerSyncConfig = {
|
|
749
924
|
/** The Sync Streams file; default `sync-config.yaml`. */
|
|
750
925
|
readonly out?: string;
|
|
751
|
-
/**
|
|
926
|
+
/**
|
|
927
|
+
* Resources that get a stream; default every resource with a grant of
|
|
928
|
+
* `action`.
|
|
929
|
+
*/
|
|
752
930
|
readonly resources?: readonly string[];
|
|
753
931
|
/** The action whose grants decide which rows sync; default `read`. */
|
|
754
932
|
readonly action?: string;
|
|
755
|
-
/**
|
|
933
|
+
/**
|
|
934
|
+
* Where `generate` writes `localSnapshotManifest(policy)` as JSON for
|
|
935
|
+
* `localSnapshot` and `powerSyncSource`; none by default.
|
|
936
|
+
*/
|
|
756
937
|
readonly manifest?: string;
|
|
757
938
|
};
|
|
758
939
|
type CliIo = {
|
|
@@ -785,11 +966,11 @@ type PermDockPluginOptions = {
|
|
|
785
966
|
readonly collect?: CollectConfig;
|
|
786
967
|
readonly onDrift?: "error" | "warn";
|
|
787
968
|
/**
|
|
788
|
-
* Unplugin only: compare instead of write in `buildStart`, failing the
|
|
789
|
-
*
|
|
790
|
-
*
|
|
969
|
+
* Unplugin only: compare instead of write in `buildStart`, failing the build
|
|
970
|
+
* on drift (as `permdock collect --check` does). The Next plugin checks in
|
|
971
|
+
* `phase-production-build` unless `PERMDOCK_COLLECT=write`.
|
|
791
972
|
*/
|
|
792
973
|
readonly check?: boolean;
|
|
793
974
|
};
|
|
794
975
|
//#endregion
|
|
795
|
-
export {
|
|
976
|
+
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 };
|