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
|
@@ -30,20 +30,20 @@ const SECTIONS = [
|
|
|
30
30
|
docs: "init",
|
|
31
31
|
effects: ["files"],
|
|
32
32
|
config: false,
|
|
33
|
-
load: async () => (await import("./init-
|
|
33
|
+
load: async () => (await import("./init-txYTuW9u.js")).init
|
|
34
34
|
}),
|
|
35
35
|
group("preset", "Decode a preset code, or print its permdock.com/create link", "preset", [leaf("decode", "Print what a preset code holds", {
|
|
36
36
|
examples: ["permdock preset decode p1AQIDBAc"],
|
|
37
37
|
docs: "preset",
|
|
38
38
|
effects: [],
|
|
39
39
|
config: false,
|
|
40
|
-
load: async () => (await import("./init-
|
|
40
|
+
load: async () => (await import("./init-txYTuW9u.js")).presetDecode
|
|
41
41
|
}), leaf("url", "Print the permdock.com/create link that opens a code", {
|
|
42
42
|
examples: ["permdock preset url p1AQIDBAc"],
|
|
43
43
|
docs: "preset",
|
|
44
44
|
effects: [],
|
|
45
45
|
config: false,
|
|
46
|
-
load: async () => (await import("./init-
|
|
46
|
+
load: async () => (await import("./init-txYTuW9u.js")).presetUrl
|
|
47
47
|
})]),
|
|
48
48
|
group("skills", "Install, update or list the PermDock Agent Skills", "skills", [
|
|
49
49
|
leaf("install", "Copy the Agent Skills into the agent folders", {
|
|
@@ -55,21 +55,21 @@ const SECTIONS = [
|
|
|
55
55
|
docs: "skills",
|
|
56
56
|
effects: ["files"],
|
|
57
57
|
config: false,
|
|
58
|
-
load: async () => (await import("./skills-
|
|
58
|
+
load: async () => (await import("./skills-C9uKfSF5.js")).install
|
|
59
59
|
}),
|
|
60
60
|
leaf("update", "Replace installed skills with this version's", {
|
|
61
61
|
examples: ["permdock skills update"],
|
|
62
62
|
docs: "skills",
|
|
63
63
|
effects: ["files"],
|
|
64
64
|
config: false,
|
|
65
|
-
load: async () => (await import("./skills-
|
|
65
|
+
load: async () => (await import("./skills-C9uKfSF5.js")).update
|
|
66
66
|
}),
|
|
67
67
|
leaf("list", "List the skills and where each is installed", {
|
|
68
68
|
examples: ["permdock skills list"],
|
|
69
69
|
docs: "skills",
|
|
70
70
|
effects: [],
|
|
71
71
|
config: false,
|
|
72
|
-
load: async () => (await import("./skills-
|
|
72
|
+
load: async () => (await import("./skills-C9uKfSF5.js")).list
|
|
73
73
|
})
|
|
74
74
|
]),
|
|
75
75
|
leaf("doctor", "Check a PermDock installation and print a fix for each finding", {
|
|
@@ -82,7 +82,7 @@ const SECTIONS = [
|
|
|
82
82
|
effects: ["files"],
|
|
83
83
|
config: true,
|
|
84
84
|
findings: true,
|
|
85
|
-
load: async () => (await import("./doctor-
|
|
85
|
+
load: async () => (await import("./doctor-LPMYjSqO.js")).doctor
|
|
86
86
|
}),
|
|
87
87
|
leaf("completion", "Print the shell completion script for bash, zsh or fish", {
|
|
88
88
|
examples: ["permdock completion zsh > ~/.zfunc/_permdock", "eval \"$(permdock completion bash)\""],
|
|
@@ -90,7 +90,7 @@ const SECTIONS = [
|
|
|
90
90
|
effects: [],
|
|
91
91
|
config: false,
|
|
92
92
|
shellOutput: true,
|
|
93
|
-
load: async () => (await import("./completion-
|
|
93
|
+
load: async () => (await import("./completion-_bc0OUQ-.js")).completion
|
|
94
94
|
})
|
|
95
95
|
]
|
|
96
96
|
},
|
|
@@ -106,14 +106,25 @@ const SECTIONS = [
|
|
|
106
106
|
docs: "collect",
|
|
107
107
|
effects: ["files"],
|
|
108
108
|
config: true,
|
|
109
|
-
load: async () => (await import("./collect-
|
|
109
|
+
load: async () => (await import("./collect-B80GYEot.js")).collect
|
|
110
110
|
}),
|
|
111
111
|
leaf("catalog", "Export the catalog as catalog JSON, JSON Schema or Markdown", {
|
|
112
112
|
examples: ["permdock catalog --out permissions.catalog.json", "permdock catalog --kind markdown"],
|
|
113
113
|
docs: "catalog",
|
|
114
114
|
effects: ["files"],
|
|
115
115
|
config: true,
|
|
116
|
-
load: async () => (await import("./catalog-
|
|
116
|
+
load: async () => (await import("./catalog-amPDr0JQ.js")).catalog
|
|
117
|
+
}),
|
|
118
|
+
leaf("gen", "Write typed constants, schemas, factories, hooks and messages from the policy", {
|
|
119
|
+
examples: [
|
|
120
|
+
"permdock gen",
|
|
121
|
+
"permdock gen --kind zod --kind factories",
|
|
122
|
+
"permdock gen --check"
|
|
123
|
+
],
|
|
124
|
+
docs: "gen",
|
|
125
|
+
effects: ["files"],
|
|
126
|
+
config: true,
|
|
127
|
+
load: async () => (await import("./gen-BFfzZSLH.js")).gen
|
|
117
128
|
}),
|
|
118
129
|
leaf("usage", "Report unused, ungranted and role-less permissions and conditions on undeclared fields", {
|
|
119
130
|
examples: ["permdock usage", "permdock usage --fail-on warning"],
|
|
@@ -121,14 +132,14 @@ const SECTIONS = [
|
|
|
121
132
|
effects: [],
|
|
122
133
|
config: true,
|
|
123
134
|
findings: true,
|
|
124
|
-
load: async () => (await import("./usage-
|
|
135
|
+
load: async () => (await import("./usage-CBzgwfIs.js")).usage
|
|
125
136
|
}),
|
|
126
137
|
leaf("diff", "Compare two policies or catalogs; exit 1 on a breaking change", {
|
|
127
138
|
examples: ["permdock diff main.catalog.json permissions.catalog.json", "permdock diff ./old-policy.ts ./src/policy.ts --impact"],
|
|
128
139
|
docs: "diff",
|
|
129
140
|
effects: [],
|
|
130
141
|
config: true,
|
|
131
|
-
load: async () => (await import("./diff-
|
|
142
|
+
load: async () => (await import("./diff-BwR1JdP2.js")).diff
|
|
132
143
|
}),
|
|
133
144
|
leaf("config", "Check permdock.config.ts for unknown keys, or print the effective config", {
|
|
134
145
|
examples: ["permdock config", "permdock config --print"],
|
|
@@ -136,7 +147,7 @@ const SECTIONS = [
|
|
|
136
147
|
effects: [],
|
|
137
148
|
config: true,
|
|
138
149
|
findings: true,
|
|
139
|
-
load: async () => (await import("./config-
|
|
150
|
+
load: async () => (await import("./config-D5XrLWpk.js")).config
|
|
140
151
|
})
|
|
141
152
|
]
|
|
142
153
|
},
|
|
@@ -153,14 +164,14 @@ const SECTIONS = [
|
|
|
153
164
|
"network"
|
|
154
165
|
],
|
|
155
166
|
config: true,
|
|
156
|
-
load: async () => (await import("./rls-
|
|
167
|
+
load: async () => (await import("./rls-Ba9wN0SP.js")).generate
|
|
157
168
|
}),
|
|
158
169
|
leaf("import", "Turn existing RLS policies into a generated definition", {
|
|
159
170
|
examples: ["permdock rls import --sql schema.sql --out src/permissions.generated.ts", "permdock rls import --db-url-stdin --out src/permissions.generated.ts"],
|
|
160
171
|
docs: "rls",
|
|
161
172
|
effects: ["files", "database:read"],
|
|
162
173
|
config: true,
|
|
163
|
-
load: async () => (await import("./rls-
|
|
174
|
+
load: async () => (await import("./rls-Ba9wN0SP.js")).importPolicies
|
|
164
175
|
}),
|
|
165
176
|
leaf("verify", "Run the fixtures against the policies, or compare a live database", {
|
|
166
177
|
examples: [
|
|
@@ -172,21 +183,21 @@ const SECTIONS = [
|
|
|
172
183
|
effects: ["files", "database:read"],
|
|
173
184
|
config: true,
|
|
174
185
|
findings: true,
|
|
175
|
-
load: async () => (await import("./rls-
|
|
186
|
+
load: async () => (await import("./rls-Ba9wN0SP.js")).verify
|
|
176
187
|
}),
|
|
177
188
|
leaf("migrate", "Rewrite hand-written policies onto the generated helpers", {
|
|
178
189
|
examples: ["permdock rls migrate --sql supabase/migrations --dry-run", "permdock rls migrate --sql supabase/migrations"],
|
|
179
190
|
docs: "rls",
|
|
180
191
|
effects: ["rewrite", "files"],
|
|
181
192
|
config: true,
|
|
182
|
-
load: async () => (await import("./rls-
|
|
193
|
+
load: async () => (await import("./rls-Ba9wN0SP.js")).migrate
|
|
183
194
|
}),
|
|
184
195
|
leaf("explain", "Show the tables, membership sources and triggers the SQL binds to", {
|
|
185
196
|
examples: ["permdock rls explain", "permdock rls explain --db-url-stdin --json"],
|
|
186
197
|
docs: "rls",
|
|
187
198
|
effects: ["database:read"],
|
|
188
199
|
config: true,
|
|
189
|
-
load: async () => (await import("./rls-
|
|
200
|
+
load: async () => (await import("./rls-Ba9wN0SP.js")).explain
|
|
190
201
|
})
|
|
191
202
|
]),
|
|
192
203
|
group("supabase", "Generate the Supabase Custom Access Token Hook, or inspect its manifest", "supabase", [group("hook", "The Custom Access Token Hook", "supabase", [leaf("generate", "Compile the membership sources into the hook migration", {
|
|
@@ -194,26 +205,26 @@ const SECTIONS = [
|
|
|
194
205
|
docs: "supabase",
|
|
195
206
|
effects: ["files", "database:read"],
|
|
196
207
|
config: true,
|
|
197
|
-
load: async () => (await import("./supabase-
|
|
208
|
+
load: async () => (await import("./supabase-SBs3MYUE.js")).hookGenerate
|
|
198
209
|
})]), leaf("inspect", "Print or write the hook and helper manifest", {
|
|
199
210
|
examples: ["permdock supabase inspect", "permdock supabase inspect --out"],
|
|
200
211
|
docs: "supabase",
|
|
201
212
|
effects: ["files"],
|
|
202
213
|
config: true,
|
|
203
|
-
load: async () => (await import("./supabase-
|
|
214
|
+
load: async () => (await import("./supabase-SBs3MYUE.js")).inspect
|
|
204
215
|
})]),
|
|
205
216
|
group("powersync", "Generate PowerSync Sync Streams from the policy, or verify them", "powersync", [leaf("generate", "Compile the read grants into sync-config.yaml", {
|
|
206
217
|
examples: ["permdock powersync generate", "permdock powersync generate --check"],
|
|
207
218
|
docs: "powersync",
|
|
208
219
|
effects: ["files"],
|
|
209
220
|
config: true,
|
|
210
|
-
load: async () => (await import("./powersync-
|
|
221
|
+
load: async () => (await import("./powersync-Bg8u-JcR.js")).generate
|
|
211
222
|
}), leaf("verify", "Fail on stale streams or a stream that syncs a denied row", {
|
|
212
223
|
examples: ["permdock powersync verify", "permdock powersync verify --db-url-stdin"],
|
|
213
224
|
docs: "powersync",
|
|
214
225
|
effects: ["database:read"],
|
|
215
226
|
config: true,
|
|
216
|
-
load: async () => (await import("./powersync-
|
|
227
|
+
load: async () => (await import("./powersync-Bg8u-JcR.js")).verify
|
|
217
228
|
})]),
|
|
218
229
|
group("scim", "Generate the Postgres tables postgresDirectoryStore keeps a SCIM directory in", "scim", [leaf("generate", "Write the tenant-keyed users, groups and members tables", {
|
|
219
230
|
examples: [
|
|
@@ -224,7 +235,7 @@ const SECTIONS = [
|
|
|
224
235
|
docs: "scim",
|
|
225
236
|
effects: ["files"],
|
|
226
237
|
config: true,
|
|
227
|
-
load: async () => (await import("./scim-
|
|
238
|
+
load: async () => (await import("./scim-D8YupzX1.js")).generate
|
|
228
239
|
})])
|
|
229
240
|
]
|
|
230
241
|
},
|
|
@@ -236,13 +247,13 @@ const SECTIONS = [
|
|
|
236
247
|
docs: "openapi",
|
|
237
248
|
effects: ["files"],
|
|
238
249
|
config: true,
|
|
239
|
-
load: async () => (await import("./openapi-
|
|
250
|
+
load: async () => (await import("./openapi-BIpw3Mb7.js")).emit
|
|
240
251
|
}), leaf("import", "Turn an OpenAPI document into a generated definition", {
|
|
241
252
|
examples: ["permdock openapi import --doc openapi.yaml --out src/permissions.generated.ts"],
|
|
242
253
|
docs: "openapi",
|
|
243
254
|
effects: ["files", "network"],
|
|
244
255
|
config: false,
|
|
245
|
-
load: async () => (await import("./openapi-
|
|
256
|
+
load: async () => (await import("./openapi-BIpw3Mb7.js")).importDocument
|
|
246
257
|
})]),
|
|
247
258
|
group("arazzo", "Check Arazzo workflows against the permissions", "arazzo", [leaf("check", "Resolve every Arazzo step to x-permdock-permissions", {
|
|
248
259
|
examples: ["permdock arazzo check --doc arazzo.json --openapi openapi.json"],
|
|
@@ -250,7 +261,7 @@ const SECTIONS = [
|
|
|
250
261
|
effects: [],
|
|
251
262
|
config: true,
|
|
252
263
|
findings: true,
|
|
253
|
-
load: async () => (await import("./arazzo-
|
|
264
|
+
load: async () => (await import("./arazzo-BpS7LnV0.js")).check
|
|
254
265
|
})]),
|
|
255
266
|
leaf("scan", "List authorization checks written without PermDock, to adopt it in an existing app", {
|
|
256
267
|
examples: ["permdock scan", "permdock scan --src app,lib --pattern isBeta"],
|
|
@@ -258,21 +269,21 @@ const SECTIONS = [
|
|
|
258
269
|
effects: [],
|
|
259
270
|
config: true,
|
|
260
271
|
findings: true,
|
|
261
|
-
load: async () => (await import("./scan-
|
|
272
|
+
load: async () => (await import("./scan-CRTj6fke.js")).scan
|
|
262
273
|
}),
|
|
263
274
|
group("casl", "Import CASL rules into a generated module", "casl", [leaf("import", "Turn CASL rules per role into a permissions and policy module", {
|
|
264
275
|
examples: ["permdock casl import --rules rules.json --out src/permissions.generated.ts"],
|
|
265
276
|
docs: "casl",
|
|
266
277
|
effects: ["files"],
|
|
267
278
|
config: false,
|
|
268
|
-
load: async () => (await import("./casl-
|
|
279
|
+
load: async () => (await import("./casl-C4OINZHI.js")).caslImport
|
|
269
280
|
})]),
|
|
270
281
|
group("casbin", "Import a Casbin model and policy into a generated module", "casbin", [leaf("import", "Turn a Casbin RBAC model and policy into a permissions and policy module", {
|
|
271
282
|
examples: ["permdock casbin import --model model.conf --policy policy.csv --out src/permissions.generated.ts"],
|
|
272
283
|
docs: "casbin",
|
|
273
284
|
effects: ["files"],
|
|
274
285
|
config: false,
|
|
275
|
-
load: async () => (await import("./casbin-
|
|
286
|
+
load: async () => (await import("./casbin-B7_yS-oo.js")).casbinImport
|
|
276
287
|
})])
|
|
277
288
|
]
|
|
278
289
|
},
|
|
@@ -284,34 +295,34 @@ const SECTIONS = [
|
|
|
284
295
|
docs: "login",
|
|
285
296
|
effects: ["network", "files"],
|
|
286
297
|
config: false,
|
|
287
|
-
load: async () => (await import("./login-
|
|
298
|
+
load: async () => (await import("./login-CfImTJGb.js")).login
|
|
288
299
|
}),
|
|
289
300
|
leaf("logout", "Revoke and delete the stored PermDock Cloud login", {
|
|
290
301
|
examples: ["permdock logout"],
|
|
291
302
|
docs: "login",
|
|
292
303
|
effects: ["network", "files"],
|
|
293
304
|
config: false,
|
|
294
|
-
load: async () => (await import("./login-
|
|
305
|
+
load: async () => (await import("./login-CfImTJGb.js")).logout
|
|
295
306
|
}),
|
|
296
307
|
leaf("whoami", "Print the PermDock Cloud identity the CLI acts as", {
|
|
297
308
|
examples: ["permdock whoami", "permdock whoami --json"],
|
|
298
309
|
docs: "login",
|
|
299
310
|
effects: [],
|
|
300
311
|
config: false,
|
|
301
|
-
load: async () => (await import("./login-
|
|
312
|
+
load: async () => (await import("./login-CfImTJGb.js")).whoami
|
|
302
313
|
}),
|
|
303
314
|
group("cloud", "Publish to or pull from a PermDock Cloud project", "cloud", [leaf("push", "Publish the catalog, policy and manifest to a Cloud project", {
|
|
304
315
|
examples: ["permdock cloud push --dry-run", "permdock cloud push --project prj_123"],
|
|
305
316
|
docs: "cloud",
|
|
306
317
|
effects: ["network", "cloud:write"],
|
|
307
318
|
config: true,
|
|
308
|
-
load: async () => (await import("./cloud-
|
|
319
|
+
load: async () => (await import("./cloud-3kWfjnYy.js")).push
|
|
309
320
|
}), leaf("pull", "Write a Cloud project's published catalog and manifest", {
|
|
310
321
|
examples: ["permdock cloud pull --project prj_123"],
|
|
311
322
|
docs: "cloud",
|
|
312
323
|
effects: ["network", "files"],
|
|
313
324
|
config: true,
|
|
314
|
-
load: async () => (await import("./cloud-
|
|
325
|
+
load: async () => (await import("./cloud-3kWfjnYy.js")).pull
|
|
315
326
|
})])
|
|
316
327
|
]
|
|
317
328
|
},
|
|
@@ -322,7 +333,7 @@ const SECTIONS = [
|
|
|
322
333
|
docs: "codemod",
|
|
323
334
|
effects: ["rewrite"],
|
|
324
335
|
config: false,
|
|
325
|
-
load: async () => (await import("./codemod-
|
|
336
|
+
load: async () => (await import("./codemod-D9Aiii1r.js")).codemod
|
|
326
337
|
})]
|
|
327
338
|
}
|
|
328
339
|
];
|
|
@@ -334,7 +345,7 @@ const COMPLETE_LEAF = leaf("__complete", "Print completion candidates for a part
|
|
|
334
345
|
config: false,
|
|
335
346
|
shellOutput: true,
|
|
336
347
|
hidden: true,
|
|
337
|
-
load: async () => (await import("./completion-
|
|
348
|
+
load: async () => (await import("./completion-_bc0OUQ-.js")).complete
|
|
338
349
|
});
|
|
339
350
|
const ROOT = group("permdock", "Collect, export, diff and check the permissions a PermDock policy declares", "", [...SECTIONS.flatMap((section) => section.entries), COMPLETE_LEAF]);
|
|
340
351
|
/** Each leaf with its path from the root, in manifest order. */
|
|
@@ -345,8 +356,8 @@ function leaves(entry = ROOT, path = []) {
|
|
|
345
356
|
}] : leaves(child, [...path, child.name]));
|
|
346
357
|
}
|
|
347
358
|
/**
|
|
348
|
-
* Walks positional tokens down the tree until a leaf. Flags may sit
|
|
349
|
-
*
|
|
359
|
+
* Walks positional tokens down the tree until a leaf. Flags may sit anywhere;
|
|
360
|
+
* only bare words name a child.
|
|
350
361
|
*/
|
|
351
362
|
function resolve(argv) {
|
|
352
363
|
let node = ROOT;
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* What `permdock supabase inspect --json` prints and `--out` writes to
|
|
4
4
|
* `permdock.manifest.json`: the contract between the generated hook and SQL
|
|
5
|
-
* helpers and a package that writes policies or claims next to them.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* helpers and a package that writes policies or claims next to them. `version`
|
|
6
|
+
* is the major of this shape; a field is only ever added within it.
|
|
7
|
+
* `schemas/supabase-manifest-v1.json` is its JSON Schema.
|
|
8
8
|
*/
|
|
9
9
|
type SupabaseHookManifest = {
|
|
10
10
|
readonly $schema: "https://permdock.com/schemas/supabase-manifest-v1.json";
|
|
@@ -41,14 +41,18 @@ type SupabaseHookManifest = {
|
|
|
41
41
|
/**
|
|
42
42
|
* With `authzVersion`, the function that bumps the listed users' `authz_ver`,
|
|
43
43
|
* for a membership source outside the hook. It is `security definer` and no
|
|
44
|
-
* client role may execute it: call it from a trigger owned by the table's
|
|
44
|
+
* client role may execute it: call it from a trigger owned by the table's
|
|
45
|
+
* owner.
|
|
45
46
|
*/
|
|
46
47
|
readonly authzVersionBump?: {
|
|
47
48
|
readonly schema: string;
|
|
48
49
|
readonly function: "permdock_bump_authz_version_for";
|
|
49
50
|
readonly args: "p_users uuid[]";
|
|
50
51
|
};
|
|
51
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* The Management API fields that make a hosted project call the hook;
|
|
54
|
+
* `permdock supabase inspect` adds them.
|
|
55
|
+
*/
|
|
52
56
|
readonly managementApi?: {
|
|
53
57
|
readonly hook_custom_access_token_enabled: true;
|
|
54
58
|
readonly hook_custom_access_token_uri: string;
|
|
@@ -73,6 +77,51 @@ type SupabaseHookManifest = {
|
|
|
73
77
|
* SDK that lacks one cannot serve this policy.
|
|
74
78
|
*/
|
|
75
79
|
readonly requires?: SupabaseManifestRequires;
|
|
80
|
+
/**
|
|
81
|
+
* The SQL names the generated RLS exposes, as `resolveNames` gives them.
|
|
82
|
+
* Absent from a manifest written before 0.8.
|
|
83
|
+
*/
|
|
84
|
+
readonly names?: SupabaseManifestNames;
|
|
85
|
+
};
|
|
86
|
+
/** The SQL helpers named after one scope, unqualified. */
|
|
87
|
+
type SupabaseManifestScopeNames = {
|
|
88
|
+
readonly permittedIds: string;
|
|
89
|
+
readonly permittedIdsFor: string;
|
|
90
|
+
readonly memberIds: string;
|
|
91
|
+
readonly memberIdsFor: string;
|
|
92
|
+
/**
|
|
93
|
+
* Only on the team scope (`team` or `teams`), for better-supabase's
|
|
94
|
+
* `teamIdsOf`.
|
|
95
|
+
*/
|
|
96
|
+
readonly memberIdsOf?: string;
|
|
97
|
+
readonly permittedUsers: string;
|
|
98
|
+
};
|
|
99
|
+
/** The SQL objects named after one resource, unqualified. */
|
|
100
|
+
type SupabaseManifestResourceNames = {
|
|
101
|
+
/** The table `rls.tables` maps, as written there. */
|
|
102
|
+
readonly table?: string;
|
|
103
|
+
/** Graph resources only: `permitted_<resource>_ids` and its restriction check. */
|
|
104
|
+
readonly permittedIds?: string;
|
|
105
|
+
readonly restricted?: string;
|
|
106
|
+
/** With `rls.rowHelpers` naming the resource. */
|
|
107
|
+
readonly rows?: string;
|
|
108
|
+
readonly row?: string;
|
|
109
|
+
/** With `rls.fields` and a mapped table. */
|
|
110
|
+
readonly visible?: string;
|
|
111
|
+
readonly visibleFields?: string;
|
|
112
|
+
readonly mask?: string;
|
|
113
|
+
};
|
|
114
|
+
type SupabaseManifestNames = {
|
|
115
|
+
readonly schema: string;
|
|
116
|
+
readonly gucPrefix: string;
|
|
117
|
+
readonly claims: {
|
|
118
|
+
readonly tenant: string;
|
|
119
|
+
readonly role: string;
|
|
120
|
+
};
|
|
121
|
+
/** The scope better-supabase reads as its teams, when one is declared. */
|
|
122
|
+
readonly teamScope?: string;
|
|
123
|
+
readonly scopes: Readonly<Record<string, SupabaseManifestScopeNames>>;
|
|
124
|
+
readonly resources: Readonly<Record<string, SupabaseManifestResourceNames>>;
|
|
76
125
|
};
|
|
77
126
|
type SupabaseManifestRequires = {
|
|
78
127
|
/** The capability-matrix release tag, `capability-matrix-v1.<minor>.<patch>`. */
|
|
@@ -94,33 +143,54 @@ type SupabaseManifestColumn = {
|
|
|
94
143
|
type SupabaseManifestValue = SupabaseManifestColumn | {
|
|
95
144
|
readonly value: string | readonly string[];
|
|
96
145
|
};
|
|
97
|
-
/**
|
|
146
|
+
/**
|
|
147
|
+
* A column that references another table: the value (role key or user id) is
|
|
148
|
+
* `column` of `table`, matched on `id`.
|
|
149
|
+
*/
|
|
98
150
|
type SupabaseManifestThrough = {
|
|
99
151
|
readonly table: string;
|
|
100
152
|
readonly id: string;
|
|
101
153
|
readonly column: string;
|
|
102
154
|
};
|
|
103
|
-
/**
|
|
155
|
+
/**
|
|
156
|
+
* A role column (with `through` when it references a roles table), or the fixed
|
|
157
|
+
* roles every row holds.
|
|
158
|
+
*/
|
|
104
159
|
type SupabaseManifestRole = SupabaseManifestValue | (SupabaseManifestColumn & {
|
|
105
160
|
readonly through: SupabaseManifestThrough;
|
|
106
161
|
}) | (SupabaseManifestColumn & {
|
|
107
|
-
/**
|
|
162
|
+
/**
|
|
163
|
+
* Each column value to the role key it stands for, or `null` for no role;
|
|
164
|
+
* an unlisted value is no role.
|
|
165
|
+
*/
|
|
108
166
|
readonly map: Readonly<Record<string, string | null>>;
|
|
109
167
|
});
|
|
110
168
|
/** One `tableMembershipSource` or `junctionMembershipSource` source. */
|
|
111
169
|
type SupabaseManifestMembership = {
|
|
112
170
|
/** `schema.table`, `public` when the source names no schema. */
|
|
113
171
|
readonly table: string;
|
|
114
|
-
/**
|
|
172
|
+
/**
|
|
173
|
+
* The user id column, with `through` when it references the table that holds
|
|
174
|
+
* the user id.
|
|
175
|
+
*/
|
|
115
176
|
readonly user: SupabaseManifestColumn | (SupabaseManifestColumn & {
|
|
116
177
|
readonly through: SupabaseManifestThrough;
|
|
117
178
|
});
|
|
118
|
-
/**
|
|
179
|
+
/**
|
|
180
|
+
* A column for `tableMembershipSource`, the fixed scope for
|
|
181
|
+
* `junctionMembershipSource`.
|
|
182
|
+
*/
|
|
119
183
|
readonly scope: SupabaseManifestValue;
|
|
120
184
|
readonly id: SupabaseManifestColumn;
|
|
121
|
-
/**
|
|
185
|
+
/**
|
|
186
|
+
* A role column, the fixed roles every row holds, or several role columns
|
|
187
|
+
* whose keys the row holds together.
|
|
188
|
+
*/
|
|
122
189
|
readonly role: SupabaseManifestRole | readonly SupabaseManifestRole[];
|
|
123
|
-
/**
|
|
190
|
+
/**
|
|
191
|
+
* A `jsonb` column of ancestor ids keyed by scope, or one column per ancestor
|
|
192
|
+
* scope.
|
|
193
|
+
*/
|
|
124
194
|
readonly within?: SupabaseManifestColumn | {
|
|
125
195
|
readonly columns: Readonly<Record<string, string>>;
|
|
126
196
|
};
|
|
@@ -135,10 +205,16 @@ type SupabaseManifestHelper = {
|
|
|
135
205
|
/** The argument list, `p_grant text`, or `''` for none. */
|
|
136
206
|
readonly args: string;
|
|
137
207
|
readonly returns: string;
|
|
138
|
-
/**
|
|
208
|
+
/**
|
|
209
|
+
* The roles granted `execute`; a field view `anon` reads adds `anon` to the
|
|
210
|
+
* `authenticated` ones.
|
|
211
|
+
*/
|
|
139
212
|
readonly execute: readonly string[];
|
|
140
213
|
};
|
|
141
|
-
/**
|
|
214
|
+
/**
|
|
215
|
+
* A table whose row says whether a user or a scope instance is active
|
|
216
|
+
* (`rls.suspension`); a missing row counts as suspended.
|
|
217
|
+
*/
|
|
142
218
|
type SupabaseManifestActiveRow = {
|
|
143
219
|
/** `schema.table`. */
|
|
144
220
|
readonly table: string;
|
|
@@ -149,12 +225,18 @@ type SupabaseManifestActiveRow = {
|
|
|
149
225
|
/** A status column; only a row whose value is in `active` is active. */
|
|
150
226
|
readonly status?: string;
|
|
151
227
|
readonly active?: readonly string[];
|
|
152
|
-
/**
|
|
228
|
+
/**
|
|
229
|
+
* A scope only: the permission keys members of a suspended instance still
|
|
230
|
+
* hold.
|
|
231
|
+
*/
|
|
153
232
|
readonly keep?: readonly string[];
|
|
154
233
|
};
|
|
155
234
|
type SupabaseManifestRls = {
|
|
156
235
|
readonly schema: string;
|
|
157
|
-
/**
|
|
236
|
+
/**
|
|
237
|
+
* Where the helpers read roles and memberships: the claims (`jwt`) or the
|
|
238
|
+
* tables (`database`).
|
|
239
|
+
*/
|
|
158
240
|
readonly mode: "jwt" | "database";
|
|
159
241
|
readonly tenantClaim: string;
|
|
160
242
|
/** The declared scopes, root first, with the Postgres type of their ids. */
|
|
@@ -164,13 +246,14 @@ type SupabaseManifestRls = {
|
|
|
164
246
|
readonly within?: string;
|
|
165
247
|
}[];
|
|
166
248
|
/**
|
|
167
|
-
* Every function `rls generate` writes for policies and trusted SQL to
|
|
168
|
-
*
|
|
169
|
-
* `permdock_user_id`, the caller's user id; in `database` mode
|
|
249
|
+
* Every function `rls generate` writes for policies and trusted SQL to call:
|
|
250
|
+
* `permdock_has`, `permitted_<scope>_ids`, `member_<scope>_ids` and
|
|
251
|
+
* `permdock_user_id`, the caller's user id; in `database` mode
|
|
252
|
+
* `permdock_has_for`, `permitted_<scope>_ids_for` and
|
|
170
253
|
* `member_<scope>_ids_for`; and when a role declares `assigns`,
|
|
171
254
|
* `permdock_can_assign`, `permdock_can_assign_any` and, with custom roles,
|
|
172
|
-
* `permdock_can_assign_custom_role`, each with its `_for` form where one
|
|
173
|
-
*
|
|
255
|
+
* `permdock_can_assign_custom_role`, each with its `_for` form where one is
|
|
256
|
+
* written. A helper whose `execute` is empty is for trusted SQL only.
|
|
174
257
|
*/
|
|
175
258
|
readonly helpers: readonly SupabaseManifestHelper[];
|
|
176
259
|
/**
|
|
@@ -179,7 +262,10 @@ type SupabaseManifestRls = {
|
|
|
179
262
|
* `memberships`.
|
|
180
263
|
*/
|
|
181
264
|
readonly memberships: readonly SupabaseManifestMembership[];
|
|
182
|
-
/**
|
|
265
|
+
/**
|
|
266
|
+
* Whether custom roles live in the helpers' tables (`rls.customRoles` in
|
|
267
|
+
* `database` mode).
|
|
268
|
+
*/
|
|
183
269
|
readonly customRoles?: boolean;
|
|
184
270
|
/** The global-roles table the hook and the `database` mode helpers read. */
|
|
185
271
|
readonly roles?: {
|
|
@@ -187,7 +273,10 @@ type SupabaseManifestRls = {
|
|
|
187
273
|
readonly user: SupabaseManifestColumn;
|
|
188
274
|
readonly role: SupabaseManifestRole | readonly SupabaseManifestRole[];
|
|
189
275
|
};
|
|
190
|
-
/**
|
|
276
|
+
/**
|
|
277
|
+
* `rls.suspension`: a suspended user, or a suspended scope instance, holds
|
|
278
|
+
* nothing but its scope's `keep`.
|
|
279
|
+
*/
|
|
191
280
|
readonly suspension?: {
|
|
192
281
|
readonly users?: SupabaseManifestActiveRow;
|
|
193
282
|
readonly scopes?: Readonly<Record<string, SupabaseManifestActiveRow>>;
|
|
@@ -196,14 +285,17 @@ type SupabaseManifestRls = {
|
|
|
196
285
|
};
|
|
197
286
|
};
|
|
198
287
|
/**
|
|
199
|
-
* `rls.assignments`: the tables whose client writes the assignment
|
|
200
|
-
*
|
|
201
|
-
*
|
|
288
|
+
* `rls.assignments`: the tables whose client writes the assignment triggers
|
|
289
|
+
* check against `permdock_can_assign_any`, so SQL writing rows there needs no
|
|
290
|
+
* role-ceiling check of its own.
|
|
202
291
|
*/
|
|
203
292
|
readonly assignments?: {
|
|
204
293
|
readonly tables: readonly string[];
|
|
205
294
|
};
|
|
206
|
-
/**
|
|
295
|
+
/**
|
|
296
|
+
* `rls.tokenScopes`: the helpers narrow a delegated token by its `scope`
|
|
297
|
+
* claim through `permdock_token_scope_allows`.
|
|
298
|
+
*/
|
|
207
299
|
readonly tokenScopes?: boolean;
|
|
208
300
|
readonly apiKeys?: {
|
|
209
301
|
readonly claim: string;
|
|
@@ -219,16 +311,19 @@ type SupabaseManifestRls = {
|
|
|
219
311
|
* `authzVersion` or hook `memberships`.
|
|
220
312
|
*/
|
|
221
313
|
type SupabaseDatabaseManifest = Omit<SupabaseHookManifest, "authzVersion" | "authzVersionBump" | "budget" | "claims" | "hook" | "managementApi" | "memberships">;
|
|
222
|
-
/**
|
|
314
|
+
/**
|
|
315
|
+
* What `parseSupabaseManifest` returns: a manifest with or without the token
|
|
316
|
+
* hook.
|
|
317
|
+
*/
|
|
223
318
|
type SupabaseManifest = SupabaseDatabaseManifest | SupabaseHookManifest;
|
|
224
319
|
/** Whether the manifest describes a token hook. */
|
|
225
320
|
declare function hasTokenHook(manifest: SupabaseManifest): manifest is SupabaseHookManifest;
|
|
226
321
|
/**
|
|
227
322
|
* Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
|
|
228
323
|
* validates it against `schemas/supabase-manifest-v1.json`. Returns a
|
|
229
|
-
* deep-frozen copy built from own keys; throws `PermDockValidationError`
|
|
230
|
-
*
|
|
324
|
+
* deep-frozen copy built from own keys; throws `PermDockValidationError` with
|
|
325
|
+
* every issue, so a manifest of another major is refused.
|
|
231
326
|
*/
|
|
232
327
|
declare function parseSupabaseManifest(json: unknown): SupabaseManifest;
|
|
233
328
|
//#endregion
|
|
234
|
-
export { SupabaseManifestActiveRow as a, SupabaseManifestMembership as c,
|
|
329
|
+
export { hasTokenHook as _, SupabaseManifestActiveRow as a, SupabaseManifestMembership as c, SupabaseManifestResourceNames as d, SupabaseManifestRls as f, SupabaseManifestValue as g, SupabaseManifestThrough as h, SupabaseManifest as i, SupabaseManifestNames as l, SupabaseManifestScopeNames as m, SupabaseHookClaim as n, SupabaseManifestColumn as o, SupabaseManifestRole as p, SupabaseHookManifest as r, SupabaseManifestHelper as s, SupabaseDatabaseManifest as t, SupabaseManifestRequires as u, parseSupabaseManifest as v };
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { n as freezeDeep } from "./freeze-
|
|
1
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
2
2
|
//#region src/supabase/manifest-schema.ts
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* `schemas/supabase-manifest-v1.json`, which `parseSupabaseManifest` checks
|
|
5
|
+
* against; a test keeps the two equal.
|
|
6
|
+
*/
|
|
4
7
|
const supabaseManifestSchema = freezeDeep({
|
|
5
8
|
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
6
9
|
$id: "https://permdock.com/schemas/supabase-manifest-v1.json",
|
|
@@ -274,6 +277,44 @@ const supabaseManifestSchema = freezeDeep({
|
|
|
274
277
|
grants: { const: "v1" }
|
|
275
278
|
}
|
|
276
279
|
},
|
|
280
|
+
names: {
|
|
281
|
+
description: "The SQL names the generated RLS exposes to application SQL, unqualified, in `schema`: per scope and per resource, as `resolveNames` gives them. Absent from a manifest written before 0.8.",
|
|
282
|
+
type: "object",
|
|
283
|
+
required: [
|
|
284
|
+
"schema",
|
|
285
|
+
"gucPrefix",
|
|
286
|
+
"claims",
|
|
287
|
+
"scopes",
|
|
288
|
+
"resources"
|
|
289
|
+
],
|
|
290
|
+
properties: {
|
|
291
|
+
schema: { type: "string" },
|
|
292
|
+
gucPrefix: { type: "string" },
|
|
293
|
+
claims: {
|
|
294
|
+
type: "object",
|
|
295
|
+
required: ["tenant", "role"],
|
|
296
|
+
properties: {
|
|
297
|
+
tenant: { type: "string" },
|
|
298
|
+
role: { type: "string" }
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
teamScope: { type: "string" },
|
|
302
|
+
scopes: {
|
|
303
|
+
type: "object",
|
|
304
|
+
additionalProperties: {
|
|
305
|
+
type: "object",
|
|
306
|
+
additionalProperties: { type: "string" }
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
resources: {
|
|
310
|
+
type: "object",
|
|
311
|
+
additionalProperties: {
|
|
312
|
+
type: "object",
|
|
313
|
+
additionalProperties: { type: "string" }
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
},
|
|
277
318
|
requires: {
|
|
278
319
|
description: "The supabase/sdk capability-matrix feature ids the hook, the helpers and subjectFromSupabase depend on, as of the matrix release tag.",
|
|
279
320
|
type: "object",
|
|
@@ -363,7 +404,7 @@ const supabaseManifestSchema = freezeDeep({
|
|
|
363
404
|
},
|
|
364
405
|
helperName: {
|
|
365
406
|
type: "string",
|
|
366
|
-
pattern: "^(permdock_has(_for)?|permitted_[a-z][a-z0-9_]*_(ids|permission_keys)(_for)?|permitted_[a-z][a-z0-9_]*_users|member_[a-z][a-z0-9_]*_ids(_for)?|permdock_can_assign(_any|_custom_role)?(_for)?|permdock_api_key_allows|permdock_token_scope_allows|permdock_actor_may_write|permdock_is_approver|permdock_user_id)$"
|
|
407
|
+
pattern: "^(permdock_has(_for)?|permitted_[a-z][a-z0-9_]*_(ids|permission_keys)(_for)?|permitted_[a-z][a-z0-9_]*_users|member_[a-z][a-z0-9_]*_ids(_for|_of)?|permdock_can_assign(_any|_custom_role)?(_for)?|permdock_api_key_allows|permdock_token_scope_allows|permdock_actor_may_write|permdock_is_approver|permdock_user_id)$"
|
|
367
408
|
},
|
|
368
409
|
column: {
|
|
369
410
|
type: "object",
|