permdock 0.6.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 +2 -3
- package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
- package/dist/a2a/index.d.ts +7 -7
- package/dist/a2a/index.js +9 -9
- 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-DCYe60Pi.js → adoption-scan-BLs67P1l.js} +5 -5
- package/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +31 -10
- package/dist/ai-sdk/index.js +22 -12
- 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-DvSSPQJX.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
- package/dist/approvals/index.d.ts +5 -5
- package/dist/approvals/index.js +7 -7
- package/dist/{approvals-p1PGoVjb.js → approvals-DnIBTuXE.js} +128 -78
- package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
- package/dist/{arazzo-41WuzHou.js → arazzo-3RhGfkAK.js} +2 -2
- package/dist/{arazzo-CaUVBn7D.js → arazzo-B5-ulWif.js} +6 -6
- package/dist/{args-IIolxxKA.js → args-0FrVs5EH.js} +125 -8
- package/dist/astro/index.d.ts +30 -12
- package/dist/astro/index.js +2 -2
- package/dist/{audience-DabClFLQ.js → audience-BAkBDMqn.js} +8 -8
- package/dist/{auth-DRLEizbL.js → auth--yPyZNgr.js} +21 -10
- package/dist/authzen/index.d.ts +171 -25
- package/dist/authzen/index.js +321 -149
- package/dist/{automation-BNM3TtDo.d.ts → automation-DqEoWHBc.d.ts} +42 -32
- package/dist/{automation-DVjOckjV.js → automation-x3KEUusw.js} +22 -21
- package/dist/base-url-BQbddZO5.js +9 -0
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +13 -7
- package/dist/better-supabase/index.d.ts +392 -220
- package/dist/better-supabase/index.js +293 -152
- package/dist/{bind-DOyrv6zi.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
- package/dist/{bind-CAvgUuKs.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-Bu_eDqYw.js → build-instance-CNWaYJyr.js} +3 -3
- package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
- package/dist/{capability-N1K9IpqS.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-Drg-1YhL.d.ts → capability-ChuiONQU.d.ts} +41 -29
- package/dist/{casbin-Dyu2gnUD.js → casbin-H0rKxBx2.js} +16 -8
- package/dist/{casbin-Cr7RLtA3.js → casbin-cbSbhT_k.js} +2 -2
- package/dist/{casl-64gpT-8x.js → casl-C4OINZHI.js} +2 -2
- package/dist/{casl-DjEDhTCP.js → casl-CHHoCldP.js} +19 -10
- package/dist/catalog/index.d.ts +104 -23
- package/dist/catalog/index.js +117 -8
- package/dist/{catalog-HD2gf5mY.js → catalog-BFpz2EmT.js} +57 -26
- package/dist/{catalog-DZVbrF-z.js → catalog-DCspHDc8.js} +3 -3
- package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-DjMKzJp9.js} +53 -16
- package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-e6aCWosn.js} +19 -15
- package/dist/catalog-mRQQQhNK.js +1 -0
- package/dist/catalog-operations-Dadrl7Z-.js +60 -0
- package/dist/{create-CQWIpUG-.js → challenge-DImNcR7B.js} +157 -39
- 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-CGkP3Z7A.js +40 -0
- 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 +186 -38
- package/dist/cloud/index.js +293 -31
- package/dist/{cloud-ytQ3uviA.js → cloud-BFlGMaak.js} +5 -6
- package/dist/{codemod-5mpSpnUY.js → codemod-DLQ9Zpo4.js} +3 -4
- package/dist/{codemod-ua2hHy7w.js → codemod-DWSN2erG.js} +523 -201
- package/dist/collect-B5BL3klN.js +1 -0
- package/dist/{collect-mLTY4nwb.js → collect-B7ZFAJU3.js} +36 -64
- package/dist/{collect-Ci6akVwH.js → collect-Bzv3le0A.js} +6 -6
- 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-1bsAezL0.d.ts → compile-BFzysW3o.d.ts} +36 -12
- package/dist/{compile-CMqMx_IN.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BTFrHZhX.js → completion-saoYiRFO.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-Bj2Ixq3d.js → config-DBeXXmBF.js} +2 -2
- package/dist/{config-report-DSpsLpCE.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-CYLQNMYq.js +434 -0
- package/dist/{context-B_u3_bDJ.js → context-BnIzxTNE.js} +4 -3
- package/dist/convex/index.d.ts +13 -7
- package/dist/convex/index.js +9 -6
- package/dist/core-H-mbhpZc.js +341 -0
- package/dist/core-hWIARPDz.d.ts +206 -0
- package/dist/{create-CBMmFie-.d.ts → create-BSNrVuxh.d.ts} +87 -34
- package/dist/{create-B30OMUOJ.d.ts → create-BVq1lNQE.d.ts} +49 -28
- package/dist/{create-D_NmPOdH.d.ts → create-CM1FciYG.d.ts} +37 -29
- package/dist/{create-CGm28gyI.js → create-Cq4Uox0f.js} +13 -9
- package/dist/{create-DCF2SvoT.js → create-_noSrY1T.js} +15 -21
- package/dist/{credential-BcoiejpY.js → credential-CyyyvCsL.js} +42 -39
- package/dist/{credentials-DPyHmYz5.js → credentials-CdDxp7jN.js} +6 -6
- package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-NB4wcyBf.js} +13 -2
- package/dist/{delegation-j6-rc37o.js → delegation-CDB6_keF.js} +31 -22
- package/dist/delivery/index.d.ts +5 -5
- package/dist/delivery/index.js +6 -5
- package/dist/{delivery-DCAgNyCn.js → delivery-BupfvJIV.js} +81 -20
- package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
- package/dist/denied-text-CHNlVInN.d.ts +22 -0
- package/dist/{describe-BybMRY7A.js → describe-Bb4hGK5d.js} +6 -5
- package/dist/{describe-B5qgDvEW.d.ts → describe-ByS9LgHK.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-CmuSD3vc.js → diff-CN8IYhC_.js} +2 -2
- package/dist/{diff-3jbx6Rm4.js → diff-iZWV65nC.js} +23 -14
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BdZw53-k.js → doctor-CHD1M9R5.js} +485 -141
- package/dist/{doctor-3ZqNHX_G.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-CWTY6uih.js → errors-Vpu6rKHl.js} +14 -10
- package/dist/{errors-DH5QEGXh.d.ts → errors-zi_4T-rx.d.ts} +22 -6
- package/dist/{evaluate-CNClBvcj.js → evaluate-Dd8Ta0Ie.js} +185 -80
- package/dist/{evaluations-beAooV0n.js → evaluations-IBceAeKT.js} +41 -20
- package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-z8dQFDaN.d.ts} +12 -6
- 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-Dw0MTS3D.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
- package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-JL43jD3E.js} +14 -11
- package/dist/fields-D0vUI6dq.js +498 -0
- package/dist/{files-C5ZI27eV.js → files-B3AA05f1.js} +21 -5
- package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
- package/dist/{fixtures-B7XrLeY7.js → fixtures-A1_sp_tR.js} +15 -6
- package/dist/{flags-C3DktBDY.js → flags-DXjoTVbS.js} +2 -2
- package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
- package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-DCakWRsr.js} +26 -16
- package/dist/gen-B5kvbAoZ.js +58 -0
- package/dist/gen-DWCYcMQM.js +827 -0
- package/dist/generate-CRVV5V7l.js +165 -0
- package/dist/generate-CezbCaTI.js +275 -0
- package/dist/{grantee-hxrUsbpM.js → grantee-Dke-9rd1.js} +4 -4
- package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-BrYPe-w0.js} +12 -12
- package/dist/{grantee-match-DbENBHLB.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-CBYVMjwh.js → helpers-DJicaG6f.js} +40 -28
- package/dist/hono/index.d.ts +16 -10
- package/dist/hono/index.js +5 -5
- package/dist/{hosted-BPk51-kX.d.ts → hosted-Cmtxogd0.d.ts} +44 -20
- package/dist/{hosted-B46-5LYE.js → hosted-D0IzESu_.js} +68 -25
- package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
- package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
- package/dist/{http-DXJ37RDA.js → http-DOL33cO0.js} +11 -8
- package/dist/{import-wyqXUyjm.js → import-CST57XLp.js} +64 -51
- package/dist/{import-CNV7I2Dw.js → import-_YqhhwvX.js} +6 -6
- package/dist/{index-B8YjkEZ4.d.ts → index-B8s204GL.d.ts} +64 -52
- package/dist/{index-Ch8LpNDp.d.ts → index-BT5-1VsX.d.ts} +64 -25
- package/dist/{index-DuWxc5dt.d.ts → index-BW_0MZOS.d.ts} +388 -149
- package/dist/index-BhxEUY9J.d.ts +233 -0
- package/dist/index-Bv5iXPqU.d.ts +210 -0
- package/dist/{index-C-6Letxg.d.ts → index-_9UiQIkt.d.ts} +164 -77
- package/dist/index.d.ts +22 -21
- package/dist/index.js +35 -33
- package/dist/{init-GG6Jh8HD.js → init-Dz_PsHdv.js} +5 -5
- package/dist/{init-DeMYsnYJ.js → init-cE3A8aXq.js} +10 -10
- package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
- package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot--JWiTrvO.js} +81 -56
- 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 +125 -17
- package/dist/jwt/index.js +157 -16
- package/dist/{kernel-D0NVb1cK.js → kernel-C-fYydV2.js} +151 -16
- 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-DFS_ry0W.js → load-DjSU5KXO.js} +6 -6
- package/dist/load-Dm0pSYH3.js +1 -0
- package/dist/{login-Dfe5RlYk.js → login-D-8tMqzo.js} +4 -4
- package/dist/{login-imhuwvn3.js → login-DplQ0s84.js} +18 -15
- package/dist/{manifest-dvL2XEe1.js → manifest-Cgiq5oqc.js} +67 -37
- package/dist/{manifest-mx5ghSFM.d.ts → manifest-CzzWtnAb.d.ts} +144 -28
- package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-2r37XRhD.js} +80 -9
- package/dist/{manifest-C8IzW3Do.js → manifest-wg8WkkpD.js} +11 -7
- package/dist/{map-claims-D3oRmTk0.js → map-claims-BNWCJtmP.js} +27 -18
- package/dist/{map-error-Dr70oA_3.js → map-error-pasIGqMT.js} +7 -7
- package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
- package/dist/mcp/index.d.ts +154 -47
- package/dist/mcp/index.js +200 -41
- package/dist/{migrate-CIq4-E9F.js → migrate-B7oP_sQU.js} +102 -31
- 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 +61 -30
- package/dist/openapi/index.js +2 -2
- package/dist/{openapi-B7HZ0f-r.js → openapi-BOsx0xn9.js} +34 -24
- package/dist/{openapi-C4dDTVEd.js → openapi-CBZUhA3l.js} +4 -5
- package/dist/{openapi-DD1SV-5-.js → openapi-VeHHU2l9.js} +23 -14
- package/dist/{operation-findings-DgATDpvh.js → operation-findings-CXtFzlKJ.js} +3 -3
- package/dist/{operations-X0VM7F3m.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-DhRBBE4n.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/{output-1im__-08.js → output-tkju6U7R.js} +15 -7
- package/dist/ownership-B4L59T9u.js +1054 -0
- package/dist/parse-1_ZheTW5.js +151 -0
- package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
- package/dist/parse-local-manifest-DEiCF4ah.js +69 -0
- 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 +23 -12
- package/dist/{peer-CRvC7Hg1.js → peer-C9LvBCcb.js} +1 -1
- package/dist/peer-Q0fuZ6hx.js +982 -0
- package/dist/{permdock-SV8ZINYT.d.ts → permdock-B6Sf4T_S.d.ts} +270 -117
- package/dist/{permdock-BrAscV28.js → permdock-L-_I_3zP.js} +226 -74
- package/dist/{permission-registry-Br4jSNVi.js → permission-registry-B8tYxPIt.js} +24 -11
- package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-CAY-GU7e.d.ts} +130 -104
- package/dist/{permissions-u_KHg-sN.d.ts → permissions-Bx6UI8n1.d.ts} +6 -2
- package/dist/{permissions-B-wCP5ZC.js → permissions-CVXmRILq.js} +3 -3
- package/dist/{permissions-BPxlwVhN.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-CnmmYqUZ.js +21 -0
- package/dist/{policy-77FSAq_V.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
- package/dist/{policy-DbM5YYtV.js → policy-CLQ8__GF.js} +49 -20
- package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-CJgOm6aq.js} +28 -25
- package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
- package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-CCiDRZBH.d.ts} +802 -334
- package/dist/postgres-store-DcyrPS-r.js +1028 -0
- package/dist/{postgrest-DAjUkF9w.js → postgrest-D4nuPXIQ.js} +88 -36
- package/dist/{postgrest-CEgRbefE.d.ts → postgrest-DicQyqm-.d.ts} +60 -30
- package/dist/powersync-DHNQX06W.js +1117 -0
- package/dist/{powersync-DISt6SUe.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-DZdU0tne.js → preset-BjLzeFpp.js} +58 -34
- 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-BYc6drYW.js +938 -0
- package/dist/protected-action-BE7N_Luo.d.ts +58 -0
- package/dist/protected-action-DUYqb-Ma.js +80 -0
- package/dist/{protected-BlF0F6wL.js → protected-action-QEA8arRB.js} +48 -14
- package/dist/{provider-B1al-AZz.js → provider-C55OGXJ7.js} +5 -4
- package/dist/{provider-DILL9oPK.d.ts → provider-DXfq5c2d.d.ts} +1 -1
- package/dist/{provider-store-DM6DNcta.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/pull-B65ndFNZ.js +1 -0
- package/dist/{pull-jEwbf80J.js → pull-CwpGaQSi.js} +12 -11
- package/dist/{push-BD4f15co.js → push-DgssgzkK.js} +62 -16
- package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
- package/dist/{pushed-policy-CqtxkV4G.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 +104 -51
- package/dist/react-native/index.js +394 -67
- package/dist/{refs-K6eWUJ0H.js → refs-C8BKxc_e.js} +17 -3
- 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-Bkm-Ne4l.d.ts → replay-DNftIb_R.d.ts} +1 -1
- package/dist/{request-context-C81Pip9n.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-CALjIQ7e.js → retire-B2xffQgY.js} +15 -6
- package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
- package/dist/{rls-DTvYd-lI.js → rls-CNEH2_BG.js} +743 -624
- package/dist/{rls-BAqP4q66.js → rls-Ca8Jz9b5.js} +41 -10
- package/dist/{role-builder-uWQZ4v84.js → role-builder-BK2-T6oD.js} +41 -20
- package/dist/rolldown-runtime-C3I60J0A.js +4 -0
- package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
- package/dist/{rpc-VSl5ylaQ.js → rpc-fNqAIqQk.js} +8 -5
- package/dist/{run-CUKuz0A8.js → run-Bz26OTfO.js} +26 -23
- package/dist/run-D-JE8QWb.js +1 -0
- package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-DbWI9f99.d.ts} +33 -13
- package/dist/{run-ticket-sxFI6LAk.js → run-ticket-Dv7aF7Dk.js} +29 -8
- package/dist/{runtime-D3VTAiCA.js → runtime-BGnrOkVH.js} +5 -2
- package/dist/{saas-BCXRuXca.js → saas-iWnUdwCt.js} +42 -29
- package/dist/{scan-qvOe0hS3.js → scan-DCj1KQfn.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-yLuBWWsh.js → schema-Dst9I9Gs.js} +9 -5
- package/dist/scim/index.d.ts +3 -2
- package/dist/scim/index.js +3 -1
- package/dist/scim-D8YupzX1.js +44 -0
- package/dist/{scim-ClHtpyV3.js → scim-jJBJ7g1Z.js} +35 -551
- package/dist/{scopes-CUPSjo9q.js → scopes-0Up_UA2t.js} +42 -24
- package/dist/server/index.d.ts +12 -12
- package/dist/server/index.js +13 -13
- package/dist/{server-C3WXAHZj.js → server-3cVlTLde.js} +31 -31
- package/dist/{server-types-CKQiCnON.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
- package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
- package/dist/{shared-BAK8t4Uo.js → shared-Afctg7B0.js} +100 -61
- package/dist/{shared-DvvFzYXe.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-4-eQIRWf.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
- package/dist/{skills-B6lVdD_W.js → skills-Bjj7BNEQ.js} +16 -12
- package/dist/{skills-CTYwkl44.js → skills-OuoMR49L.js} +3 -3
- package/dist/{snapshot-B7DkYg6g.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
- package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-Bx_4xC_6.js} +14 -11
- package/dist/solid/index.d.ts +55 -15
- 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-B1Os_YUu.d.ts +312 -0
- package/dist/{sources-vs5dGOsS.js → sources-CMAM-2A3.js} +156 -51
- package/dist/sources-qoIJQrJv.js +11 -0
- package/dist/{sql-B5T1IL83.js → sql-0WjxIp9g.js} +32 -7
- package/dist/sql-B80DFdpG.d.ts +10 -0
- package/dist/{src-Cu2m75uo.js → src-DZ0l9UAg.js} +305 -123
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +665 -224
- package/dist/{standard-webhooks-rbD7LS6h.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-BDutJkDL.js → store-RNFvaJJv.js} +43 -29
- package/dist/{store-options-u0ycEe8s.js → store-options-Dil3lraY.js} +105 -15
- package/dist/stores-C0Kta5Ft.d.ts +59 -0
- package/dist/{stores-CGhM8BN_.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{stream-CeCMJmBB.d.ts → stream-ltuLdtTG.d.ts} +4 -3
- package/dist/{style-DiKWnAvn.js → style-DblOtSga.js} +1 -1
- package/dist/{style-Uao76wO7.js → style-Ds11Hmk4.js} +3 -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 -37
- package/dist/supabase/index.js +6 -6
- package/dist/supabase/middleware.d.ts +19 -13
- package/dist/supabase/middleware.js +7 -7
- package/dist/{supabase-x5JtR2tc.js → supabase-BL1qJzzY.js} +82 -36
- package/dist/{supabase-By_frk3U.js → supabase-D39cuGPt.js} +3 -3
- package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-B-yXnzUl.js} +1206 -286
- package/dist/supabase-hook-H-MtE9Wd.js +1 -0
- package/dist/supautils-BU-pAEpf.js +808 -0
- package/dist/{support-session-C6xJQYut.js → support-session-BsmPCbz8.js} +22 -22
- 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-DqaJNJPn.js → tables-DeMNEy6V.js} +1025 -1085
- 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-DN2QAx9z.js → tenancy-5d1zVBvK.js} +36 -21
- package/dist/terminal/index.d.ts +23 -14
- package/dist/terminal/index.js +17 -20
- package/dist/testing/core.d.ts +2 -0
- package/dist/testing/core.js +1 -0
- package/dist/testing/fixtures/index.d.ts +15 -0
- package/dist/testing/fixtures/index.js +831 -0
- package/dist/testing/index.d.ts +235 -285
- package/dist/testing/index.js +502 -927
- 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-BtfSmdUo.js +444 -0
- package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
- package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
- package/dist/{token-BLZcjQgt.js → token-DC9EQiet.js} +15 -13
- package/dist/{tool-refusal-CMLN5xhn.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-8RnwUAvE.d.ts → types-AMJ5qoU_.d.ts} +49 -30
- package/dist/{types-C_IiEs64.d.ts → types-B2mlGuhW.d.ts} +14 -11
- package/dist/{types-_WhUP7ud.d.ts → types-B4uqKDnp.d.ts} +25 -12
- package/dist/{types-CX7AvRqP.d.ts → types-BJk0BKRX.d.ts} +24 -14
- package/dist/types-B_d_g7T3.d.ts +262 -0
- package/dist/{types-BdtSDbBO.d.ts → types-B_tiYvk8.d.ts} +59 -32
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-Dfv0aTER.d.ts → types-DC1Loeh3.d.ts} +449 -168
- package/dist/{types-lUlG3TVd.d.ts → types-DHKPcqzr.d.ts} +2 -2
- package/dist/{types-C791HFu9.d.ts → types-DjuMBNF9.d.ts} +68 -32
- package/dist/{types-C863OQiR.d.ts → types-HzqOtvsJ.d.ts} +23 -12
- package/dist/{types-Druu9wLM.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-BzzaHxt3.d.ts → types-ah9NlU6j.d.ts} +137 -48
- package/dist/{types-CVZSNocA.d.ts → types-djVzLlIV.d.ts} +31 -14
- package/dist/{types-BtHtcKMr.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-SveTRTyr.js → usage-CxEzS4ey.js} +50 -26
- package/dist/{usage-CRVl9V3t.js → usage-ab0PdusX.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-DHUrAkku.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-BaAKx7t6.js → verify-DZeqoWu5.js} +417 -489
- package/dist/version-DMQ0dnN5.js +48 -0
- package/dist/version-DizhmD72.js +1 -0
- package/dist/{views-DTIIO-oQ.js → views-CD8wuL4Z.js} +19 -6
- package/dist/vocabulary-DEJ5j4mR.d.ts +70 -0
- package/dist/vue/index.d.ts +71 -21
- package/dist/vue/index.js +50 -13
- package/dist/{waiter-B986w1oK.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-vea54PRw.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-C9vfEphl.js → where-scope-DlCdCM_8.js} +56 -30
- package/dist/{who-can-DWBAcaCQ.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-gX61EtpB.js → wrap-B2wziJI_.js} +11 -5
- package/dist/{wrap-C5jC6sKI.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
- package/package.json +25 -14
- package/schemas/catalog-v1.json +3 -0
- package/schemas/cli-result-v1.json +1 -0
- package/schemas/cloud-api-v1.json +152 -7
- package/schemas/connector-v1.json +8 -0
- package/schemas/supabase-claims-v1.json +5 -0
- package/schemas/supabase-manifest-v1.json +308 -75
- package/skills/permdock/SKILL.md +1 -0
- package/skills/permdock-agents/references/runtimes.md +3 -1
- package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
- package/skills/permdock-data/references/queries-and-rls.md +6 -2
- package/skills/permdock-tenancy/SKILL.md +1 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -1
- package/skills/permdock-wire/references/adapters.md +28 -22
- package/skills/permdock-wire/references/policy-options.md +1 -0
- package/dist/catalog-BoWglDPI.js +0 -1
- package/dist/collect-D7eQDffE.js +0 -1
- package/dist/config-bs_kZeYq.js +0 -162
- package/dist/denied-text-CiFQNuMV.d.ts +0 -19
- package/dist/fields-OYG_JR78.js +0 -203
- package/dist/generate-CNU1pIOo.js +0 -171
- package/dist/headers-BIjfMaoC.js +0 -8
- package/dist/headers-CIbDTUTK.d.ts +0 -7
- package/dist/index-Cp_ilKi1.d.ts +0 -91
- package/dist/index-CueFnxQc.d.ts +0 -110
- package/dist/load-BxEtwlBS.js +0 -1
- package/dist/output-files-B3IZJksC.js +0 -1
- package/dist/package-root-Dk_ETdkp.js +0 -31
- package/dist/parse-Cxq0WxrA.js +0 -53
- package/dist/parse-local-manifest-5ODwqu8b.d.ts +0 -10
- package/dist/parse-local-manifest-CVSs6J9I.js +0 -34
- package/dist/peer-C8swJ2GH.js +0 -50
- package/dist/policies-DP2nqRoF.js +0 -295
- package/dist/powersync-BkWWCS1K.js +0 -538
- package/dist/powersync-MMJ2mI2q.js +0 -1
- package/dist/problem-details-B45V5d2b.d.ts +0 -7
- package/dist/prompt-DfZLJLIn.js +0 -32
- package/dist/protected-RFGpakN9.d.ts +0 -38
- package/dist/pull-CvpINcMK.js +0 -1
- package/dist/run-DDwUaJDU.js +0 -1
- package/dist/sources-Xc4zkszI.d.ts +0 -190
- package/dist/stores-BUGNbJTt.d.ts +0 -30
- package/dist/supabase-hook-CCw5m35C.js +0 -1
- package/dist/supautils-B6HYL9eL.js +0 -91
- package/dist/text-diff-BQcUapOb.js +0 -15
- package/dist/types-B3_ooZgZ.d.ts +0 -172
- package/dist/usage-CZpSQP6L.js +0 -1
- package/dist/version-CEbQ5UeM.js +0 -18
- package/dist/version-DXkYUISx.js +0 -1
- package/dist/watch--ovlPOc0.js +0 -1
|
@@ -1,31 +1,36 @@
|
|
|
1
|
-
import { n as isReadonlyArray, 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 { 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 {
|
|
10
|
-
import { o as pickVisible, s as sanitizeContext } from "./validity-
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { r as
|
|
17
|
-
import { i as
|
|
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-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";
|
|
18
20
|
import { r as isSubject, t as anonymousSubject } from "./subject-BGoM5o8B.js";
|
|
19
21
|
//#region src/core/app.ts
|
|
20
22
|
const APP = Symbol.for("permdock.app");
|
|
21
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* The app definition bound to `policy` by `defineApp`, or `undefined` for a
|
|
25
|
+
* plain policy.
|
|
26
|
+
*/
|
|
22
27
|
function appOf(policy) {
|
|
23
28
|
const value = Reflect.get(policy, APP);
|
|
24
29
|
return value === void 0 ? void 0 : value;
|
|
25
30
|
}
|
|
26
31
|
/**
|
|
27
|
-
* `options` with the app's values under it, key by key, for an adapter
|
|
28
|
-
*
|
|
32
|
+
* `options` with the app's values under it, key by key, for an adapter factory
|
|
33
|
+
* to call first: `options = withApp(policy, options)`.
|
|
29
34
|
*/
|
|
30
35
|
function withApp(policy, options) {
|
|
31
36
|
const app = appOf(policy);
|
|
@@ -37,7 +42,10 @@ function withApp(policy, options) {
|
|
|
37
42
|
}
|
|
38
43
|
//#endregion
|
|
39
44
|
//#region src/core/assert-decision.ts
|
|
40
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* `assert`'s outcome: the granted decision, or the error a refusal throws after
|
|
47
|
+
* `onDenied` runs.
|
|
48
|
+
*/
|
|
41
49
|
function assertDecision(policy, subject, permission, data, decision, onDenied) {
|
|
42
50
|
if (decision.outcome === "granted") return decision;
|
|
43
51
|
if (onDenied !== void 0) onDenied(decision);
|
|
@@ -70,7 +78,10 @@ function assertDecision(policy, subject, permission, data, decision, onDenied) {
|
|
|
70
78
|
}
|
|
71
79
|
//#endregion
|
|
72
80
|
//#region src/core/instance-env.ts
|
|
73
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* The environment `derive(options)` builds on: `base` with the sources
|
|
83
|
+
* `options` replaces loaded again.
|
|
84
|
+
*/
|
|
74
85
|
function deriveEnv(policy, subject, base, relationCache, options) {
|
|
75
86
|
const scopes = scopeList(policy.scopes);
|
|
76
87
|
const tenants = tenantsOf(subject.principal, scopes);
|
|
@@ -138,13 +149,17 @@ function simulateEvent(policy, subject, env, evaluated) {
|
|
|
138
149
|
}
|
|
139
150
|
//#endregion
|
|
140
151
|
//#region src/core/instance.ts
|
|
141
|
-
/**
|
|
152
|
+
/**
|
|
153
|
+
* Each round reads one more layer: link hops, then the chain, then nested
|
|
154
|
+
* groups.
|
|
155
|
+
*/
|
|
142
156
|
const LOAD_ROUNDS = 48;
|
|
143
157
|
function buildInstance(policy, subject, envBase, team) {
|
|
144
158
|
const listeners = emptyListeners();
|
|
145
159
|
const queuedAuth = [...envBase.queuedAuth];
|
|
146
160
|
const queuedErrors = [...envBase.queuedErrors ?? []];
|
|
147
161
|
const customGrants = customGrantsFor(policy, envBase.customRoles);
|
|
162
|
+
const unknownLevels = unknownLevelsFor(policy, envBase.customRoles);
|
|
148
163
|
const relationCache = envBase.relationCache ?? /* @__PURE__ */ new Map();
|
|
149
164
|
const relations = relationReader(envBase.relations, relationCache, policy.resources);
|
|
150
165
|
const assignableAt = (tenant) => assignableIn(policy, subject, envBase.customRoles, customGrants, tenant, tenant === void 0 ? void 0 : envBase.assignable?.get(tenant));
|
|
@@ -165,11 +180,25 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
165
180
|
});
|
|
166
181
|
const decideImpl = (permission, data, options) => evaluate(policy, subject, permission, data, options ?? {}, envFor(options?.call !== "simulate", options?.call === "can"));
|
|
167
182
|
const explainImpl = (permission, data, options) => {
|
|
168
|
-
|
|
183
|
+
const explained = decideImpl(permission, data, {
|
|
169
184
|
...options,
|
|
170
185
|
call: options?.call ?? "explain",
|
|
171
186
|
explain: true
|
|
172
187
|
});
|
|
188
|
+
const named = unknownLevels.filter((entry) => entry.permission === permission.key);
|
|
189
|
+
return named.length === 0 ? explained : {
|
|
190
|
+
...explained,
|
|
191
|
+
trace: {
|
|
192
|
+
...explained.trace,
|
|
193
|
+
skipped: [...explained.trace.skipped, ...named.map((entry) => ({
|
|
194
|
+
role: entry.role,
|
|
195
|
+
permission: entry.permission,
|
|
196
|
+
effect: "allow",
|
|
197
|
+
why: "unknown-level",
|
|
198
|
+
level: entry.level
|
|
199
|
+
}))]
|
|
200
|
+
}
|
|
201
|
+
};
|
|
173
202
|
};
|
|
174
203
|
const canImpl = (permission, data, options) => {
|
|
175
204
|
try {
|
|
@@ -190,9 +219,44 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
190
219
|
const instance = {
|
|
191
220
|
can: canImpl,
|
|
192
221
|
decide: decideImpl,
|
|
222
|
+
canAll: (checks, options) => canAllWith(canImpl, checks, options),
|
|
223
|
+
decideAll: (checks, options) => decideAllWith(decideImpl, checks, options),
|
|
193
224
|
decideEach(permission, rows, options) {
|
|
194
225
|
return Object.freeze(rows.map((row) => decideImpl(permission, row, options)));
|
|
195
226
|
},
|
|
227
|
+
async decideIds(permission, ids, options) {
|
|
228
|
+
const { data, ...decide } = options;
|
|
229
|
+
const invalid = () => deniedFor(permission, "validation");
|
|
230
|
+
let loaded;
|
|
231
|
+
try {
|
|
232
|
+
loaded = await data(ids);
|
|
233
|
+
} catch {
|
|
234
|
+
return Object.freeze(ids.map(invalid));
|
|
235
|
+
}
|
|
236
|
+
const resource = getResource(policy.permissions, permission.resource);
|
|
237
|
+
const scopes = scopeList(policy.scopes);
|
|
238
|
+
const root = scopes[0]?.name;
|
|
239
|
+
const rowOf = (id) => {
|
|
240
|
+
if (loaded instanceof Map) return loaded.get(id);
|
|
241
|
+
return isReadonlyArray(loaded) ? loaded.find((row) => isRecord(row) && resource !== void 0 && row[resource.id] === id) : void 0;
|
|
242
|
+
};
|
|
243
|
+
const tenantField = root === void 0 ? void 0 : scopeField(resource, root, scopes);
|
|
244
|
+
const results = [];
|
|
245
|
+
for (const id of ids) {
|
|
246
|
+
const row = rowOf(id);
|
|
247
|
+
if (row === void 0 || row === null) {
|
|
248
|
+
results.push(invalid());
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
const tenant = tenantField !== void 0 && isRecord(row) ? row[tenantField] : void 0;
|
|
252
|
+
const target = typeof tenant === "string" && tenant !== "" ? instance.tenant(tenant) : instance;
|
|
253
|
+
results.push(target.decide(permission, row, {
|
|
254
|
+
...decide,
|
|
255
|
+
trusted: true
|
|
256
|
+
}));
|
|
257
|
+
}
|
|
258
|
+
return Object.freeze(results);
|
|
259
|
+
},
|
|
196
260
|
decideFor(principalId, permission, row) {
|
|
197
261
|
return decideForTarget(subject, envBase.principals, envBase.targets, principalId, permission, row);
|
|
198
262
|
},
|
|
@@ -356,11 +420,13 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
356
420
|
...envBase,
|
|
357
421
|
relationCache
|
|
358
422
|
}, team);
|
|
423
|
+
const activeTenant = resolveActiveTenant(subject.principal, id, scopeList(policy.scopes));
|
|
359
424
|
return buildInstance(policy, freezeDeep(compact({
|
|
360
425
|
...subject,
|
|
361
426
|
principal: compact({
|
|
362
427
|
...subject.principal,
|
|
363
|
-
tenant:
|
|
428
|
+
tenant: activeTenant,
|
|
429
|
+
unheldTenant: activeTenant === void 0 ? id : void 0
|
|
364
430
|
})
|
|
365
431
|
})), {
|
|
366
432
|
...envBase,
|
|
@@ -448,6 +514,30 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
448
514
|
//#endregion
|
|
449
515
|
//#region src/core/oauth-scopes.ts
|
|
450
516
|
/**
|
|
517
|
+
* Every OAuth scope a token may carry to the permission keys it reaches: each
|
|
518
|
+
* permission's own scope, the scopes of the keys it was renamed from, and each
|
|
519
|
+
* coarse `oauthScopes` scope. Scopes and keys are sorted by code point. A key
|
|
520
|
+
* outside `permissions` is dropped, so a stale `oauthScopes` entry grants
|
|
521
|
+
* nothing. better-supabase's `delegation.scopes` and the SQL helpers'
|
|
522
|
+
* `rls.tokenScopes` ceiling both read this map.
|
|
523
|
+
*/
|
|
524
|
+
function delegatedScopeMap(permissions, oauthScopes = []) {
|
|
525
|
+
const delegated = /* @__PURE__ */ new Map();
|
|
526
|
+
const add = (scope, key) => {
|
|
527
|
+
const keys = delegated.get(scope) ?? /* @__PURE__ */ new Set();
|
|
528
|
+
keys.add(key);
|
|
529
|
+
delegated.set(scope, keys);
|
|
530
|
+
};
|
|
531
|
+
const known = /* @__PURE__ */ new Set();
|
|
532
|
+
for (const permission of permissions) {
|
|
533
|
+
known.add(permission.key);
|
|
534
|
+
add(permission.scope, permission.key);
|
|
535
|
+
for (const former of permission.renamedFrom ?? []) add(keyToScope(former), permission.key);
|
|
536
|
+
}
|
|
537
|
+
for (const entry of oauthScopes) for (const key of entry.permissions) if (known.has(key)) add(entry.scope, key);
|
|
538
|
+
return Object.fromEntries([...delegated.keys()].toSorted(byCodePoint).map((scope) => [scope, [...delegated.get(scope) ?? []].toSorted(byCodePoint)]));
|
|
539
|
+
}
|
|
540
|
+
/**
|
|
451
541
|
* `delegation` with every coarse OAuth scope the policy declares in
|
|
452
542
|
* `oauthScopes` followed by the scopes of the permissions it covers, so the
|
|
453
543
|
* delegation checks downstream match them. The token's scopes stay first and
|
|
@@ -464,11 +554,17 @@ function expandOAuthScopes(policy, delegation) {
|
|
|
464
554
|
scopes: [...out]
|
|
465
555
|
};
|
|
466
556
|
}
|
|
467
|
-
/**
|
|
557
|
+
/**
|
|
558
|
+
* The coarse scopes the policy declares that cover `permission`, in declaration
|
|
559
|
+
* order.
|
|
560
|
+
*/
|
|
468
561
|
function coarseScopesFor(policy, permission) {
|
|
469
562
|
return (policy.oauthScopes ?? []).filter((entry) => entry.permissions.includes(permission.key)).map((entry) => entry.scope);
|
|
470
563
|
}
|
|
471
|
-
/**
|
|
564
|
+
/**
|
|
565
|
+
* Every token scope that reaches `permission`: its own, any it was renamed
|
|
566
|
+
* from, and the coarse scopes covering it.
|
|
567
|
+
*/
|
|
472
568
|
function scopesReaching(policy, permission) {
|
|
473
569
|
return [
|
|
474
570
|
permission.scope,
|
|
@@ -477,9 +573,9 @@ function scopesReaching(policy, permission) {
|
|
|
477
573
|
];
|
|
478
574
|
}
|
|
479
575
|
/**
|
|
480
|
-
* The scope an `insufficient_scope` challenge names for `permission`: the
|
|
481
|
-
*
|
|
482
|
-
*
|
|
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.
|
|
483
579
|
*/
|
|
484
580
|
function challengeScope(policy, permission) {
|
|
485
581
|
return coarseScopesFor(policy, permission)[0] ?? permission.scope;
|
|
@@ -491,8 +587,8 @@ function hasScope(granted, scopes) {
|
|
|
491
587
|
//#endregion
|
|
492
588
|
//#region src/core/resolve-subject.ts
|
|
493
589
|
/**
|
|
494
|
-
* The tenant a user API key holds its owner to (`Credential.tenant`): only
|
|
495
|
-
*
|
|
590
|
+
* The tenant a user API key holds its owner to (`Credential.tenant`): only the
|
|
591
|
+
* memberships inside it count, and no global role.
|
|
496
592
|
*/
|
|
497
593
|
function heldTenantOf(principal) {
|
|
498
594
|
const credential = principal["credential"];
|
|
@@ -546,16 +642,22 @@ function assemblePrincipal(policy, user, options, auth) {
|
|
|
546
642
|
}
|
|
547
643
|
};
|
|
548
644
|
let stale;
|
|
645
|
+
let roles;
|
|
549
646
|
if (principal !== null && source !== void 0 && !fromClaims) {
|
|
550
647
|
live = true;
|
|
551
648
|
memberships = read(source, principal);
|
|
552
649
|
} else if (principal?.memberships !== void 0 && fromClaims && source.onStale === "reread" && source.version !== void 0) {
|
|
553
|
-
const reread = rereadStale(source, principal, principal.memberships, () => read(source, principal), auth)
|
|
650
|
+
const reread = rereadStale(source, principal, principal.memberships, () => read(source, principal), auth, source.globalRolesFor === void 0 ? void 0 : () => source.globalRolesFor?.(compact({
|
|
651
|
+
id: principal.id,
|
|
652
|
+
kind: principal.kind
|
|
653
|
+
})) ?? []);
|
|
554
654
|
memberships = reread.memberships;
|
|
555
655
|
stale = reread.stale;
|
|
656
|
+
roles = reread.roles;
|
|
556
657
|
}
|
|
557
658
|
return compact({
|
|
558
659
|
principal,
|
|
660
|
+
roles,
|
|
559
661
|
context: contextResult,
|
|
560
662
|
actor,
|
|
561
663
|
delegation: expandOAuthScopes(policy, delegation),
|
|
@@ -574,7 +676,7 @@ function versionQuery(principal) {
|
|
|
574
676
|
memberships: principal.memberships
|
|
575
677
|
});
|
|
576
678
|
}
|
|
577
|
-
function rereadStale(source, principal, claims, read, auth) {
|
|
679
|
+
function rereadStale(source, principal, claims, read, auth, readRoles) {
|
|
578
680
|
const claimed = principal.authzVersion;
|
|
579
681
|
const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
|
|
580
682
|
const unknown = () => {
|
|
@@ -592,14 +694,39 @@ function rereadStale(source, principal, claims, read, auth) {
|
|
|
592
694
|
} catch {
|
|
593
695
|
freshness = unknown();
|
|
594
696
|
}
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
697
|
+
const failed = () => {
|
|
698
|
+
auth.push({
|
|
699
|
+
reason: "source-threw",
|
|
700
|
+
source: "memberships",
|
|
701
|
+
...sourceName(source)
|
|
702
|
+
});
|
|
703
|
+
return [];
|
|
598
704
|
};
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
705
|
+
const rolesOf = (found) => {
|
|
706
|
+
if (found !== "reread" || readRoles === void 0) return;
|
|
707
|
+
try {
|
|
708
|
+
const roles = readRoles();
|
|
709
|
+
return isThenable(roles) ? Promise.resolve(roles).catch(failed) : roles;
|
|
710
|
+
} catch {
|
|
711
|
+
return failed();
|
|
712
|
+
}
|
|
602
713
|
};
|
|
714
|
+
if (isThenable(freshness)) {
|
|
715
|
+
const settled = freshness.then((found) => ({
|
|
716
|
+
found,
|
|
717
|
+
roles: rolesOf(found)
|
|
718
|
+
}));
|
|
719
|
+
return {
|
|
720
|
+
memberships: settled.then(({ found }) => found === "reread" ? read() : claims),
|
|
721
|
+
stale: settled.then(({ found }) => found === "unknown"),
|
|
722
|
+
roles: settled.then(({ roles }) => roles)
|
|
723
|
+
};
|
|
724
|
+
}
|
|
725
|
+
return compact({
|
|
726
|
+
memberships: freshness === "reread" ? read() : claims,
|
|
727
|
+
stale: freshness === "unknown",
|
|
728
|
+
roles: rolesOf(freshness)
|
|
729
|
+
});
|
|
603
730
|
}
|
|
604
731
|
function finishSubject(policy, assembled, context, input, options, extra) {
|
|
605
732
|
if (assembled.principal === null) return freezeCopy(compact({
|
|
@@ -617,12 +744,14 @@ function finishSubject(policy, assembled, context, input, options, extra) {
|
|
|
617
744
|
const roles = held === void 0 ? kinds.roles : [];
|
|
618
745
|
const memberships = held === void 0 ? kinds.memberships : outsideHeld(held, options) ? [] : kinds.memberships.filter((membership) => tenantOf(membership, scopes) === held);
|
|
619
746
|
const plans = contact ? [] : [.../* @__PURE__ */ new Set([...assembled.principal.plans ?? [], ...extra.plans])];
|
|
747
|
+
const activeTenant = contact ? void 0 : activeTenantOf(policy, assembled, memberships, options);
|
|
620
748
|
const withMemberships = freezeCopy(compact({
|
|
621
749
|
...assembled.principal,
|
|
622
750
|
roles,
|
|
623
751
|
memberships,
|
|
624
752
|
plans: plans.length > 0 ? plans : contact ? void 0 : assembled.principal.plans,
|
|
625
|
-
tenant:
|
|
753
|
+
tenant: activeTenant,
|
|
754
|
+
unheldTenant: activeTenant === void 0 ? options.tenant : void 0
|
|
626
755
|
}));
|
|
627
756
|
return freezeCopy(compact({
|
|
628
757
|
principal: withMemberships,
|
|
@@ -635,7 +764,10 @@ function finishSubject(policy, assembled, context, input, options, extra) {
|
|
|
635
764
|
liveSession: assembled.liveSession
|
|
636
765
|
}));
|
|
637
766
|
}
|
|
638
|
-
/**
|
|
767
|
+
/**
|
|
768
|
+
* Runs the policy's membership schema over each `x`; an invalid one is dropped
|
|
769
|
+
* and reported, never the membership.
|
|
770
|
+
*/
|
|
639
771
|
function checkMembershipX(memberships, schema, auth) {
|
|
640
772
|
if (schema === void 0) return memberships;
|
|
641
773
|
let dropped = false;
|
|
@@ -760,7 +892,17 @@ function withRequestContext(request, resolved) {
|
|
|
760
892
|
};
|
|
761
893
|
}
|
|
762
894
|
function resolveSubject(policy, user, options, auth) {
|
|
763
|
-
const
|
|
895
|
+
const first = assemblePrincipal(policy, user, options, auth);
|
|
896
|
+
const apply = (roles) => resolveAssembled(policy, roles === void 0 || first.principal === null ? first : {
|
|
897
|
+
...first,
|
|
898
|
+
principal: {
|
|
899
|
+
...first.principal,
|
|
900
|
+
roles
|
|
901
|
+
}
|
|
902
|
+
}, options, auth);
|
|
903
|
+
return isThenable(first.roles) ? Promise.resolve(first.roles).then(apply) : apply(first.roles);
|
|
904
|
+
}
|
|
905
|
+
function resolveAssembled(policy, assembled, options, auth) {
|
|
764
906
|
const memberships = settle(assembled.memberships, [], () => {
|
|
765
907
|
auth.push({
|
|
766
908
|
reason: "source-threw",
|
|
@@ -803,35 +945,42 @@ function instantiate(codePolicy, subject, options, auth) {
|
|
|
803
945
|
const customRoles = customRolesFor(roleSource, tenants, auth, subject.principal === null ? void 0 : subject.principal.roles ?? [], (tenant) => heldRoleNamesIn(subject.principal, scopes, tenant));
|
|
804
946
|
const assignable = assignableNamesFor(roleSource, tenants, auth);
|
|
805
947
|
const approvals = options.approvalPolicies?.load(policy, tenants, auth);
|
|
806
|
-
const build = (roles, names, approvalPolicies) =>
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
queuedErrors: errors,
|
|
816
|
-
relations: options.relations,
|
|
817
|
-
approvalPolicies,
|
|
818
|
-
memberships: options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships),
|
|
819
|
-
principals: options.principals,
|
|
820
|
-
settings: options.settings,
|
|
821
|
-
targets: (principal, tenant) => getPermDock(codePolicy, {
|
|
822
|
-
principal,
|
|
823
|
-
context: {}
|
|
824
|
-
}, compact({
|
|
825
|
-
tenant,
|
|
826
|
-
memberships: options.memberships,
|
|
827
|
-
customRoles: options.customRoles,
|
|
828
|
-
entitlements: options.entitlements,
|
|
948
|
+
const build = (roles, names, approvalPolicies) => {
|
|
949
|
+
for (const entry of unknownLevelsFor(policy, roles)) auth.push({
|
|
950
|
+
reason: "schema",
|
|
951
|
+
source: "customRoles",
|
|
952
|
+
cause: `unknown-level: ${entry.role} grants ${entry.permission} at '${entry.level}', which its resource does not declare`
|
|
953
|
+
});
|
|
954
|
+
return buildInstance(policy, subject, compact({
|
|
955
|
+
customRoles: roles,
|
|
956
|
+
sink: options.sink,
|
|
829
957
|
limits: options.limits,
|
|
830
|
-
|
|
958
|
+
limitCache: /* @__PURE__ */ new Map(),
|
|
959
|
+
simulated: false,
|
|
960
|
+
roleSource,
|
|
961
|
+
assignable: names,
|
|
962
|
+
queuedAuth: auth,
|
|
963
|
+
queuedErrors: errors,
|
|
831
964
|
relations: options.relations,
|
|
832
|
-
approvalPolicies
|
|
833
|
-
|
|
834
|
-
|
|
965
|
+
approvalPolicies,
|
|
966
|
+
memberships: options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships),
|
|
967
|
+
principals: options.principals,
|
|
968
|
+
settings: options.settings,
|
|
969
|
+
targets: (principal, tenant) => getPermDock(codePolicy, {
|
|
970
|
+
principal,
|
|
971
|
+
context: {}
|
|
972
|
+
}, compact({
|
|
973
|
+
tenant,
|
|
974
|
+
memberships: options.memberships,
|
|
975
|
+
customRoles: options.customRoles,
|
|
976
|
+
entitlements: options.entitlements,
|
|
977
|
+
limits: options.limits,
|
|
978
|
+
policies: options.policies,
|
|
979
|
+
relations: options.relations,
|
|
980
|
+
approvalPolicies: options.approvalPolicies
|
|
981
|
+
}))
|
|
982
|
+
}));
|
|
983
|
+
};
|
|
835
984
|
if (isThenable(customRoles) || isThenable(assignable) || isThenable(approvals)) return Promise.all([
|
|
836
985
|
customRoles,
|
|
837
986
|
assignable,
|
|
@@ -849,8 +998,8 @@ function create(policy, user, given) {
|
|
|
849
998
|
/**
|
|
850
999
|
* The instance for `user`, built synchronously. Every input must answer
|
|
851
1000
|
* synchronously: the subject mapper, `memberships`, `customRoles`,
|
|
852
|
-
* `entitlements`, `approvalPolicies` and the freshness check. One that
|
|
853
|
-
*
|
|
1001
|
+
* `entitlements`, `approvalPolicies` and the freshness check. One that answers
|
|
1002
|
+
* with a Promise throws here; use `getPermDock` for those.
|
|
854
1003
|
*/
|
|
855
1004
|
function getPermDockSync(policy, user, options = {}) {
|
|
856
1005
|
const created = create(policy, user, options);
|
|
@@ -860,9 +1009,12 @@ function getPermDockSync(policy, user, options = {}) {
|
|
|
860
1009
|
}
|
|
861
1010
|
return created;
|
|
862
1011
|
}
|
|
863
|
-
/**
|
|
1012
|
+
/**
|
|
1013
|
+
* The instance for `user`: waits for every source, then builds it.
|
|
1014
|
+
* `getPermDockSync` is the synchronous twin.
|
|
1015
|
+
*/
|
|
864
1016
|
function getPermDock(policy, user, options = {}) {
|
|
865
1017
|
return Promise.resolve().then(() => create(policy, user, options));
|
|
866
1018
|
}
|
|
867
1019
|
//#endregion
|
|
868
|
-
export {
|
|
1020
|
+
export { delegatedScopeMap as a, APP as c, challengeScope as i, withApp as l, getPermDockSync as n, hasScope as o, resolveSubject as r, scopesReaching as s, getPermDock as t };
|
|
@@ -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();
|
|
@@ -382,4 +395,4 @@ function renamedKeys(tree) {
|
|
|
382
395
|
return map;
|
|
383
396
|
}
|
|
384
397
|
//#endregion
|
|
385
|
-
export {
|
|
398
|
+
export { keyToScope as _, getResource as a, listPermissions as c, attachRegistry as d, resourceOfNode as f, formerScopes as g, formerKeys as h, getRegistry as i, mergePermissions as l, annotationsFor as m, findPermission as n, isPermission as o, walk as p, formerByKey as r, isRegistryTree as s, assertKeys as t, renamedKeys as u, resource as v };
|