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
package/dist/config-CoQHDrDi.js
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as CliError } from "./errors-DpP_U6Bf.js";
|
|
3
|
-
import { existsSync } from "node:fs";
|
|
4
|
-
import { relative, resolve } from "node:path";
|
|
5
|
-
//#region src/cli/project/config-schema.ts
|
|
6
|
-
const SECTIONS = {
|
|
7
|
-
collect: {
|
|
8
|
-
srcPath: true,
|
|
9
|
-
out: true,
|
|
10
|
-
barrel: true
|
|
11
|
-
},
|
|
12
|
-
catalog: { out: true },
|
|
13
|
-
openapi: { doc: true },
|
|
14
|
-
rls: {
|
|
15
|
-
tables: true,
|
|
16
|
-
dialect: true,
|
|
17
|
-
memberships: true,
|
|
18
|
-
membershipSources: true,
|
|
19
|
-
suspension: true,
|
|
20
|
-
functions: true,
|
|
21
|
-
inlineFunctions: true,
|
|
22
|
-
force: true,
|
|
23
|
-
fixtures: true,
|
|
24
|
-
verify: true,
|
|
25
|
-
tenantClaim: true,
|
|
26
|
-
tenantType: true,
|
|
27
|
-
teamType: true,
|
|
28
|
-
scopeTypes: true,
|
|
29
|
-
roleClaim: true,
|
|
30
|
-
roleValues: true,
|
|
31
|
-
gucPrefix: true,
|
|
32
|
-
out: true,
|
|
33
|
-
drizzle: true,
|
|
34
|
-
prisma: true,
|
|
35
|
-
schema: true,
|
|
36
|
-
authorize: true,
|
|
37
|
-
policyPerRole: true,
|
|
38
|
-
customRoles: true,
|
|
39
|
-
triggers: true,
|
|
40
|
-
audit: true,
|
|
41
|
-
capabilities: true,
|
|
42
|
-
anonymousSignIns: true,
|
|
43
|
-
fields: true,
|
|
44
|
-
revokeColumns: true,
|
|
45
|
-
policyName: true,
|
|
46
|
-
rbac: true,
|
|
47
|
-
roles: true,
|
|
48
|
-
actions: true,
|
|
49
|
-
helpersOnly: true,
|
|
50
|
-
rowHelpers: true,
|
|
51
|
-
seeds: true,
|
|
52
|
-
treeValues: true,
|
|
53
|
-
trustedReaders: true,
|
|
54
|
-
migrate: true,
|
|
55
|
-
shims: true,
|
|
56
|
-
tenants: true,
|
|
57
|
-
customRoleWrites: true,
|
|
58
|
-
anonExecute: true,
|
|
59
|
-
assignments: true,
|
|
60
|
-
approvals: true,
|
|
61
|
-
jsonSchema: true,
|
|
62
|
-
ownershipTriggers: true,
|
|
63
|
-
readOnlyActors: true,
|
|
64
|
-
apiKeys: true,
|
|
65
|
-
tokenScopes: true,
|
|
66
|
-
realtime: true,
|
|
67
|
-
storage: true
|
|
68
|
-
},
|
|
69
|
-
supabase: {
|
|
70
|
-
hook: true,
|
|
71
|
-
schemas: true
|
|
72
|
-
},
|
|
73
|
-
powersync: {
|
|
74
|
-
out: true,
|
|
75
|
-
resources: true,
|
|
76
|
-
action: true,
|
|
77
|
-
manifest: true
|
|
78
|
-
},
|
|
79
|
-
doctor: {
|
|
80
|
-
sensitiveActions: true,
|
|
81
|
-
memberships: true,
|
|
82
|
-
credentials: true,
|
|
83
|
-
clientEntries: true,
|
|
84
|
-
migrations: true,
|
|
85
|
-
claims: true,
|
|
86
|
-
srcPath: true,
|
|
87
|
-
sharedTables: true
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
const TOP_LEVEL = /* @__PURE__ */ new Set([
|
|
91
|
-
"permissions",
|
|
92
|
-
"policy",
|
|
93
|
-
"operations",
|
|
94
|
-
...Object.keys(SECTIONS)
|
|
95
|
-
]);
|
|
96
|
-
function isSection(key) {
|
|
97
|
-
return Object.hasOwn(SECTIONS, key);
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Checks the shape a command relies on before it reads the config: module
|
|
101
|
-
* paths are strings and each section is an object. A key PermDock does not
|
|
102
|
-
* read is a warning, so a config written for a newer version still loads.
|
|
103
|
-
*/
|
|
104
|
-
function parseConfig(value, file) {
|
|
105
|
-
if (value === void 0) return {
|
|
106
|
-
config: {},
|
|
107
|
-
warnings: []
|
|
108
|
-
};
|
|
109
|
-
if (!isRecord(value)) throw new CliError("usage", `PermDock CLI: ${file} must export a config object as default (use defineConfig)`);
|
|
110
|
-
const warnings = [];
|
|
111
|
-
const unknown = (path, known) => `${file}: unknown key ${path}; PermDock reads ${[...known].join(", ")}`;
|
|
112
|
-
for (const [key, entry] of Object.entries(value)) {
|
|
113
|
-
if (key === "permissions" || key === "policy" || key === "operations") {
|
|
114
|
-
if (entry !== void 0 && typeof entry !== "string") throw new CliError("usage", `PermDock CLI: ${file}: ${key} must be a module path string`);
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
if (!isSection(key)) {
|
|
118
|
-
warnings.push(unknown(key, TOP_LEVEL));
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
if (entry === void 0) continue;
|
|
122
|
-
if (!isRecord(entry)) throw new CliError("usage", `PermDock CLI: ${file}: ${key} must be an object`);
|
|
123
|
-
const known = SECTIONS[key];
|
|
124
|
-
for (const child of Object.keys(entry)) if (!Object.hasOwn(known, child)) warnings.push(unknown(`${key}.${child}`, Object.keys(known)));
|
|
125
|
-
}
|
|
126
|
-
return {
|
|
127
|
-
config: value,
|
|
128
|
-
warnings
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
//#endregion
|
|
132
|
-
//#region src/cli/project/config.ts
|
|
133
|
-
const CONFIG_FILES = [
|
|
134
|
-
"permdock.config.ts",
|
|
135
|
-
"permdock.config.mts",
|
|
136
|
-
"permdock.config.js",
|
|
137
|
-
"permdock.config.mjs"
|
|
138
|
-
];
|
|
139
|
-
function defineConfig(config) {
|
|
140
|
-
return config;
|
|
141
|
-
}
|
|
142
|
-
function isConfigFile(name) {
|
|
143
|
-
return CONFIG_FILES.some((file) => file === name);
|
|
144
|
-
}
|
|
145
|
-
async function readConfig(cwd, fromFlag, options) {
|
|
146
|
-
const path = fromFlag ? resolve(cwd, fromFlag) : CONFIG_FILES.map((name) => resolve(cwd, name)).find((file) => existsSync(file));
|
|
147
|
-
if (path === void 0) return {
|
|
148
|
-
config: {},
|
|
149
|
-
warnings: [],
|
|
150
|
-
file: void 0
|
|
151
|
-
};
|
|
152
|
-
if (!existsSync(path)) throw new CliError("usage", `PermDock CLI: config file not found: ${path}`, { code: "config_not_found" });
|
|
153
|
-
const { loadModule, pickNamed } = await import("./load-DrMHXzgN.js");
|
|
154
|
-
return {
|
|
155
|
-
...parseConfig(pickNamed(await loadModule(path, options), ["default"]), relative(cwd, path).replaceAll("\\", "/")),
|
|
156
|
-
file: path
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
async function loadConfig(cwd, fromFlag, options) {
|
|
160
|
-
return (await readConfig(cwd, fromFlag, options)).config;
|
|
161
|
-
}
|
|
162
|
-
function resolveCwd(cwd, fallback) {
|
|
163
|
-
return cwd === void 0 ? fallback : resolve(fallback, cwd);
|
|
164
|
-
}
|
|
165
|
-
//#endregion
|
|
166
|
-
export { resolveCwd as a, readConfig as i, isConfigFile as n, loadConfig as r, defineConfig as t };
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Ln as Decision } from "./policy-types-B-F-qAZk.js";
|
|
2
|
-
import { u as Permission } from "./permission-types-DhNEmoRG.js";
|
|
3
|
-
//#region src/agent/denied-text.d.ts
|
|
4
|
-
/** What an agent adapter's `deniedText` receives: the refusal and the text PermDock wrote for it. */
|
|
5
|
-
type DeniedTextEvent = {
|
|
6
|
-
readonly decision: Exclude<Decision, {
|
|
7
|
-
readonly outcome: "granted";
|
|
8
|
-
}> | null;
|
|
9
|
-
readonly permission: Permission | undefined;
|
|
10
|
-
readonly text: string;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Replaces the human-readable text of a refusal, and nothing else: the
|
|
14
|
-
* outcome, `isError`, the structured content and the approval token stay.
|
|
15
|
-
* `undefined` keeps PermDock's text.
|
|
16
|
-
*/
|
|
17
|
-
type DeniedText = (event: DeniedTextEvent) => string | undefined;
|
|
18
|
-
//#endregion
|
|
19
|
-
export { DeniedTextEvent as n, DeniedText as t };
|
package/dist/fields-ClcQLrVc.js
DELETED
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import { i as configError } from "./errors-DpP_U6Bf.js";
|
|
2
|
-
import { c as jsonSchemaOf } from "./catalog-doc-CV9s6B1S.js";
|
|
3
|
-
import { A as quoteQualified, E as helperSchema, O as quoteIdent, k as quoteLiteral, s as signedIn } from "./shared-fMKOv8hP.js";
|
|
4
|
-
import { c as branchClauses, i as orSql, s as andSql, u as wrapSql } from "./policies-B2lZIurj.js";
|
|
5
|
-
//#region src/cli/rls/fields.ts
|
|
6
|
-
/** Names of the field-view objects. Part of the SQL contract. */
|
|
7
|
-
const FIELD_VIEWS = {
|
|
8
|
-
/** `<table>_visible`: the `security_invoker` view clients read. */
|
|
9
|
-
view: "_visible",
|
|
10
|
-
/** `<table>_visible_fields`: the owner-rights companion `--revoke-columns` adds. */
|
|
11
|
-
companion: "_visible_fields",
|
|
12
|
-
/** The companion's row-key column, joined to the base table's key. */
|
|
13
|
-
key: "permdock_key",
|
|
14
|
-
/** Marks the companion so doctor PD022 knows it reads as its owner on purpose. */
|
|
15
|
-
comment: "permdock:field-companion",
|
|
16
|
-
/** `<table>_mask(p_row)`: the row-masking function `fields: 'mask'` adds. */
|
|
17
|
-
mask: "_mask"
|
|
18
|
-
};
|
|
19
|
-
function covers(branch, column) {
|
|
20
|
-
return branch.fields === void 0 || branch.fields.includes(column);
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* A read grant that only shapes columns: a field-limited deny (it never
|
|
24
|
-
* denies the row) or an allow with an empty list (it grants nothing). With
|
|
25
|
-
* field views it leaves the row policy and lives in the view's masks.
|
|
26
|
-
*/
|
|
27
|
-
function fieldOnly(branch) {
|
|
28
|
-
if (branch.command !== "select" || branch.fields === void 0) return false;
|
|
29
|
-
return branch.effect === "deny" || branch.fields.length === 0;
|
|
30
|
-
}
|
|
31
|
-
/** Branches the row policies keep when field views compile. */
|
|
32
|
-
function rowBranches(branches) {
|
|
33
|
-
return branches.filter((branch) => !fieldOnly(branch));
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Whether the reader is signed in, for branches with no helper call: a grant
|
|
37
|
-
* to any signed-in user relies on `to authenticated` in its policy, which a
|
|
38
|
-
* view does not have.
|
|
39
|
-
*/
|
|
40
|
-
function audience(ctx, branch) {
|
|
41
|
-
if (branch.access !== void 0 || branch.roles.length !== 1) return;
|
|
42
|
-
if (branch.roles[0] === "authenticated") return signedIn(ctx);
|
|
43
|
-
return branch.roles[0] === "anon" ? `not (${signedIn(ctx)})` : void 0;
|
|
44
|
-
}
|
|
45
|
-
function clause(ctx, branch) {
|
|
46
|
-
return andSql(audience(ctx, branch), branchClauses(branch).using) ?? "true";
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* `can(permission, row, { field })` in SQL: an allow that covers the column
|
|
50
|
-
* holds for the row and no covering deny does. Every access term is the
|
|
51
|
-
* uncorrelated helper call the row policy uses, so it runs once per statement.
|
|
52
|
-
*/
|
|
53
|
-
function maskSql(ctx, allows, denies, column) {
|
|
54
|
-
const allowed = allows.filter((branch) => covers(branch, column)).map((branch) => clause(ctx, branch));
|
|
55
|
-
if (allowed.length === 0) return "false";
|
|
56
|
-
const denied = denies.filter((branch) => covers(branch, column)).map((branch) => clause(ctx, branch));
|
|
57
|
-
const allow = orSql(allowed);
|
|
58
|
-
if (denied.length === 0) return allow;
|
|
59
|
-
const deny = orSql(denied);
|
|
60
|
-
return allow === "true" ? `not ${wrapSql(deny)}` : `${wrapSql(allow)} and not ${wrapSql(deny)}`;
|
|
61
|
-
}
|
|
62
|
-
function schemaColumns(policy, resource) {
|
|
63
|
-
const node = policy.resources.get(resource);
|
|
64
|
-
const schema = node === void 0 ? null : jsonSchemaOf(node);
|
|
65
|
-
const properties = schema !== null && typeof schema === "object" ? schema.properties : void 0;
|
|
66
|
-
return properties !== null && typeof properties === "object" ? Object.keys(properties) : void 0;
|
|
67
|
-
}
|
|
68
|
-
function viewName(table, suffix) {
|
|
69
|
-
return `${table}${suffix}`;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* `<helper schema>.<table><suffix>`: outside the Data API's schemas, so the
|
|
73
|
-
* companion's owner rights reach clients only through the `_visible` join and
|
|
74
|
-
* the mask function is neither an RPC nor a computed field.
|
|
75
|
-
*/
|
|
76
|
-
function helperObjectName(ctx, table, suffix) {
|
|
77
|
-
const base = table.startsWith("public.") ? table.slice(7) : table.replaceAll(".", "_");
|
|
78
|
-
return `${helperSchema(ctx)}.${viewName(base, suffix)}`;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* One view per table whose read grants limit fields. A column is restricted
|
|
82
|
-
* when some read allow lists fields without it or some read deny lists it;
|
|
83
|
-
* every other column, and the row key, passes through unchanged.
|
|
84
|
-
*/
|
|
85
|
-
function fieldViews(policy, ctx, branches, options, warnings) {
|
|
86
|
-
const byTable = /* @__PURE__ */ new Map();
|
|
87
|
-
for (const branch of branches) {
|
|
88
|
-
if (branch.command !== "select" || branch.coverage === true) continue;
|
|
89
|
-
byTable.set(branch.table, [...byTable.get(branch.table) ?? [], branch]);
|
|
90
|
-
}
|
|
91
|
-
const views = [];
|
|
92
|
-
for (const [table, reads] of byTable) {
|
|
93
|
-
const allows = reads.filter((branch) => branch.effect === "allow" && branch.fields?.length !== 0);
|
|
94
|
-
const denies = reads.filter((branch) => branch.effect === "deny");
|
|
95
|
-
const limited = reads.some((branch) => branch.fields !== void 0);
|
|
96
|
-
const resource = reads.find((branch) => branch.resource !== void 0)?.resource;
|
|
97
|
-
if (!limited || allows.length === 0 || resource === void 0) continue;
|
|
98
|
-
const names = schemaColumns(policy, resource);
|
|
99
|
-
if (names === void 0) throw configError(`PermDock CLI: --fields ${options.mask === true ? "mask" : "views"} needs the ${resource} schema's JSON Schema (Standard JSON Schema) to list the columns of ${table}`);
|
|
100
|
-
const key = policy.resources.get(resource)?.id ?? "id";
|
|
101
|
-
const restricted = (column) => column !== key && (allows.some((branch) => branch.fields !== void 0 && !branch.fields.includes(column)) || denies.some((branch) => branch.fields?.includes(column) === true));
|
|
102
|
-
const columns = names.map((name) => {
|
|
103
|
-
quoteIdent(name);
|
|
104
|
-
return restricted(name) ? {
|
|
105
|
-
name,
|
|
106
|
-
mask: maskSql(ctx, allows, denies, name)
|
|
107
|
-
} : { name };
|
|
108
|
-
});
|
|
109
|
-
if (columns.every((column) => column.mask === void 0)) continue;
|
|
110
|
-
const view = viewName(table, FIELD_VIEWS.view);
|
|
111
|
-
if (allows.some((branch) => branch.fields !== void 0 && !branch.fields.includes(key))) warnings.push(`field view ${view}: the key ${key} passes through, although a read grant on ${resource} omits it`);
|
|
112
|
-
const hidden = columns.filter((column) => column.mask !== void 0).map((column) => column.name);
|
|
113
|
-
if (options.helpersOnly === true) warnings.push(`field view ${view}: ${table} still returns ${hidden.join(", ")} to direct reads; revoke select on those columns from client roles in your own grants, or read them through a function`);
|
|
114
|
-
else if (!options.revokeColumns) warnings.push(`field view ${view}: ${table} still returns ${hidden.join(", ")} to direct reads; add --revoke-columns so clients read through the view`);
|
|
115
|
-
views.push({
|
|
116
|
-
resource,
|
|
117
|
-
table,
|
|
118
|
-
view,
|
|
119
|
-
key,
|
|
120
|
-
columns,
|
|
121
|
-
roles: reads.some((branch) => branch.roles.includes("anon")) ? ["anon", "authenticated"] : ["authenticated"],
|
|
122
|
-
...options.revokeColumns ? { companion: helperObjectName(ctx, table, FIELD_VIEWS.companion) } : {},
|
|
123
|
-
...options.mask === true ? { maskFunction: helperObjectName(ctx, table, FIELD_VIEWS.mask) } : {}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
return views;
|
|
127
|
-
}
|
|
128
|
-
/** Columns of `view`'s table that `anon` and `authenticated` keep on the base table with `--revoke-columns`. */
|
|
129
|
-
function readableColumns(view) {
|
|
130
|
-
return view.columns.filter((column) => column.mask === void 0).map((column) => column.name);
|
|
131
|
-
}
|
|
132
|
-
function restrictedColumns(view) {
|
|
133
|
-
return view.columns.filter((column) => column.mask !== void 0).map((column) => column.name);
|
|
134
|
-
}
|
|
135
|
-
function columnList(names) {
|
|
136
|
-
return names.map(quoteIdent).join(", ");
|
|
137
|
-
}
|
|
138
|
-
function selectList(lines) {
|
|
139
|
-
return lines.map((line) => ` ${line}`).join(",\n");
|
|
140
|
-
}
|
|
141
|
-
function grantView(name, roles) {
|
|
142
|
-
return [`revoke all on table ${quoteQualified(name)} from anon, authenticated, public;`, `grant select on table ${quoteQualified(name)} to ${roles.join(", ")};`].join("\n");
|
|
143
|
-
}
|
|
144
|
-
function inlineViewSql(view) {
|
|
145
|
-
const targets = view.columns.map((column) => column.mask === void 0 ? quoteIdent(column.name) : `case when ${column.mask} then ${quoteIdent(column.name)} end as ${quoteIdent(column.name)}`);
|
|
146
|
-
return `create or replace view ${quoteQualified(view.view)} with (security_invoker = true) as
|
|
147
|
-
select
|
|
148
|
-
${selectList(targets)}
|
|
149
|
-
from ${quoteQualified(view.table)};`;
|
|
150
|
-
}
|
|
151
|
-
function companionSql(view, companion) {
|
|
152
|
-
const restricted = view.columns.filter((column) => column.mask !== void 0);
|
|
153
|
-
const targets = [`${quoteIdent(view.key)} as ${quoteIdent(FIELD_VIEWS.key)}`, ...restricted.map((column) => `case when ${column.mask} then ${quoteIdent(column.name)} end as ${quoteIdent(column.name)}`)];
|
|
154
|
-
const any = orSql(restricted.map((column) => column.mask ?? "false"));
|
|
155
|
-
const name = companion.slice(0, companion.indexOf("."));
|
|
156
|
-
const schema = quoteIdent(name);
|
|
157
|
-
return `${name === "public" ? "" : `create schema if not exists ${schema};
|
|
158
|
-
revoke all on schema ${schema} from public;
|
|
159
|
-
grant usage on schema ${schema} to ${view.roles.join(", ")};
|
|
160
|
-
`}create or replace view ${quoteQualified(companion)} with (security_barrier = true) as
|
|
161
|
-
select
|
|
162
|
-
${selectList(targets)}
|
|
163
|
-
from ${quoteQualified(view.table)}
|
|
164
|
-
where ${any};
|
|
165
|
-
comment on view ${quoteQualified(companion)} is ${quoteLiteral(`${FIELD_VIEWS.comment} ${view.view}`)};`;
|
|
166
|
-
}
|
|
167
|
-
function joinedViewSql(view, companion) {
|
|
168
|
-
const targets = view.columns.map((column) => column.mask === void 0 ? `t.${quoteIdent(column.name)}` : `f.${quoteIdent(column.name)}`);
|
|
169
|
-
return `create or replace view ${quoteQualified(view.view)} with (security_invoker = true) as
|
|
170
|
-
select
|
|
171
|
-
${selectList(targets)}
|
|
172
|
-
from ${quoteQualified(view.table)} t
|
|
173
|
-
left join ${quoteQualified(companion)} f on f.${quoteIdent(FIELD_VIEWS.key)} = t.${quoteIdent(view.key)};`;
|
|
174
|
-
}
|
|
175
|
-
/** `select` on only the unrestricted columns (and the key) of the base table, for `--revoke-columns`. */
|
|
176
|
-
function columnGrantSql(view, role) {
|
|
177
|
-
return `grant select (${columnList(readableColumns(view))}) on table ${quoteQualified(view.table)} to ${role};`;
|
|
178
|
-
}
|
|
179
|
-
function columnRevokeSql(view) {
|
|
180
|
-
return `revoke select (${columnList(restrictedColumns(view))}) on table ${quoteQualified(view.table)} from anon, authenticated;`;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* `<table>_mask(p_row)`: the row with each restricted column the caller may
|
|
184
|
-
* not read set to null, by the same masks as the view. It reads only the row
|
|
185
|
-
* it is given, so its caller decides which rows; `security invoker`, because
|
|
186
|
-
* it needs nothing beyond the helpers the masks call. The body names the
|
|
187
|
-
* parameter `$1`, since a column called `p_row` would shadow the name.
|
|
188
|
-
*/
|
|
189
|
-
function maskFunctionSql(view, fn) {
|
|
190
|
-
const table = quoteQualified(view.table);
|
|
191
|
-
const name = quoteQualified(fn);
|
|
192
|
-
const nulls = view.columns.flatMap((column) => column.mask === void 0 ? [] : [`case when ${column.mask} then '{}'::jsonb else pg_catalog.jsonb_build_object(${quoteLiteral(column.name)}, null) end`]);
|
|
193
|
-
return `-- ${fn}: a row of ${view.table} with ${restrictedColumns(view).join(", ")} null unless a read grant covers the column for the row, for SQL that reads ${view.table} without ${view.view}
|
|
194
|
-
create or replace function ${name}(p_row ${table})
|
|
195
|
-
returns ${table}
|
|
196
|
-
language sql
|
|
197
|
-
stable
|
|
198
|
-
security invoker
|
|
199
|
-
set search_path = ''
|
|
200
|
-
as $$
|
|
201
|
-
select pg_catalog.jsonb_populate_record(
|
|
202
|
-
$1,
|
|
203
|
-
${nulls.join("\n || ")}
|
|
204
|
-
)
|
|
205
|
-
from (select ($1).*) r
|
|
206
|
-
$$;
|
|
207
|
-
revoke all on function ${name}(${table}) from public, anon, authenticated;
|
|
208
|
-
grant execute on function ${name}(${table}) to ${view.roles.join(", ")};`;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* The view SQL: the `security_invoker` view, and with `--revoke-columns` the
|
|
212
|
-
* owner-rights companion it joins for the restricted columns. The companion
|
|
213
|
-
* masks every column with the full field decision and keeps only rows where
|
|
214
|
-
* one is readable, so reading it directly shows nothing `pick` would not.
|
|
215
|
-
*/
|
|
216
|
-
function fieldViewsSql(views) {
|
|
217
|
-
return views.map((view) => {
|
|
218
|
-
const head = `-- field view over ${view.table}: ${restrictedColumns(view).join(", ")} read as null unless a read grant covers the column for the row`;
|
|
219
|
-
const mask = view.maskFunction === void 0 ? [] : [maskFunctionSql(view, view.maskFunction)];
|
|
220
|
-
if (view.companion === void 0) return [
|
|
221
|
-
head,
|
|
222
|
-
inlineViewSql(view),
|
|
223
|
-
grantView(view.view, view.roles),
|
|
224
|
-
...mask
|
|
225
|
-
].join("\n");
|
|
226
|
-
return [
|
|
227
|
-
head,
|
|
228
|
-
`-- ${view.companion} reads ${view.table} as its owner; ${view.view} reads the rows as the caller and joins it`,
|
|
229
|
-
companionSql(view, view.companion),
|
|
230
|
-
grantView(view.companion, view.roles),
|
|
231
|
-
joinedViewSql(view, view.companion),
|
|
232
|
-
grantView(view.view, view.roles),
|
|
233
|
-
...mask
|
|
234
|
-
].join("\n");
|
|
235
|
-
}).join("\n\n");
|
|
236
|
-
}
|
|
237
|
-
//#endregion
|
|
238
|
-
export { fieldViewsSql as a, fieldViews as i, columnGrantSql as n, rowBranches as o, columnRevokeSql as r, viewName as s, FIELD_VIEWS as t };
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { t as byCodePoint } from "./compare-pfyVnBjE.js";
|
|
3
|
-
//#region src/cli/generate.ts
|
|
4
|
-
const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
|
|
5
|
-
const MAX_DEPTH = 6;
|
|
6
|
-
function isSchemaKind(value) {
|
|
7
|
-
return value === "zod" || value === "valibot" || value === "arktype";
|
|
8
|
-
}
|
|
9
|
-
function schemaImport(kind) {
|
|
10
|
-
switch (kind) {
|
|
11
|
-
case "zod": return "import { z } from 'zod'";
|
|
12
|
-
case "valibot": return "import * as v from 'valibot'";
|
|
13
|
-
case "arktype": return "import { type } from 'arktype'";
|
|
14
|
-
default: return kind;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
function emptySchema(kind) {
|
|
18
|
-
return schemaExpression(kind, { type: "object" });
|
|
19
|
-
}
|
|
20
|
-
function propertyKey(name) {
|
|
21
|
-
return IDENTIFIER.test(name) ? name : JSON.stringify(name);
|
|
22
|
-
}
|
|
23
|
-
function literalEnum(schema) {
|
|
24
|
-
const values = schema["enum"];
|
|
25
|
-
if (!Array.isArray(values) || values.length === 0 || !values.every((value) => typeof value === "string")) return;
|
|
26
|
-
return values;
|
|
27
|
-
}
|
|
28
|
-
function schemaType(schema) {
|
|
29
|
-
const type = schema["type"];
|
|
30
|
-
if (typeof type === "string") return type;
|
|
31
|
-
if (Array.isArray(type)) {
|
|
32
|
-
const named = type.filter((item) => item !== "null");
|
|
33
|
-
return named.length === 1 && typeof named[0] === "string" ? named[0] : void 0;
|
|
34
|
-
}
|
|
35
|
-
return isRecord(schema["properties"]) ? "object" : void 0;
|
|
36
|
-
}
|
|
37
|
-
function zodOf(schema, resolve, depth) {
|
|
38
|
-
const node = resolve(schema);
|
|
39
|
-
const values = literalEnum(node);
|
|
40
|
-
if (values !== void 0) return `z.enum(${JSON.stringify(values)})`;
|
|
41
|
-
const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
|
|
42
|
-
if (type === void 0) return "z.unknown()";
|
|
43
|
-
switch (type) {
|
|
44
|
-
case "string": return "z.string()";
|
|
45
|
-
case "number": return "z.number()";
|
|
46
|
-
case "integer": return "z.number().int()";
|
|
47
|
-
case "boolean": return "z.boolean()";
|
|
48
|
-
case "array": return `z.array(${isRecord(node["items"]) ? zodOf(node["items"], resolve, depth + 1) : "z.unknown()"})`;
|
|
49
|
-
case "object": {
|
|
50
|
-
const required = new Set(Array.isArray(node["required"]) ? node["required"] : []);
|
|
51
|
-
const properties = isRecord(node["properties"]) ? node["properties"] : {};
|
|
52
|
-
const fields = Object.entries(properties).filter((entry) => isRecord(entry[1])).map(([name, child]) => {
|
|
53
|
-
const expression = zodOf(child, resolve, depth + 1);
|
|
54
|
-
return `${propertyKey(name)}: ${required.has(name) ? expression : `${expression}.optional()`}`;
|
|
55
|
-
});
|
|
56
|
-
return `z.object({${fields.length === 0 ? "" : ` ${fields.join(", ")} `}})`;
|
|
57
|
-
}
|
|
58
|
-
default: return "z.unknown()";
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
function valibotOf(schema, resolve, depth) {
|
|
62
|
-
const node = resolve(schema);
|
|
63
|
-
const values = literalEnum(node);
|
|
64
|
-
if (values !== void 0) return `v.picklist(${JSON.stringify(values)})`;
|
|
65
|
-
const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
|
|
66
|
-
if (type === void 0) return "v.unknown()";
|
|
67
|
-
switch (type) {
|
|
68
|
-
case "string": return "v.string()";
|
|
69
|
-
case "number": return "v.number()";
|
|
70
|
-
case "integer": return "v.pipe(v.number(), v.integer())";
|
|
71
|
-
case "boolean": return "v.boolean()";
|
|
72
|
-
case "array": return `v.array(${isRecord(node["items"]) ? valibotOf(node["items"], resolve, depth + 1) : "v.unknown()"})`;
|
|
73
|
-
case "object": {
|
|
74
|
-
const required = new Set(Array.isArray(node["required"]) ? node["required"] : []);
|
|
75
|
-
const properties = isRecord(node["properties"]) ? node["properties"] : {};
|
|
76
|
-
const fields = Object.entries(properties).filter((entry) => isRecord(entry[1])).map(([name, child]) => {
|
|
77
|
-
const expression = valibotOf(child, resolve, depth + 1);
|
|
78
|
-
return `${propertyKey(name)}: ${required.has(name) ? expression : `v.optional(${expression})`}`;
|
|
79
|
-
});
|
|
80
|
-
return `v.object({${fields.length === 0 ? "" : ` ${fields.join(", ")} `}})`;
|
|
81
|
-
}
|
|
82
|
-
default: return "v.unknown()";
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/** An arktype definition: a string keyword or an object literal. */
|
|
86
|
-
function arktypeOf(schema, resolve, depth) {
|
|
87
|
-
const node = resolve(schema);
|
|
88
|
-
const values = literalEnum(node);
|
|
89
|
-
if (values !== void 0) return JSON.stringify(values.map((value) => `'${value.replaceAll("'", "\\'")}'`).join(" | "));
|
|
90
|
-
const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
|
|
91
|
-
if (type === void 0) return "'unknown'";
|
|
92
|
-
switch (type) {
|
|
93
|
-
case "string": return "'string'";
|
|
94
|
-
case "number": return "'number'";
|
|
95
|
-
case "integer": return "'number.integer'";
|
|
96
|
-
case "boolean": return "'boolean'";
|
|
97
|
-
case "array": {
|
|
98
|
-
if (!isRecord(node["items"])) return "'unknown[]'";
|
|
99
|
-
const item = arktypeOf(node["items"], resolve, depth + 1);
|
|
100
|
-
return item.startsWith("'") && !item.includes("|") ? `'${item.slice(1, -1)}[]'` : `[${item}, '[]']`;
|
|
101
|
-
}
|
|
102
|
-
case "object": {
|
|
103
|
-
const required = new Set(Array.isArray(node["required"]) ? node["required"] : []);
|
|
104
|
-
const properties = isRecord(node["properties"]) ? node["properties"] : {};
|
|
105
|
-
const fields = Object.entries(properties).filter((entry) => isRecord(entry[1])).map(([name, child]) => `${JSON.stringify(required.has(name) ? name : `${name}?`)}: ${arktypeOf(child, resolve, depth + 1)}`);
|
|
106
|
-
return `{${fields.length === 0 ? "" : ` ${fields.join(", ")} `}}`;
|
|
107
|
-
}
|
|
108
|
-
default: return "'unknown'";
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* A validator expression for a JSON Schema object. Only the portable core
|
|
113
|
-
* (primitives, enums of strings, arrays, objects with `required`) is
|
|
114
|
-
* translated; anything else becomes the validator's `unknown`.
|
|
115
|
-
*/
|
|
116
|
-
function schemaExpression(kind, schema, resolve = (node) => node) {
|
|
117
|
-
switch (kind) {
|
|
118
|
-
case "zod": return zodOf(schema, resolve, 0);
|
|
119
|
-
case "valibot": return valibotOf(schema, resolve, 0);
|
|
120
|
-
case "arktype": return `type(${arktypeOf(schema, resolve, 0)})`;
|
|
121
|
-
default: return kind;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
function renderList(value, indent) {
|
|
125
|
-
if (Array.isArray(value)) return JSON.stringify(value);
|
|
126
|
-
return JSON.stringify(value, null, 2).replaceAll("\n", `\n${indent}`);
|
|
127
|
-
}
|
|
128
|
-
function renderResource(resource, indent) {
|
|
129
|
-
const inner = `${indent} `;
|
|
130
|
-
const options = [
|
|
131
|
-
`${inner}id: '${(resource.id ?? "id").replaceAll("\\", "\\\\").replaceAll("'", "\\'")}',`,
|
|
132
|
-
`${inner}actions: ${renderList(resource.actions, inner)},`,
|
|
133
|
-
`${inner}collection: ${renderList(resource.collection, inner)},`
|
|
134
|
-
].join("\n");
|
|
135
|
-
return `${resource.schema === void 0 ? "resource({" : `resource(${resource.schema}, {`}\n${options}\n${indent}})`;
|
|
136
|
-
}
|
|
137
|
-
function insert(trie, resource) {
|
|
138
|
-
let node = trie;
|
|
139
|
-
for (const [index, segment] of resource.path.entries()) {
|
|
140
|
-
if (index === resource.path.length - 1) {
|
|
141
|
-
node.set(segment, resource);
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
const next = node.get(segment);
|
|
145
|
-
if (next instanceof Map) node = next;
|
|
146
|
-
else {
|
|
147
|
-
const created = /* @__PURE__ */ new Map();
|
|
148
|
-
node.set(segment, created);
|
|
149
|
-
node = created;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
function renderTrie(trie, indent) {
|
|
154
|
-
return [...trie.entries()].toSorted(([a], [b]) => byCodePoint(a, b)).map(([segment, value]) => value instanceof Map ? `${indent}${propertyKey(segment)}: {\n${renderTrie(value, `${indent} `)}\n${indent}},` : `${indent}${propertyKey(segment)}: ${renderResource(value, indent)},`).join("\n");
|
|
155
|
-
}
|
|
156
|
-
/** A deterministic `definePermissions()` module with a `// @generated` header. */
|
|
157
|
-
function emitPermissionsModule(input) {
|
|
158
|
-
const trie = /* @__PURE__ */ new Map();
|
|
159
|
-
for (const resource of input.resources) insert(trie, resource);
|
|
160
|
-
const imports = ["import { definePermissions, resource } from 'permdock'", ...input.schema === void 0 ? [] : [schemaImport(input.schema)]];
|
|
161
|
-
const extras = Object.entries(input.exports ?? {}).map(([name, value]) => `export const ${name} = ${JSON.stringify(value, null, 2)} as const\n\n`);
|
|
162
|
-
return `// @generated by permdock ${input.generator}
|
|
163
|
-
${imports.join("\n")}
|
|
164
|
-
|
|
165
|
-
${extras.join("")}export const permissions = definePermissions({
|
|
166
|
-
${renderTrie(trie, " ")}
|
|
167
|
-
})
|
|
168
|
-
`;
|
|
169
|
-
}
|
|
170
|
-
//#endregion
|
|
171
|
-
export { schemaExpression as i, emptySchema as n, isSchemaKind as r, emitPermissionsModule as t };
|
package/dist/headers-BIjfMaoC.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { t as approvalHeaderValue } from "./approval-header-CJACtHkv.js";
|
|
2
|
-
//#region src/client/headers.ts
|
|
3
|
-
/** The `PermDock-Approval` header for a resume; a `TypeError` for a token that is not an RFC 9651 sf-token. */
|
|
4
|
-
function approvalHeaders(token) {
|
|
5
|
-
return { "PermDock-Approval": approvalHeaderValue(token) };
|
|
6
|
-
}
|
|
7
|
-
//#endregion
|
|
8
|
-
export { approvalHeaders as t };
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
//#region src/client/headers.d.ts
|
|
2
|
-
/** The `PermDock-Approval` header for a resume; a `TypeError` for a token that is not an RFC 9651 sf-token. */
|
|
3
|
-
declare function approvalHeaders(token: string): {
|
|
4
|
-
readonly "PermDock-Approval": string;
|
|
5
|
-
};
|
|
6
|
-
//#endregion
|
|
7
|
-
export { approvalHeaders as t };
|
package/dist/load-DrMHXzgN.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { a as loadModule, s as pickNamed } from "./load-DxroEzH1.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { t as SPLIT_PARTS } from "./output-files-CCMdcFWb.js";
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { i as readJsonFile } from "./files-D_JIzUrP.js";
|
|
2
|
-
import { existsSync } from "node:fs";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
//#region src/cli/project/package-root.ts
|
|
6
|
-
let cached;
|
|
7
|
-
/**
|
|
8
|
-
* The `permdock` package directory. The bundler may place this module in
|
|
9
|
-
* `dist/cli/` or in a shared chunk at `dist/`, so walk up instead of
|
|
10
|
-
* assuming a depth.
|
|
11
|
-
*/
|
|
12
|
-
function packageRoot() {
|
|
13
|
-
cached ??= findPackageRoot(dirname(fileURLToPath(import.meta.url)));
|
|
14
|
-
return cached;
|
|
15
|
-
}
|
|
16
|
-
/** The nearest directory at or above `start` whose `package.json` is named `permdock`. */
|
|
17
|
-
function findPackageRoot(start) {
|
|
18
|
-
let dir = start;
|
|
19
|
-
for (;;) {
|
|
20
|
-
const manifest = join(dir, "package.json");
|
|
21
|
-
if (existsSync(manifest)) {
|
|
22
|
-
const { name } = readJsonFile(manifest);
|
|
23
|
-
if (name === "permdock") return dir;
|
|
24
|
-
}
|
|
25
|
-
const parent = dirname(dir);
|
|
26
|
-
if (parent === dir) throw new Error("PermDock CLI: cannot find the permdock package root");
|
|
27
|
-
dir = parent;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//#endregion
|
|
31
|
-
export { packageRoot as t };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Ut as LocalSnapshotManifest } from "./policy-types-B-F-qAZk.js";
|
|
2
|
-
//#region src/core/parse-local-manifest.d.ts
|
|
3
|
-
/**
|
|
4
|
-
* Whether `value` has the shape `localSnapshotManifest(policy)` writes, with
|
|
5
|
-
* no prototype keys. A JSON import widens `v: 1` to `number`; this narrows it
|
|
6
|
-
* back without a cast.
|
|
7
|
-
*/
|
|
8
|
-
declare function parseLocalSnapshotManifest(value: unknown): value is LocalSnapshotManifest;
|
|
9
|
-
//#endregion
|
|
10
|
-
export { parseLocalSnapshotManifest as t };
|