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,6 +1,6 @@
|
|
|
1
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { t as applyFiles } from "./files-
|
|
3
|
-
import { n as isIdentifier, t as emitPolicyModule } from "./policy-module-
|
|
2
|
+
import { t as applyFiles } from "./files-B3AA05f1.js";
|
|
3
|
+
import { n as isIdentifier, t as emitPolicyModule } from "./policy-module-xym9fnSq.js";
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
import { resolve } from "node:path";
|
|
6
6
|
//#region src/cli/importers/casl.ts
|
|
@@ -32,7 +32,10 @@ function isStrings(value) {
|
|
|
32
32
|
function split(item) {
|
|
33
33
|
return typeof item === "string" && item.includes(",") ? item.split(",") : item;
|
|
34
34
|
}
|
|
35
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* A rule in either shape: the object form, or `packRules`' `[action, subject,
|
|
37
|
+
* conditions, inverted, fields]`.
|
|
38
|
+
*/
|
|
36
39
|
function readRule(value) {
|
|
37
40
|
if (Array.isArray(value)) {
|
|
38
41
|
const [action, subject, conditions, inverted, fields] = value;
|
|
@@ -79,7 +82,10 @@ function readValue(value) {
|
|
|
79
82
|
}
|
|
80
83
|
return { unsupported: "a nested object value" };
|
|
81
84
|
}
|
|
82
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* The Mongo-query subset CASL conditions use, as a `where`; anything else is
|
|
87
|
+
* reported by name.
|
|
88
|
+
*/
|
|
83
89
|
function readConditions(conditions) {
|
|
84
90
|
const parts = [];
|
|
85
91
|
for (const [key, value] of Object.entries(conditions)) {
|
|
@@ -143,11 +149,11 @@ function collectActions(rule, subjects, actionsBySubject) {
|
|
|
143
149
|
}
|
|
144
150
|
}
|
|
145
151
|
/**
|
|
146
|
-
* CASL rules per role, as PermDock roles: `inverted` rules are denies,
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
152
|
+
* CASL rules per role, as PermDock roles: `inverted` rules are denies, `manage`
|
|
153
|
+
* and `all` expand to every action and subject the rules name, and conditions
|
|
154
|
+
* in the portable Mongo-query subset become `where`. A deny whose condition
|
|
155
|
+
* does not import keeps its effect without the condition, so the import can
|
|
156
|
+
* only deny more, never less.
|
|
151
157
|
*/
|
|
152
158
|
function importCasl(rulesByRole) {
|
|
153
159
|
const parsed = [];
|
|
@@ -249,7 +255,10 @@ function importCasl(rulesByRole) {
|
|
|
249
255
|
skipped
|
|
250
256
|
};
|
|
251
257
|
}
|
|
252
|
-
/**
|
|
258
|
+
/**
|
|
259
|
+
* `permdock casl import`: CASL rules per role into a `permissions` and `policy`
|
|
260
|
+
* module.
|
|
261
|
+
*/
|
|
253
262
|
function runCaslImport(input) {
|
|
254
263
|
if (input.rules === void 0 || input.out === void 0) return {
|
|
255
264
|
code: 2,
|
package/dist/catalog/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { T as Policy,
|
|
2
|
-
import {
|
|
3
|
-
import { a as CatalogDocument, c as CatalogOperation, d as CatalogRole, f as CatalogScope, h as CatalogValidity, i as CatalogDelegation, l as CatalogPermission, m as CatalogUsage, n as CatalogApproval, o as CatalogGrant, p as CatalogSupportAccess, r as CatalogBreakGlass, s as CatalogOAuthScope, t as CatalogActivation, u as CatalogResource } from "../types-
|
|
4
|
-
import { a as CatalogFinding, i as CatalogEventData } from "../sink-
|
|
5
|
-
import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-
|
|
1
|
+
import { T as Policy, a as ApprovalRequirement, sr as Principal } from "../policy-types-CCiDRZBH.js";
|
|
2
|
+
import { c as checkHostedGrant, n as HostedGrantCheck, o as PolicyDocument } from "../hosted-Cmtxogd0.js";
|
|
3
|
+
import { a as CatalogDocument, c as CatalogOperation, d as CatalogRole, f as CatalogScope, h as CatalogValidity, i as CatalogDelegation, l as CatalogPermission, m as CatalogUsage, n as CatalogApproval, o as CatalogGrant, p as CatalogSupportAccess, r as CatalogBreakGlass, s as CatalogOAuthScope, t as CatalogActivation, u as CatalogResource } from "../types-ZzRGoViD.js";
|
|
4
|
+
import { a as CatalogFinding, i as CatalogEventData } from "../sink-Dvi7YZG_.js";
|
|
5
|
+
import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-D1Eoi6NM.js";
|
|
6
6
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
7
7
|
//#region src/catalog/drift.d.ts
|
|
8
8
|
/**
|
|
@@ -14,7 +14,10 @@ export declare function hostedGrantFindings(policy: Policy, document: PolicyDocu
|
|
|
14
14
|
type CatalogDriftInput = {
|
|
15
15
|
readonly previous: CatalogDocument;
|
|
16
16
|
readonly next: CatalogDocument;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* The policy rebuilt from `next` (`policyFromCatalog`), which live hosted
|
|
19
|
+
* grants must still pass.
|
|
20
|
+
*/
|
|
18
21
|
readonly policy: Policy;
|
|
19
22
|
/** The live hosted grants; absent or `null` when the environment has none. */
|
|
20
23
|
readonly document?: PolicyDocument | null;
|
|
@@ -26,12 +29,76 @@ type CatalogDriftInput = {
|
|
|
26
29
|
*/
|
|
27
30
|
export declare function catalogDrift(input: CatalogDriftInput): CatalogEventData;
|
|
28
31
|
//#endregion
|
|
32
|
+
//#region src/catalog/hosted-options.d.ts
|
|
33
|
+
/**
|
|
34
|
+
* The declared roles held at one scope: a scope name as declared, `resource`,
|
|
35
|
+
* or `global` for a role with no `on`.
|
|
36
|
+
*/
|
|
37
|
+
type HostedGrantRoleOption = {
|
|
38
|
+
readonly scope: string;
|
|
39
|
+
readonly roles: readonly string[];
|
|
40
|
+
};
|
|
41
|
+
type HostedGrantRelationOption = {
|
|
42
|
+
readonly relation: string;
|
|
43
|
+
/** Present when the grant may walk the resource's own parent chain. */
|
|
44
|
+
readonly through?: "parent";
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* What a hosted grant on one hostable permission may say; any other value is
|
|
48
|
+
* dropped by `mergeHostedGrants`.
|
|
49
|
+
*/
|
|
50
|
+
type HostedGrantOption = {
|
|
51
|
+
readonly permission: string;
|
|
52
|
+
readonly resource: string;
|
|
53
|
+
readonly scope: string;
|
|
54
|
+
readonly effects: readonly ("allow" | "deny")[];
|
|
55
|
+
readonly grantees: {
|
|
56
|
+
readonly roles: readonly HostedGrantRoleOption[];
|
|
57
|
+
readonly plans: readonly string[];
|
|
58
|
+
readonly relations: readonly HostedGrantRelationOption[];
|
|
59
|
+
};
|
|
60
|
+
readonly approval: {
|
|
61
|
+
/**
|
|
62
|
+
* `true` when a code allow carries an approval: a hosted allow without one
|
|
63
|
+
* at least as strict is dropped (`weaker-approval`).
|
|
64
|
+
*/
|
|
65
|
+
readonly required: boolean;
|
|
66
|
+
/** The approvals code allows carry; a hosted allow must meet each. */
|
|
67
|
+
readonly meets: readonly ("human" | ApprovalRequirement)[];
|
|
68
|
+
/**
|
|
69
|
+
* `human` is `approval: 'human'`; `any` is the object form, any one
|
|
70
|
+
* approver per approval. `all` and `sequential` stages are never accepted.
|
|
71
|
+
*/
|
|
72
|
+
readonly modes: readonly ("human" | "any")[];
|
|
73
|
+
/** The object-form fields a hosted approval may set. */
|
|
74
|
+
readonly fields: readonly string[];
|
|
75
|
+
/** The grantee kinds `by` and `escalation.to` may name. */
|
|
76
|
+
readonly approvers: readonly ("role" | "plan" | "authenticated")[];
|
|
77
|
+
};
|
|
78
|
+
readonly conditions: {
|
|
79
|
+
/** `where` and `check` accept the portable condition subset only. */
|
|
80
|
+
readonly portable: true;
|
|
81
|
+
/**
|
|
82
|
+
* The resource's top-level fields, from its JSON Schema; `null` when the
|
|
83
|
+
* schema exposes none.
|
|
84
|
+
*/
|
|
85
|
+
readonly fields: readonly string[] | null;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* What a hosted grant may say on each permission the policy marks `hostable`,
|
|
90
|
+
* in `hostable` order: the grantees, approval forms and conditions
|
|
91
|
+
* `mergeHostedGrants` accepts. For an authoring form; every grant it builds
|
|
92
|
+
* from these still goes through `checkHostedGrant`.
|
|
93
|
+
*/
|
|
94
|
+
export declare function hostedGrantOptions(policy: Policy): readonly HostedGrantOption[];
|
|
95
|
+
//#endregion
|
|
29
96
|
//#region src/catalog/json-schema-validator.d.ts
|
|
30
97
|
/**
|
|
31
98
|
* A Standard Schema that validates against a catalog resource's JSON Schema.
|
|
32
99
|
* `null` (no JSON Schema in the catalog) gives `undefined`. A schema that uses
|
|
33
|
-
* a keyword outside the supported subset rejects every value, so a hosted
|
|
34
|
-
*
|
|
100
|
+
* a keyword outside the supported subset rejects every value, so a hosted check
|
|
101
|
+
* never validates less than the code did.
|
|
35
102
|
*/
|
|
36
103
|
export declare function resourceSchemaFromJson(json: unknown): StandardSchemaV1 | undefined;
|
|
37
104
|
//#endregion
|
|
@@ -46,19 +113,33 @@ type OperationCatalog = {
|
|
|
46
113
|
};
|
|
47
114
|
/**
|
|
48
115
|
* Operations, matched by name, whose `meta.risk` rose or whose permission
|
|
49
|
-
* stopped requiring approval between two catalogs. A new or removed
|
|
50
|
-
*
|
|
116
|
+
* stopped requiring approval between two catalogs. A new or removed operation
|
|
117
|
+
* is not a finding.
|
|
51
118
|
*/
|
|
52
119
|
export declare function operationFindings(previous: OperationCatalog, next: OperationCatalog): readonly CatalogFinding[];
|
|
53
120
|
//#endregion
|
|
121
|
+
//#region src/catalog/references.d.ts
|
|
122
|
+
/** A permission `meta` field `parseCatalog` can require. */
|
|
123
|
+
type CatalogMetaField = "title" | "risk" | "effects";
|
|
124
|
+
//#endregion
|
|
54
125
|
//#region src/catalog/parse.d.ts
|
|
126
|
+
type ParseCatalogOptions = {
|
|
127
|
+
/** Permission `meta` fields every permission must carry; none by default. */
|
|
128
|
+
readonly requireMeta?: readonly CatalogMetaField[];
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Reads a `permissions.catalog.json` document (parsed, or the JSON text),
|
|
132
|
+
* validates it against `schemas/catalog-v1.json`, then checks its references:
|
|
133
|
+
* role scopes, the permission keys operations, grants, delegations and OAuth
|
|
134
|
+
* scopes name, unique keys, and `requireMeta`. Returns a deep-frozen copy built
|
|
135
|
+
* from own keys; throws `PermDockValidationError` with every issue, each with
|
|
136
|
+
* its `path`.
|
|
137
|
+
*/
|
|
138
|
+
export declare function parseCatalog(json: unknown, options?: ParseCatalogOptions): CatalogDocument;
|
|
55
139
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* built from own keys; throws `PermDockValidationError` with every issue.
|
|
140
|
+
* Keys of the permissions the catalog marks `rowConditions: true`: the SQL
|
|
141
|
+
* helpers alone cannot enforce them.
|
|
59
142
|
*/
|
|
60
|
-
export declare function parseCatalog(json: unknown): CatalogDocument;
|
|
61
|
-
/** Keys of the permissions the catalog marks `rowConditions: true`: the SQL helpers alone cannot enforce them. */
|
|
62
143
|
export declare function rowConditionKeys(catalog: CatalogDocument): ReadonlySet<string>;
|
|
63
144
|
//#endregion
|
|
64
145
|
//#region src/catalog/policy-from-catalog.d.ts
|
|
@@ -70,15 +151,15 @@ type PolicyFromCatalogOptions<TUser = unknown> = {
|
|
|
70
151
|
* Rebuilds an evaluable `Policy` from a catalog (`permissions.catalog.json`)
|
|
71
152
|
* and the policy `permdock cloud push` sent with it, for a service that holds
|
|
72
153
|
* no application code: the hosted AuthZEN endpoint or a `mergeHostedGrants`
|
|
73
|
-
* pre-check. Throws `PermDockValidationError` when either input is malformed
|
|
74
|
-
*
|
|
154
|
+
* pre-check. Throws `PermDockValidationError` when either input is malformed or
|
|
155
|
+
* the two disagree.
|
|
75
156
|
*
|
|
76
|
-
* What only code can answer fails closed: an allow whose condition is a
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
157
|
+
* What only code can answer fails closed: an allow whose condition is a closure
|
|
158
|
+
* never grants and such a deny always applies; a resource schema keyword
|
|
159
|
+
* outside the supported JSON Schema subset rejects every value; a support role
|
|
160
|
+
* has no one who may consent. Grant levels and OAuth scopes are not in a
|
|
161
|
+
* catalog, so the rebuilt policy has none.
|
|
81
162
|
*/
|
|
82
163
|
export declare function policyFromCatalog<TUser = unknown>(catalogInput: unknown, pushedInput: unknown, options?: PolicyFromCatalogOptions<TUser>): Policy<TUser>;
|
|
83
164
|
//#endregion
|
|
84
|
-
export { type CatalogActivation, type CatalogApproval, type CatalogBreakGlass, type CatalogDelegation, type CatalogDocument, type CatalogDriftInput, type CatalogGrant, type CatalogOAuthScope, type CatalogOperation, type CatalogPermission, type CatalogResource, type CatalogRole, type CatalogScope, type CatalogSupportAccess, type CatalogUsage, type CatalogValidity, PUSHED_POLICY_SCHEMA, type PolicyFromCatalogOptions, type PushedGrant, type PushedPolicy, parsePushedPolicy, pushedPolicy };
|
|
165
|
+
export { type CatalogActivation, type CatalogApproval, type CatalogBreakGlass, type CatalogDelegation, type CatalogDocument, type CatalogDriftInput, type CatalogGrant, type CatalogMetaField, type CatalogOAuthScope, type CatalogOperation, type CatalogPermission, type CatalogResource, type CatalogRole, type CatalogScope, type CatalogSupportAccess, type CatalogUsage, type CatalogValidity, type HostedGrantCheck, type HostedGrantOption, type HostedGrantRelationOption, type HostedGrantRoleOption, PUSHED_POLICY_SCHEMA, type ParseCatalogOptions, type PolicyFromCatalogOptions, type PushedGrant, type PushedPolicy, checkHostedGrant, parsePushedPolicy, pushedPolicy };
|
package/dist/catalog/index.js
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { n as
|
|
1
|
+
import { r as isRecord } from "../compact-CAf557ZB.js";
|
|
2
|
+
import { n as freezeDeep } from "../freeze-jjan0lCv.js";
|
|
3
|
+
import { a as getResource, n as findPermission } from "../permission-registry-B8tYxPIt.js";
|
|
4
|
+
import { d as isSelfParented } from "../resource-relations-8-pCScBO.js";
|
|
5
|
+
import { _ as listPlans, m as findRole } from "../grantee-Dke-9rd1.js";
|
|
6
|
+
import { n as declaredRoleNames } from "../policy-CLQ8__GF.js";
|
|
7
|
+
import { i as hostedGrantDrops, n as codeApprovals, r as declaredGrantee, t as checkHostedGrant } from "../hosted-D0IzESu_.js";
|
|
8
|
+
import { n as rowConditionKeys, t as parseCatalog } from "../parse-1_ZheTW5.js";
|
|
9
|
+
import { t as operationFindings } from "../operation-findings-CXtFzlKJ.js";
|
|
10
|
+
import { n as resourceSchemaFromJson, t as policyFromCatalog } from "../policy-from-catalog-CJgOm6aq.js";
|
|
11
|
+
import { n as parsePushedPolicy, r as pushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-ITwYKvvH.js";
|
|
7
12
|
//#region src/catalog/drift.ts
|
|
8
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* The finding a drop reason becomes; `null` for a reason the catalog did not
|
|
15
|
+
* cause.
|
|
16
|
+
*/
|
|
9
17
|
function findingCode(reason) {
|
|
10
18
|
switch (reason) {
|
|
11
19
|
case "unknown-permission": return "permission-removed";
|
|
@@ -48,4 +56,105 @@ function catalogDrift(input) {
|
|
|
48
56
|
});
|
|
49
57
|
}
|
|
50
58
|
//#endregion
|
|
51
|
-
|
|
59
|
+
//#region src/catalog/hosted-options.ts
|
|
60
|
+
function roleScope(policy, name) {
|
|
61
|
+
const on = policy.rolesByName.get(name)?.on ?? findRole(policy.vocabulary.roles, name)?.on;
|
|
62
|
+
if (on === void 0) return "global";
|
|
63
|
+
return typeof on === "string" ? on : "resource";
|
|
64
|
+
}
|
|
65
|
+
function schemaFields(node) {
|
|
66
|
+
const output = (node?.schema)?.["~standard"]?.jsonSchema?.output;
|
|
67
|
+
if (typeof output !== "function") return null;
|
|
68
|
+
try {
|
|
69
|
+
const json = output({ target: "draft-2020-12" });
|
|
70
|
+
const properties = isRecord(json) ? json["properties"] : void 0;
|
|
71
|
+
return isRecord(properties) ? Object.keys(properties).toSorted() : null;
|
|
72
|
+
} catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function optionFor(policy, key) {
|
|
77
|
+
const leaf = findPermission(policy.permissions, key);
|
|
78
|
+
if (leaf === void 0) return null;
|
|
79
|
+
const accepts = (grantee) => declaredGrantee(policy, grantee, leaf.resource);
|
|
80
|
+
const byScope = /* @__PURE__ */ new Map();
|
|
81
|
+
for (const role of declaredRoleNames(policy)) {
|
|
82
|
+
const scope = roleScope(policy, role);
|
|
83
|
+
if (accepts({
|
|
84
|
+
kind: "role",
|
|
85
|
+
role,
|
|
86
|
+
scope
|
|
87
|
+
})) byScope.set(scope, [...byScope.get(scope) ?? [], role]);
|
|
88
|
+
}
|
|
89
|
+
const plans = listPlans(policy.vocabulary.plans).map((plan) => plan.key).filter((plan) => accepts({
|
|
90
|
+
kind: "plan",
|
|
91
|
+
plan
|
|
92
|
+
}));
|
|
93
|
+
const node = getResource(policy.permissions, leaf.resource);
|
|
94
|
+
const relations = Object.keys(node?.relations ?? {}).toSorted().flatMap((relation) => {
|
|
95
|
+
const direct = {
|
|
96
|
+
kind: "relation",
|
|
97
|
+
resource: leaf.resource,
|
|
98
|
+
relation
|
|
99
|
+
};
|
|
100
|
+
if (!accepts(direct)) return [];
|
|
101
|
+
return isSelfParented(node) && accepts({
|
|
102
|
+
...direct,
|
|
103
|
+
through: "parent"
|
|
104
|
+
}) ? [{
|
|
105
|
+
relation,
|
|
106
|
+
through: "parent"
|
|
107
|
+
}] : [{ relation }];
|
|
108
|
+
});
|
|
109
|
+
const meets = codeApprovals(policy, key).filter((approval) => approval !== void 0);
|
|
110
|
+
return {
|
|
111
|
+
permission: key,
|
|
112
|
+
resource: leaf.resource,
|
|
113
|
+
scope: leaf.scope,
|
|
114
|
+
effects: ["allow", "deny"],
|
|
115
|
+
grantees: {
|
|
116
|
+
roles: [...byScope].map(([scope, roles]) => ({
|
|
117
|
+
scope,
|
|
118
|
+
roles
|
|
119
|
+
})),
|
|
120
|
+
plans,
|
|
121
|
+
relations
|
|
122
|
+
},
|
|
123
|
+
approval: {
|
|
124
|
+
required: meets.length > 0,
|
|
125
|
+
meets,
|
|
126
|
+
modes: ["human", "any"],
|
|
127
|
+
fields: [
|
|
128
|
+
"by",
|
|
129
|
+
"distinct",
|
|
130
|
+
"escalation",
|
|
131
|
+
"quorum",
|
|
132
|
+
...node?.version === void 0 ? [] : ["staleOn"],
|
|
133
|
+
"ttl"
|
|
134
|
+
],
|
|
135
|
+
approvers: [
|
|
136
|
+
...byScope.size > 0 ? ["role"] : [],
|
|
137
|
+
...plans.length > 0 ? ["plan"] : [],
|
|
138
|
+
"authenticated"
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
conditions: {
|
|
142
|
+
portable: true,
|
|
143
|
+
fields: schemaFields(node)
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* What a hosted grant may say on each permission the policy marks `hostable`,
|
|
149
|
+
* in `hostable` order: the grantees, approval forms and conditions
|
|
150
|
+
* `mergeHostedGrants` accepts. For an authoring form; every grant it builds
|
|
151
|
+
* from these still goes through `checkHostedGrant`.
|
|
152
|
+
*/
|
|
153
|
+
function hostedGrantOptions(policy) {
|
|
154
|
+
return freezeDeep(policy.hostable.flatMap((key) => {
|
|
155
|
+
const option = optionFor(policy, key);
|
|
156
|
+
return option === null ? [] : [option];
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
//#endregion
|
|
160
|
+
export { PUSHED_POLICY_SCHEMA, catalogDrift, checkHostedGrant, hostedGrantFindings, hostedGrantOptions, operationFindings, parseCatalog, parsePushedPolicy, policyFromCatalog, pushedPolicy, resourceSchemaFromJson, rowConditionKeys };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { r as listSourceFiles, t as defaultSrcPath } from "./files-
|
|
3
|
-
import { a as
|
|
4
|
-
import { a as loadModule, i as loadConfiguredPolicy, r as leavesOf, s as pickNamed, t as asPermissionTree } from "./load-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { r as listSourceFiles, t as defaultSrcPath } from "./files-BSjrtIHw.js";
|
|
3
|
+
import { a as catalogSchemaDocument, n as catalogForCompare, o as formatCatalogJson, r as catalogForDrift, s as formatCatalogMarkdown, t as buildCatalog } from "./catalog-doc-DjMKzJp9.js";
|
|
4
|
+
import { a as loadModule, i as loadConfiguredPolicy, r as leavesOf, s as pickNamed, t as asPermissionTree } from "./load-DjSU5KXO.js";
|
|
5
|
+
import { t as loadConfiguredOperations } from "./catalog-operations-Dadrl7Z-.js";
|
|
6
|
+
import { i as scanSources, r as runCollect } from "./collect-B7ZFAJU3.js";
|
|
7
|
+
import { n as fileSummary, t as applyFiles } from "./files-B3AA05f1.js";
|
|
7
8
|
import { existsSync, readFileSync } from "node:fs";
|
|
8
9
|
import { resolve } from "node:path";
|
|
9
10
|
//#region src/cli/catalog.ts
|
|
@@ -14,18 +15,7 @@ async function runCatalog(input) {
|
|
|
14
15
|
};
|
|
15
16
|
const from = input.from ?? input.config.permissions;
|
|
16
17
|
let document;
|
|
17
|
-
if (from
|
|
18
|
-
const abs = resolve(input.cwd, from);
|
|
19
|
-
if (!existsSync(abs)) return {
|
|
20
|
-
code: 2,
|
|
21
|
-
output: `PermDock CLI: module not found: ${from}`
|
|
22
|
-
};
|
|
23
|
-
const tree = asPermissionTree(pickNamed(await loadModule(abs), ["permissions"]));
|
|
24
|
-
const srcPath = input.config.collect?.srcPath ?? defaultSrcPath();
|
|
25
|
-
const files = listSourceFiles(input.cwd, srcPath);
|
|
26
|
-
const scan = scanSources(input.cwd, files, new Set(leavesOf(tree).map((leaf) => leaf.key)));
|
|
27
|
-
document = buildCatalog(tree, scan, input.now.toISOString(), await loadConfiguredPolicy(input.cwd, input.config.policy), await loadConfiguredOperations(input.cwd, input.config.operations));
|
|
28
|
-
} else {
|
|
18
|
+
if (from === void 0) {
|
|
29
19
|
const collected = await runCollect({
|
|
30
20
|
cwd: input.cwd,
|
|
31
21
|
config: input.config,
|
|
@@ -39,6 +29,17 @@ async function runCatalog(input) {
|
|
|
39
29
|
output: collected.message
|
|
40
30
|
};
|
|
41
31
|
document = collected.document;
|
|
32
|
+
} else {
|
|
33
|
+
const abs = resolve(input.cwd, from);
|
|
34
|
+
if (!existsSync(abs)) return {
|
|
35
|
+
code: 2,
|
|
36
|
+
output: `PermDock CLI: module not found: ${from}`
|
|
37
|
+
};
|
|
38
|
+
const tree = asPermissionTree(pickNamed(await loadModule(abs), ["permissions"]));
|
|
39
|
+
const srcPath = input.config.collect?.srcPath ?? defaultSrcPath();
|
|
40
|
+
const files = listSourceFiles(input.cwd, srcPath);
|
|
41
|
+
const scan = scanSources(input.cwd, files, new Set(leavesOf(tree).map((leaf) => leaf.key)));
|
|
42
|
+
document = buildCatalog(tree, scan, input.now.toISOString(), await loadConfiguredPolicy(input.cwd, input.config.policy), await loadConfiguredOperations(input.cwd, input.config.operations));
|
|
42
43
|
}
|
|
43
44
|
const filtered = input.include.length === 0 ? document : {
|
|
44
45
|
...document,
|
|
@@ -53,18 +54,30 @@ async function runCatalog(input) {
|
|
|
53
54
|
output: formatCatalogJson(filtered)
|
|
54
55
|
};
|
|
55
56
|
}
|
|
56
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* The comparable forms of a catalog file: without the fields every run changes,
|
|
59
|
+
* then also without `usages[].line`.
|
|
60
|
+
*/
|
|
57
61
|
function comparable(text) {
|
|
58
62
|
try {
|
|
59
63
|
const parsed = JSON.parse(text);
|
|
60
64
|
if (isRecord(parsed)) {
|
|
61
|
-
const
|
|
62
|
-
return
|
|
65
|
+
const doc = parsed;
|
|
66
|
+
return {
|
|
67
|
+
full: catalogForCompare(doc),
|
|
68
|
+
drift: catalogForDrift(doc)
|
|
69
|
+
};
|
|
63
70
|
}
|
|
64
71
|
} catch {}
|
|
65
|
-
return
|
|
72
|
+
return {
|
|
73
|
+
full: text,
|
|
74
|
+
drift: text
|
|
75
|
+
};
|
|
66
76
|
}
|
|
67
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* `catalog --out`: writes the export, or with `--check` exits 1 when the file
|
|
79
|
+
* differs by more than usage line numbers.
|
|
80
|
+
*/
|
|
68
81
|
function catalogFile(cwd, out, text, check) {
|
|
69
82
|
if (check) {
|
|
70
83
|
const path = resolve(cwd, out);
|
|
@@ -76,13 +89,31 @@ function catalogFile(cwd, out, text, check) {
|
|
|
76
89
|
stale: true
|
|
77
90
|
}
|
|
78
91
|
};
|
|
79
|
-
const
|
|
92
|
+
const onDisk = comparable(readFileSync(path, "utf8"));
|
|
93
|
+
const generated = comparable(text);
|
|
94
|
+
if (onDisk.full === generated.full) return {
|
|
95
|
+
code: 0,
|
|
96
|
+
output: `${out} is up to date`,
|
|
97
|
+
data: {
|
|
98
|
+
out,
|
|
99
|
+
stale: false
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
if (onDisk.drift === generated.drift) return {
|
|
103
|
+
code: 0,
|
|
104
|
+
output: `catalog usages moved (lines only): ${out}; run permdock collect to refresh`,
|
|
105
|
+
data: {
|
|
106
|
+
out,
|
|
107
|
+
stale: false,
|
|
108
|
+
positionsMoved: true
|
|
109
|
+
}
|
|
110
|
+
};
|
|
80
111
|
return {
|
|
81
|
-
code:
|
|
82
|
-
output:
|
|
112
|
+
code: 1,
|
|
113
|
+
output: `catalog stale: ${out}`,
|
|
83
114
|
data: {
|
|
84
115
|
out,
|
|
85
|
-
stale
|
|
116
|
+
stale: true
|
|
86
117
|
}
|
|
87
118
|
};
|
|
88
119
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as missingInput } from "./errors-
|
|
1
|
+
import { c as missingInput } from "./errors-Vpu6rKHl.js";
|
|
2
2
|
import { t as defineLeaf } from "./command-L8EstFNm.js";
|
|
3
|
-
import { c as given, l as outFlag, t as checkFlag, u as permissionsFlag } from "./flags-
|
|
3
|
+
import { c as given, l as outFlag, t as checkFlag, u as permissionsFlag } from "./flags-DXjoTVbS.js";
|
|
4
4
|
//#region src/cli/commands/catalog.ts
|
|
5
5
|
const RUN_FORMAT = {
|
|
6
6
|
catalog: "json",
|
|
@@ -30,7 +30,7 @@ const catalog = defineLeaf({
|
|
|
30
30
|
...checkFlag
|
|
31
31
|
},
|
|
32
32
|
async run(ctx, { flags }) {
|
|
33
|
-
const { catalogFile, runCatalog } = await import("./catalog-
|
|
33
|
+
const { catalogFile, runCatalog } = await import("./catalog-mRQQQhNK.js");
|
|
34
34
|
const result = await runCatalog({
|
|
35
35
|
cwd: ctx.cwd,
|
|
36
36
|
config: ctx.config,
|
|
@@ -1,19 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { t as
|
|
7
|
-
import { t as
|
|
8
|
-
import { t as
|
|
9
|
-
import {
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { a as getResource, c as listPermissions, h as formerKeys } from "./permission-registry-B8tYxPIt.js";
|
|
3
|
+
import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
|
|
4
|
+
import { m as findRole, v as listRoles } from "./grantee-Dke-9rd1.js";
|
|
5
|
+
import { i as wireValidity } from "./validity-Buc7w8E9.js";
|
|
6
|
+
import { t as byCodePoint } from "./compare-DTfyUunF.js";
|
|
7
|
+
import { t as catalogFingerprint } from "./catalog-fingerprint-e6aCWosn.js";
|
|
8
|
+
import { t as catalogSchema } from "./schema-BOJjqlWL.js";
|
|
9
|
+
import { t as policyRowConditionKeys } from "./row-conditions-BAGHOmVq.js";
|
|
10
|
+
import { c as generatorBanner, n as CATALOG_SCHEMA } from "./version-DMQ0dnN5.js";
|
|
10
11
|
//#region src/cli/catalog-doc.ts
|
|
11
12
|
function leafLevels(tree, leaf) {
|
|
12
13
|
if (leaf.kind !== "instance") return;
|
|
13
14
|
const names = Object.keys({ ...getResource(tree, leaf.resource)?.levels });
|
|
14
15
|
return names.length === 0 ? void 0 : names;
|
|
15
16
|
}
|
|
16
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* With `policy`, permissions carry `hostable` and a known `rowConditions`
|
|
19
|
+
* (without, it is `true`), and roles carry `on`, `assignable` and their
|
|
20
|
+
* ownership rules.
|
|
21
|
+
*/
|
|
17
22
|
function buildCatalog(tree, scan, generatedAt, policy, operations) {
|
|
18
23
|
const hostable = new Set(policy?.hostable ?? []);
|
|
19
24
|
const rowConditions = policy === void 0 ? void 0 : policyRowConditionKeys(policy);
|
|
@@ -50,6 +55,7 @@ function buildCatalog(tree, scan, generatedAt, policy, operations) {
|
|
|
50
55
|
usages: scan.usages[leaf.key] ?? [],
|
|
51
56
|
renamedFrom: formerKeys(leaf).length === 0 ? void 0 : formerKeys(leaf),
|
|
52
57
|
levels: leafLevels(tree, leaf),
|
|
58
|
+
orderedLevels: leaf.kind === "instance" && getResource(tree, leaf.resource)?.orderedLevels === true ? true : void 0,
|
|
53
59
|
hostable: hostable.has(leaf.key) ? true : void 0,
|
|
54
60
|
rowConditions: rowConditions?.has(leaf.key) ?? true,
|
|
55
61
|
approvals: approvals.get(leaf.key),
|
|
@@ -94,8 +100,8 @@ function catalogApproval(approval) {
|
|
|
94
100
|
/**
|
|
95
101
|
* Every code grant in canonical order: by permission, allows before denies,
|
|
96
102
|
* then by role (top-level grants last) and finally by canonical JSON, so two
|
|
97
|
-
* catalogs of the same policy list the same grants in the same order
|
|
98
|
-
*
|
|
103
|
+
* catalogs of the same policy list the same grants in the same order whatever
|
|
104
|
+
* the declaration order was.
|
|
99
105
|
*/
|
|
100
106
|
function catalogGrant(grant) {
|
|
101
107
|
const limit = grant.limit === void 0 ? void 0 : withDefined({
|
|
@@ -124,7 +130,10 @@ function catalogGrant(grant) {
|
|
|
124
130
|
})
|
|
125
131
|
};
|
|
126
132
|
}
|
|
127
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* The sort key of a catalog grant: permission, allows first, role (top-level
|
|
135
|
+
* last), then the canonical JSON.
|
|
136
|
+
*/
|
|
128
137
|
function catalogGrantKey(grant) {
|
|
129
138
|
return [
|
|
130
139
|
grant.permission,
|
|
@@ -144,7 +153,10 @@ function catalogGrants(policy) {
|
|
|
144
153
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
145
154
|
});
|
|
146
155
|
}
|
|
147
|
-
/**
|
|
156
|
+
/**
|
|
157
|
+
* Every policy delegation, sorted by canonical JSON so declaration order does
|
|
158
|
+
* not matter.
|
|
159
|
+
*/
|
|
148
160
|
function catalogDelegations(policy) {
|
|
149
161
|
return (policy.delegations ?? []).map((delegation) => withDefined({
|
|
150
162
|
from: delegation.from,
|
|
@@ -163,7 +175,10 @@ function catalogOAuthScopes(declared) {
|
|
|
163
175
|
permissions: [...new Set(entry.permissions)].toSorted(byCodePoint)
|
|
164
176
|
})).toSorted((a, b) => byCodePoint(a.scope, b.scope));
|
|
165
177
|
}
|
|
166
|
-
/**
|
|
178
|
+
/**
|
|
179
|
+
* Per permission key, the distinct approvals the code allows require, in policy
|
|
180
|
+
* order.
|
|
181
|
+
*/
|
|
167
182
|
function codeApprovals(policy) {
|
|
168
183
|
const out = /* @__PURE__ */ new Map();
|
|
169
184
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -292,6 +307,28 @@ function catalogForCompare(doc) {
|
|
|
292
307
|
const { generatedAt: _generatedAt, generator: _generator, ...rest } = doc;
|
|
293
308
|
return `${JSON.stringify(rest, null, 2)}\n`;
|
|
294
309
|
}
|
|
310
|
+
/**
|
|
311
|
+
* `catalogForCompare` without `usages[].line`: an edit above a call site moves
|
|
312
|
+
* its line without changing the contract, so `--check` does not fail on it.
|
|
313
|
+
*/
|
|
314
|
+
function catalogForDrift(doc) {
|
|
315
|
+
const permissions = doc.permissions;
|
|
316
|
+
if (!Array.isArray(permissions)) return catalogForCompare(doc);
|
|
317
|
+
const { generatedAt: _generatedAt, generator: _generator, ...rest } = doc;
|
|
318
|
+
const stripped = {
|
|
319
|
+
...rest,
|
|
320
|
+
permissions: permissions.map((permission) => {
|
|
321
|
+
if (!isRecord(permission) || !Array.isArray(permission["usages"])) return permission;
|
|
322
|
+
const usages = permission["usages"].map((usage) => {
|
|
323
|
+
if (!isRecord(usage)) return usage;
|
|
324
|
+
const { line: _line, ...position } = usage;
|
|
325
|
+
return position;
|
|
326
|
+
});
|
|
327
|
+
return Object.assign({}, permission, { usages });
|
|
328
|
+
})
|
|
329
|
+
};
|
|
330
|
+
return `${JSON.stringify(stripped, null, 2)}\n`;
|
|
331
|
+
}
|
|
295
332
|
function formatCatalogMarkdown(doc) {
|
|
296
333
|
const lines = ["# Permissions", ""];
|
|
297
334
|
const byResource = /* @__PURE__ */ new Map();
|
|
@@ -312,4 +349,4 @@ function catalogSchemaDocument() {
|
|
|
312
349
|
return catalogSchema;
|
|
313
350
|
}
|
|
314
351
|
//#endregion
|
|
315
|
-
export {
|
|
352
|
+
export { catalogSchemaDocument as a, jsonSchemaOf as c, catalogOAuthScopes as i, catalogForCompare as n, formatCatalogJson as o, catalogForDrift as r, formatCatalogMarkdown as s, buildCatalog as t };
|