permdock 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/dist/a2a/index.d.ts +7 -7
- package/dist/a2a/index.js +8 -8
- package/dist/action-result-BcudBQOF.d.ts +19 -0
- package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
- package/dist/{adoption-scan-D-feE7BE.js → adoption-scan-Ch07MdxN.js} +5 -5
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +19 -13
- package/dist/ai-sdk/index.js +6 -6
- package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
- package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
- package/dist/{approval-prompt-K0faOLFp.d.ts → approval-prompt-3BqWczTt.d.ts} +13 -11
- package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
- package/dist/approvals/index.d.ts +4 -4
- package/dist/approvals/index.js +6 -6
- package/dist/{approvals-CMRfsbBh.js → approvals-DnIBTuXE.js} +66 -42
- package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
- package/dist/{arazzo-ClrF3PVb.js → arazzo-BpS7LnV0.js} +2 -2
- package/dist/{arazzo-rdeJ8n1J.js → arazzo-CmQaGPkM.js} +6 -6
- package/dist/{args-CC3OwyHW.js → args-0FrVs5EH.js} +14 -7
- package/dist/astro/index.d.ts +30 -12
- package/dist/astro/index.js +2 -2
- package/dist/{audience-BrMs8c4o.js → audience-DTjR8xet.js} +8 -8
- package/dist/{auth-CscUX8Sy.js → auth--yPyZNgr.js} +19 -7
- package/dist/authzen/index.d.ts +34 -28
- package/dist/authzen/index.js +23 -20
- package/dist/{automation-DOtAFWdy.d.ts → automation-C6Jg75xq.d.ts} +42 -32
- package/dist/{automation-ySsxp_Yp.js → automation-x3KEUusw.js} +22 -21
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +13 -7
- package/dist/better-supabase/index.d.ts +357 -227
- package/dist/better-supabase/index.js +219 -140
- package/dist/{bind-D1nO6fiC.js → bind-BNQA9JK9.js} +26 -10
- package/dist/{bind-JDuvxjuW.d.ts → bind-YYjvfpB9.d.ts} +32 -12
- package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
- package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
- package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
- package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
- package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
- package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
- package/dist/{build-instance-DxE7czo9.js → build-instance-BWXqwQYU.js} +3 -3
- package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-D4UC9TTW.d.ts → capability-Di9tiUvi.d.ts} +41 -29
- package/dist/{casbin-BHijLuHY.js → casbin-B7_yS-oo.js} +2 -2
- package/dist/{casbin-BW9pS47J.js → casbin-bHyIxTNQ.js} +16 -8
- package/dist/{casl-CmJlgziS.js → casl-C4OINZHI.js} +2 -2
- package/dist/{casl-UbI8v-Wq.js → casl-CHHoCldP.js} +19 -10
- package/dist/catalog/index.d.ts +51 -30
- package/dist/catalog/index.js +18 -15
- package/dist/{catalog-D69WhFii.js → catalog-CGlSwU6j.js} +20 -19
- package/dist/catalog-D3oS2GH3.js +1 -0
- package/dist/{catalog-BaMQfQ6Y.js → catalog-amPDr0JQ.js} +3 -3
- package/dist/{catalog-doc-CV9s6B1S.js → catalog-doc-DjMKzJp9.js} +28 -14
- package/dist/{catalog-fingerprint-C144oW4M.js → catalog-fingerprint-e6aCWosn.js} +18 -14
- package/dist/catalog-operations-DeHTrJSV.js +60 -0
- package/dist/{challenge-nGWma08S.js → challenge-DImNcR7B.js} +48 -27
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +13 -10
- package/dist/chat-sdk/index.d.ts +44 -26
- package/dist/chat-sdk/index.js +17 -17
- package/dist/{checks-BC_0mPIq.js → checks-CGkP3Z7A.js} +4 -1
- package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
- package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
- package/dist/claude-agent/index.d.ts +6 -6
- package/dist/claude-agent/index.js +6 -3
- package/dist/clerk/index.d.ts +11 -7
- package/dist/clerk/index.js +6 -6
- package/dist/cli/bin.js +4 -4
- package/dist/cli/index.d.ts +82 -7
- package/dist/cli/index.js +6 -6
- package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
- package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
- package/dist/cloud/index.d.ts +84 -52
- package/dist/cloud/index.js +53 -39
- package/dist/{cloud-CO8pYtwr.js → cloud-3kWfjnYy.js} +4 -5
- package/dist/{codemod-BP6n8N9L.js → codemod-Bv5i-Mzo.js} +523 -201
- package/dist/{codemod-i4N2BhDc.js → codemod-D9Aiii1r.js} +3 -4
- package/dist/{collect-DNm3oKOk.js → collect-B80GYEot.js} +4 -5
- package/dist/collect-D-eroIfV.js +1 -0
- package/dist/{collect-BaWeMjwV.js → collect-WCl8cJQV.js} +26 -63
- package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
- package/dist/compile/index.d.ts +2 -2
- package/dist/compile/index.js +1 -1
- package/dist/{compile-COM2VKuN.d.ts → compile-BEklRUYo.d.ts} +36 -12
- package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BNdVf7X2.js → completion-_bc0OUQ-.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-DGZzMV1B.js → config-D5XrLWpk.js} +2 -2
- package/dist/{config-report-Cm7UITNA.js → config-report-BmWIskD7.js} +9 -6
- package/dist/config-shape-ykV0Vm2n.js +134 -0
- package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
- package/dist/{connector-schema-_VCSsdtD.js → connector-schema-CYLQNMYq.js} +3 -2
- package/dist/{context--uM9V3Ui.js → context-BnIzxTNE.js} +4 -3
- package/dist/convex/index.d.ts +13 -7
- package/dist/convex/index.js +9 -6
- package/dist/{core-CQkE8Esr.d.ts → core-CFepFiDP.d.ts} +49 -22
- package/dist/{core-B5-w6Kw9.js → core-DzVINFbU.js} +26 -20
- package/dist/{create-Cb86Z8Im.js → create-6EwRQlig.js} +10 -7
- package/dist/{create-DJrlhEp9.js → create-BLPKnJKa.js} +35 -25
- package/dist/{create-UTnUVETj.d.ts → create-BPUopdfL.d.ts} +70 -37
- package/dist/{create-QHuuPw3q.d.ts → create-BamXmeob.d.ts} +37 -29
- package/dist/{create-B2-CQqCI.d.ts → create-DBvUsgzK.d.ts} +49 -28
- package/dist/{credential-CIM7wHwA.js → credential-CyyyvCsL.js} +41 -38
- package/dist/{credentials-BpuTwd7a.js → credentials-CdDxp7jN.js} +6 -6
- package/dist/{deciding-columns-DRo2QM6E.js → deciding-columns-NB4wcyBf.js} +2 -2
- package/dist/{delegation-C5rOdTp5.js → delegation-CDB6_keF.js} +31 -22
- package/dist/delivery/index.d.ts +4 -4
- package/dist/delivery/index.js +5 -5
- package/dist/{delivery-rwOKLWRm.js → delivery-BupfvJIV.js} +34 -22
- package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
- package/dist/denied-text-DHldhVUv.d.ts +22 -0
- package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
- package/dist/{describe-O0SwYIK8.d.ts → describe-BbFPBSms.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-Btr1c1Ow.js → diff-BwR1JdP2.js} +2 -2
- package/dist/{diff-DzT-xD13.js → diff-CQegtBAo.js} +22 -13
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BU1szn63.js → doctor-ClRVAtXQ.js} +287 -135
- package/dist/{doctor-BoK_y0KO.js → doctor-LPMYjSqO.js} +4 -4
- package/dist/drizzle/index.d.ts +33 -19
- package/dist/drizzle/index.js +17 -9
- package/dist/elysia/index.d.ts +17 -11
- package/dist/elysia/index.js +5 -5
- package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
- package/dist/{errors-B_Qg9D3e.d.ts → errors-BIM4MFsJ.d.ts} +22 -6
- package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
- package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
- package/dist/{evaluate-B_oqFbWC.js → evaluate-BAmf_AQd.js} +153 -82
- package/dist/{evaluations-BCddEOfO.d.ts → evaluations-DOWuBpWv.d.ts} +11 -5
- package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
- package/dist/eve/index.d.ts +9 -6
- package/dist/eve/index.js +4 -4
- package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
- package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
- package/dist/express/index.d.ts +9 -6
- package/dist/express/index.js +9 -6
- package/dist/fastify/index.d.ts +16 -10
- package/dist/fastify/index.js +8 -5
- package/dist/{fetch-adapter-CuhyYwC1.d.ts → fetch-adapter-BIbBAtPZ.d.ts} +9 -6
- package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-dPTgJVHd.js} +14 -11
- package/dist/fields-D0vUI6dq.js +498 -0
- package/dist/{files-acUbNwWt.js → files-B3AA05f1.js} +8 -5
- package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
- package/dist/{fixtures-BTMW6zgU.js → fixtures-A1_sp_tR.js} +15 -6
- package/dist/{flags-aaeRAdiD.js → flags-DXjoTVbS.js} +2 -2
- package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
- package/dist/{from-snapshot-Bz469dIh.js → from-snapshot-DCakWRsr.js} +18 -15
- package/dist/gen-BFfzZSLH.js +58 -0
- package/dist/gen-BtfFWGbz.js +827 -0
- package/dist/{generate-3FNO5P5Q.js → generate-CRVV5V7l.js} +14 -8
- package/dist/generate-CezbCaTI.js +275 -0
- package/dist/{grantee-BrRANrpT.js → grantee-Dke-9rd1.js} +4 -4
- package/dist/{grantee-conditions-C6P1Tvol.js → grantee-conditions-BrYPe-w0.js} +12 -12
- package/dist/{grantee-match-0RtHWQDx.js → grantee-match-7RZZvoT_.js} +12 -6
- package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
- package/dist/h3/index.d.ts +10 -7
- package/dist/h3/index.js +3 -3
- package/dist/headers-B9jQxjtW.d.ts +10 -0
- package/dist/{helpers-DY3vXuGs.js → helpers-DJicaG6f.js} +40 -28
- package/dist/hono/index.d.ts +16 -10
- package/dist/hono/index.js +5 -5
- package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -21
- package/dist/{hosted-BmjzxQhp.d.ts → hosted-DVxlLZMe.d.ts} +33 -21
- package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
- package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
- package/dist/{http-Ca3Sr5x1.js → http-DOL33cO0.js} +11 -8
- package/dist/{import-DB2EG_iy.js → import-ACkOrv6g.js} +6 -6
- package/dist/{import-Bz0GefWg.js → import-CST57XLp.js} +64 -51
- package/dist/{index-CMiPH2Tv.d.ts → index-BinlXeU-.d.ts} +64 -37
- package/dist/{index-BSfRl0hZ.d.ts → index-CV-7DWeD.d.ts} +64 -52
- package/dist/{index-BE8y3moU.d.ts → index-DJwEgYzA.d.ts} +127 -82
- package/dist/{index-DH9DUDEM.d.ts → index-Dj2qF9VC.d.ts} +54 -30
- package/dist/{index-BTkwrK7v.d.ts → index-vYjMrXyK.d.ts} +336 -173
- package/dist/{index-DLwcuCN_.d.ts → index-ymept53A.d.ts} +51 -30
- package/dist/index.d.ts +22 -22
- package/dist/index.js +34 -34
- package/dist/{init-B-4t1NzC.js → init-BjuFDYT1.js} +10 -10
- package/dist/{init-5TXNji88.js → init-txYTuW9u.js} +5 -5
- package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-CoHn-0e8.d.ts} +4 -4
- package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot-DuWf1cT3.js} +86 -61
- package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
- package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
- package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
- package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
- package/dist/jwt/index.d.ts +57 -27
- package/dist/jwt/index.js +24 -21
- package/dist/{kernel-DVExUwkp.js → kernel-qv4cr9w8.js} +32 -23
- package/dist/kysely/index.d.ts +49 -33
- package/dist/kysely/index.js +9 -7
- package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
- package/dist/{load-DxroEzH1.js → load-DjSU5KXO.js} +6 -6
- package/dist/load-Dm0pSYH3.js +1 -0
- package/dist/{login-ClSJh5t5.js → login-CfImTJGb.js} +4 -4
- package/dist/{login-WC9HPJpU.js → login-CgfCTO3F.js} +16 -9
- package/dist/{manifest-Dv6q4i5s.js → manifest-B2QPh19C.js} +49 -38
- package/dist/{manifest-BVhExYhw.d.ts → manifest-CzzWtnAb.d.ts} +126 -31
- package/dist/{manifest-schema-Cv492Qev.js → manifest-schema-2r37XRhD.js} +44 -3
- package/dist/{manifest-B79YuF2T.js → manifest-wg8WkkpD.js} +6 -6
- package/dist/{map-claims-etGIS_Dv.js → map-claims-C-nv08_n.js} +16 -9
- package/dist/{map-error-BQGyDm_M.js → map-error-pasIGqMT.js} +7 -7
- package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
- package/dist/mcp/index.d.ts +114 -61
- package/dist/mcp/index.js +70 -40
- package/dist/{migrate-Dodel0IJ.js → migrate-B7oP_sQU.js} +35 -17
- package/dist/module-values-BJTBdo6y.js +107 -0
- package/dist/nest/index.d.ts +23 -13
- package/dist/nest/index.js +18 -11
- package/dist/next/client.d.ts +5 -2
- package/dist/next/client.js +1 -1
- package/dist/next/index.d.ts +79 -26
- package/dist/next/index.js +121 -10
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +4 -3
- package/dist/node/index.d.ts +5 -5
- package/dist/node/index.js +3 -3
- package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
- package/dist/openai/index.d.ts +13 -7
- package/dist/openai/index.js +3 -3
- package/dist/openapi/index.d.ts +51 -30
- package/dist/openapi/index.js +2 -2
- package/dist/{openapi-ztVaux6j.js → openapi-BGeuunWC.js} +23 -14
- package/dist/{openapi-DMocl1bh.js → openapi-BIpw3Mb7.js} +4 -5
- package/dist/{openapi-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
- package/dist/{operation-findings-kRcEp8lE.js → operation-findings-CXtFzlKJ.js} +3 -3
- package/dist/{operations-BNLes61x.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
- package/dist/orpc/index.d.ts +68 -14
- package/dist/orpc/index.js +62 -13
- package/dist/otel/index.d.ts +7 -4
- package/dist/otel/index.js +8 -5
- package/dist/{output-DgSDLrta.js → output-DV5dwOTs.js} +9 -5
- package/dist/output-files-BHOIlrfD.js +1 -0
- package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/ownership-DA5YdYTm.js +1059 -0
- package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
- package/dist/parse-local-manifest-CCmbhnxP.d.ts +10 -0
- package/dist/{parse-local-manifest-T1Q8X3A2.js → parse-local-manifest-DEiCF4ah.js} +19 -7
- package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
- package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
- package/dist/pdp/index.d.ts +9 -6
- package/dist/pdp/index.js +20 -13
- package/dist/{peer-DOzzMfZL.js → peer-C9LvBCcb.js} +1 -1
- package/dist/{peer-12Q5I_RH.js → peer-Q0fuZ6hx.js} +9 -3
- package/dist/{permdock-BfWEeMqk.js → permdock-BvjivVb9.js} +200 -140
- package/dist/{permdock-Dco6dyCK.d.ts → permdock-CprAPN3w.d.ts} +260 -129
- package/dist/{permission-registry-DpPtSKNZ.js → permission-registry-B8tYxPIt.js} +23 -10
- package/dist/{permission-types-DhNEmoRG.d.ts → permission-types-CAY-GU7e.d.ts} +127 -41
- package/dist/{permissions-CoqCOfJ3.d.ts → permissions-Bx6UI8n1.d.ts} +6 -3
- package/dist/{permissions-CyH2MV_B.js → permissions-CVXmRILq.js} +3 -3
- package/dist/{permissions-DArULThq.js → permissions-CYcHj_w7.js} +8 -5
- package/dist/pg-DQTqRrou.js +60 -0
- package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
- package/dist/{pkce-5h8NgMQJ.js → pkce-CnmmYqUZ.js} +1 -1
- package/dist/{policy-B7dg_yzu.d.ts → policy-BycVKnXv.d.ts} +5 -5
- package/dist/{policy-DaJy4nK4.js → policy-CLQ8__GF.js} +43 -23
- package/dist/{policy-from-catalog-DFWYkNdu.js → policy-from-catalog-CU3An8uP.js} +28 -25
- package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
- package/dist/{policy-types-B-F-qAZk.d.ts → policy-types-DGIO_gxq.d.ts} +782 -357
- package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
- package/dist/{postgrest-r5faDIzD.js → postgrest-5Dr3W64L.js} +84 -86
- package/dist/{postgrest-CYacM_u7.d.ts → postgrest-D5nUGm-c.d.ts} +55 -35
- package/dist/powersync-B701tvhE.js +1 -0
- package/dist/{powersync-13odBwiM.js → powersync-Bg8u-JcR.js} +3 -3
- package/dist/{powersync-53ryOZip.js → powersync-CJrT1DSc.js} +127 -69
- package/dist/preset/index.d.ts +38 -28
- package/dist/preset/index.js +1 -1
- package/dist/{preset-CHTbd-DQ.js → preset-BjLzeFpp.js} +56 -32
- package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
- package/dist/prisma/index.d.ts +69 -41
- package/dist/prisma/index.js +21 -17
- package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
- package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
- package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
- package/dist/{prompt-DwtVemER.js → prompt-BYc6drYW.js} +4 -1
- package/dist/protected-action-D8x73IGm.d.ts +58 -0
- package/dist/protected-action-DUYqb-Ma.js +80 -0
- package/dist/{protected-DXE3cQYg.js → protected-action-QEA8arRB.js} +48 -14
- package/dist/{provider-BQsTYYy0.js → provider-C55OGXJ7.js} +5 -4
- package/dist/{provider-Csk-THAn.d.ts → provider-DfLeek9O.d.ts} +1 -1
- package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/{pull-CN5OLxrF.js → pull-2nJr0qg_.js} +12 -11
- package/dist/pull-C3EEGzSw.js +1 -0
- package/dist/{push-tVdG8dUL.js → push-Bn-lMEmI.js} +19 -13
- package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-CDuOL2de.js} +10 -7
- package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-CryQheKq.d.ts} +12 -6
- package/dist/react/index.d.ts +9 -8
- package/dist/react/index.js +7 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +94 -55
- package/dist/react-native/index.js +200 -61
- package/dist/{refs-CNJBiTFo.js → refs-C8BKxc_e.js} +2 -2
- package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
- package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
- package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
- package/dist/{replay-DCDD_ZfL.d.ts → replay-Bs9Df2fQ.d.ts} +1 -1
- package/dist/{request-context-BykKLmyE.js → request-context-Duzdf0cd.js} +8 -8
- package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
- package/dist/resend/index.d.ts +34 -28
- package/dist/resend/index.js +29 -29
- package/dist/resolve-names-ConCSj1y.js +201 -0
- package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
- package/dist/{retire-Wj6dkyDE.js → retire-B2xffQgY.js} +15 -6
- package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
- package/dist/{rls-Ck_PocSp.js → rls-Ba9wN0SP.js} +13 -6
- package/dist/{rls-CxBZb4rZ.js → rls-Cx0dtsB7.js} +310 -128
- package/dist/{role-builder-C1VJzvcr.js → role-builder-BK2-T6oD.js} +41 -20
- package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
- package/dist/{rpc-Bk1bE-ch.js → rpc-vHIwyXCp.js} +8 -5
- package/dist/run-Ck22anC2.js +1 -0
- package/dist/{run-uLD2aWuO.js → run-PbRlXTfh.js} +26 -23
- package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-B2o2Kxz8.d.ts} +29 -14
- package/dist/{run-ticket-B5d_63Ma.js → run-ticket-Dv7aF7Dk.js} +9 -9
- package/dist/{runtime-Vif3_-zf.js → runtime-BGnrOkVH.js} +5 -2
- package/dist/{saas-Az_Kz-4D.js → saas-DK4V-3Is.js} +42 -29
- package/dist/{scan-DSljDE1Y.js → scan-CRTj6fke.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-gIcCx7zM.js → schema-BTsE1WRT.js} +8 -4
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +2 -2
- package/dist/{scim-C7JYhySg.js → scim-D8YupzX1.js} +2 -2
- package/dist/{scim-YNieBO1U.js → scim-jJBJ7g1Z.js} +33 -15
- package/dist/{scopes-BHsc-wp-.js → scopes-0Up_UA2t.js} +41 -23
- package/dist/server/index.d.ts +11 -11
- package/dist/server/index.js +12 -12
- package/dist/{server-Bnga6I50.js → server-3cVlTLde.js} +31 -31
- package/dist/{server-types-C4gZUEZy.d.ts → server-types-CyRN0-Cd.d.ts} +88 -46
- package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
- package/dist/{shared-fMKOv8hP.js → shared-Afctg7B0.js} +65 -32
- package/dist/{shared-C8LjUdVU.js → shared-l0oGGetg.js} +9 -6
- package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
- package/dist/{sink-Cp_Eot9W.d.ts → sink-B5zoUW_O.d.ts} +44 -20
- package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
- package/dist/{skills-g_3BS9NC.js → skills-C9uKfSF5.js} +3 -3
- package/dist/{skills-Dcjw9_1C.js → skills-CQQcuGBi.js} +12 -8
- package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BjAWkchD.d.ts} +21 -12
- package/dist/{snapshot-cache-DT2Kx1F8.js → snapshot-cache-Bx_4xC_6.js} +14 -11
- package/dist/solid/index.d.ts +55 -16
- package/dist/solid/index.js +46 -12
- package/dist/solid-start/index.d.ts +30 -12
- package/dist/solid-start/index.js +3 -3
- package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
- package/dist/{sources-DEEuGb8S.d.ts → sources-CWG32C0G.d.ts} +126 -53
- package/dist/{sql-B96movIM.js → sql-0WjxIp9g.js} +28 -7
- package/dist/{sql-CDEPCA0g.d.ts → sql-B80DFdpG.d.ts} +2 -2
- package/dist/{src-DLFrtrrC.js → src-C_pi2Rnh.js} +292 -101
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +47 -35
- package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
- package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-DOYEuOLx.d.ts} +7 -7
- package/dist/{store-DSP9oGvh.js → store-RNFvaJJv.js} +32 -26
- package/dist/{store-options-B_poyYvg.js → store-options-Dil3lraY.js} +105 -15
- package/dist/stores-DZJvxFIZ.d.ts +59 -0
- package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-2Vwhl7Er.d.ts → stream-9y9qw51m.d.ts} +4 -3
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{style-Ds1gNm77.js → style-DblOtSga.js} +1 -1
- package/dist/{style-Cqo7-73x.js → style-Ds11Hmk4.js} +2 -1
- package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
- package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
- package/dist/supabase/index.d.ts +48 -38
- package/dist/supabase/index.js +5 -5
- package/dist/supabase/middleware.d.ts +19 -13
- package/dist/supabase/middleware.js +7 -7
- package/dist/{supabase--0aJdLEd.js → supabase-DnMMg5Fn.js} +79 -35
- package/dist/{supabase-Bqp7iIY2.js → supabase-SBs3MYUE.js} +3 -3
- package/dist/supabase-hook-C0FyEACZ.js +1 -0
- package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-CrgU06WH.js} +175 -196
- package/dist/{supautils-MESd81bF.js → supautils-ByezN3b8.js} +385 -219
- package/dist/{support-session-Cna49-3f.js → support-session-BsmPCbz8.js} +21 -21
- package/dist/svelte/PermissionBoundary.svelte +2 -6
- package/dist/svelte/Protected.svelte +2 -8
- package/dist/svelte/index.d.ts +9 -8
- package/dist/svelte/index.js +10 -9
- package/dist/svelte/runtime.d.ts +4 -4
- package/dist/svelte/runtime.js +4 -4
- package/dist/svelte/source.d.ts +9 -8
- package/dist/svelte/source.js +6 -5
- package/dist/sveltekit/index.d.ts +30 -12
- package/dist/sveltekit/index.js +2 -2
- package/dist/{ownership-Z2LpxsGa.js → tables-BqrxBCir.js} +641 -1104
- package/dist/tanstack-start/index.d.ts +22 -10
- package/dist/tanstack-start/index.js +2 -2
- package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
- package/dist/{tenancy-CmeBQ6Nv.js → tenancy-5d1zVBvK.js} +25 -19
- package/dist/terminal/index.d.ts +23 -14
- package/dist/terminal/index.js +17 -20
- package/dist/testing/core.d.ts +1 -1
- package/dist/testing/core.js +1 -1
- package/dist/testing/fixtures/index.d.ts +8 -5
- package/dist/testing/fixtures/index.js +78 -17
- package/dist/testing/index.d.ts +225 -141
- package/dist/testing/index.js +352 -234
- package/dist/testing/saas/index.d.ts +43 -27
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -1
- package/dist/{text-diff-DhITNCnD.js → text-diff-BtfSmdUo.js} +2 -2
- package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
- package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
- package/dist/{token-2qYDvXz2.js → token-DC9EQiet.js} +14 -12
- package/dist/{tool-refusal-reAhIzdl.js → tool-refusal-Qpjs_W6M.js} +5 -2
- package/dist/trpc/index.d.ts +11 -8
- package/dist/trpc/index.js +15 -9
- package/dist/type-helpers-c7Xo_2Cu.d.ts +50 -0
- package/dist/{types-CfiKC5aN.d.ts → types-B2efzoSX.d.ts} +14 -11
- package/dist/{types-CIeZcG8v.d.ts → types-B6ExllNo.d.ts} +2 -2
- package/dist/{types-DBHftjgS.d.ts → types-BB-zWDcR.d.ts} +45 -33
- package/dist/{types-BfVmNJO5.d.ts → types-BMVDHvI0.d.ts} +128 -50
- package/dist/{types-DXmwu78Z.d.ts → types-CEinc15V.d.ts} +31 -14
- package/dist/{types-g7Oy6Zg4.d.ts → types-CN0LsqbK.d.ts} +47 -24
- package/dist/{types-CeIscIKp.d.ts → types-CWBsAwqn.d.ts} +23 -12
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-BWZybqs9.d.ts → types-CzOeVvcC.d.ts} +384 -203
- package/dist/{types-DC44-hqb.d.ts → types-DLvhVm1r.d.ts} +59 -32
- package/dist/{types-D3A19w4A.d.ts → types-DlelvQk4.d.ts} +22 -13
- package/dist/{types-cTos-H7p.d.ts → types-DsHGPtkR.d.ts} +68 -32
- package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-CQVEQawv.d.ts → types-rCRV4Ge-.d.ts} +24 -14
- package/dist/types-tQB2CEnY.d.ts +262 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-0hjZPIRX.js +1 -0
- package/dist/{usage-Bybmck7f.js → usage-B9EtHWLa.js} +50 -26
- package/dist/{usage-CDaLXCfL.js → usage-CBzgwfIs.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-CQpoquwj.d.ts → validation-error-uvp-kyfO.d.ts} +5 -2
- package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
- package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
- package/dist/{verify-pe8rL_Qw.js → verify-DlUcTDBz.js} +148 -487
- package/dist/version-DMQ0dnN5.js +48 -0
- package/dist/version-DizhmD72.js +1 -0
- package/dist/{views-BB8E9dTP.js → views-CD8wuL4Z.js} +19 -6
- package/dist/{vocabulary-Bg3eeT2H.d.ts → vocabulary-DEJ5j4mR.d.ts} +7 -4
- package/dist/vue/index.d.ts +71 -22
- package/dist/vue/index.js +50 -13
- package/dist/{waiter-DwEyouan.d.ts → waiter-CqUKX6CY.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-C-4VmFlL.js → watch-BFDKqmUa.js} +8 -8
- package/dist/watch-ClLuO2TL.js +1 -0
- package/dist/webmcp/index.d.ts +11 -11
- package/dist/webmcp/index.js +8 -5
- package/dist/{where-scope-wq2coopv.js → where-scope-DlCdCM_8.js} +24 -18
- package/dist/{who-can-BwNsI_Js.js → who-can-BoDJm0Nc.js} +23 -20
- package/dist/workflow/index.d.ts +3 -3
- package/dist/workflow/index.js +13 -13
- package/dist/workflow-sdk/index.d.ts +19 -13
- package/dist/workflow-sdk/index.js +6 -6
- package/dist/{wrap-CiSc_KCq.js → wrap-B2wziJI_.js} +4 -4
- package/dist/{wrap-B6R0cMRL.d.ts → wrap-DxXB54Wu.d.ts} +8 -5
- package/package.json +8 -8
- package/schemas/catalog-v1.json +3 -0
- package/schemas/supabase-manifest-v1.json +33 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
- package/skills/permdock-data/references/queries-and-rls.md +2 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -2
- package/skills/permdock-wire/references/adapters.md +16 -23
- package/dist/catalog-BCCjSAdH.js +0 -1
- package/dist/collect-k_Dulxr5.js +0 -1
- package/dist/config-CoQHDrDi.js +0 -166
- package/dist/denied-text-D4qkEtFz.d.ts +0 -19
- package/dist/fields-ClcQLrVc.js +0 -238
- package/dist/generate-CNU1pIOo.js +0 -171
- package/dist/headers-BIjfMaoC.js +0 -8
- package/dist/headers-CIbDTUTK.d.ts +0 -7
- package/dist/load-DrMHXzgN.js +0 -1
- package/dist/output-files-DPAY7-GX.js +0 -1
- package/dist/package-root-Dk_ETdkp.js +0 -31
- package/dist/parse-local-manifest-e4mdwAKd.d.ts +0 -10
- package/dist/policies-B2lZIurj.js +0 -295
- package/dist/powersync-CExtTLyA.js +0 -1
- package/dist/problem-details-Tcfmj3bV.d.ts +0 -7
- package/dist/protected-BwZYL1X_.d.ts +0 -39
- package/dist/pull-Cty6Ovyu.js +0 -1
- package/dist/run-Bz7DXGEv.js +0 -1
- package/dist/stores-BAZwSYZA.d.ts +0 -31
- package/dist/supabase-hook-DJxC4PoP.js +0 -1
- package/dist/types-CKV71kKh.d.ts +0 -172
- package/dist/usage-y-kBNdqs.js +0 -1
- package/dist/version-CEbQ5UeM.js +0 -18
- package/dist/version-DXkYUISx.js +0 -1
- package/dist/watch-Bd9mx3rd.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { t as applyFiles } from "./files-
|
|
3
|
-
import { n as isIdentifier, t as emitPolicyModule } from "./policy-module-
|
|
2
|
+
import { t as applyFiles } from "./files-B3AA05f1.js";
|
|
3
|
+
import { n as isIdentifier, t as emitPolicyModule } from "./policy-module-xym9fnSq.js";
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
import { resolve } from "node:path";
|
|
6
6
|
//#region src/cli/importers/casl.ts
|
|
@@ -32,7 +32,10 @@ function isStrings(value) {
|
|
|
32
32
|
function split(item) {
|
|
33
33
|
return typeof item === "string" && item.includes(",") ? item.split(",") : item;
|
|
34
34
|
}
|
|
35
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* A rule in either shape: the object form, or `packRules`' `[action, subject,
|
|
37
|
+
* conditions, inverted, fields]`.
|
|
38
|
+
*/
|
|
36
39
|
function readRule(value) {
|
|
37
40
|
if (Array.isArray(value)) {
|
|
38
41
|
const [action, subject, conditions, inverted, fields] = value;
|
|
@@ -79,7 +82,10 @@ function readValue(value) {
|
|
|
79
82
|
}
|
|
80
83
|
return { unsupported: "a nested object value" };
|
|
81
84
|
}
|
|
82
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* The Mongo-query subset CASL conditions use, as a `where`; anything else is
|
|
87
|
+
* reported by name.
|
|
88
|
+
*/
|
|
83
89
|
function readConditions(conditions) {
|
|
84
90
|
const parts = [];
|
|
85
91
|
for (const [key, value] of Object.entries(conditions)) {
|
|
@@ -143,11 +149,11 @@ function collectActions(rule, subjects, actionsBySubject) {
|
|
|
143
149
|
}
|
|
144
150
|
}
|
|
145
151
|
/**
|
|
146
|
-
* CASL rules per role, as PermDock roles: `inverted` rules are denies,
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
152
|
+
* CASL rules per role, as PermDock roles: `inverted` rules are denies, `manage`
|
|
153
|
+
* and `all` expand to every action and subject the rules name, and conditions
|
|
154
|
+
* in the portable Mongo-query subset become `where`. A deny whose condition
|
|
155
|
+
* does not import keeps its effect without the condition, so the import can
|
|
156
|
+
* only deny more, never less.
|
|
151
157
|
*/
|
|
152
158
|
function importCasl(rulesByRole) {
|
|
153
159
|
const parsed = [];
|
|
@@ -249,7 +255,10 @@ function importCasl(rulesByRole) {
|
|
|
249
255
|
skipped
|
|
250
256
|
};
|
|
251
257
|
}
|
|
252
|
-
/**
|
|
258
|
+
/**
|
|
259
|
+
* `permdock casl import`: CASL rules per role into a `permissions` and `policy`
|
|
260
|
+
* module.
|
|
261
|
+
*/
|
|
253
262
|
function runCaslImport(input) {
|
|
254
263
|
if (input.rules === void 0 || input.out === void 0) return {
|
|
255
264
|
code: 2,
|
package/dist/catalog/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { T as Policy, a as ApprovalRequirement,
|
|
2
|
-
import { c as checkHostedGrant, n as HostedGrantCheck, o as PolicyDocument } from "../hosted-
|
|
3
|
-
import { a as CatalogDocument, c as CatalogOperation, d as CatalogRole, f as CatalogScope, h as CatalogValidity, i as CatalogDelegation, l as CatalogPermission, m as CatalogUsage, n as CatalogApproval, o as CatalogGrant, p as CatalogSupportAccess, r as CatalogBreakGlass, s as CatalogOAuthScope, t as CatalogActivation, u as CatalogResource } from "../types-
|
|
4
|
-
import { a as CatalogFinding, i as CatalogEventData } from "../sink-
|
|
5
|
-
import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-
|
|
1
|
+
import { T as Policy, a as ApprovalRequirement, pr as Principal } from "../policy-types-DGIO_gxq.js";
|
|
2
|
+
import { c as checkHostedGrant, n as HostedGrantCheck, o as PolicyDocument } from "../hosted-DVxlLZMe.js";
|
|
3
|
+
import { a as CatalogDocument, c as CatalogOperation, d as CatalogRole, f as CatalogScope, h as CatalogValidity, i as CatalogDelegation, l as CatalogPermission, m as CatalogUsage, n as CatalogApproval, o as CatalogGrant, p as CatalogSupportAccess, r as CatalogBreakGlass, s as CatalogOAuthScope, t as CatalogActivation, u as CatalogResource } from "../types-ZzRGoViD.js";
|
|
4
|
+
import { a as CatalogFinding, i as CatalogEventData } from "../sink-B5zoUW_O.js";
|
|
5
|
+
import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-CryQheKq.js";
|
|
6
6
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
7
7
|
//#region src/catalog/drift.d.ts
|
|
8
8
|
/**
|
|
@@ -14,7 +14,10 @@ export declare function hostedGrantFindings(policy: Policy, document: PolicyDocu
|
|
|
14
14
|
type CatalogDriftInput = {
|
|
15
15
|
readonly previous: CatalogDocument;
|
|
16
16
|
readonly next: CatalogDocument;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* The policy rebuilt from `next` (`policyFromCatalog`), which live hosted
|
|
19
|
+
* grants must still pass.
|
|
20
|
+
*/
|
|
18
21
|
readonly policy: Policy;
|
|
19
22
|
/** The live hosted grants; absent or `null` when the environment has none. */
|
|
20
23
|
readonly document?: PolicyDocument | null;
|
|
@@ -27,7 +30,10 @@ type CatalogDriftInput = {
|
|
|
27
30
|
export declare function catalogDrift(input: CatalogDriftInput): CatalogEventData;
|
|
28
31
|
//#endregion
|
|
29
32
|
//#region src/catalog/hosted-options.d.ts
|
|
30
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* The declared roles held at one scope: a scope name as declared, `resource`,
|
|
35
|
+
* or `global` for a role with no `on`.
|
|
36
|
+
*/
|
|
31
37
|
type HostedGrantRoleOption = {
|
|
32
38
|
readonly scope: string;
|
|
33
39
|
readonly roles: readonly string[];
|
|
@@ -37,7 +43,10 @@ type HostedGrantRelationOption = {
|
|
|
37
43
|
/** Present when the grant may walk the resource's own parent chain. */
|
|
38
44
|
readonly through?: "parent";
|
|
39
45
|
};
|
|
40
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* What a hosted grant on one hostable permission may say; any other value is
|
|
48
|
+
* dropped by `mergeHostedGrants`.
|
|
49
|
+
*/
|
|
41
50
|
type HostedGrantOption = {
|
|
42
51
|
readonly permission: string;
|
|
43
52
|
readonly resource: string;
|
|
@@ -49,11 +58,17 @@ type HostedGrantOption = {
|
|
|
49
58
|
readonly relations: readonly HostedGrantRelationOption[];
|
|
50
59
|
};
|
|
51
60
|
readonly approval: {
|
|
52
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* `true` when a code allow carries an approval: a hosted allow without one
|
|
63
|
+
* at least as strict is dropped (`weaker-approval`).
|
|
64
|
+
*/
|
|
53
65
|
readonly required: boolean;
|
|
54
66
|
/** The approvals code allows carry; a hosted allow must meet each. */
|
|
55
67
|
readonly meets: readonly ("human" | ApprovalRequirement)[];
|
|
56
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* `human` is `approval: 'human'`; `any` is the object form, any one
|
|
70
|
+
* approver per approval. `all` and `sequential` stages are never accepted.
|
|
71
|
+
*/
|
|
57
72
|
readonly modes: readonly ("human" | "any")[];
|
|
58
73
|
/** The object-form fields a hosted approval may set. */
|
|
59
74
|
readonly fields: readonly string[];
|
|
@@ -63,15 +78,18 @@ type HostedGrantOption = {
|
|
|
63
78
|
readonly conditions: {
|
|
64
79
|
/** `where` and `check` accept the portable condition subset only. */
|
|
65
80
|
readonly portable: true;
|
|
66
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* The resource's top-level fields, from its JSON Schema; `null` when the
|
|
83
|
+
* schema exposes none.
|
|
84
|
+
*/
|
|
67
85
|
readonly fields: readonly string[] | null;
|
|
68
86
|
};
|
|
69
87
|
};
|
|
70
88
|
/**
|
|
71
|
-
* What a hosted grant may say on each permission the policy marks
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
89
|
+
* What a hosted grant may say on each permission the policy marks `hostable`,
|
|
90
|
+
* in `hostable` order: the grantees, approval forms and conditions
|
|
91
|
+
* `mergeHostedGrants` accepts. For an authoring form; every grant it builds
|
|
92
|
+
* from these still goes through `checkHostedGrant`.
|
|
75
93
|
*/
|
|
76
94
|
export declare function hostedGrantOptions(policy: Policy): readonly HostedGrantOption[];
|
|
77
95
|
//#endregion
|
|
@@ -79,8 +97,8 @@ export declare function hostedGrantOptions(policy: Policy): readonly HostedGrant
|
|
|
79
97
|
/**
|
|
80
98
|
* A Standard Schema that validates against a catalog resource's JSON Schema.
|
|
81
99
|
* `null` (no JSON Schema in the catalog) gives `undefined`. A schema that uses
|
|
82
|
-
* a keyword outside the supported subset rejects every value, so a hosted
|
|
83
|
-
*
|
|
100
|
+
* a keyword outside the supported subset rejects every value, so a hosted check
|
|
101
|
+
* never validates less than the code did.
|
|
84
102
|
*/
|
|
85
103
|
export declare function resourceSchemaFromJson(json: unknown): StandardSchemaV1 | undefined;
|
|
86
104
|
//#endregion
|
|
@@ -95,8 +113,8 @@ type OperationCatalog = {
|
|
|
95
113
|
};
|
|
96
114
|
/**
|
|
97
115
|
* Operations, matched by name, whose `meta.risk` rose or whose permission
|
|
98
|
-
* stopped requiring approval between two catalogs. A new or removed
|
|
99
|
-
*
|
|
116
|
+
* stopped requiring approval between two catalogs. A new or removed operation
|
|
117
|
+
* is not a finding.
|
|
100
118
|
*/
|
|
101
119
|
export declare function operationFindings(previous: OperationCatalog, next: OperationCatalog): readonly CatalogFinding[];
|
|
102
120
|
//#endregion
|
|
@@ -113,12 +131,15 @@ type ParseCatalogOptions = {
|
|
|
113
131
|
* Reads a `permissions.catalog.json` document (parsed, or the JSON text),
|
|
114
132
|
* validates it against `schemas/catalog-v1.json`, then checks its references:
|
|
115
133
|
* role scopes, the permission keys operations, grants, delegations and OAuth
|
|
116
|
-
* scopes name, unique keys, and `requireMeta`. Returns a deep-frozen copy
|
|
117
|
-
*
|
|
118
|
-
*
|
|
134
|
+
* scopes name, unique keys, and `requireMeta`. Returns a deep-frozen copy built
|
|
135
|
+
* from own keys; throws `PermDockValidationError` with every issue, each with
|
|
136
|
+
* its `path`.
|
|
119
137
|
*/
|
|
120
138
|
export declare function parseCatalog(json: unknown, options?: ParseCatalogOptions): CatalogDocument;
|
|
121
|
-
/**
|
|
139
|
+
/**
|
|
140
|
+
* Keys of the permissions the catalog marks `rowConditions: true`: the SQL
|
|
141
|
+
* helpers alone cannot enforce them.
|
|
142
|
+
*/
|
|
122
143
|
export declare function rowConditionKeys(catalog: CatalogDocument): ReadonlySet<string>;
|
|
123
144
|
//#endregion
|
|
124
145
|
//#region src/catalog/policy-from-catalog.d.ts
|
|
@@ -130,14 +151,14 @@ type PolicyFromCatalogOptions<TUser = unknown> = {
|
|
|
130
151
|
* Rebuilds an evaluable `Policy` from a catalog (`permissions.catalog.json`)
|
|
131
152
|
* and the policy `permdock cloud push` sent with it, for a service that holds
|
|
132
153
|
* no application code: the hosted AuthZEN endpoint or a `mergeHostedGrants`
|
|
133
|
-
* pre-check. Throws `PermDockValidationError` when either input is malformed
|
|
134
|
-
*
|
|
154
|
+
* pre-check. Throws `PermDockValidationError` when either input is malformed or
|
|
155
|
+
* the two disagree.
|
|
135
156
|
*
|
|
136
|
-
* What only code can answer fails closed: an allow whose condition is a
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
157
|
+
* What only code can answer fails closed: an allow whose condition is a closure
|
|
158
|
+
* never grants and such a deny always applies; a resource schema keyword
|
|
159
|
+
* outside the supported JSON Schema subset rejects every value; a support role
|
|
160
|
+
* has no one who may consent. Grant levels and OAuth scopes are not in a
|
|
161
|
+
* catalog, so the rebuilt policy has none.
|
|
141
162
|
*/
|
|
142
163
|
export declare function policyFromCatalog<TUser = unknown>(catalogInput: unknown, pushedInput: unknown, options?: PolicyFromCatalogOptions<TUser>): Policy<TUser>;
|
|
143
164
|
//#endregion
|
package/dist/catalog/index.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { r as isRecord } from "../compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "../freeze-
|
|
3
|
-
import { a as getResource, n as findPermission } from "../permission-registry-
|
|
4
|
-
import { d as isSelfParented } from "../resource-relations-
|
|
5
|
-
import { _ as listPlans, m as findRole } from "../grantee-
|
|
6
|
-
import {
|
|
7
|
-
import { i as hostedGrantDrops, n as codeApprovals, r as declaredGrantee, t as checkHostedGrant } from "../hosted-
|
|
8
|
-
import { n as rowConditionKeys, t as parseCatalog } from "../parse-
|
|
9
|
-
import { t as operationFindings } from "../operation-findings-
|
|
10
|
-
import { n as resourceSchemaFromJson, t as policyFromCatalog } from "../policy-from-catalog-
|
|
11
|
-
import { n as parsePushedPolicy, r as pushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-
|
|
2
|
+
import { n as freezeDeep } from "../freeze-jjan0lCv.js";
|
|
3
|
+
import { a as getResource, n as findPermission } from "../permission-registry-B8tYxPIt.js";
|
|
4
|
+
import { d as isSelfParented } from "../resource-relations-8-pCScBO.js";
|
|
5
|
+
import { _ as listPlans, m as findRole } from "../grantee-Dke-9rd1.js";
|
|
6
|
+
import { n as declaredRoleNames } from "../policy-CLQ8__GF.js";
|
|
7
|
+
import { i as hostedGrantDrops, n as codeApprovals, r as declaredGrantee, t as checkHostedGrant } from "../hosted-D0IzESu_.js";
|
|
8
|
+
import { n as rowConditionKeys, t as parseCatalog } from "../parse-1_ZheTW5.js";
|
|
9
|
+
import { t as operationFindings } from "../operation-findings-CXtFzlKJ.js";
|
|
10
|
+
import { n as resourceSchemaFromJson, t as policyFromCatalog } from "../policy-from-catalog-CU3An8uP.js";
|
|
11
|
+
import { n as parsePushedPolicy, r as pushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-CDuOL2de.js";
|
|
12
12
|
//#region src/catalog/drift.ts
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* The finding a drop reason becomes; `null` for a reason the catalog did not
|
|
15
|
+
* cause.
|
|
16
|
+
*/
|
|
14
17
|
function findingCode(reason) {
|
|
15
18
|
switch (reason) {
|
|
16
19
|
case "unknown-permission": return "permission-removed";
|
|
@@ -142,10 +145,10 @@ function optionFor(policy, key) {
|
|
|
142
145
|
};
|
|
143
146
|
}
|
|
144
147
|
/**
|
|
145
|
-
* What a hosted grant may say on each permission the policy marks
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
148
|
+
* What a hosted grant may say on each permission the policy marks `hostable`,
|
|
149
|
+
* in `hostable` order: the grantees, approval forms and conditions
|
|
150
|
+
* `mergeHostedGrants` accepts. For an authoring form; every grant it builds
|
|
151
|
+
* from these still goes through `checkHostedGrant`.
|
|
149
152
|
*/
|
|
150
153
|
function hostedGrantOptions(policy) {
|
|
151
154
|
return freezeDeep(policy.hostable.flatMap((key) => {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { r as listSourceFiles, t as defaultSrcPath } from "./files-
|
|
3
|
-
import { a as catalogSchemaDocument, n as catalogForCompare, o as formatCatalogJson, r as catalogForDrift, s as formatCatalogMarkdown, t as buildCatalog } from "./catalog-doc-
|
|
4
|
-
import { a as loadModule, i as loadConfiguredPolicy, r as leavesOf, s as pickNamed, t as asPermissionTree } from "./load-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { r as listSourceFiles, t as defaultSrcPath } from "./files-BSjrtIHw.js";
|
|
3
|
+
import { a as catalogSchemaDocument, n as catalogForCompare, o as formatCatalogJson, r as catalogForDrift, s as formatCatalogMarkdown, t as buildCatalog } from "./catalog-doc-DjMKzJp9.js";
|
|
4
|
+
import { a as loadModule, i as loadConfiguredPolicy, r as leavesOf, s as pickNamed, t as asPermissionTree } from "./load-DjSU5KXO.js";
|
|
5
|
+
import { t as loadConfiguredOperations } from "./catalog-operations-DeHTrJSV.js";
|
|
6
|
+
import { i as scanSources, r as runCollect } from "./collect-WCl8cJQV.js";
|
|
7
|
+
import { n as fileSummary, t as applyFiles } from "./files-B3AA05f1.js";
|
|
7
8
|
import { existsSync, readFileSync } from "node:fs";
|
|
8
9
|
import { resolve } from "node:path";
|
|
9
10
|
//#region src/cli/catalog.ts
|
|
@@ -14,18 +15,7 @@ async function runCatalog(input) {
|
|
|
14
15
|
};
|
|
15
16
|
const from = input.from ?? input.config.permissions;
|
|
16
17
|
let document;
|
|
17
|
-
if (from
|
|
18
|
-
const abs = resolve(input.cwd, from);
|
|
19
|
-
if (!existsSync(abs)) return {
|
|
20
|
-
code: 2,
|
|
21
|
-
output: `PermDock CLI: module not found: ${from}`
|
|
22
|
-
};
|
|
23
|
-
const tree = asPermissionTree(pickNamed(await loadModule(abs), ["permissions"]));
|
|
24
|
-
const srcPath = input.config.collect?.srcPath ?? defaultSrcPath();
|
|
25
|
-
const files = listSourceFiles(input.cwd, srcPath);
|
|
26
|
-
const scan = scanSources(input.cwd, files, new Set(leavesOf(tree).map((leaf) => leaf.key)));
|
|
27
|
-
document = buildCatalog(tree, scan, input.now.toISOString(), await loadConfiguredPolicy(input.cwd, input.config.policy), await loadConfiguredOperations(input.cwd, input.config.operations));
|
|
28
|
-
} else {
|
|
18
|
+
if (from === void 0) {
|
|
29
19
|
const collected = await runCollect({
|
|
30
20
|
cwd: input.cwd,
|
|
31
21
|
config: input.config,
|
|
@@ -39,6 +29,17 @@ async function runCatalog(input) {
|
|
|
39
29
|
output: collected.message
|
|
40
30
|
};
|
|
41
31
|
document = collected.document;
|
|
32
|
+
} else {
|
|
33
|
+
const abs = resolve(input.cwd, from);
|
|
34
|
+
if (!existsSync(abs)) return {
|
|
35
|
+
code: 2,
|
|
36
|
+
output: `PermDock CLI: module not found: ${from}`
|
|
37
|
+
};
|
|
38
|
+
const tree = asPermissionTree(pickNamed(await loadModule(abs), ["permissions"]));
|
|
39
|
+
const srcPath = input.config.collect?.srcPath ?? defaultSrcPath();
|
|
40
|
+
const files = listSourceFiles(input.cwd, srcPath);
|
|
41
|
+
const scan = scanSources(input.cwd, files, new Set(leavesOf(tree).map((leaf) => leaf.key)));
|
|
42
|
+
document = buildCatalog(tree, scan, input.now.toISOString(), await loadConfiguredPolicy(input.cwd, input.config.policy), await loadConfiguredOperations(input.cwd, input.config.operations));
|
|
42
43
|
}
|
|
43
44
|
const filtered = input.include.length === 0 ? document : {
|
|
44
45
|
...document,
|
|
@@ -54,8 +55,8 @@ async function runCatalog(input) {
|
|
|
54
55
|
};
|
|
55
56
|
}
|
|
56
57
|
/**
|
|
57
|
-
* The comparable forms of a catalog file: without the fields every run
|
|
58
|
-
*
|
|
58
|
+
* The comparable forms of a catalog file: without the fields every run changes,
|
|
59
|
+
* then also without `usages[].line`.
|
|
59
60
|
*/
|
|
60
61
|
function comparable(text) {
|
|
61
62
|
try {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as catalogFile, n as runCatalog } from "./catalog-CGlSwU6j.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as missingInput } from "./errors-
|
|
1
|
+
import { c as missingInput } from "./errors-Vpu6rKHl.js";
|
|
2
2
|
import { t as defineLeaf } from "./command-L8EstFNm.js";
|
|
3
|
-
import { c as given, l as outFlag, t as checkFlag, u as permissionsFlag } from "./flags-
|
|
3
|
+
import { c as given, l as outFlag, t as checkFlag, u as permissionsFlag } from "./flags-DXjoTVbS.js";
|
|
4
4
|
//#region src/cli/commands/catalog.ts
|
|
5
5
|
const RUN_FORMAT = {
|
|
6
6
|
catalog: "json",
|
|
@@ -30,7 +30,7 @@ const catalog = defineLeaf({
|
|
|
30
30
|
...checkFlag
|
|
31
31
|
},
|
|
32
32
|
async run(ctx, { flags }) {
|
|
33
|
-
const { catalogFile, runCatalog } = await import("./catalog-
|
|
33
|
+
const { catalogFile, runCatalog } = await import("./catalog-D3oS2GH3.js");
|
|
34
34
|
const result = await runCatalog({
|
|
35
35
|
cwd: ctx.cwd,
|
|
36
36
|
config: ctx.config,
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { a as getResource, c as listPermissions, h as formerKeys } from "./permission-registry-
|
|
2
|
+
import { a as getResource, c as listPermissions, h as formerKeys } from "./permission-registry-B8tYxPIt.js";
|
|
3
3
|
import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
|
|
4
|
-
import { m as findRole, v as listRoles } from "./grantee-
|
|
5
|
-
import { i as wireValidity } from "./validity-
|
|
6
|
-
import { t as byCodePoint } from "./compare-
|
|
7
|
-
import { t as catalogFingerprint } from "./catalog-fingerprint-
|
|
8
|
-
import { t as catalogSchema } from "./schema-
|
|
9
|
-
import { t as policyRowConditionKeys } from "./row-conditions-
|
|
10
|
-
import { c as generatorBanner, n as CATALOG_SCHEMA } from "./version-
|
|
4
|
+
import { m as findRole, v as listRoles } from "./grantee-Dke-9rd1.js";
|
|
5
|
+
import { i as wireValidity } from "./validity-Buc7w8E9.js";
|
|
6
|
+
import { t as byCodePoint } from "./compare-DTfyUunF.js";
|
|
7
|
+
import { t as catalogFingerprint } from "./catalog-fingerprint-e6aCWosn.js";
|
|
8
|
+
import { t as catalogSchema } from "./schema-BOJjqlWL.js";
|
|
9
|
+
import { t as policyRowConditionKeys } from "./row-conditions-BAGHOmVq.js";
|
|
10
|
+
import { c as generatorBanner, n as CATALOG_SCHEMA } from "./version-DMQ0dnN5.js";
|
|
11
11
|
//#region src/cli/catalog-doc.ts
|
|
12
12
|
function leafLevels(tree, leaf) {
|
|
13
13
|
if (leaf.kind !== "instance") return;
|
|
14
14
|
const names = Object.keys({ ...getResource(tree, leaf.resource)?.levels });
|
|
15
15
|
return names.length === 0 ? void 0 : names;
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* With `policy`, permissions carry `hostable` and a known `rowConditions`
|
|
19
|
+
* (without, it is `true`), and roles carry `on`, `assignable` and their
|
|
20
|
+
* ownership rules.
|
|
21
|
+
*/
|
|
18
22
|
function buildCatalog(tree, scan, generatedAt, policy, operations) {
|
|
19
23
|
const hostable = new Set(policy?.hostable ?? []);
|
|
20
24
|
const rowConditions = policy === void 0 ? void 0 : policyRowConditionKeys(policy);
|
|
@@ -51,6 +55,7 @@ function buildCatalog(tree, scan, generatedAt, policy, operations) {
|
|
|
51
55
|
usages: scan.usages[leaf.key] ?? [],
|
|
52
56
|
renamedFrom: formerKeys(leaf).length === 0 ? void 0 : formerKeys(leaf),
|
|
53
57
|
levels: leafLevels(tree, leaf),
|
|
58
|
+
orderedLevels: leaf.kind === "instance" && getResource(tree, leaf.resource)?.orderedLevels === true ? true : void 0,
|
|
54
59
|
hostable: hostable.has(leaf.key) ? true : void 0,
|
|
55
60
|
rowConditions: rowConditions?.has(leaf.key) ?? true,
|
|
56
61
|
approvals: approvals.get(leaf.key),
|
|
@@ -95,8 +100,8 @@ function catalogApproval(approval) {
|
|
|
95
100
|
/**
|
|
96
101
|
* Every code grant in canonical order: by permission, allows before denies,
|
|
97
102
|
* then by role (top-level grants last) and finally by canonical JSON, so two
|
|
98
|
-
* catalogs of the same policy list the same grants in the same order
|
|
99
|
-
*
|
|
103
|
+
* catalogs of the same policy list the same grants in the same order whatever
|
|
104
|
+
* the declaration order was.
|
|
100
105
|
*/
|
|
101
106
|
function catalogGrant(grant) {
|
|
102
107
|
const limit = grant.limit === void 0 ? void 0 : withDefined({
|
|
@@ -125,7 +130,10 @@ function catalogGrant(grant) {
|
|
|
125
130
|
})
|
|
126
131
|
};
|
|
127
132
|
}
|
|
128
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* The sort key of a catalog grant: permission, allows first, role (top-level
|
|
135
|
+
* last), then the canonical JSON.
|
|
136
|
+
*/
|
|
129
137
|
function catalogGrantKey(grant) {
|
|
130
138
|
return [
|
|
131
139
|
grant.permission,
|
|
@@ -145,7 +153,10 @@ function catalogGrants(policy) {
|
|
|
145
153
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
146
154
|
});
|
|
147
155
|
}
|
|
148
|
-
/**
|
|
156
|
+
/**
|
|
157
|
+
* Every policy delegation, sorted by canonical JSON so declaration order does
|
|
158
|
+
* not matter.
|
|
159
|
+
*/
|
|
149
160
|
function catalogDelegations(policy) {
|
|
150
161
|
return (policy.delegations ?? []).map((delegation) => withDefined({
|
|
151
162
|
from: delegation.from,
|
|
@@ -164,7 +175,10 @@ function catalogOAuthScopes(declared) {
|
|
|
164
175
|
permissions: [...new Set(entry.permissions)].toSorted(byCodePoint)
|
|
165
176
|
})).toSorted((a, b) => byCodePoint(a.scope, b.scope));
|
|
166
177
|
}
|
|
167
|
-
/**
|
|
178
|
+
/**
|
|
179
|
+
* Per permission key, the distinct approvals the code allows require, in policy
|
|
180
|
+
* order.
|
|
181
|
+
*/
|
|
168
182
|
function codeApprovals(policy) {
|
|
169
183
|
const out = /* @__PURE__ */ new Map();
|
|
170
184
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
3
|
-
import { n as isForbiddenKey } from "./paths-
|
|
4
|
-
import { l as isRfc3339 } from "./time-
|
|
2
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { n as isForbiddenKey } from "./paths-CUvURzHp.js";
|
|
4
|
+
import { l as isRfc3339 } from "./time-nR1JesoH.js";
|
|
5
5
|
import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
|
|
6
|
-
import { r as sha256Digest } from "./sha256-
|
|
7
|
-
import { C as EVENT_SCHEMA_IDS, T as SINK_EVENT_SCHEMAS, i as RESERVED_CLOUD_EVENT_TYPES, l as isAbsoluteUri, r as CLOUD_EVENT_TYPES, s as cloudEventType, u as isTraceparent, v as CATALOG_EVENT_SCHEMA } from "./sink-
|
|
8
|
-
import { n as copyJson, t as checkSchema } from "./json-schema-
|
|
6
|
+
import { r as sha256Digest } from "./sha256-C-4WXKIu.js";
|
|
7
|
+
import { C as EVENT_SCHEMA_IDS, T as SINK_EVENT_SCHEMAS, i as RESERVED_CLOUD_EVENT_TYPES, l as isAbsoluteUri, r as CLOUD_EVENT_TYPES, s as cloudEventType, u as isTraceparent, v as CATALOG_EVENT_SCHEMA } from "./sink-D9_vh372.js";
|
|
8
|
+
import { n as copyJson, t as checkSchema } from "./json-schema-BPGa-RjQ.js";
|
|
9
9
|
//#region src/core/parse-sink-events.ts
|
|
10
10
|
function hasUnsafeKey(value) {
|
|
11
11
|
if (Array.isArray(value)) return value.some(hasUnsafeKey);
|
|
@@ -32,8 +32,8 @@ function rulesHold(event) {
|
|
|
32
32
|
return true;
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
|
-
* Validates one untrusted sink event against its family's schema and returns
|
|
36
|
-
*
|
|
35
|
+
* Validates one untrusted sink event against its family's schema and returns a
|
|
36
|
+
* frozen copy, or `null` for anything else. Never throws.
|
|
37
37
|
*/
|
|
38
38
|
function parseSinkEvent(value) {
|
|
39
39
|
if (!isRecord(value)) return null;
|
|
@@ -46,8 +46,8 @@ function parseSinkEvent(value) {
|
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
48
|
* Validates an untrusted list of sink events, such as a request body a sink
|
|
49
|
-
* receiver read. Each event that fails its schema is dropped, and a value
|
|
50
|
-
*
|
|
49
|
+
* receiver read. Each event that fails its schema is dropped, and a value that
|
|
50
|
+
* is not an array yields no events. Never throws.
|
|
51
51
|
*/
|
|
52
52
|
function parseSinkEvents(value) {
|
|
53
53
|
if (!Array.isArray(value)) return Object.freeze([]);
|
|
@@ -56,7 +56,10 @@ function parseSinkEvents(value) {
|
|
|
56
56
|
return event === null ? [] : [event];
|
|
57
57
|
}));
|
|
58
58
|
}
|
|
59
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Validates the data of a `com.permdock.catalog.*` CloudEvent; `null` when it
|
|
61
|
+
* does not match.
|
|
62
|
+
*/
|
|
60
63
|
function parseCatalogEventData(value) {
|
|
61
64
|
const copy = jsonMatching(value, CATALOG_EVENT_SCHEMA);
|
|
62
65
|
return copy === null ? null : freezeDeep(copy);
|
|
@@ -141,9 +144,10 @@ function fingerprintInput(catalog) {
|
|
|
141
144
|
return out;
|
|
142
145
|
}
|
|
143
146
|
/**
|
|
144
|
-
* The catalog v1 fingerprint: the `sha-256:` digest of its RFC 8785 JSON
|
|
145
|
-
*
|
|
146
|
-
* call sites
|
|
147
|
+
* The catalog v1 fingerprint: the `sha-256:` digest of its RFC 8785 JSON
|
|
148
|
+
* without `generatedAt`, `generator`, `fingerprint` and every
|
|
149
|
+
* `permissions[].usages`, so neither the CLI version, the clock nor call sites
|
|
150
|
+
* change it.
|
|
147
151
|
*/
|
|
148
152
|
function catalogFingerprint(catalog) {
|
|
149
153
|
if (!isRecord(catalog)) throw new TypeError("PermDock: a catalog must be an object");
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { A as isOperationEffect } from "./src-C_pi2Rnh.js";
|
|
3
|
+
import { o as isPermission } from "./permission-registry-B8tYxPIt.js";
|
|
4
|
+
import { r as isOperationRisk } from "./permissions-CVXmRILq.js";
|
|
5
|
+
import { i as configError } from "./errors-Vpu6rKHl.js";
|
|
6
|
+
import { a as rel } from "./files-BSjrtIHw.js";
|
|
7
|
+
import { a as loadModule, s as pickNamed } from "./load-DjSU5KXO.js";
|
|
8
|
+
import { existsSync } from "node:fs";
|
|
9
|
+
import { resolve } from "node:path";
|
|
10
|
+
//#region src/cli/catalog-operations.ts
|
|
11
|
+
function metaOf(name, value) {
|
|
12
|
+
const fail = (field) => {
|
|
13
|
+
throw configError(`PermDock CLI: operations.${name}.meta${field} is invalid`);
|
|
14
|
+
};
|
|
15
|
+
if (!isRecord(value)) return fail("");
|
|
16
|
+
const { risk, effects, title } = value;
|
|
17
|
+
if (risk !== void 0 && !isOperationRisk(risk)) return fail(".risk");
|
|
18
|
+
if (effects !== void 0 && (!Array.isArray(effects) || !effects.every(isOperationEffect))) return fail(".effects");
|
|
19
|
+
if (title !== void 0 && typeof title !== "string") return fail(".title");
|
|
20
|
+
return {
|
|
21
|
+
...risk === void 0 ? {} : { risk },
|
|
22
|
+
...effects === void 0 ? {} : { effects },
|
|
23
|
+
...title === void 0 ? {} : { title }
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The catalog entries of a `defineOperations` map, in definition order. Throws
|
|
28
|
+
* for a value that is not one, such as a module that exports the definitions
|
|
29
|
+
* object instead of the map.
|
|
30
|
+
*/
|
|
31
|
+
function catalogOperations(value) {
|
|
32
|
+
if (!isRecord(value)) throw configError("PermDock CLI: operations export is not an operation map");
|
|
33
|
+
const out = [];
|
|
34
|
+
for (const name of Object.keys(value)) {
|
|
35
|
+
const operation = value[name];
|
|
36
|
+
if (!isRecord(operation) || operation["name"] !== name || !isPermission(operation["permission"])) throw configError(`PermDock CLI: operations.${name} is not an operation; export the defineOperations result`);
|
|
37
|
+
const results = operation["results"];
|
|
38
|
+
if (results !== void 0 && !isPermission(results)) throw configError(`PermDock CLI: operations.${name}.results is not a permission`);
|
|
39
|
+
out.push({
|
|
40
|
+
name,
|
|
41
|
+
permission: operation["permission"].key,
|
|
42
|
+
...results === void 0 ? {} : { results: results.key },
|
|
43
|
+
meta: metaOf(name, operation["meta"])
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The configured operations module's catalog entries; `undefined` without one.
|
|
50
|
+
* Throws when it is missing or does not load.
|
|
51
|
+
*/
|
|
52
|
+
async function loadConfiguredOperations(cwd, path, options) {
|
|
53
|
+
if (path === void 0) return;
|
|
54
|
+
const abs = resolve(cwd, path);
|
|
55
|
+
if (!existsSync(abs)) throw configError(`PermDock CLI: operations module not found: ${rel(cwd, abs)}`);
|
|
56
|
+
const mod = await loadModule(abs, options);
|
|
57
|
+
return catalogOperations(pickNamed(mod, ["operations"]));
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { loadConfiguredOperations as t };
|