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,29 +1,29 @@
|
|
|
1
1
|
import { n as isReadonlyArray, r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
3
|
-
import { n as isForbiddenKey, r as ownGet } from "./paths-
|
|
4
|
-
import { f as normalizeApproval, g as assertSqlFunctionName, h as assertSqlFunctionArg, m as assertPortableTwin, p as normalizeWhere, u as assertApprovalRelations } from "./role-builder-
|
|
5
|
-
import { n as PermDockDeniedError } from "./errors-
|
|
6
|
-
import { o as sameId } from "./expiry-
|
|
7
|
-
import { n as internalsOf } from "./internals-
|
|
8
|
-
import { c as listPermissions, i as getRegistry, n as findPermission, o as isPermission } from "./permission-registry-
|
|
9
|
-
import { n as isThenable$1 } from "./thenable-
|
|
10
|
-
import { c as isEdgeRelation, m as restrictedStops, o as groupEntries, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-
|
|
11
|
-
import { a as durationOf, g as secondsOf, m as rfc3339, p as nowSeconds } from "./time-
|
|
12
|
-
import { a as normalizeMembership$1, d as scopeIdOf, f as scopeList, h as tenantOf, o as normalizeMemberships$1, s as resolveScope$1, u as scopeChain } from "./scopes-
|
|
13
|
-
import { u as evaluateCondition } from "./delegation-
|
|
14
|
-
import { _ as listPlans, a as authenticated, m as findRole, o as flattenGrantee } from "./grantee-
|
|
15
|
-
import { m as tenantsOf, r as isMembershipExpired } from "./tenancy-
|
|
16
|
-
import {
|
|
17
|
-
import { o as isPortableCondition } from "./hosted-
|
|
18
|
-
import { n as OPERATION_RISKS, r as isOperationRisk } from "./permissions-
|
|
19
|
-
import { C as tenantCustomRoles, f as customRoleId, l as ceilingGrants, m as customRoleScope, p as customRoleOf, x as resolveCustomRole } from "./evaluate-
|
|
20
|
-
import {
|
|
21
|
-
import { n as relationId } from "./relations-
|
|
22
|
-
import {
|
|
23
|
-
import { n as LOCAL_CUSTOM_ROLE } from "./parse-local-manifest-
|
|
24
|
-
import { c as APP, r as resolveSubject } from "./permdock-
|
|
25
|
-
import { i as memoryApprovalStore } from "./store-
|
|
26
|
-
import { n as wrapPermDock } from "./wrap-
|
|
2
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { n as isForbiddenKey, r as ownGet } from "./paths-CUvURzHp.js";
|
|
4
|
+
import { f as normalizeApproval, g as assertSqlFunctionName, h as assertSqlFunctionArg, m as assertPortableTwin, p as normalizeWhere, u as assertApprovalRelations } from "./role-builder-BK2-T6oD.js";
|
|
5
|
+
import { n as PermDockDeniedError } from "./errors-B6R_lg2a.js";
|
|
6
|
+
import { o as sameId } from "./expiry-6XByK0dm.js";
|
|
7
|
+
import { n as internalsOf } from "./internals-B3IgHrvo.js";
|
|
8
|
+
import { c as listPermissions, i as getRegistry, n as findPermission, o as isPermission } from "./permission-registry-B8tYxPIt.js";
|
|
9
|
+
import { n as isThenable$1 } from "./thenable-BNSM1U2R.js";
|
|
10
|
+
import { c as isEdgeRelation, m as restrictedStops, o as groupEntries, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-8-pCScBO.js";
|
|
11
|
+
import { a as durationOf, f as nowMillis, g as secondsOf, m as rfc3339, p as nowSeconds } from "./time-nR1JesoH.js";
|
|
12
|
+
import { a as normalizeMembership$1, d as scopeIdOf, f as scopeList, h as tenantOf, l as rootScope, o as normalizeMemberships$1, s as resolveScope$1, u as scopeChain } from "./scopes-0Up_UA2t.js";
|
|
13
|
+
import { u as evaluateCondition } from "./delegation-CDB6_keF.js";
|
|
14
|
+
import { _ as listPlans, a as authenticated, m as findRole, o as flattenGrantee } from "./grantee-Dke-9rd1.js";
|
|
15
|
+
import { m as tenantsOf, r as isMembershipExpired } from "./tenancy-5d1zVBvK.js";
|
|
16
|
+
import { c as levelNames, i as grantList, n as declaredRoleNames } from "./policy-CLQ8__GF.js";
|
|
17
|
+
import { o as isPortableCondition } from "./hosted-D0IzESu_.js";
|
|
18
|
+
import { n as OPERATION_RISKS, r as isOperationRisk } from "./permissions-CVXmRILq.js";
|
|
19
|
+
import { C as tenantCustomRoles, S as roleAllowKeys, f as customRoleId, l as ceilingGrants, m as customRoleScope, p as customRoleOf, x as resolveCustomRole } from "./evaluate-BAmf_AQd.js";
|
|
20
|
+
import { a as heldLevels, f as bindingOf, h as usesAssigns, m as roleMeta, n as snapshotScopes, o as collectSnapshotGrants, p as rankRoles, r as assignableCandidates, t as snapshotOf } from "./instance-snapshot-DuWf1cT3.js";
|
|
21
|
+
import { n as relationId } from "./relations-BxvRvDHK.js";
|
|
22
|
+
import { i as snapshotGrant, r as plainPermission, t as buildSnapshot } from "./snapshot-CXlzi69u.js";
|
|
23
|
+
import { n as LOCAL_CUSTOM_ROLE } from "./parse-local-manifest-DEiCF4ah.js";
|
|
24
|
+
import { c as APP, r as resolveSubject } from "./permdock-BvjivVb9.js";
|
|
25
|
+
import { i as memoryApprovalStore } from "./store-RNFvaJJv.js";
|
|
26
|
+
import { n as wrapPermDock } from "./wrap-B2wziJI_.js";
|
|
27
27
|
//#region src/conditions/sql-function.ts
|
|
28
28
|
function sqlFunction(name, options) {
|
|
29
29
|
assertSqlFunctionName(name);
|
|
@@ -51,7 +51,10 @@ function memorySettingsSource(settings) {
|
|
|
51
51
|
return byTenant.get(tenant);
|
|
52
52
|
} });
|
|
53
53
|
}
|
|
54
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Memberships keyed by principal id; `tenant` is not a filter, as for a
|
|
56
|
+
* database source.
|
|
57
|
+
*/
|
|
55
58
|
function memoryMembershipSource(entries) {
|
|
56
59
|
const byPrincipal = new Map(Object.entries(entries));
|
|
57
60
|
return Object.freeze({
|
|
@@ -125,7 +128,10 @@ const OPERATION_EFFECTS = Object.freeze([
|
|
|
125
128
|
"spend",
|
|
126
129
|
"external"
|
|
127
130
|
]);
|
|
128
|
-
/**
|
|
131
|
+
/**
|
|
132
|
+
* MCP tool-name characters (MCP 2025-11-25, Tools: Tool names), so a name works
|
|
133
|
+
* as a tool name unchanged.
|
|
134
|
+
*/
|
|
129
135
|
const NAME = /^[A-Za-z0-9_.-]{1,128}$/u;
|
|
130
136
|
const META_KEYS = /* @__PURE__ */ new Set([
|
|
131
137
|
"risk",
|
|
@@ -199,7 +205,10 @@ function defineOperations(permissions, definitions) {
|
|
|
199
205
|
}
|
|
200
206
|
//#endregion
|
|
201
207
|
//#region src/core/approval-policies.ts
|
|
202
|
-
/**
|
|
208
|
+
/**
|
|
209
|
+
* The denial detail when an `ApprovalPolicySource` fails: every call an allow
|
|
210
|
+
* would grant denies with reason `approval`.
|
|
211
|
+
*/
|
|
203
212
|
/**
|
|
204
213
|
* The in-process `ApprovalPolicySource`, usable directly as the
|
|
205
214
|
* `approvalPolicies` option: it is the source and its feature at once.
|
|
@@ -284,9 +293,9 @@ function checkOne(policy, raw) {
|
|
|
284
293
|
}) };
|
|
285
294
|
}
|
|
286
295
|
/**
|
|
287
|
-
* Checks one entry against the policy the way `approvalPoliciesFor` loads
|
|
288
|
-
*
|
|
289
|
-
*
|
|
296
|
+
* Checks one entry against the policy the way `approvalPoliciesFor` loads it,
|
|
297
|
+
* for an application to refuse a bad entry when it is saved instead of finding
|
|
298
|
+
* every call denied. Never throws.
|
|
290
299
|
*/
|
|
291
300
|
function validateApprovalPolicy(policy, entry) {
|
|
292
301
|
try {
|
|
@@ -303,9 +312,9 @@ function validateApprovalPolicy(policy, entry) {
|
|
|
303
312
|
}
|
|
304
313
|
}
|
|
305
314
|
/**
|
|
306
|
-
* One raw entry checked against the policy: `null` when it names no
|
|
307
|
-
*
|
|
308
|
-
*
|
|
315
|
+
* One raw entry checked against the policy: `null` when it names no permission
|
|
316
|
+
* the policy declares (it applies to nothing), `undefined` when it does not
|
|
317
|
+
* load.
|
|
309
318
|
*/
|
|
310
319
|
function loadOne(policy, raw) {
|
|
311
320
|
const checked = checkOne(policy, raw);
|
|
@@ -322,7 +331,10 @@ function loadAll(policy, raw) {
|
|
|
322
331
|
}
|
|
323
332
|
return Object.freeze({ tighten: (code, input) => tightenApproval(code, out, input) });
|
|
324
333
|
}
|
|
325
|
-
/**
|
|
334
|
+
/**
|
|
335
|
+
* Reads the source once for `tenants`; a throw or an invalid entry loads as
|
|
336
|
+
* `"failed"`.
|
|
337
|
+
*/
|
|
326
338
|
function approvalPoliciesFor(policy, source, tenants, auth) {
|
|
327
339
|
const threw = () => {
|
|
328
340
|
auth.push({
|
|
@@ -361,7 +373,10 @@ function asStages(approval) {
|
|
|
361
373
|
quorum: approval.quorum
|
|
362
374
|
})];
|
|
363
375
|
}
|
|
364
|
-
/**
|
|
376
|
+
/**
|
|
377
|
+
* An entry's stages, each carrying the entry's escalation unless it has its
|
|
378
|
+
* own.
|
|
379
|
+
*/
|
|
365
380
|
function entryStages(approval) {
|
|
366
381
|
const stages = asStages(approval);
|
|
367
382
|
if (approval === "human" || approval.escalation === void 0) return stages;
|
|
@@ -378,10 +393,10 @@ function shorter(a, b) {
|
|
|
378
393
|
return (durationOf(b) ?? Infinity) < (durationOf(a) ?? Infinity) ? b : a;
|
|
379
394
|
}
|
|
380
395
|
/**
|
|
381
|
-
* `code` with every matching entry added as further stages: the result
|
|
382
|
-
*
|
|
383
|
-
*
|
|
384
|
-
*
|
|
396
|
+
* `code` with every matching entry added as further stages: the result needs
|
|
397
|
+
* all of them (`'sequential'` when any part is ordered), keeps the code's
|
|
398
|
+
* escalation, the shortest `ttl`, and `distinct` unless every part opts out.
|
|
399
|
+
* Without a matching entry, `code` unchanged.
|
|
385
400
|
*/
|
|
386
401
|
function tightenApproval(code, entries, input) {
|
|
387
402
|
const extra = entries.filter((entry) => (entry.permission === void 0 || entry.permission === input.permission) && metaMatches(entry, input.operation) && matches(entry, input.tenant, input.subject, input.current, input.next, input.now, input.scopes));
|
|
@@ -621,7 +636,10 @@ function applyQuota(store, input) {
|
|
|
621
636
|
}
|
|
622
637
|
//#endregion
|
|
623
638
|
//#region src/core/memory-relations.ts
|
|
624
|
-
/**
|
|
639
|
+
/**
|
|
640
|
+
* The holders one edge-table row names for `spec`: none when the row does not
|
|
641
|
+
* belong to it.
|
|
642
|
+
*/
|
|
625
643
|
function tableHolders(resourceName, spec, row, id) {
|
|
626
644
|
if (relationId(ownGet(row, spec.object ?? `${resourceName}_id`)) !== id) return [];
|
|
627
645
|
for (const [column, value] of Object.entries(spec.match ?? {})) if (ownGet(row, column) !== value) return [];
|
|
@@ -801,6 +819,107 @@ function signPolicyDocument(document, signer, options) {
|
|
|
801
819
|
});
|
|
802
820
|
}
|
|
803
821
|
//#endregion
|
|
822
|
+
//#region src/core/version-cache.ts
|
|
823
|
+
const MAX_STALE_CEILING_MS = 6e4;
|
|
824
|
+
const DEFAULT_MAX_ENTRIES = 1e4;
|
|
825
|
+
/**
|
|
826
|
+
* An in-process `VersionCache`: a bounded LRU keyed by principal id that keeps
|
|
827
|
+
* resolved versions and shares reads in flight. Create it once at module
|
|
828
|
+
* scope.
|
|
829
|
+
*/
|
|
830
|
+
function memoryVersionCache(options) {
|
|
831
|
+
const maxStaleMs = Math.min(Math.max(Math.floor(options.maxStaleMs), 0), MAX_STALE_CEILING_MS);
|
|
832
|
+
const maxEntries = Math.max(Math.floor(options.maxEntries ?? DEFAULT_MAX_ENTRIES), 1);
|
|
833
|
+
const entries = /* @__PURE__ */ new Map();
|
|
834
|
+
const inFlight = /* @__PURE__ */ new Map();
|
|
835
|
+
const counts = {
|
|
836
|
+
reads: 0,
|
|
837
|
+
shared: 0,
|
|
838
|
+
hits: 0,
|
|
839
|
+
evictions: 0
|
|
840
|
+
};
|
|
841
|
+
const now = () => nowMillis(options.now?.());
|
|
842
|
+
const store = (id, entry) => {
|
|
843
|
+
entries.delete(id);
|
|
844
|
+
entries.set(id, entry);
|
|
845
|
+
if (entries.size > maxEntries) {
|
|
846
|
+
const oldest = entries.keys().next();
|
|
847
|
+
if (oldest.done !== true) entries.delete(oldest.value);
|
|
848
|
+
}
|
|
849
|
+
};
|
|
850
|
+
const observe = (principal, at) => {
|
|
851
|
+
const claimed = principal.authzVersion;
|
|
852
|
+
if (typeof claimed !== "number") return;
|
|
853
|
+
const issued = typeof principal.issuedAt === "number" ? principal.issuedAt * 1e3 : void 0;
|
|
854
|
+
const entry = entries.get(principal.id);
|
|
855
|
+
if (entry === void 0) {
|
|
856
|
+
if (issued !== void 0 && issued <= at && at - issued <= maxStaleMs) store(principal.id, {
|
|
857
|
+
version: claimed,
|
|
858
|
+
at: issued
|
|
859
|
+
});
|
|
860
|
+
return;
|
|
861
|
+
}
|
|
862
|
+
if (claimed > entry.version) store(principal.id, {
|
|
863
|
+
version: claimed,
|
|
864
|
+
at: issued === void 0 ? entry.at : Math.max(entry.at, issued)
|
|
865
|
+
});
|
|
866
|
+
};
|
|
867
|
+
const start = (id, read, at) => {
|
|
868
|
+
counts.reads += 1;
|
|
869
|
+
const keep = (version) => {
|
|
870
|
+
if (typeof version === "number" && Number.isFinite(version)) {
|
|
871
|
+
const entry = entries.get(id);
|
|
872
|
+
store(id, {
|
|
873
|
+
version: Math.max(version, entry?.version ?? version),
|
|
874
|
+
at
|
|
875
|
+
});
|
|
876
|
+
}
|
|
877
|
+
return version;
|
|
878
|
+
};
|
|
879
|
+
const answer = read();
|
|
880
|
+
if (!isThenable$1(answer)) return keep(answer);
|
|
881
|
+
const pending = Promise.resolve(answer).then((version) => inFlight.get(id) === pending ? keep(version) : version);
|
|
882
|
+
inFlight.set(id, pending);
|
|
883
|
+
const settle = () => {
|
|
884
|
+
if (inFlight.get(id) === pending) inFlight.delete(id);
|
|
885
|
+
};
|
|
886
|
+
pending.then(settle, settle);
|
|
887
|
+
return pending;
|
|
888
|
+
};
|
|
889
|
+
return Object.freeze({
|
|
890
|
+
name: "memory",
|
|
891
|
+
maxStaleMs,
|
|
892
|
+
current(principal, read, { live }) {
|
|
893
|
+
const at = now();
|
|
894
|
+
if (live) return start(principal.id, read, at);
|
|
895
|
+
observe(principal, at);
|
|
896
|
+
const entry = entries.get(principal.id);
|
|
897
|
+
if (entry !== void 0 && at - entry.at <= maxStaleMs) {
|
|
898
|
+
counts.hits += 1;
|
|
899
|
+
store(principal.id, entry);
|
|
900
|
+
return entry.version;
|
|
901
|
+
}
|
|
902
|
+
const pending = inFlight.get(principal.id);
|
|
903
|
+
if (pending !== void 0) {
|
|
904
|
+
counts.shared += 1;
|
|
905
|
+
return pending;
|
|
906
|
+
}
|
|
907
|
+
return start(principal.id, read, at);
|
|
908
|
+
},
|
|
909
|
+
evict(principal) {
|
|
910
|
+
counts.evictions += 1;
|
|
911
|
+
entries.delete(principal);
|
|
912
|
+
inFlight.delete(principal);
|
|
913
|
+
},
|
|
914
|
+
stats() {
|
|
915
|
+
return {
|
|
916
|
+
...counts,
|
|
917
|
+
size: entries.size
|
|
918
|
+
};
|
|
919
|
+
}
|
|
920
|
+
});
|
|
921
|
+
}
|
|
922
|
+
//#endregion
|
|
804
923
|
//#region src/core/arazzo.ts
|
|
805
924
|
const VERSION = /^1\.[01]\.\d+(?:-.+)?$/u;
|
|
806
925
|
const STEP_TARGETS = [
|
|
@@ -942,7 +1061,10 @@ function permissionKeysOf(node) {
|
|
|
942
1061
|
if (!Array.isArray(raw)) return [];
|
|
943
1062
|
return raw.filter((item) => typeof item === "string");
|
|
944
1063
|
}
|
|
945
|
-
/**
|
|
1064
|
+
/**
|
|
1065
|
+
* `$inputs.a.b` against the frame's inputs; anything else that is a runtime
|
|
1066
|
+
* expression is unknown.
|
|
1067
|
+
*/
|
|
946
1068
|
function valueOf(value, inputs) {
|
|
947
1069
|
if (typeof value !== "string" || !value.includes("$")) return {
|
|
948
1070
|
known: true,
|
|
@@ -1142,10 +1264,9 @@ function combine(decisions) {
|
|
|
1142
1264
|
return decisions.find((item) => item.outcome === outcome) ?? denied("undocumented");
|
|
1143
1265
|
}
|
|
1144
1266
|
/**
|
|
1145
|
-
* Walks an Arazzo workflow against `permdock`: each step's operation is
|
|
1146
|
-
*
|
|
1147
|
-
*
|
|
1148
|
-
* snapshot too.
|
|
1267
|
+
* Walks an Arazzo workflow against `permdock`: each step's operation is decided
|
|
1268
|
+
* as `permdock.simulate` would, and a server instance emits one simulate event
|
|
1269
|
+
* for the whole plan. Works on an instance built from a snapshot too.
|
|
1149
1270
|
*/
|
|
1150
1271
|
function simulateArazzo(permdock, input) {
|
|
1151
1272
|
const tree = input.permissions ?? permdock.permissions;
|
|
@@ -1205,7 +1326,10 @@ function planArazzo(input, tree, decide) {
|
|
|
1205
1326
|
}
|
|
1206
1327
|
//#endregion
|
|
1207
1328
|
//#region src/core/local-manifest.ts
|
|
1208
|
-
/**
|
|
1329
|
+
/**
|
|
1330
|
+
* A relation grantee needs the relation graph, which a device does not hold:
|
|
1331
|
+
* the grant decides on the server only.
|
|
1332
|
+
*/
|
|
1209
1333
|
function localGrant(grant) {
|
|
1210
1334
|
const relational = flattenGrantee(grant.to).some((item) => item.kind === "relation");
|
|
1211
1335
|
return snapshotGrant(relational ? {
|
|
@@ -1213,6 +1337,21 @@ function localGrant(grant) {
|
|
|
1213
1337
|
portable: false
|
|
1214
1338
|
} : grant, void 0);
|
|
1215
1339
|
}
|
|
1340
|
+
/**
|
|
1341
|
+
* The levels a holder of `grants` may hand out, by permission key; only
|
|
1342
|
+
* permissions whose resource declares levels.
|
|
1343
|
+
*/
|
|
1344
|
+
function reachOf(policy, grants) {
|
|
1345
|
+
const out = /* @__PURE__ */ new Map();
|
|
1346
|
+
for (const grant of grants) {
|
|
1347
|
+
const { key, resource, kind } = grant.permission;
|
|
1348
|
+
const names = grant.effect === "allow" && kind === "instance" ? levelNames(policy, resource) : [];
|
|
1349
|
+
if (names.length === 0) continue;
|
|
1350
|
+
const held = /* @__PURE__ */ new Set([...out.get(key) ?? [], ...heldLevels(policy, grant, names)]);
|
|
1351
|
+
out.set(key, names.filter((name) => held.has(name)));
|
|
1352
|
+
}
|
|
1353
|
+
return Object.fromEntries(out);
|
|
1354
|
+
}
|
|
1216
1355
|
function customTable(policy, scope, roles) {
|
|
1217
1356
|
const keys = [...new Set(ceilingGrants(policy, scope).map((grant) => grant.permission.key))];
|
|
1218
1357
|
if (keys.length === 0) return;
|
|
@@ -1225,28 +1364,71 @@ function customTable(policy, scope, roles) {
|
|
|
1225
1364
|
tenant: LOCAL_CUSTOM_ROLE,
|
|
1226
1365
|
scope,
|
|
1227
1366
|
...body
|
|
1228
|
-
}).grants
|
|
1367
|
+
}).grants;
|
|
1229
1368
|
const permissions = {};
|
|
1230
1369
|
for (const key of keys) {
|
|
1231
1370
|
const leaf = findPermission(policy.permissions, key);
|
|
1232
1371
|
const names = leaf?.kind === "instance" ? levelNames(policy, leaf.resource) : [];
|
|
1372
|
+
const all = resolve({ grants: [{ permission: key }] });
|
|
1373
|
+
const leveled = names.map((level) => [level, resolve({ grants: [{
|
|
1374
|
+
permission: key,
|
|
1375
|
+
level
|
|
1376
|
+
}] })]);
|
|
1233
1377
|
permissions[key] = compact({
|
|
1234
|
-
all:
|
|
1235
|
-
levels: names.length === 0 ? void 0 : Object.fromEntries(
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
}] })]))
|
|
1378
|
+
all: all.map(localGrant),
|
|
1379
|
+
levels: names.length === 0 ? void 0 : Object.fromEntries(leveled.map(([level, grants]) => [level, grants.map(localGrant)])),
|
|
1380
|
+
reach: names.length === 0 ? void 0 : reachOf(policy, all)[key] ?? [],
|
|
1381
|
+
levelReach: names.length === 0 ? void 0 : Object.fromEntries(leveled.map(([level, grants]) => [level, reachOf(policy, grants)[key] ?? []]))
|
|
1239
1382
|
});
|
|
1240
1383
|
}
|
|
1241
1384
|
const includes = {};
|
|
1385
|
+
const includeReach = {};
|
|
1242
1386
|
for (const role of roles) {
|
|
1243
1387
|
const grants = resolve({ includes: [role] });
|
|
1244
|
-
if (grants.length > 0)
|
|
1388
|
+
if (grants.length > 0) {
|
|
1389
|
+
includes[role] = grants.map(localGrant);
|
|
1390
|
+
const reach = reachOf(policy, grants);
|
|
1391
|
+
if (Object.keys(reach).length > 0) includeReach[role] = reach;
|
|
1392
|
+
}
|
|
1245
1393
|
}
|
|
1246
|
-
return {
|
|
1394
|
+
return compact({
|
|
1247
1395
|
permissions,
|
|
1248
|
-
includes
|
|
1249
|
-
|
|
1396
|
+
includes,
|
|
1397
|
+
includeReach: Object.keys(includeReach).length === 0 ? void 0 : includeReach
|
|
1398
|
+
});
|
|
1399
|
+
}
|
|
1400
|
+
/** The hand-out rules `buildLocalSnapshot` applies on the device. */
|
|
1401
|
+
function localAssignable(policy) {
|
|
1402
|
+
const scopes = scopeList(policy.scopes);
|
|
1403
|
+
const root = rootScope(scopes);
|
|
1404
|
+
const ceiling = new Set((root === void 0 ? [] : ceilingGrants(policy, root)).map((grant) => grant.permission.key));
|
|
1405
|
+
const leaves = listPermissions(policy.permissions);
|
|
1406
|
+
const levels = {};
|
|
1407
|
+
for (const leaf of leaves) {
|
|
1408
|
+
const names = leaf.kind === "instance" ? levelNames(policy, leaf.resource) : [];
|
|
1409
|
+
if (names.length > 0) levels[leaf.key] = names;
|
|
1410
|
+
}
|
|
1411
|
+
const grants = {};
|
|
1412
|
+
for (const [index, grant] of grantList(policy).entries()) {
|
|
1413
|
+
const reach = flattenGrantee(grant.to).some((item) => item.kind === "relation") ? levels[grant.permission.key] === void 0 ? void 0 : [] : reachOf(policy, [grant])[grant.permission.key];
|
|
1414
|
+
if (reach !== void 0) grants[String(index)] = reach;
|
|
1415
|
+
}
|
|
1416
|
+
const declared = [...declaredRoleNames(policy)].toSorted();
|
|
1417
|
+
return compact({
|
|
1418
|
+
roles: assignableCandidates(policy).map((leaf) => ({
|
|
1419
|
+
name: leaf.key,
|
|
1420
|
+
on: (leaf.on === void 0 ? root : resolveScope$1(scopes, leaf.on)) ?? "global",
|
|
1421
|
+
allows: [...roleAllowKeys(policy, leaf.key)].toSorted()
|
|
1422
|
+
})),
|
|
1423
|
+
manage: {
|
|
1424
|
+
roles: declared.filter((name) => roleMeta(policy, name)?.manageRoles === true),
|
|
1425
|
+
permissions: leaves.filter((leaf) => leaf.meta.manageRoles === true).map((leaf) => leaf.key)
|
|
1426
|
+
},
|
|
1427
|
+
assigns: usesAssigns(policy) ? Object.fromEntries(declared.map((name) => [name, policy.rolesByName.get(name)?.assigns ?? []])) : void 0,
|
|
1428
|
+
permissions: leaves.filter((leaf) => ceiling.has(leaf.key)).map(plainPermission),
|
|
1429
|
+
levels: Object.keys(levels).length === 0 ? void 0 : levels,
|
|
1430
|
+
grants: Object.keys(grants).length === 0 ? void 0 : grants
|
|
1431
|
+
});
|
|
1250
1432
|
}
|
|
1251
1433
|
/**
|
|
1252
1434
|
* What the policy grants, as JSON a device turns into snapshots from its own
|
|
@@ -1277,7 +1459,8 @@ function localSnapshotManifest(policy) {
|
|
|
1277
1459
|
roles,
|
|
1278
1460
|
rank: usesAssigns(policy) ? rankRoles(policy, roles) : void 0,
|
|
1279
1461
|
grants: grantList(policy).map(localGrant),
|
|
1280
|
-
custom
|
|
1462
|
+
custom,
|
|
1463
|
+
assignable: localAssignable(policy)
|
|
1281
1464
|
}));
|
|
1282
1465
|
}
|
|
1283
1466
|
//#endregion
|
|
@@ -1291,10 +1474,10 @@ function assertProduction(policy, options) {
|
|
|
1291
1474
|
if (options.limits === void 0 && grants.some((grant) => grant.limit !== void 0)) throw new Error("PermDock: profile 'prod' needs limits: a grant has a limit and every call would deny with limit-unavailable; pass limits: limits(store)");
|
|
1292
1475
|
}
|
|
1293
1476
|
/**
|
|
1294
|
-
* The in-process services `dev` fills in: one memory approval store that
|
|
1295
|
-
*
|
|
1296
|
-
*
|
|
1297
|
-
*
|
|
1477
|
+
* The in-process services `dev` fills in: one memory approval store that every
|
|
1478
|
+
* adapter of the app shares, and memory limits when a grant has a `limit`. They
|
|
1479
|
+
* live here, not in the adapters, so an adapter ships no store and an app
|
|
1480
|
+
* without `defineApp` ships neither.
|
|
1298
1481
|
*/
|
|
1299
1482
|
function devDefaults(policy, options) {
|
|
1300
1483
|
return {
|
|
@@ -1305,10 +1488,10 @@ function devDefaults(policy, options) {
|
|
|
1305
1488
|
};
|
|
1306
1489
|
}
|
|
1307
1490
|
/**
|
|
1308
|
-
* Binds the app's sources, features and services to `policy`. The result
|
|
1309
|
-
*
|
|
1310
|
-
*
|
|
1311
|
-
*
|
|
1491
|
+
* Binds the app's sources, features and services to `policy`. The result is a
|
|
1492
|
+
* policy: pass it wherever a policy goes (`createPermDock`, every adapter, the
|
|
1493
|
+
* CLI) and each picks up the app definition, with its own options taking
|
|
1494
|
+
* precedence. The profile defaults to `prod`.
|
|
1312
1495
|
*/
|
|
1313
1496
|
function defineApp(policy, options = {}) {
|
|
1314
1497
|
const profile = options.profile ?? "prod";
|
|
@@ -1356,12 +1539,12 @@ function legacyDecision(allowed, permission, subject) {
|
|
|
1356
1539
|
});
|
|
1357
1540
|
}
|
|
1358
1541
|
/**
|
|
1359
|
-
* Runs PermDock beside the application's existing checks while adopting
|
|
1360
|
-
*
|
|
1361
|
-
*
|
|
1362
|
-
*
|
|
1363
|
-
*
|
|
1364
|
-
*
|
|
1542
|
+
* Runs PermDock beside the application's existing checks while adopting it.
|
|
1543
|
+
* Each `can`, `decide`, `decideEach`, `filter` and `assert` asks both; the
|
|
1544
|
+
* legacy answer is returned unless the permission is in `enforce`, and every
|
|
1545
|
+
* disagreement reaches `onMismatch`. Promote permissions one by one as their
|
|
1546
|
+
* mismatches are resolved, then remove the wrap. Pass it as an adapter's `wrap`
|
|
1547
|
+
* option, or call it on a core instance.
|
|
1365
1548
|
*/
|
|
1366
1549
|
function shadowMode(options) {
|
|
1367
1550
|
const enforced = (permission) => options.enforce === "all" || (options.enforce ?? []).some((item) => item.key === permission.key);
|
|
@@ -1466,9 +1649,9 @@ function ofTenant(tenant, roles) {
|
|
|
1466
1649
|
return Array.isArray(roles) ? roles.filter((role) => role !== null && typeof role === "object" && Reflect.get(role, "tenant") === tenant) : [];
|
|
1467
1650
|
}
|
|
1468
1651
|
/**
|
|
1469
|
-
* A `CustomRoleSource` over a reader that returns every custom role of a
|
|
1470
|
-
* It keeps only the roles of the requested tenant. With `read: 'held'`
|
|
1471
|
-
* skips a tenant's read, and `globalRoles` and `sharedRoles`, when the
|
|
1652
|
+
* A `CustomRoleSource` over a reader that returns every custom role of a
|
|
1653
|
+
* tenant. It keeps only the roles of the requested tenant. With `read: 'held'`
|
|
1654
|
+
* it skips a tenant's read, and `globalRoles` and `sharedRoles`, when the
|
|
1472
1655
|
* subject holds only declared roles there.
|
|
1473
1656
|
*/
|
|
1474
1657
|
function customRoleSource(reader, options = {}) {
|
|
@@ -1497,10 +1680,10 @@ function withPlans(subject, plans) {
|
|
|
1497
1680
|
}));
|
|
1498
1681
|
}
|
|
1499
1682
|
/**
|
|
1500
|
-
* Builds the serializable access snapshot for a subject without a request,
|
|
1501
|
-
*
|
|
1502
|
-
*
|
|
1503
|
-
*
|
|
1683
|
+
* Builds the serializable access snapshot for a subject without a request, a
|
|
1684
|
+
* network call or a cache directive: call it inside the app's own `'use cache:
|
|
1685
|
+
* private'` function. Synchronous; the policy's `subject` and `context` mappers
|
|
1686
|
+
* must be synchronous too.
|
|
1504
1687
|
*/
|
|
1505
1688
|
function snapshotFor(policy, user, options = {}) {
|
|
1506
1689
|
const auth = [];
|
|
@@ -1601,15 +1784,17 @@ function writable(options) {
|
|
|
1601
1784
|
//#endregion
|
|
1602
1785
|
//#region src/core/scope-helpers.ts
|
|
1603
1786
|
/**
|
|
1604
|
-
* The canonical form PermDock evaluates one membership in, or `undefined`
|
|
1605
|
-
*
|
|
1606
|
-
*
|
|
1607
|
-
* `team` pair.
|
|
1787
|
+
* The canonical form PermDock evaluates one membership in, or `undefined` when
|
|
1788
|
+
* it is malformed and grants nothing. `scopes` is the policy's or the catalog's
|
|
1789
|
+
* scope list; absent or empty means the implicit `tenant` and `team` pair.
|
|
1608
1790
|
*/
|
|
1609
1791
|
function normalizeMembership(input, scopes) {
|
|
1610
1792
|
return normalizeMembership$1(input, scopeList(scopes));
|
|
1611
1793
|
}
|
|
1612
|
-
/**
|
|
1794
|
+
/**
|
|
1795
|
+
* Every well-formed membership of `input` in canonical form; malformed entries
|
|
1796
|
+
* are dropped.
|
|
1797
|
+
*/
|
|
1613
1798
|
function normalizeMemberships(input, scopes) {
|
|
1614
1799
|
return normalizeMemberships$1(input, scopeList(scopes));
|
|
1615
1800
|
}
|
|
@@ -1629,14 +1814,20 @@ function coversInstance(membership, scopes, scope, id, within) {
|
|
|
1629
1814
|
const wanted = within === void 0 ? void 0 : Object.entries(within).find(([key]) => resolveScope$1(scopes, key) === membership.scope)?.[1] ?? void 0;
|
|
1630
1815
|
return wanted !== void 0 && scopeIdOf(membership, membership.scope) === wanted;
|
|
1631
1816
|
}
|
|
1632
|
-
/**
|
|
1817
|
+
/**
|
|
1818
|
+
* Roles the principal holds at the instance, at an ancestor named in `within`,
|
|
1819
|
+
* or globally.
|
|
1820
|
+
*/
|
|
1633
1821
|
function rolesAtInstance(policy, principal, scopes, scope, id, within, now) {
|
|
1634
1822
|
const declared = declaredRoleNames(policy);
|
|
1635
1823
|
const names = new Set((principal.roles ?? []).filter((name) => declared.has(name)));
|
|
1636
1824
|
for (const membership of principal.memberships ?? []) if (!isMembershipExpired(membership, now) && coversInstance(membership, scopes, scope, id, within)) for (const name of membership.roles) names.add(name);
|
|
1637
1825
|
return rankRoles(policy, [...names]);
|
|
1638
1826
|
}
|
|
1639
|
-
/**
|
|
1827
|
+
/**
|
|
1828
|
+
* Whether the principal holds `role` on a live membership of exactly this
|
|
1829
|
+
* instance.
|
|
1830
|
+
*/
|
|
1640
1831
|
function holdsAt(principal, role, scope, id, now) {
|
|
1641
1832
|
return (principal.memberships ?? []).some((membership) => membership.scope === scope && sameId(membership.id, id) && !isMembershipExpired(membership, now) && membership.roles.includes(role));
|
|
1642
1833
|
}
|
|
@@ -1644,8 +1835,8 @@ function includedRoles(role) {
|
|
|
1644
1835
|
return isReadonlyArray(role.includes) ? role.includes.filter((name) => typeof name === "string") : [];
|
|
1645
1836
|
}
|
|
1646
1837
|
/**
|
|
1647
|
-
* The membership kinds a custom role may be held through: those every
|
|
1648
|
-
*
|
|
1838
|
+
* The membership kinds a custom role may be held through: those every included
|
|
1839
|
+
* declared role with `for` allows. `undefined` when none restricts.
|
|
1649
1840
|
*/
|
|
1650
1841
|
function customForKinds(policy, role) {
|
|
1651
1842
|
let kinds;
|
|
@@ -1691,10 +1882,10 @@ function countRules(rules, holders, delta, deny) {
|
|
|
1691
1882
|
}
|
|
1692
1883
|
/**
|
|
1693
1884
|
* The rules of a role change that need no subject: `assigns`, `for`,
|
|
1694
|
-
* `exclusiveWith`, `min`, `max` and `transferOnly`, from holder counts and
|
|
1695
|
-
*
|
|
1696
|
-
*
|
|
1697
|
-
*
|
|
1885
|
+
* `exclusiveWith`, `min`, `max` and `transferOnly`, from holder counts and the
|
|
1886
|
+
* target's roles alone. `decideRoleChange` runs the same function after its
|
|
1887
|
+
* actor, tenant and ceiling checks; a service that holds only the catalog calls
|
|
1888
|
+
* it with the `CatalogRole` entries.
|
|
1698
1889
|
*/
|
|
1699
1890
|
function checkRoleChange(role, input) {
|
|
1700
1891
|
const name = role.key;
|
|
@@ -1769,12 +1960,12 @@ function heldAnchor(principal, scopes, scope, id, now) {
|
|
|
1769
1960
|
* the instance's own principal; nothing in `change` can stand in for it.
|
|
1770
1961
|
*/
|
|
1771
1962
|
/**
|
|
1772
|
-
* Whether the subject of `permdock` may assign, revoke or transfer a role
|
|
1773
|
-
*
|
|
1774
|
-
* `
|
|
1775
|
-
*
|
|
1776
|
-
* instance's tenant comes from a live membership the subject holds on it,
|
|
1777
|
-
*
|
|
1963
|
+
* Whether the subject of `permdock` may assign, revoke or transfer a role in
|
|
1964
|
+
* one scope instance: `assigns`, the ceiling, `for`, `exclusiveWith`, `min`,
|
|
1965
|
+
* `max` and `transferOnly`. It never writes; the application does, and
|
|
1966
|
+
* generated RLS triggers re-check the holder counts at commit. A nested
|
|
1967
|
+
* instance's tenant comes from a live membership the subject holds on it, or
|
|
1968
|
+
* from `change.within` only with `{ trusted: true }`; otherwise
|
|
1778
1969
|
* `no-membership`. An instance built from a snapshot denies with
|
|
1779
1970
|
* `unsupported`.
|
|
1780
1971
|
*/
|
|
@@ -1931,8 +2122,8 @@ function field(value) {
|
|
|
1931
2122
|
return /[",\r\n]/u.test(text) ? `"${text.replaceAll("\"", "\"\"")}"` : text;
|
|
1932
2123
|
}
|
|
1933
2124
|
/**
|
|
1934
|
-
* One RFC 4180 row for a decision or approval event, without a line
|
|
1935
|
-
*
|
|
2125
|
+
* One RFC 4180 row for a decision or approval event, without a line terminator;
|
|
2126
|
+
* join rows with CRLF under a `CSV_COLUMNS` header.
|
|
1936
2127
|
*/
|
|
1937
2128
|
function toCsvRow(event) {
|
|
1938
2129
|
return [
|
|
@@ -1949,4 +2140,4 @@ function toCsvRow(event) {
|
|
|
1949
2140
|
].map(field).join(",");
|
|
1950
2141
|
}
|
|
1951
2142
|
//#endregion
|
|
1952
|
-
export {
|
|
2143
|
+
export { isOperationEffect as A, memoryLimitStore as C, memoryApprovalPolicySource as D, approvalPoliciesFor as E, memorySnapshotSource as F, sqlFunction as I, memoryEntitlementSource as M, memoryMembershipSource as N, validateApprovalPolicy as O, memorySettingsSource as P, limits as S, approvalPolicies as T, arazzoFindings as _, normalizeMembership as a, signPolicyDocument as b, crud as c, snapshotFor as d, customRoleSource as f, localSnapshotManifest as g, defineApp as h, decideRoleChange as i, memoryCustomRoleSource as j, defineOperations as k, readable as l, shadowMode as m, toCsvRow as n, normalizeMemberships as o, mayAccess as p, checkRoleChange as r, resolveScope as s, CSV_COLUMNS as t, writable as u, simulateArazzo as v, stripeEntitlementSource as w, memoryRelationSource as x, memoryVersionCache as y };
|
package/dist/ssf/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as SsfSubject, C as SsfEventName, D as SsfReceiver, E as SsfPermDockOptions, M as SsfTransmitterConfiguration, N as SsfVerification, O as SsfStreamConfiguration, S as SsfEventListener, T as SsfPermDock, _ as SetSubject, a as PollHandle, b as SsfEventHandler, c as PushSetOptions, d as SetDelivery, f as SetDeliveryFailureCause, g as SetQueue, h as SetPollHandlerOptions, i as CaepReason, j as SsfSubjectResolver, k as SsfStreamStatus, l as ReplayStore, m as SetEvent, n as CaepEventName, o as PollOptions, p as SetError, r as CaepInitiatingEntity, s as PollResult, t as CaepCommon, u as RiscEventName, v as SignSetOptions, w as SsfOnEvent, x as SsfEventInput, y as SsfAuditEvent } from "../types-
|
|
2
|
-
import { t as memoryReplayStore } from "../replay-
|
|
3
|
-
import { A as createPermDock, C as memorySsfStreamStore, D as PollSetsResult, E as PollSetsOptions, O as PolledSet, S as SsfStreamStore, T as setPollHandler, _ as SsfFanOut, a as CaepTokenClaimsChange, b as ssfTransmitter, c as RiscEvents, d as caepEvents, f as pushSet, g as FanOutSetOptions, h as streamVerificationEvent, i as CaepEvents, k as pollSets, l as SSF_POLL_DELIVERY, m as signSet, n as CaepCredentialChange, o as RiscAccountDisabled, p as riscEvents, r as CaepDeviceComplianceChange, s as RiscCredentialCompromise, t as CaepAssuranceLevelChange, u as SSF_PUSH_DELIVERY, v as SsfTransmitterOptions, w as memorySetQueue, x as SsfStream, y as fanOutSet } from "../index-
|
|
1
|
+
import { A as SsfSubject, C as SsfEventName, D as SsfReceiver, E as SsfPermDockOptions, M as SsfTransmitterConfiguration, N as SsfVerification, O as SsfStreamConfiguration, S as SsfEventListener, T as SsfPermDock, _ as SetSubject, a as PollHandle, b as SsfEventHandler, c as PushSetOptions, d as SetDelivery, f as SetDeliveryFailureCause, g as SetQueue, h as SetPollHandlerOptions, i as CaepReason, j as SsfSubjectResolver, k as SsfStreamStatus, l as ReplayStore, m as SetEvent, n as CaepEventName, o as PollOptions, p as SetError, r as CaepInitiatingEntity, s as PollResult, t as CaepCommon, u as RiscEventName, v as SignSetOptions, w as SsfOnEvent, x as SsfEventInput, y as SsfAuditEvent } from "../types-DsHGPtkR.js";
|
|
2
|
+
import { t as memoryReplayStore } from "../replay-Bs9Df2fQ.js";
|
|
3
|
+
import { A as createPermDock, C as memorySsfStreamStore, D as PollSetsResult, E as PollSetsOptions, O as PolledSet, S as SsfStreamStore, T as setPollHandler, _ as SsfFanOut, a as CaepTokenClaimsChange, b as ssfTransmitter, c as RiscEvents, d as caepEvents, f as pushSet, g as FanOutSetOptions, h as streamVerificationEvent, i as CaepEvents, k as pollSets, l as SSF_POLL_DELIVERY, m as signSet, n as CaepCredentialChange, o as RiscAccountDisabled, p as riscEvents, r as CaepDeviceComplianceChange, s as RiscCredentialCompromise, t as CaepAssuranceLevelChange, u as SSF_PUSH_DELIVERY, v as SsfTransmitterOptions, w as memorySetQueue, x as SsfStream, y as fanOutSet } from "../index-BinlXeU-.js";
|
|
4
4
|
export { type CaepAssuranceLevelChange, type CaepCommon, type CaepCredentialChange, type CaepDeviceComplianceChange, type CaepEventName, type CaepEvents, type CaepInitiatingEntity, type CaepReason, type CaepTokenClaimsChange, type FanOutSetOptions, type PollHandle, type PollOptions, type PollResult, type PollSetsOptions, type PollSetsResult, type PolledSet, type PushSetOptions, type ReplayStore, type RiscAccountDisabled, type RiscCredentialCompromise, type RiscEventName, type RiscEvents, SSF_POLL_DELIVERY, SSF_PUSH_DELIVERY, type SetDelivery, type SetDeliveryFailureCause, type SetError, type SetEvent, type SetPollHandlerOptions, type SetQueue, type SetSubject, type SignSetOptions, type SsfAuditEvent, type SsfEventHandler, type SsfEventInput, type SsfEventListener, type SsfEventName, type SsfFanOut, type SsfOnEvent, type SsfPermDock, type SsfPermDockOptions, type SsfReceiver, type SsfStream, type SsfStreamConfiguration, type SsfStreamStatus, type SsfStreamStore, type SsfSubject, type SsfSubjectResolver, type SsfTransmitterConfiguration, type SsfTransmitterOptions, type SsfVerification, caepEvents, createPermDock, fanOutSet, memoryReplayStore, memorySetQueue, memorySsfStreamStore, pollSets, pushSet, riscEvents, setPollHandler, signSet, ssfTransmitter, streamVerificationEvent };
|