permdock 0.7.0 → 0.8.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-CL-QCITA.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-BLs67P1l.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-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
- package/dist/{approval-prompt-K0faOLFp.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
- 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-3RhGfkAK.js} +2 -2
- package/dist/{arazzo-rdeJ8n1J.js → arazzo-B5-ulWif.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-BAkBDMqn.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-DqEoWHBc.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-JDuvxjuW.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
- package/dist/{bind-D1nO6fiC.js → bind-D_sZSVA3.js} +22 -10
- 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-CNWaYJyr.js} +3 -3
- package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-D4UC9TTW.d.ts → capability-ChuiONQU.d.ts} +41 -29
- package/dist/{casbin-BW9pS47J.js → casbin-H0rKxBx2.js} +16 -8
- package/dist/{casbin-BHijLuHY.js → casbin-cbSbhT_k.js} +2 -2
- 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-BFpz2EmT.js} +20 -19
- package/dist/{catalog-BaMQfQ6Y.js → catalog-DCspHDc8.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-mRQQQhNK.js +1 -0
- package/dist/catalog-operations-Dadrl7Z-.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-BFlGMaak.js} +4 -5
- package/dist/{codemod-i4N2BhDc.js → codemod-DLQ9Zpo4.js} +3 -4
- package/dist/{codemod-BP6n8N9L.js → codemod-DWSN2erG.js} +523 -201
- package/dist/collect-B5BL3klN.js +1 -0
- package/dist/{collect-BaWeMjwV.js → collect-B7ZFAJU3.js} +26 -63
- package/dist/{collect-DNm3oKOk.js → collect-Bzv3le0A.js} +4 -5
- 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-BFzysW3o.d.ts} +36 -12
- package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BNdVf7X2.js → completion-saoYiRFO.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-DGZzMV1B.js → config-DBeXXmBF.js} +2 -2
- package/dist/{config-report-Cm7UITNA.js → config-report-BipSWA6V.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-B5-w6Kw9.js → core-H-mbhpZc.js} +26 -20
- package/dist/{core-CQkE8Esr.d.ts → core-hWIARPDz.d.ts} +49 -22
- package/dist/{create-UTnUVETj.d.ts → create-BSNrVuxh.d.ts} +70 -37
- package/dist/{create-B2-CQqCI.d.ts → create-BVq1lNQE.d.ts} +49 -28
- package/dist/{create-QHuuPw3q.d.ts → create-CM1FciYG.d.ts} +37 -29
- package/dist/{create-Cb86Z8Im.js → create-Cq4Uox0f.js} +10 -7
- package/dist/{create-DJrlhEp9.js → create-_noSrY1T.js} +15 -21
- 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-CHNlVInN.d.ts +22 -0
- package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
- package/dist/{describe-O0SwYIK8.d.ts → describe-ByS9LgHK.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-Btr1c1Ow.js → diff-CN8IYhC_.js} +2 -2
- package/dist/{diff-DzT-xD13.js → diff-iZWV65nC.js} +22 -13
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BU1szn63.js → doctor-CHD1M9R5.js} +287 -135
- package/dist/{doctor-BoK_y0KO.js → doctor-D3wo-yuz.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-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
- package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
- package/dist/{errors-B_Qg9D3e.d.ts → errors-zi_4T-rx.d.ts} +22 -6
- package/dist/{evaluate-B_oqFbWC.js → evaluate-Dd8Ta0Ie.js} +140 -78
- package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
- package/dist/{evaluations-BCddEOfO.d.ts → evaluations-z8dQFDaN.d.ts} +11 -5
- 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-C1DCvpqV.d.ts} +9 -6
- package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-JL43jD3E.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-B5kvbAoZ.js +58 -0
- package/dist/gen-DWCYcMQM.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-BmjzxQhp.d.ts → hosted-Cmtxogd0.d.ts} +33 -21
- package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -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-Bz0GefWg.js → import-CST57XLp.js} +64 -51
- package/dist/{import-DB2EG_iy.js → import-_YqhhwvX.js} +6 -6
- package/dist/{index-BSfRl0hZ.d.ts → index-B8s204GL.d.ts} +64 -52
- package/dist/{index-DH9DUDEM.d.ts → index-BT5-1VsX.d.ts} +54 -30
- package/dist/{index-BTkwrK7v.d.ts → index-BW_0MZOS.d.ts} +282 -172
- package/dist/{index-CMiPH2Tv.d.ts → index-BhxEUY9J.d.ts} +64 -37
- package/dist/{index-DLwcuCN_.d.ts → index-Bv5iXPqU.d.ts} +51 -30
- package/dist/{index-BE8y3moU.d.ts → index-_9UiQIkt.d.ts} +127 -82
- package/dist/index.d.ts +22 -22
- package/dist/index.js +33 -33
- package/dist/{init-5TXNji88.js → init-Dz_PsHdv.js} +5 -5
- package/dist/{init-B-4t1NzC.js → init-cE3A8aXq.js} +10 -10
- package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
- package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot--JWiTrvO.js} +75 -55
- 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-C-fYydV2.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-D-8tMqzo.js} +4 -4
- package/dist/{login-WC9HPJpU.js → login-DplQ0s84.js} +16 -9
- package/dist/{manifest-Dv6q4i5s.js → manifest-Cgiq5oqc.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-BNWCJtmP.js} +14 -8
- 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 +72 -26
- package/dist/next/index.js +110 -6
- 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-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
- package/dist/{openapi-DMocl1bh.js → openapi-CBZUhA3l.js} +4 -5
- package/dist/{openapi-ztVaux6j.js → openapi-VeHHU2l9.js} +23 -14
- 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-files-BHOIlrfD.js +1 -0
- package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/{output-DgSDLrta.js → output-tkju6U7R.js} +9 -5
- package/dist/ownership-B4L59T9u.js +1054 -0
- package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
- package/dist/parse-local-manifest-BQhTlLQS.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-Dco6dyCK.d.ts → permdock-B6Sf4T_S.d.ts} +253 -129
- package/dist/{permdock-BfWEeMqk.js → permdock-L-_I_3zP.js} +59 -35
- 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-mDcTWoBs.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-Ba4bDhaj.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-CJgOm6aq.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-CCiDRZBH.d.ts} +738 -349
- package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
- package/dist/{postgrest-r5faDIzD.js → postgrest-D4nuPXIQ.js} +52 -33
- package/dist/{postgrest-CYacM_u7.d.ts → postgrest-DicQyqm-.d.ts} +54 -35
- package/dist/{powersync-53ryOZip.js → powersync-DHNQX06W.js} +127 -69
- package/dist/{powersync-13odBwiM.js → powersync-DXqGuq9A.js} +3 -3
- package/dist/powersync-Djf-zCpB.js +1 -0
- 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-BE7N_Luo.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-DXfq5c2d.d.ts} +1 -1
- package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/pull-B65ndFNZ.js +1 -0
- package/dist/{pull-CN5OLxrF.js → pull-CwpGaQSi.js} +12 -11
- package/dist/{push-tVdG8dUL.js → push-DgssgzkK.js} +19 -13
- package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
- package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-ITwYKvvH.js} +10 -7
- 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-DNftIb_R.d.ts} +1 -1
- package/dist/{request-context-BykKLmyE.js → request-context-C25ilqiJ.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-CF7xXLSG.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-CxBZb4rZ.js → rls-CNEH2_BG.js} +299 -124
- package/dist/{rls-Ck_PocSp.js → rls-Ca8Jz9b5.js} +13 -6
- 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-fNqAIqQk.js} +8 -5
- package/dist/{run-uLD2aWuO.js → run-Bz26OTfO.js} +26 -23
- package/dist/run-D-JE8QWb.js +1 -0
- package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-DbWI9f99.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-iWnUdwCt.js} +42 -29
- package/dist/{scan-DSljDE1Y.js → scan-DCj1KQfn.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-gIcCx7zM.js → schema-Dst9I9Gs.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-CIlpSA2G.d.ts} +81 -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-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
- package/dist/{sink-Cp_Eot9W.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
- package/dist/{skills-Dcjw9_1C.js → skills-Bjj7BNEQ.js} +12 -8
- package/dist/{skills-g_3BS9NC.js → skills-OuoMR49L.js} +3 -3
- package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BAXZ0KOp.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-DEEuGb8S.d.ts → sources-B1Os_YUu.d.ts} +126 -53
- package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
- 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-DZ0l9UAg.js} +190 -100
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +47 -35
- package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
- package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
- 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-C0Kta5Ft.d.ts +59 -0
- package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{stream-2Vwhl7Er.d.ts → stream-ltuLdtTG.d.ts} +4 -3
- 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-BL1qJzzY.js} +79 -35
- package/dist/{supabase-Bqp7iIY2.js → supabase-D39cuGPt.js} +3 -3
- package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-B-yXnzUl.js} +175 -196
- package/dist/supabase-hook-H-MtE9Wd.js +1 -0
- package/dist/{supautils-MESd81bF.js → supautils-BU-pAEpf.js} +166 -47
- 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-DeMNEy6V.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 +224 -141
- package/dist/testing/index.js +299 -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-BIPIDa6a.d.ts +50 -0
- package/dist/{types-DBHftjgS.d.ts → types-AMJ5qoU_.d.ts} +45 -33
- package/dist/{types-CfiKC5aN.d.ts → types-B2mlGuhW.d.ts} +14 -11
- package/dist/{types-D3A19w4A.d.ts → types-B4uqKDnp.d.ts} +22 -13
- package/dist/{types-CQVEQawv.d.ts → types-BJk0BKRX.d.ts} +24 -14
- package/dist/types-B_d_g7T3.d.ts +262 -0
- package/dist/{types-DC44-hqb.d.ts → types-B_tiYvk8.d.ts} +59 -32
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-BWZybqs9.d.ts → types-DC1Loeh3.d.ts} +381 -202
- package/dist/{types-CIeZcG8v.d.ts → types-DHKPcqzr.d.ts} +2 -2
- package/dist/{types-cTos-H7p.d.ts → types-DjuMBNF9.d.ts} +68 -32
- package/dist/{types-CeIscIKp.d.ts → types-HzqOtvsJ.d.ts} +23 -12
- package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-BfVmNJO5.d.ts → types-ah9NlU6j.d.ts} +128 -50
- package/dist/{types-DXmwu78Z.d.ts → types-djVzLlIV.d.ts} +31 -14
- package/dist/{types-g7Oy6Zg4.d.ts → types-yUuPR5Hy.d.ts} +47 -24
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CYeXek0p.js +1 -0
- package/dist/{usage-Bybmck7f.js → usage-CxEzS4ey.js} +50 -26
- package/dist/{usage-CDaLXCfL.js → usage-ab0PdusX.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-CQpoquwj.d.ts → validation-error-YGg2mXyH.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-DZeqoWu5.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-Bu9zAlE0.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-C-4VmFlL.js → watch-Cx_WciLE.js} +8 -8
- package/dist/watch-DB42U1ib.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-rI7dCR9Q.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-DlJE3gS_.d.ts} +8 -5
- package/package.json +7 -7
- 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 +14 -22
- 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,33 +1,36 @@
|
|
|
1
1
|
import { n as isReadonlyArray, r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep, t as freezeCopy } from "./freeze-
|
|
3
|
-
import { n as PermDockValidationError } from "./validation-error-
|
|
4
|
-
import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-
|
|
5
|
-
import { t as attachInternals } from "./internals-
|
|
6
|
-
import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-
|
|
7
|
-
import { n as isThenable } from "./thenable-
|
|
8
|
-
import { i as readAppData } from "./app-data-
|
|
9
|
-
import { f as scopeList, h as tenantOf, o as normalizeMemberships } from "./scopes-
|
|
10
|
-
import { o as pickVisible, s as sanitizeContext } from "./validity-
|
|
11
|
-
import {
|
|
12
|
-
import { u as
|
|
13
|
-
import {
|
|
14
|
-
import { D as emptyListeners, E as emitSafe, N as contactMemberships, O as finish, P as isContact, i as customRolesFor, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as unknownLevelsFor } from "./evaluate-
|
|
15
|
-
import {
|
|
16
|
-
import { r as relationReader, t as pendingRelations } from "./relations-
|
|
17
|
-
import {
|
|
18
|
-
import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-
|
|
19
|
-
import { i as decideAllWith, n as canAllWith } from "./checks-
|
|
2
|
+
import { n as freezeDeep, t as freezeCopy } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { n as PermDockValidationError } from "./validation-error-CYg2kJEw.js";
|
|
4
|
+
import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-B6R_lg2a.js";
|
|
5
|
+
import { t as attachInternals } from "./internals-B3IgHrvo.js";
|
|
6
|
+
import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-B8tYxPIt.js";
|
|
7
|
+
import { n as isThenable } from "./thenable-BNSM1U2R.js";
|
|
8
|
+
import { i as readAppData } from "./app-data-UNNm07jV.js";
|
|
9
|
+
import { f as scopeList, h as tenantOf, o as normalizeMemberships } from "./scopes-0Up_UA2t.js";
|
|
10
|
+
import { o as pickVisible, s as sanitizeContext } from "./validity-Buc7w8E9.js";
|
|
11
|
+
import { t as byCodePoint } from "./compare-DTfyUunF.js";
|
|
12
|
+
import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-5d1zVBvK.js";
|
|
13
|
+
import { d as policyX } from "./policy-CLQ8__GF.js";
|
|
14
|
+
import { D as emptyListeners, E as emitSafe, N as contactMemberships, O as finish, P as isContact, i as customRolesFor, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as unknownLevelsFor } from "./evaluate-Dd8Ta0Ie.js";
|
|
15
|
+
import { c as heldRoleNames, d as audiencesOf, g as asMembershipSource, i as assignableIn, l as roleLeaf, o as collectSnapshotGrants, s as whereGrant, t as snapshotOf, u as applyRoleKinds } from "./instance-snapshot--JWiTrvO.js";
|
|
16
|
+
import { r as relationReader, t as pendingRelations } from "./relations-BxvRvDHK.js";
|
|
17
|
+
import { i as snapshotGrant } from "./snapshot-CXlzi69u.js";
|
|
18
|
+
import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-DlCdCM_8.js";
|
|
19
|
+
import { i as decideAllWith, n as canAllWith } from "./checks-CGkP3Z7A.js";
|
|
20
20
|
import { r as isSubject, t as anonymousSubject } from "./subject-BGoM5o8B.js";
|
|
21
21
|
//#region src/core/app.ts
|
|
22
22
|
const APP = Symbol.for("permdock.app");
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* The app definition bound to `policy` by `defineApp`, or `undefined` for a
|
|
25
|
+
* plain policy.
|
|
26
|
+
*/
|
|
24
27
|
function appOf(policy) {
|
|
25
28
|
const value = Reflect.get(policy, APP);
|
|
26
29
|
return value === void 0 ? void 0 : value;
|
|
27
30
|
}
|
|
28
31
|
/**
|
|
29
|
-
* `options` with the app's values under it, key by key, for an adapter
|
|
30
|
-
*
|
|
32
|
+
* `options` with the app's values under it, key by key, for an adapter factory
|
|
33
|
+
* to call first: `options = withApp(policy, options)`.
|
|
31
34
|
*/
|
|
32
35
|
function withApp(policy, options) {
|
|
33
36
|
const app = appOf(policy);
|
|
@@ -39,7 +42,10 @@ function withApp(policy, options) {
|
|
|
39
42
|
}
|
|
40
43
|
//#endregion
|
|
41
44
|
//#region src/core/assert-decision.ts
|
|
42
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* `assert`'s outcome: the granted decision, or the error a refusal throws after
|
|
47
|
+
* `onDenied` runs.
|
|
48
|
+
*/
|
|
43
49
|
function assertDecision(policy, subject, permission, data, decision, onDenied) {
|
|
44
50
|
if (decision.outcome === "granted") return decision;
|
|
45
51
|
if (onDenied !== void 0) onDenied(decision);
|
|
@@ -72,7 +78,10 @@ function assertDecision(policy, subject, permission, data, decision, onDenied) {
|
|
|
72
78
|
}
|
|
73
79
|
//#endregion
|
|
74
80
|
//#region src/core/instance-env.ts
|
|
75
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* The environment `derive(options)` builds on: `base` with the sources
|
|
83
|
+
* `options` replaces loaded again.
|
|
84
|
+
*/
|
|
76
85
|
function deriveEnv(policy, subject, base, relationCache, options) {
|
|
77
86
|
const scopes = scopeList(policy.scopes);
|
|
78
87
|
const tenants = tenantsOf(subject.principal, scopes);
|
|
@@ -140,7 +149,10 @@ function simulateEvent(policy, subject, env, evaluated) {
|
|
|
140
149
|
}
|
|
141
150
|
//#endregion
|
|
142
151
|
//#region src/core/instance.ts
|
|
143
|
-
/**
|
|
152
|
+
/**
|
|
153
|
+
* Each round reads one more layer: link hops, then the chain, then nested
|
|
154
|
+
* groups.
|
|
155
|
+
*/
|
|
144
156
|
const LOAD_ROUNDS = 48;
|
|
145
157
|
function buildInstance(policy, subject, envBase, team) {
|
|
146
158
|
const listeners = emptyListeners();
|
|
@@ -542,11 +554,17 @@ function expandOAuthScopes(policy, delegation) {
|
|
|
542
554
|
scopes: [...out]
|
|
543
555
|
};
|
|
544
556
|
}
|
|
545
|
-
/**
|
|
557
|
+
/**
|
|
558
|
+
* The coarse scopes the policy declares that cover `permission`, in declaration
|
|
559
|
+
* order.
|
|
560
|
+
*/
|
|
546
561
|
function coarseScopesFor(policy, permission) {
|
|
547
562
|
return (policy.oauthScopes ?? []).filter((entry) => entry.permissions.includes(permission.key)).map((entry) => entry.scope);
|
|
548
563
|
}
|
|
549
|
-
/**
|
|
564
|
+
/**
|
|
565
|
+
* Every token scope that reaches `permission`: its own, any it was renamed
|
|
566
|
+
* from, and the coarse scopes covering it.
|
|
567
|
+
*/
|
|
550
568
|
function scopesReaching(policy, permission) {
|
|
551
569
|
return [
|
|
552
570
|
permission.scope,
|
|
@@ -555,9 +573,9 @@ function scopesReaching(policy, permission) {
|
|
|
555
573
|
];
|
|
556
574
|
}
|
|
557
575
|
/**
|
|
558
|
-
* The scope an `insufficient_scope` challenge names for `permission`: the
|
|
559
|
-
*
|
|
560
|
-
*
|
|
576
|
+
* The scope an `insufficient_scope` challenge names for `permission`: the first
|
|
577
|
+
* coarse scope that covers it, which the authorization server issues, else the
|
|
578
|
+
* permission's own scope.
|
|
561
579
|
*/
|
|
562
580
|
function challengeScope(policy, permission) {
|
|
563
581
|
return coarseScopesFor(policy, permission)[0] ?? permission.scope;
|
|
@@ -569,8 +587,8 @@ function hasScope(granted, scopes) {
|
|
|
569
587
|
//#endregion
|
|
570
588
|
//#region src/core/resolve-subject.ts
|
|
571
589
|
/**
|
|
572
|
-
* The tenant a user API key holds its owner to (`Credential.tenant`): only
|
|
573
|
-
*
|
|
590
|
+
* The tenant a user API key holds its owner to (`Credential.tenant`): only the
|
|
591
|
+
* memberships inside it count, and no global role.
|
|
574
592
|
*/
|
|
575
593
|
function heldTenantOf(principal) {
|
|
576
594
|
const credential = principal["credential"];
|
|
@@ -746,7 +764,10 @@ function finishSubject(policy, assembled, context, input, options, extra) {
|
|
|
746
764
|
liveSession: assembled.liveSession
|
|
747
765
|
}));
|
|
748
766
|
}
|
|
749
|
-
/**
|
|
767
|
+
/**
|
|
768
|
+
* Runs the policy's membership schema over each `x`; an invalid one is dropped
|
|
769
|
+
* and reported, never the membership.
|
|
770
|
+
*/
|
|
750
771
|
function checkMembershipX(memberships, schema, auth) {
|
|
751
772
|
if (schema === void 0) return memberships;
|
|
752
773
|
let dropped = false;
|
|
@@ -977,8 +998,8 @@ function create(policy, user, given) {
|
|
|
977
998
|
/**
|
|
978
999
|
* The instance for `user`, built synchronously. Every input must answer
|
|
979
1000
|
* synchronously: the subject mapper, `memberships`, `customRoles`,
|
|
980
|
-
* `entitlements`, `approvalPolicies` and the freshness check. One that
|
|
981
|
-
*
|
|
1001
|
+
* `entitlements`, `approvalPolicies` and the freshness check. One that answers
|
|
1002
|
+
* with a Promise throws here; use `getPermDock` for those.
|
|
982
1003
|
*/
|
|
983
1004
|
function getPermDockSync(policy, user, options = {}) {
|
|
984
1005
|
const created = create(policy, user, options);
|
|
@@ -988,7 +1009,10 @@ function getPermDockSync(policy, user, options = {}) {
|
|
|
988
1009
|
}
|
|
989
1010
|
return created;
|
|
990
1011
|
}
|
|
991
|
-
/**
|
|
1012
|
+
/**
|
|
1013
|
+
* The instance for `user`: waits for every source, then builds it.
|
|
1014
|
+
* `getPermDockSync` is the synchronous twin.
|
|
1015
|
+
*/
|
|
992
1016
|
function getPermDock(policy, user, options = {}) {
|
|
993
1017
|
return Promise.resolve().then(() => create(policy, user, options));
|
|
994
1018
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
3
|
-
import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-
|
|
4
|
-
import { r as parseAppData, t as assertAppData } from "./app-data-
|
|
5
|
-
import { f as normaliseRelation, h as restrictedStopsOf, i as assertIncludes, n as RESOURCE_NAME, r as assertGraphTargets, t as LEVEL_NAME } from "./resource-relations-
|
|
2
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-CUvURzHp.js";
|
|
4
|
+
import { r as parseAppData, t as assertAppData } from "./app-data-UNNm07jV.js";
|
|
5
|
+
import { f as normaliseRelation, h as restrictedStopsOf, i as assertIncludes, n as RESOURCE_NAME, r as assertGraphTargets, t as LEVEL_NAME } from "./resource-relations-8-pCScBO.js";
|
|
6
6
|
//#region src/core/brands.ts
|
|
7
7
|
const RESOURCE_BRAND = Symbol.for("permdock.resource");
|
|
8
8
|
const TREE_REGISTRY = Symbol.for("permdock.registry");
|
|
@@ -91,7 +91,10 @@ function formerKeys(permission) {
|
|
|
91
91
|
const value = Reflect.get(permission, LEAF_FORMER);
|
|
92
92
|
return isReadonlyArray(value) ? value.filter((item) => typeof item === "string") : [];
|
|
93
93
|
}
|
|
94
|
-
/**
|
|
94
|
+
/**
|
|
95
|
+
* The OAuth scope strings `permission` used to have: each former key with `.`
|
|
96
|
+
* as `:`.
|
|
97
|
+
*/
|
|
95
98
|
function formerScopes(permission) {
|
|
96
99
|
return formerKeys(permission).map(keyToScope);
|
|
97
100
|
}
|
|
@@ -183,6 +186,9 @@ function materialiseResource(init, path, registry, leaves, build) {
|
|
|
183
186
|
levels[levelName] = freezeDeep({ ...condition });
|
|
184
187
|
}
|
|
185
188
|
if (Object.keys(levels).length > 0 && instanceSet.size === 0) throw new Error(`PermDock: resource '${name}' declares levels but no instance actions`);
|
|
189
|
+
const ordered = init.options.orderedLevels;
|
|
190
|
+
if (ordered !== void 0 && ordered !== true) throw new Error(`PermDock: orderedLevels on '${name}' must be true when set`);
|
|
191
|
+
if (ordered === true && Object.keys(levels).length < 2) throw new Error(`PermDock: resource '${name}' sets orderedLevels with fewer than two levels`);
|
|
186
192
|
const meta = resourceMetaFor(name, init.options.meta, build.x?.resource);
|
|
187
193
|
const resourceNode = Object.freeze({
|
|
188
194
|
...meta === void 0 ? {} : { meta },
|
|
@@ -199,7 +205,8 @@ function materialiseResource(init, path, registry, leaves, build) {
|
|
|
199
205
|
disclosure,
|
|
200
206
|
instanceActions: instanceSet,
|
|
201
207
|
collectionActions: collectionSet,
|
|
202
|
-
levels: Object.freeze(levels)
|
|
208
|
+
levels: Object.freeze(levels),
|
|
209
|
+
...ordered === true ? { orderedLevels: true } : {}
|
|
203
210
|
});
|
|
204
211
|
assertIncludes(resourceNode);
|
|
205
212
|
registry.set(name, resourceNode);
|
|
@@ -211,7 +218,10 @@ function materialiseResource(init, path, registry, leaves, build) {
|
|
|
211
218
|
});
|
|
212
219
|
return freezeDeep(node);
|
|
213
220
|
}
|
|
214
|
-
/**
|
|
221
|
+
/**
|
|
222
|
+
* The resource a `definePermissions` resource node was built from, read from
|
|
223
|
+
* the node itself.
|
|
224
|
+
*/
|
|
215
225
|
function resourceOfNode(node) {
|
|
216
226
|
if (!Object.hasOwn(node, NODE_RESOURCE)) return;
|
|
217
227
|
const value = Reflect.get(node, NODE_RESOURCE);
|
|
@@ -261,7 +271,10 @@ function getResource(tree, name) {
|
|
|
261
271
|
return getRegistry(tree).get(name);
|
|
262
272
|
}
|
|
263
273
|
const RENAMED_KEY = /^\S+$/u;
|
|
264
|
-
/**
|
|
274
|
+
/**
|
|
275
|
+
* Current key to its former keys, from the `renamed` option; targets are
|
|
276
|
+
* checked once leaves exist.
|
|
277
|
+
*/
|
|
265
278
|
function formerByKey(renamed) {
|
|
266
279
|
const former = /* @__PURE__ */ new Map();
|
|
267
280
|
if (renamed === void 0) return former;
|
|
@@ -274,8 +287,8 @@ function formerByKey(renamed) {
|
|
|
274
287
|
return former;
|
|
275
288
|
}
|
|
276
289
|
/**
|
|
277
|
-
* Every current key is unique, every former key names exactly one leaf, and
|
|
278
|
-
*
|
|
290
|
+
* Every current key is unique, every former key names exactly one leaf, and no
|
|
291
|
+
* former key is also a current key, so a string resolves to one leaf.
|
|
279
292
|
*/
|
|
280
293
|
function assertKeys(leaves, former) {
|
|
281
294
|
const current = /* @__PURE__ */ new Set();
|
|
@@ -11,7 +11,10 @@ type AppData = Readonly<Record<string, MetaValue>>;
|
|
|
11
11
|
* its output is the type PermDock gives the `x` field it checks.
|
|
12
12
|
*/
|
|
13
13
|
type AppDataSchema<X = AppData> = StandardSchemaV1<unknown, X>;
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* A leaf whose `meta.x` is typed by a schema; intersected so it stays
|
|
16
|
+
* assignable to the untyped leaf.
|
|
17
|
+
*/
|
|
15
18
|
type WithX<L, X> = [X] extends [never] ? L : L & {
|
|
16
19
|
readonly meta: {
|
|
17
20
|
readonly x?: Readonly<X>;
|
|
@@ -22,9 +25,26 @@ type WithX<L, X> = [X] extends [never] ? L : L & {
|
|
|
22
25
|
declare const RESOURCE_BRAND: unique symbol;
|
|
23
26
|
/**
|
|
24
27
|
* Phantom key carrying a tree's resource `x` type for `getResource`. Exported
|
|
25
|
-
* as a type only, so a consumer's declaration emit can name it; it has no
|
|
28
|
+
* as a type only, so a consumer's declaration emit can name it; it has no
|
|
29
|
+
* value.
|
|
26
30
|
*/
|
|
27
31
|
declare const RESOURCE_X: unique symbol;
|
|
32
|
+
/**
|
|
33
|
+
* Phantom key carrying the literal `name` a `resource(…, { name })` was given,
|
|
34
|
+
* so its leaves type `resource` by that name rather than the path segment. Type
|
|
35
|
+
* only; it has no value.
|
|
36
|
+
*/
|
|
37
|
+
declare const RESOURCE_NAME: unique symbol;
|
|
38
|
+
/**
|
|
39
|
+
* Phantom key carrying a policy's `scopes` input type for `ScopeNameOf`. Type
|
|
40
|
+
* only; it has no value.
|
|
41
|
+
*/
|
|
42
|
+
declare const POLICY_SCOPES: unique symbol;
|
|
43
|
+
/**
|
|
44
|
+
* Phantom key carrying a permission's row type for `RowOf`. Type only; a leaf
|
|
45
|
+
* never has it at run time, so leaves stay plain JSON.
|
|
46
|
+
*/
|
|
47
|
+
declare const PERMISSION_ROW: unique symbol;
|
|
28
48
|
//#endregion
|
|
29
49
|
//#region src/core/permission-types.d.ts
|
|
30
50
|
/** `definePermissions` options. */
|
|
@@ -37,24 +57,33 @@ type PermissionsOptions<PX = never, RX = never> = {
|
|
|
37
57
|
*/
|
|
38
58
|
readonly renamed?: Readonly<Record<string, string>>;
|
|
39
59
|
/**
|
|
40
|
-
* Standard Schemas for app data. `permission` checks every action's
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
60
|
+
* Standard Schemas for app data. `permission` checks every action's `meta.x`
|
|
61
|
+
* and types it on the leaves; `resource` checks every resource's `meta.x` and
|
|
62
|
+
* types it on `getResource`. Both validate synchronously at definition time
|
|
63
|
+
* and throw on invalid data.
|
|
44
64
|
*/
|
|
45
65
|
readonly x?: {
|
|
46
66
|
readonly permission?: AppDataSchema<PX>;
|
|
47
67
|
readonly resource?: AppDataSchema<RX>;
|
|
48
68
|
};
|
|
49
69
|
};
|
|
50
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* A resource's metadata. PermDock carries it to the catalog and never reads
|
|
72
|
+
* `x`.
|
|
73
|
+
*/
|
|
51
74
|
type ResourceMeta<X = AppData> = {
|
|
52
75
|
readonly title?: string;
|
|
53
76
|
readonly description?: string;
|
|
54
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* Data the application owns. Plain JSON, typed by `definePermissions(…, { x:
|
|
79
|
+
* { resource } })`.
|
|
80
|
+
*/
|
|
55
81
|
readonly x?: X;
|
|
56
82
|
};
|
|
57
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* A tree whose resources carry `meta.x` of type `X`, read through
|
|
85
|
+
* `getResource`.
|
|
86
|
+
*/
|
|
58
87
|
type ResourceXTree<X> = {
|
|
59
88
|
readonly [RESOURCE_X]?: X;
|
|
60
89
|
};
|
|
@@ -63,7 +92,10 @@ type ActionMeta = {
|
|
|
63
92
|
readonly description?: string;
|
|
64
93
|
readonly tags?: readonly string[];
|
|
65
94
|
readonly readOnly?: boolean;
|
|
66
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* The action may destroy or overwrite data; only meaningful when not
|
|
97
|
+
* `readOnly`.
|
|
98
|
+
*/
|
|
67
99
|
readonly destructive?: boolean;
|
|
68
100
|
/** Repeating the action with the same input has no further effect. */
|
|
69
101
|
readonly idempotent?: boolean;
|
|
@@ -72,12 +104,15 @@ type ActionMeta = {
|
|
|
72
104
|
* assign the whole custom-role ceiling, not only what they hold themselves.
|
|
73
105
|
*/
|
|
74
106
|
readonly manageRoles?: boolean;
|
|
75
|
-
/**
|
|
107
|
+
/**
|
|
108
|
+
* Set by a generator (`permdock openapi import`) to the operation an action
|
|
109
|
+
* was inferred from.
|
|
110
|
+
*/
|
|
76
111
|
readonly inferredFrom?: string;
|
|
77
112
|
/**
|
|
78
113
|
* Data the application owns, such as a risk level or an undo window. Plain
|
|
79
|
-
* JSON; PermDock carries it on the leaf, the catalog and snapshots and
|
|
80
|
-
*
|
|
114
|
+
* JSON; PermDock carries it on the leaf, the catalog and snapshots and never
|
|
115
|
+
* reads it. `definePermissions(…, { x: { permission } })` types it.
|
|
81
116
|
*/
|
|
82
117
|
readonly x?: AppData;
|
|
83
118
|
};
|
|
@@ -89,7 +124,17 @@ type Permission<K extends string = string, T = unknown, Kind extends PermissionK
|
|
|
89
124
|
readonly action: string;
|
|
90
125
|
readonly meta: ActionMeta;
|
|
91
126
|
readonly kind: Kind;
|
|
92
|
-
|
|
127
|
+
/**
|
|
128
|
+
* The resource row type. Method syntax keeps it bivariant: a typed leaf is
|
|
129
|
+
* still a `Permission`, and an untyped one still takes a typed closure.
|
|
130
|
+
*/
|
|
131
|
+
[PERMISSION_ROW]?(row: T): void;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* The row type of a permission's resource; `unknown` for an untyped
|
|
135
|
+
* `Permission`.
|
|
136
|
+
*/
|
|
137
|
+
type RowOf<P> = P extends Permission<string, infer T> ? T : unknown;
|
|
93
138
|
type ResourceParent = {
|
|
94
139
|
readonly field: string;
|
|
95
140
|
readonly resource: string;
|
|
@@ -101,15 +146,21 @@ type RelationIncludes = {
|
|
|
101
146
|
/** The row's `field` holds the principal id (or, with `memberOf`, a scope id). */
|
|
102
147
|
type FieldRelation = RelationIncludes & {
|
|
103
148
|
readonly field: string;
|
|
104
|
-
/**
|
|
149
|
+
/**
|
|
150
|
+
* A declared scope name (or the `tenant` / `team` alias): the field holds
|
|
151
|
+
* that scope's id.
|
|
152
|
+
*/
|
|
105
153
|
readonly memberOf?: string;
|
|
106
154
|
};
|
|
107
|
-
/**
|
|
155
|
+
/**
|
|
156
|
+
* Literal values an edge row's columns must hold, so one table backs several
|
|
157
|
+
* relations.
|
|
158
|
+
*/
|
|
108
159
|
type EdgeMatch = Readonly<Record<string, string | number | boolean>>;
|
|
109
160
|
/**
|
|
110
|
-
* One group resource of an edge: the relation whoever the row names must
|
|
111
|
-
*
|
|
112
|
-
*
|
|
161
|
+
* One group resource of an edge: the relation whoever the row names must hold
|
|
162
|
+
* on the group, and, when the group's id has its own typed column, that column
|
|
163
|
+
* in place of the edge's `subject`.
|
|
113
164
|
*/
|
|
114
165
|
type EdgeGroup = string | {
|
|
115
166
|
readonly relation: string;
|
|
@@ -117,12 +168,12 @@ type EdgeGroup = string | {
|
|
|
117
168
|
};
|
|
118
169
|
/**
|
|
119
170
|
* Edge rows that name a group instead of a principal: `column` holds the
|
|
120
|
-
* resource name, `subject` the group's id, and the row holds for whoever
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
171
|
+
* resource name, `subject` the group's id, and the row holds for whoever holds
|
|
172
|
+
* `resources[<name>]` on that group. A null `column` (or `direct`) names a
|
|
173
|
+
* principal; any other value matches nothing. A group with its own `subject`
|
|
174
|
+
* column reads the group's id from it; without `column`, a row names that group
|
|
175
|
+
* when the column is not null, and a principal when the edge's `subject` is not
|
|
176
|
+
* null.
|
|
126
177
|
*/
|
|
127
178
|
type EdgeGroups = {
|
|
128
179
|
/** Required unless every group names its own `subject` column. */
|
|
@@ -131,7 +182,10 @@ type EdgeGroups = {
|
|
|
131
182
|
/** The `column` value of a row naming a principal, besides `null`. */
|
|
132
183
|
readonly direct?: string;
|
|
133
184
|
};
|
|
134
|
-
/**
|
|
185
|
+
/**
|
|
186
|
+
* One row per holder in an edge table: `object` holds the resource id,
|
|
187
|
+
* `subject` the principal id.
|
|
188
|
+
*/
|
|
135
189
|
type EdgeRelation = RelationIncludes & {
|
|
136
190
|
readonly edge: string;
|
|
137
191
|
/** Default `<resource>_id`. */
|
|
@@ -143,10 +197,16 @@ type EdgeRelation = RelationIncludes & {
|
|
|
143
197
|
readonly match?: EdgeMatch;
|
|
144
198
|
readonly groups?: EdgeGroups;
|
|
145
199
|
};
|
|
146
|
-
/**
|
|
200
|
+
/**
|
|
201
|
+
* On a principal resource: the row's `principal` column holds the principal who
|
|
202
|
+
* holds the relation over it.
|
|
203
|
+
*/
|
|
147
204
|
type PrincipalRelation = RelationIncludes & {
|
|
148
205
|
readonly principal: string;
|
|
149
|
-
/**
|
|
206
|
+
/**
|
|
207
|
+
* Timestamp columns bounding when the relation holds; `null` leaves that side
|
|
208
|
+
* open.
|
|
209
|
+
*/
|
|
150
210
|
readonly period?: {
|
|
151
211
|
readonly startsAt?: string;
|
|
152
212
|
readonly expiresAt?: string;
|
|
@@ -158,7 +218,10 @@ type ComputedRelation = {
|
|
|
158
218
|
};
|
|
159
219
|
type ResourceRelation = FieldRelation | EdgeRelation | PrincipalRelation | ComputedRelation;
|
|
160
220
|
type ResourceRelationInput = string | ResourceRelation;
|
|
161
|
-
/**
|
|
221
|
+
/**
|
|
222
|
+
* A to-one link from a row to another resource's instance, walked by `through:
|
|
223
|
+
* [<link>]`.
|
|
224
|
+
*/
|
|
162
225
|
type ResourceLink = {
|
|
163
226
|
readonly field: string;
|
|
164
227
|
readonly resource: string;
|
|
@@ -170,8 +233,8 @@ type ResourceRestricted = {
|
|
|
170
233
|
type ActionList = readonly string[] | Record<string, ActionMeta>;
|
|
171
234
|
type ResourceOptions<A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined> = {
|
|
172
235
|
/**
|
|
173
|
-
* The resource name leaves, tables, relations and AuthZEN types use; the
|
|
174
|
-
*
|
|
236
|
+
* The resource name leaves, tables, relations and AuthZEN types use; the last
|
|
237
|
+
* path segment when absent. Names are unique across a tree.
|
|
175
238
|
*/
|
|
176
239
|
readonly name?: string;
|
|
177
240
|
readonly id?: string;
|
|
@@ -182,7 +245,8 @@ type ResourceOptions<A extends ActionList | undefined = ActionList | undefined,
|
|
|
182
245
|
readonly relations?: Readonly<Record<string, ResourceRelationInput>>;
|
|
183
246
|
/**
|
|
184
247
|
* The row field that changes whenever the row does (`updatedAt`, a revision
|
|
185
|
-
* counter). An `approval: { staleOn: 'resource-change' }` binds to its
|
|
248
|
+
* counter). An `approval: { staleOn: 'resource-change' }` binds to its
|
|
249
|
+
* value.
|
|
186
250
|
*/
|
|
187
251
|
readonly version?: string;
|
|
188
252
|
/**
|
|
@@ -198,19 +262,32 @@ type ResourceOptions<A extends ActionList | undefined = ActionList | undefined,
|
|
|
198
262
|
/**
|
|
199
263
|
* Named grant levels a custom role may pick per permission, each a row
|
|
200
264
|
* condition (`where` shorthand or a `Condition`), such as `own`, `team` and
|
|
201
|
-
* `all`. A level narrows the ceiling grant it applies to and never widens
|
|
202
|
-
* it
|
|
265
|
+
* `all`. A level narrows the ceiling grant it applies to and never widens it;
|
|
266
|
+
* it reaches only instance actions. Names match `^[a-z][a-z0-9_]*$`.
|
|
203
267
|
*/
|
|
204
268
|
readonly levels?: Readonly<Record<string, ResourceLevel>>;
|
|
205
|
-
/**
|
|
269
|
+
/**
|
|
270
|
+
* `true`: `levels` run from narrowest to widest in declaration order, and a
|
|
271
|
+
* holder of a level may hand out every level declared before it. Evaluation
|
|
272
|
+
* is unchanged: each level still applies only its own condition.
|
|
273
|
+
*/
|
|
274
|
+
readonly orderedLevels?: true;
|
|
275
|
+
/**
|
|
276
|
+
* Display text and app data for the resource; carried to the catalog, never
|
|
277
|
+
* read in evaluation.
|
|
278
|
+
*/
|
|
206
279
|
readonly meta?: ResourceMeta;
|
|
207
280
|
};
|
|
208
|
-
/**
|
|
281
|
+
/**
|
|
282
|
+
* A level's row condition: `where` shorthand or a normalised `Condition`,
|
|
283
|
+
* checked by `definePolicy`.
|
|
284
|
+
*/
|
|
209
285
|
type ResourceLevel = Readonly<Record<string, unknown>>;
|
|
210
|
-
type ResourceInit<T = unknown, A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined> = {
|
|
286
|
+
type ResourceInit<T = unknown, A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined, N extends string = string> = {
|
|
211
287
|
readonly [RESOURCE_BRAND]: true;
|
|
212
288
|
readonly schema: StandardSchemaV1<unknown, T> | undefined;
|
|
213
289
|
readonly options: ResourceOptions<A, C>;
|
|
290
|
+
readonly [RESOURCE_NAME]?: N;
|
|
214
291
|
};
|
|
215
292
|
type ResourceNode<T = unknown> = {
|
|
216
293
|
readonly name: string;
|
|
@@ -226,8 +303,13 @@ type ResourceNode<T = unknown> = {
|
|
|
226
303
|
readonly disclosure: "hide" | "reveal";
|
|
227
304
|
readonly instanceActions: ReadonlySet<string>;
|
|
228
305
|
readonly collectionActions: ReadonlySet<string>;
|
|
229
|
-
/**
|
|
306
|
+
/**
|
|
307
|
+
* Declared level names to their raw condition; `definePolicy` normalises
|
|
308
|
+
* them.
|
|
309
|
+
*/
|
|
230
310
|
readonly levels?: Readonly<Record<string, ResourceLevel>>;
|
|
311
|
+
/** Set when the resource declares `orderedLevels: true`. */
|
|
312
|
+
readonly orderedLevels?: true;
|
|
231
313
|
/** The resource's `meta`, when it declares one. */
|
|
232
314
|
readonly meta?: ResourceMeta;
|
|
233
315
|
};
|
|
@@ -235,8 +317,12 @@ type PermissionTree = {
|
|
|
235
317
|
readonly [key: string]: PermissionTree | Permission;
|
|
236
318
|
};
|
|
237
319
|
type ActionNames<A extends ActionList | undefined> = A extends readonly string[] ? A[number] : A extends Record<string, ActionMeta> ? keyof A & string : never;
|
|
238
|
-
type
|
|
239
|
-
type
|
|
320
|
+
type LastSegment<Path extends string> = Path extends `${string}.${infer Rest}` ? LastSegment<Rest> : Path;
|
|
321
|
+
type LeavesFrom<Prefix extends string, Names extends string, T, Kind extends PermissionKind, X = never, R extends string = string> = [Names] extends [never] ? object : { readonly [K in Names]: WithX<Permission<Prefix extends "" ? K : `${Prefix}.${K}`, T, Kind> & {
|
|
322
|
+
readonly resource: R;
|
|
323
|
+
readonly action: K;
|
|
324
|
+
}, X>; };
|
|
325
|
+
type InferResourceLeaves<R extends ResourceInit, Prefix extends string, X = never> = R extends ResourceInit<infer T, infer A, infer C, infer N> ? LeavesFrom<Prefix, ActionNames<A>, T, "instance", X, [N] extends [never] ? LastSegment<Prefix> : N> & LeavesFrom<Prefix, ActionNames<C>, T, "collection", X, [N] extends [never] ? LastSegment<Prefix> : N> : object;
|
|
240
326
|
type InferPermissionTree<Input, Prefix extends string = "", X = never> = Input extends ResourceInit ? InferResourceLeaves<Input, Prefix, X> : Input extends Record<string, unknown> ? { readonly [K in keyof Input & string]: InferPermissionTree<Input[K], Prefix extends "" ? K : `${Prefix}.${K}`, X>; } : never;
|
|
241
327
|
/**
|
|
242
328
|
* The tree `definePermissions(input, options)` returns, nameable for an
|
|
@@ -244,4 +330,4 @@ type InferPermissionTree<Input, Prefix extends string = "", X = never> = Input e
|
|
|
244
330
|
*/
|
|
245
331
|
type PermissionsOf<Input, PX = never, RX = never> = InferPermissionTree<Input, "", PX> & ResourceXTree<RX>;
|
|
246
332
|
//#endregion
|
|
247
|
-
export {
|
|
333
|
+
export { RESOURCE_NAME as A, ResourceRelation as C, RowOf as D, ResourceXTree as E, WithX as F, AppData as M, AppDataSchema as N, PERMISSION_ROW as O, MetaValue as P, ResourceParent as S, ResourceRestricted as T, ResourceLevel as _, EdgeGroups as a, ResourceNode as b, FieldRelation as c, PermissionKind as d, PermissionTree as f, ResourceInit as g, PrincipalRelation as h, EdgeGroup as i, RESOURCE_X as j, POLICY_SCOPES as k, InferPermissionTree as l, PermissionsOptions as m, ActionMeta as n, EdgeMatch as o, PermissionsOf as p, ComputedRelation as r, EdgeRelation as s, ActionList as t, Permission as u, ResourceLink as v, ResourceRelationInput as w, ResourceOptions as x, ResourceMeta as y };
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { g as ResourceInit, l as InferPermissionTree } from "./permission-types-
|
|
2
|
-
import { r as Role, t as Plan } from "./vocabulary-
|
|
1
|
+
import { g as ResourceInit, l as InferPermissionTree } from "./permission-types-CAY-GU7e.js";
|
|
2
|
+
import { r as Role, t as Plan } from "./vocabulary-DEJ5j4mR.js";
|
|
3
3
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
4
|
//#region src/testing/saas/permissions.d.ts
|
|
5
5
|
declare const SaasProjectSchema: StandardSchemaV1<SaasProject>;
|
|
6
6
|
declare const SaasDocSchema: StandardSchemaV1<SaasDoc>;
|
|
7
7
|
declare const SaasFolderSchema: StandardSchemaV1<SaasFolder>;
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* A folder in an org's tree; `restricted` keeps grants held on its ancestors
|
|
10
|
+
* out.
|
|
11
|
+
*/
|
|
9
12
|
type SaasFolder = {
|
|
10
13
|
readonly id: string;
|
|
11
14
|
readonly orgId: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as freezeDeep } from "./freeze-
|
|
2
|
-
import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-
|
|
3
|
-
import { r as assertGraphTargets } from "./resource-relations-
|
|
1
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
2
|
+
import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-B8tYxPIt.js";
|
|
3
|
+
import { r as assertGraphTargets } from "./resource-relations-8-pCScBO.js";
|
|
4
4
|
//#region src/core/operation-risks.ts
|
|
5
5
|
/** Every `meta.risk` level, lowest first. */
|
|
6
6
|
const OPERATION_RISKS = Object.freeze([
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { c as crud } from "./src-
|
|
2
|
-
import { v as resource } from "./permission-registry-
|
|
3
|
-
import { f as definePlans, p as defineRoles } from "./grantee-
|
|
4
|
-
import { t as definePermissions } from "./permissions-
|
|
1
|
+
import { c as crud } from "./src-DZ0l9UAg.js";
|
|
2
|
+
import { v as resource } from "./permission-registry-B8tYxPIt.js";
|
|
3
|
+
import { f as definePlans, p as defineRoles } from "./grantee-Dke-9rd1.js";
|
|
4
|
+
import { t as definePermissions } from "./permissions-CVXmRILq.js";
|
|
5
5
|
//#region src/testing/saas/schema.ts
|
|
6
6
|
function accepts(kind, value) {
|
|
7
7
|
switch (kind) {
|
|
@@ -126,7 +126,10 @@ const saasRoles = defineRoles({
|
|
|
126
126
|
on: "team",
|
|
127
127
|
assignable: true
|
|
128
128
|
},
|
|
129
|
-
/**
|
|
129
|
+
/**
|
|
130
|
+
* Resource-scoped; `role(..., { on: saasPermissions.project })` in the
|
|
131
|
+
* policy.
|
|
132
|
+
*/
|
|
130
133
|
collaborator: { assignable: true }
|
|
131
134
|
});
|
|
132
135
|
const saasPlans = definePlans({
|