permdock 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
- package/dist/a2a/index.d.ts +5 -5
- package/dist/a2a/index.js +4 -4
- package/dist/{adoption-scan-DCYe60Pi.js → adoption-scan-D-feE7BE.js} +1 -1
- package/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +21 -6
- package/dist/ai-sdk/index.js +19 -9
- package/dist/{approval-prompt-DvSSPQJX.d.ts → approval-prompt-K0faOLFp.d.ts} +2 -2
- package/dist/approvals/index.d.ts +4 -4
- package/dist/approvals/index.js +4 -4
- package/dist/{approvals-p1PGoVjb.js → approvals-CMRfsbBh.js} +74 -48
- package/dist/{arazzo-41WuzHou.js → arazzo-ClrF3PVb.js} +2 -2
- package/dist/{arazzo-CaUVBn7D.js → arazzo-rdeJ8n1J.js} +4 -4
- package/dist/{args-IIolxxKA.js → args-CC3OwyHW.js} +112 -2
- package/dist/astro/index.d.ts +6 -6
- package/dist/astro/index.js +2 -2
- package/dist/{audience-DabClFLQ.js → audience-BrMs8c4o.js} +1 -1
- package/dist/{auth-DRLEizbL.js → auth-CscUX8Sy.js} +3 -4
- package/dist/authzen/index.d.ts +162 -22
- package/dist/authzen/index.js +315 -146
- package/dist/{automation-BNM3TtDo.d.ts → automation-DOtAFWdy.d.ts} +3 -3
- package/dist/{automation-DVjOckjV.js → automation-ySsxp_Yp.js} +1 -1
- package/dist/base-url-BQbddZO5.js +9 -0
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +2 -2
- package/dist/better-supabase/index.d.ts +50 -8
- package/dist/better-supabase/index.js +94 -32
- package/dist/{bind-CAvgUuKs.js → bind-D1nO6fiC.js} +5 -5
- package/dist/{bind-DOyrv6zi.d.ts → bind-JDuvxjuW.d.ts} +7 -7
- package/dist/{build-instance-Bu_eDqYw.js → build-instance-DxE7czo9.js} +1 -1
- package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
- package/dist/{capability-Drg-1YhL.d.ts → capability-D4UC9TTW.d.ts} +2 -2
- package/dist/{capability-N1K9IpqS.js → capability-L7NnfhiE.js} +1 -1
- package/dist/{casbin-Cr7RLtA3.js → casbin-BHijLuHY.js} +2 -2
- package/dist/{casbin-Dyu2gnUD.js → casbin-BW9pS47J.js} +1 -1
- package/dist/{casl-64gpT-8x.js → casl-CmJlgziS.js} +2 -2
- package/dist/{casl-DjEDhTCP.js → casl-UbI8v-Wq.js} +1 -1
- package/dist/catalog/index.d.ts +70 -10
- package/dist/catalog/index.js +112 -6
- package/dist/catalog-BCCjSAdH.js +1 -0
- package/dist/{catalog-DZVbrF-z.js → catalog-BaMQfQ6Y.js} +3 -3
- package/dist/{catalog-HD2gf5mY.js → catalog-D69WhFii.js} +43 -13
- package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-CV9s6B1S.js} +28 -5
- package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-C144oW4M.js} +1 -1
- package/dist/{create-CQWIpUG-.js → challenge-nGWma08S.js} +122 -25
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +2 -2
- package/dist/chat-sdk/index.d.ts +3 -3
- package/dist/checks-BC_0mPIq.js +37 -0
- package/dist/claude-agent/index.d.ts +3 -3
- package/dist/claude-agent/index.js +2 -2
- package/dist/clerk/index.d.ts +3 -3
- package/dist/clerk/index.js +1 -1
- package/dist/cli/bin.js +2 -2
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +3 -3
- package/dist/cloud/index.d.ts +127 -11
- package/dist/cloud/index.js +251 -3
- package/dist/{cloud-ytQ3uviA.js → cloud-CO8pYtwr.js} +5 -5
- package/dist/{codemod-ua2hHy7w.js → codemod-BP6n8N9L.js} +3 -3
- package/dist/{codemod-5mpSpnUY.js → codemod-i4N2BhDc.js} +3 -3
- package/dist/{collect-mLTY4nwb.js → collect-BaWeMjwV.js} +17 -8
- package/dist/{collect-Ci6akVwH.js → collect-DNm3oKOk.js} +6 -5
- package/dist/collect-k_Dulxr5.js +1 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -1
- package/dist/{compile-CMqMx_IN.js → compile-BAEO5bOk.js} +2 -2
- package/dist/{compile-1bsAezL0.d.ts → compile-COM2VKuN.d.ts} +3 -3
- package/dist/{completion-BTFrHZhX.js → completion-BNdVf7X2.js} +3 -3
- package/dist/{config-bs_kZeYq.js → config-CoQHDrDi.js} +7 -3
- package/dist/{config-Bj2Ixq3d.js → config-DGZzMV1B.js} +2 -2
- package/dist/{config-report-DSpsLpCE.js → config-report-Cm7UITNA.js} +3 -3
- package/dist/connector-schema-_VCSsdtD.js +433 -0
- package/dist/{context-B_u3_bDJ.js → context--uM9V3Ui.js} +2 -2
- package/dist/convex/index.d.ts +5 -5
- package/dist/convex/index.js +2 -2
- package/dist/core-B5-w6Kw9.js +335 -0
- package/dist/core-CQkE8Esr.d.ts +179 -0
- package/dist/{create-B30OMUOJ.d.ts → create-B2-CQqCI.d.ts} +5 -5
- package/dist/{create-CGm28gyI.js → create-Cb86Z8Im.js} +9 -8
- package/dist/{create-DCF2SvoT.js → create-DJrlhEp9.js} +5 -5
- package/dist/{create-D_NmPOdH.d.ts → create-QHuuPw3q.d.ts} +7 -7
- package/dist/{create-CBMmFie-.d.ts → create-UTnUVETj.d.ts} +30 -10
- package/dist/{credential-BcoiejpY.js → credential-CIM7wHwA.js} +4 -4
- package/dist/{credentials-DPyHmYz5.js → credentials-BpuTwd7a.js} +1 -1
- package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-DRo2QM6E.js} +13 -2
- package/dist/{delegation-j6-rc37o.js → delegation-C5rOdTp5.js} +5 -5
- package/dist/delivery/index.d.ts +5 -5
- package/dist/delivery/index.js +4 -3
- package/dist/{delivery-DCAgNyCn.js → delivery-rwOKLWRm.js} +51 -2
- package/dist/{denied-text-CiFQNuMV.d.ts → denied-text-D4qkEtFz.d.ts} +2 -2
- package/dist/{describe-BybMRY7A.js → describe-DZlnEtLy.js} +1 -0
- package/dist/{describe-B5qgDvEW.d.ts → describe-O0SwYIK8.d.ts} +2 -2
- package/dist/{diff-CmuSD3vc.js → diff-Btr1c1Ow.js} +2 -2
- package/dist/{diff-3jbx6Rm4.js → diff-DzT-xD13.js} +10 -10
- package/dist/{doctor-BdZw53-k.js → doctor-BU1szn63.js} +241 -49
- package/dist/{doctor-3ZqNHX_G.js → doctor-BoK_y0KO.js} +4 -4
- package/dist/drizzle/index.d.ts +3 -3
- package/dist/drizzle/index.js +1 -1
- package/dist/elysia/index.d.ts +5 -5
- package/dist/elysia/index.js +3 -3
- package/dist/{errors-DH5QEGXh.d.ts → errors-B_Qg9D3e.d.ts} +2 -2
- package/dist/{errors-CWTY6uih.js → errors-DpP_U6Bf.js} +1 -0
- package/dist/{evaluate-CNClBvcj.js → evaluate-B_oqFbWC.js} +55 -12
- package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-BCddEOfO.d.ts} +4 -4
- package/dist/{evaluations-beAooV0n.js → evaluations-DReoiVBw.js} +4 -4
- package/dist/eve/index.d.ts +5 -5
- package/dist/eve/index.js +3 -3
- package/dist/express/index.d.ts +5 -5
- package/dist/express/index.js +3 -3
- package/dist/fastify/index.d.ts +5 -5
- package/dist/fastify/index.js +3 -3
- package/dist/{fetch-adapter-Dw0MTS3D.d.ts → fetch-adapter-CuhyYwC1.d.ts} +4 -4
- package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-De-u6vhJ.js} +3 -3
- package/dist/{fields-OYG_JR78.js → fields-ClcQLrVc.js} +48 -13
- package/dist/{files-C5ZI27eV.js → files-acUbNwWt.js} +15 -2
- package/dist/{fixtures-B7XrLeY7.js → fixtures-BTMW6zgU.js} +2 -2
- package/dist/{flags-C3DktBDY.js → flags-aaeRAdiD.js} +2 -2
- package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-Bz469dIh.js} +17 -10
- package/dist/generate-3FNO5P5Q.js +159 -0
- package/dist/{grantee-hxrUsbpM.js → grantee-BrRANrpT.js} +1 -1
- package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-C6P1Tvol.js} +1 -1
- package/dist/{grantee-match-DbENBHLB.js → grantee-match-0RtHWQDx.js} +3 -3
- package/dist/h3/index.d.ts +4 -4
- package/dist/h3/index.js +3 -3
- package/dist/{helpers-CBYVMjwh.js → helpers-DY3vXuGs.js} +3 -3
- package/dist/hono/index.d.ts +5 -5
- package/dist/hono/index.js +3 -3
- package/dist/{hosted-BPk51-kX.d.ts → hosted-BmjzxQhp.d.ts} +14 -2
- package/dist/{hosted-B46-5LYE.js → hosted-XBgU6RGT.js} +34 -12
- package/dist/{http-DXJ37RDA.js → http-Ca3Sr5x1.js} +1 -1
- package/dist/{import-wyqXUyjm.js → import-Bz0GefWg.js} +5 -5
- package/dist/{import-CNV7I2Dw.js → import-DB2EG_iy.js} +3 -3
- package/dist/{index-C-6Letxg.d.ts → index-BE8y3moU.d.ts} +50 -8
- package/dist/{index-B8YjkEZ4.d.ts → index-BSfRl0hZ.d.ts} +6 -6
- package/dist/{index-DuWxc5dt.d.ts → index-BTkwrK7v.d.ts} +143 -14
- package/dist/index-CMiPH2Tv.d.ts +206 -0
- package/dist/{index-Ch8LpNDp.d.ts → index-DH9DUDEM.d.ts} +18 -3
- package/dist/{index-CueFnxQc.d.ts → index-DLwcuCN_.d.ts} +86 -7
- package/dist/index.d.ts +18 -17
- package/dist/index.js +27 -25
- package/dist/{init-GG6Jh8HD.js → init-5TXNji88.js} +5 -5
- package/dist/{init-DeMYsnYJ.js → init-B-4t1NzC.js} +4 -4
- package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-CU0YQCLH.d.ts} +1 -1
- package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot-CjcwnEiV.js} +16 -11
- package/dist/jwt/index.d.ts +83 -5
- package/dist/jwt/index.js +143 -5
- package/dist/{kernel-D0NVb1cK.js → kernel-DVExUwkp.js} +138 -12
- package/dist/kysely/index.d.ts +3 -3
- package/dist/kysely/index.js +1 -1
- package/dist/load-DrMHXzgN.js +1 -0
- package/dist/{load-DFS_ry0W.js → load-DxroEzH1.js} +2 -2
- package/dist/{login-Dfe5RlYk.js → login-ClSJh5t5.js} +4 -4
- package/dist/{login-imhuwvn3.js → login-WC9HPJpU.js} +6 -10
- package/dist/{manifest-C8IzW3Do.js → manifest-B79YuF2T.js} +6 -2
- package/dist/{manifest-mx5ghSFM.d.ts → manifest-BVhExYhw.d.ts} +23 -2
- package/dist/{manifest-dvL2XEe1.js → manifest-Dv6q4i5s.js} +54 -35
- package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-Cv492Qev.js} +37 -7
- package/dist/{map-claims-D3oRmTk0.js → map-claims-etGIS_Dv.js} +14 -11
- package/dist/{map-error-Dr70oA_3.js → map-error-BQGyDm_M.js} +1 -1
- package/dist/mcp/index.d.ts +64 -10
- package/dist/mcp/index.js +151 -22
- package/dist/{migrate-CIq4-E9F.js → migrate-Dodel0IJ.js} +77 -24
- package/dist/nest/index.d.ts +5 -5
- package/dist/nest/index.js +3 -3
- package/dist/next/index.d.ts +9 -9
- package/dist/next/index.js +5 -5
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +5 -5
- package/dist/node/index.js +2 -2
- package/dist/openai/index.d.ts +5 -5
- package/dist/openai/index.js +3 -3
- package/dist/openapi/index.d.ts +14 -4
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-C4dDTVEd.js → openapi-DMocl1bh.js} +4 -4
- package/dist/{openapi-B7HZ0f-r.js → openapi-Ddb4628T.js} +2 -7
- package/dist/{openapi-DD1SV-5-.js → openapi-ztVaux6j.js} +8 -8
- package/dist/{operation-findings-DgATDpvh.js → operation-findings-kRcEp8lE.js} +1 -1
- package/dist/{operations-X0VM7F3m.d.ts → operations-BNLes61x.d.ts} +1 -1
- package/dist/orpc/index.d.ts +6 -6
- package/dist/orpc/index.js +4 -4
- package/dist/otel/index.d.ts +3 -3
- package/dist/otel/index.js +1 -1
- package/dist/{output-1im__-08.js → output-DgSDLrta.js} +7 -3
- package/dist/{output-files-DhRBBE4n.js → output-files-CCMdcFWb.js} +2 -2
- package/dist/output-files-DPAY7-GX.js +1 -0
- package/dist/{ownership-DqaJNJPn.js → ownership-Z2LpxsGa.js} +443 -40
- package/dist/parse-Ddhz2xf4.js +148 -0
- package/dist/{parse-local-manifest-CVSs6J9I.js → parse-local-manifest-T1Q8X3A2.js} +24 -1
- package/dist/{parse-local-manifest-5ODwqu8b.d.ts → parse-local-manifest-e4mdwAKd.d.ts} +1 -1
- package/dist/pdp/index.d.ts +3 -3
- package/dist/pdp/index.js +7 -3
- package/dist/peer-12Q5I_RH.js +976 -0
- package/dist/{peer-CRvC7Hg1.js → peer-DOzzMfZL.js} +1 -1
- package/dist/{permdock-BrAscV28.js → permdock-BfWEeMqk.js} +177 -49
- package/dist/{permdock-SV8ZINYT.d.ts → permdock-Dco6dyCK.d.ts} +34 -5
- package/dist/{permission-registry-Br4jSNVi.js → permission-registry-DpPtSKNZ.js} +1 -1
- package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-DhNEmoRG.d.ts} +4 -64
- package/dist/{permissions-u_KHg-sN.d.ts → permissions-CoqCOfJ3.d.ts} +2 -1
- package/dist/{permissions-B-wCP5ZC.js → permissions-CyH2MV_B.js} +1 -1
- package/dist/{permissions-BPxlwVhN.js → permissions-DArULThq.js} +4 -4
- package/dist/pkce-5h8NgMQJ.js +21 -0
- package/dist/{policies-DP2nqRoF.js → policies-B2lZIurj.js} +3 -3
- package/dist/{policy-77FSAq_V.d.ts → policy-B7dg_yzu.d.ts} +2 -2
- package/dist/{policy-DbM5YYtV.js → policy-DaJy4nK4.js} +17 -8
- package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-DFWYkNdu.js} +9 -9
- package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-B-F-qAZk.d.ts} +83 -4
- package/dist/postgres-store-BL9M_CA1.js +1001 -0
- package/dist/{postgrest-CEgRbefE.d.ts → postgrest-CYacM_u7.d.ts} +12 -1
- package/dist/{postgrest-DAjUkF9w.js → postgrest-r5faDIzD.js} +37 -4
- package/dist/{powersync-DISt6SUe.js → powersync-13odBwiM.js} +3 -3
- package/dist/powersync-53ryOZip.js +1059 -0
- package/dist/powersync-CExtTLyA.js +1 -0
- package/dist/preset/index.js +1 -1
- package/dist/{preset-DZdU0tne.js → preset-CHTbd-DQ.js} +2 -2
- package/dist/prisma/index.d.ts +2 -2
- package/dist/prisma/index.js +1 -1
- package/dist/{problem-details-B45V5d2b.d.ts → problem-details-Tcfmj3bV.d.ts} +1 -1
- package/dist/prompt-DwtVemER.js +935 -0
- package/dist/{protected-RFGpakN9.d.ts → protected-BwZYL1X_.d.ts} +6 -5
- package/dist/{protected-BlF0F6wL.js → protected-DXE3cQYg.js} +2 -2
- package/dist/{provider-B1al-AZz.js → provider-BQsTYYy0.js} +2 -2
- package/dist/{provider-DILL9oPK.d.ts → provider-Csk-THAn.d.ts} +1 -1
- package/dist/{provider-store-DM6DNcta.js → provider-store-IgqQipCO.js} +2 -2
- package/dist/{pull-jEwbf80J.js → pull-CN5OLxrF.js} +7 -7
- package/dist/pull-Cty6Ovyu.js +1 -0
- package/dist/{push-BD4f15co.js → push-tVdG8dUL.js} +54 -14
- package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-BbcY9r_4.d.ts} +1 -1
- package/dist/{pushed-policy-CqtxkV4G.js → pushed-policy-CmYeSQqq.js} +1 -1
- package/dist/react/index.d.ts +6 -6
- package/dist/react/index.js +3 -3
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +25 -11
- package/dist/react-native/index.js +209 -21
- package/dist/{refs-K6eWUJ0H.js → refs-CNJBiTFo.js} +15 -1
- package/dist/{replay-Bkm-Ne4l.d.ts → replay-DCDD_ZfL.d.ts} +1 -1
- package/dist/{request-context-C81Pip9n.js → request-context-BykKLmyE.js} +2 -2
- package/dist/resend/index.d.ts +4 -4
- package/dist/{retire-CALjIQ7e.js → retire-Wj6dkyDE.js} +2 -2
- package/dist/{rls-BAqP4q66.js → rls-Ck_PocSp.js} +32 -8
- package/dist/{rls-DTvYd-lI.js → rls-CxBZb4rZ.js} +478 -534
- package/dist/{role-builder-uWQZ4v84.js → role-builder-C1VJzvcr.js} +3 -3
- package/dist/rolldown-runtime-C3I60J0A.js +4 -0
- package/dist/{rpc-VSl5ylaQ.js → rpc-Bk1bE-ch.js} +1 -1
- package/dist/run-Bz7DXGEv.js +1 -0
- package/dist/{run-ticket-sxFI6LAk.js → run-ticket-B5d_63Ma.js} +22 -1
- package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-BpNi7BCi.d.ts} +8 -3
- package/dist/{run-CUKuz0A8.js → run-uLD2aWuO.js} +7 -7
- package/dist/{runtime-D3VTAiCA.js → runtime-Vif3_-zf.js} +1 -1
- package/dist/{saas-BCXRuXca.js → saas-Az_Kz-4D.js} +7 -7
- package/dist/{scan-qvOe0hS3.js → scan-DSljDE1Y.js} +1 -1
- package/dist/{schema-yLuBWWsh.js → schema-gIcCx7zM.js} +1 -1
- package/dist/scim/index.d.ts +3 -2
- package/dist/scim/index.js +3 -1
- package/dist/scim-C7JYhySg.js +44 -0
- package/dist/{scim-ClHtpyV3.js → scim-YNieBO1U.js} +3 -537
- package/dist/{scopes-CUPSjo9q.js → scopes-BHsc-wp-.js} +1 -1
- package/dist/server/index.d.ts +11 -11
- package/dist/server/index.js +7 -7
- package/dist/{server-C3WXAHZj.js → server-Bnga6I50.js} +3 -3
- package/dist/{server-types-CKQiCnON.d.ts → server-types-C4gZUEZy.d.ts} +9 -9
- package/dist/{shared-DvvFzYXe.js → shared-C8LjUdVU.js} +1 -1
- package/dist/{shared-BAK8t4Uo.js → shared-fMKOv8hP.js} +44 -38
- package/dist/{sink-4-eQIRWf.d.ts → sink-Cp_Eot9W.d.ts} +4 -4
- package/dist/{skills-B6lVdD_W.js → skills-Dcjw9_1C.js} +5 -5
- package/dist/{skills-CTYwkl44.js → skills-g_3BS9NC.js} +3 -3
- package/dist/{snapshot-B7DkYg6g.js → snapshot-CbGmYiJx.js} +4 -4
- package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-DT2Kx1F8.js} +1 -1
- package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-Pahd3IYJ.d.ts} +1 -1
- package/dist/solid/index.d.ts +6 -5
- package/dist/solid/index.js +4 -4
- package/dist/solid-start/index.d.ts +6 -6
- package/dist/solid-start/index.js +3 -3
- package/dist/{sources-vs5dGOsS.js → sources-B-zYB4GS.js} +111 -25
- package/dist/{sources-Xc4zkszI.d.ts → sources-DEEuGb8S.d.ts} +63 -14
- package/dist/sources-qoIJQrJv.js +11 -0
- package/dist/{sql-B5T1IL83.js → sql-B96movIM.js} +5 -1
- package/dist/sql-CDEPCA0g.d.ts +10 -0
- package/dist/{src-Cu2m75uo.js → src-DLFrtrrC.js} +140 -48
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +640 -211
- package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-B_qRg0ws.d.ts} +2 -2
- package/dist/{store-BDutJkDL.js → store-DSP9oGvh.js} +15 -7
- package/dist/{store-options-u0ycEe8s.js → store-options-B_poyYvg.js} +6 -6
- package/dist/{stores-BUGNbJTt.d.ts → stores-BAZwSYZA.d.ts} +6 -5
- package/dist/{stores-CGhM8BN_.js → stores-BqEuHC05.js} +2 -2
- package/dist/{stream-CeCMJmBB.d.ts → stream-2Vwhl7Er.d.ts} +2 -2
- package/dist/{style-Uao76wO7.js → style-Cqo7-73x.js} +1 -0
- package/dist/{style-DiKWnAvn.js → style-Ds1gNm77.js} +1 -1
- package/dist/supabase/index.d.ts +8 -7
- package/dist/supabase/index.js +5 -5
- package/dist/supabase/middleware.d.ts +6 -6
- package/dist/supabase/middleware.js +6 -6
- package/dist/{supabase-x5JtR2tc.js → supabase--0aJdLEd.js} +8 -6
- package/dist/{supabase-By_frk3U.js → supabase-Bqp7iIY2.js} +3 -3
- package/dist/supabase-hook-DJxC4PoP.js +1 -0
- package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-Dg0SrQWR.js} +1060 -119
- package/dist/supautils-MESd81bF.js +689 -0
- package/dist/{support-session-C6xJQYut.js → support-session-Cna49-3f.js} +2 -2
- package/dist/svelte/index.d.ts +5 -5
- package/dist/svelte/index.js +5 -5
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +5 -5
- package/dist/svelte/source.js +2 -2
- package/dist/sveltekit/index.d.ts +6 -6
- package/dist/sveltekit/index.js +2 -2
- package/dist/tanstack-start/index.d.ts +6 -6
- package/dist/tanstack-start/index.js +2 -2
- package/dist/{tenancy-DN2QAx9z.js → tenancy-CmeBQ6Nv.js} +12 -3
- package/dist/terminal/index.d.ts +6 -6
- package/dist/terminal/index.js +3 -3
- package/dist/testing/core.d.ts +2 -0
- package/dist/testing/core.js +1 -0
- package/dist/testing/fixtures/index.d.ts +12 -0
- package/dist/testing/fixtures/index.js +770 -0
- package/dist/testing/index.d.ts +41 -174
- package/dist/testing/index.js +241 -731
- package/dist/testing/saas/index.d.ts +5 -5
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -1
- package/dist/text-diff-DhITNCnD.js +444 -0
- package/dist/{token-BLZcjQgt.js → token-2qYDvXz2.js} +1 -1
- package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-reAhIzdl.js} +1 -1
- package/dist/trpc/index.d.ts +6 -6
- package/dist/trpc/index.js +3 -3
- package/dist/{types-Dfv0aTER.d.ts → types-BWZybqs9.d.ts} +110 -8
- package/dist/{types-Druu9wLM.d.ts → types-BXMYB7BY.d.ts} +2 -2
- package/dist/{types-BzzaHxt3.d.ts → types-BfVmNJO5.d.ts} +14 -3
- package/dist/{types-lUlG3TVd.d.ts → types-CIeZcG8v.d.ts} +2 -2
- package/dist/{types-B3_ooZgZ.d.ts → types-CKV71kKh.d.ts} +4 -4
- package/dist/{types-CX7AvRqP.d.ts → types-CQVEQawv.d.ts} +4 -4
- package/dist/{types-C863OQiR.d.ts → types-CeIscIKp.d.ts} +4 -4
- package/dist/{types-C_IiEs64.d.ts → types-CfiKC5aN.d.ts} +1 -1
- package/dist/{types-_WhUP7ud.d.ts → types-D3A19w4A.d.ts} +8 -4
- package/dist/{types-8RnwUAvE.d.ts → types-DBHftjgS.d.ts} +15 -8
- package/dist/{types-BdtSDbBO.d.ts → types-DC44-hqb.d.ts} +2 -2
- package/dist/{types-CVZSNocA.d.ts → types-DXmwu78Z.d.ts} +4 -4
- package/dist/{types-C791HFu9.d.ts → types-cTos-H7p.d.ts} +2 -2
- package/dist/{types-BtHtcKMr.d.ts → types-g7Oy6Zg4.d.ts} +3 -3
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/{usage-SveTRTyr.js → usage-Bybmck7f.js} +7 -7
- package/dist/{usage-CRVl9V3t.js → usage-CDaLXCfL.js} +2 -2
- package/dist/usage-y-kBNdqs.js +1 -0
- package/dist/{validation-error-DHUrAkku.d.ts → validation-error-CQpoquwj.d.ts} +1 -1
- package/dist/{verify-BaAKx7t6.js → verify-pe8rL_Qw.js} +350 -83
- package/dist/{views-DTIIO-oQ.js → views-BB8E9dTP.js} +1 -1
- package/dist/vocabulary-Bg3eeT2H.d.ts +67 -0
- package/dist/vue/index.d.ts +6 -5
- package/dist/vue/index.js +4 -4
- package/dist/{waiter-B986w1oK.d.ts → waiter-DwEyouan.d.ts} +2 -2
- package/dist/watch-Bd9mx3rd.js +1 -0
- package/dist/{watch-vea54PRw.js → watch-C-4VmFlL.js} +3 -3
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +2 -2
- package/dist/{where-scope-C9vfEphl.js → where-scope-wq2coopv.js} +41 -21
- package/dist/{who-can-DWBAcaCQ.js → who-can-BwNsI_Js.js} +6 -6
- package/dist/workflow/index.d.ts +3 -3
- package/dist/workflow/index.js +5 -5
- package/dist/workflow-sdk/index.d.ts +5 -5
- package/dist/{wrap-C5jC6sKI.d.ts → wrap-B6R0cMRL.d.ts} +2 -2
- package/dist/{wrap-gX61EtpB.js → wrap-CiSc_KCq.js} +8 -2
- package/package.json +22 -11
- 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 +276 -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-data/references/queries-and-rls.md +4 -1
- package/skills/permdock-tenancy/SKILL.md +1 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +1 -0
- package/skills/permdock-wire/references/adapters.md +14 -0
- 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/index-Cp_ilKi1.d.ts +0 -91
- package/dist/load-BxEtwlBS.js +0 -1
- package/dist/output-files-B3IZJksC.js +0 -1
- package/dist/parse-Cxq0WxrA.js +0 -53
- package/dist/peer-C8swJ2GH.js +0 -50
- package/dist/powersync-BkWWCS1K.js +0 -538
- package/dist/powersync-MMJ2mI2q.js +0 -1
- package/dist/prompt-DfZLJLIn.js +0 -32
- package/dist/pull-CvpINcMK.js +0 -1
- package/dist/run-DDwUaJDU.js +0 -1
- 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/usage-CZpSQP6L.js +0 -1
- package/dist/watch--ovlPOc0.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as addLine, n as packageManagerOf, r as peerHint, i as requirePeer } from "./peer-
|
|
1
|
+
export { t as addLine, n as packageManagerOf, r as peerHint, i as requirePeer } from "./peer-12Q5I_RH.js";
|
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import { n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
|
|
1
|
+
import { n as isReadonlyArray, r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep, t as freezeCopy } from "./freeze-CrU8nQeX.js";
|
|
3
3
|
import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
|
|
4
4
|
import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-BKy0EfhN.js";
|
|
5
5
|
import { t as attachInternals } from "./internals-Dk8A8fX3.js";
|
|
6
|
-
import { a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-
|
|
6
|
+
import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-DpPtSKNZ.js";
|
|
7
7
|
import { n as isThenable } from "./thenable-yD7SabqG.js";
|
|
8
8
|
import { i as readAppData } from "./app-data-MuyzVqX8.js";
|
|
9
|
-
import {
|
|
9
|
+
import { f as scopeList, h as tenantOf, o as normalizeMemberships } from "./scopes-BHsc-wp-.js";
|
|
10
10
|
import { o as pickVisible, s as sanitizeContext } from "./validity-CZ7-y0Cj.js";
|
|
11
|
-
import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
11
|
+
import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-CmeBQ6Nv.js";
|
|
12
|
+
import { u as policyX } from "./policy-DaJy4nK4.js";
|
|
13
|
+
import { t as byCodePoint } from "./compare-pfyVnBjE.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-B_oqFbWC.js";
|
|
15
|
+
import { a as whereGrant, c as applyRoleKinds, i as collectSnapshotGrants, l as audiencesOf, o as heldRoleNames, p as asMembershipSource, r as assignableIn, s as roleLeaf, t as snapshotOf } from "./instance-snapshot-CjcwnEiV.js";
|
|
15
16
|
import { r as relationReader, t as pendingRelations } from "./relations-BnCWnJGI.js";
|
|
16
|
-
import { r as snapshotGrant } from "./snapshot-
|
|
17
|
-
import {
|
|
17
|
+
import { r as snapshotGrant } from "./snapshot-CbGmYiJx.js";
|
|
18
|
+
import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-wq2coopv.js";
|
|
19
|
+
import { i as decideAllWith, n as canAllWith } from "./checks-BC_0mPIq.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");
|
|
@@ -145,6 +147,7 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
145
147
|
const queuedAuth = [...envBase.queuedAuth];
|
|
146
148
|
const queuedErrors = [...envBase.queuedErrors ?? []];
|
|
147
149
|
const customGrants = customGrantsFor(policy, envBase.customRoles);
|
|
150
|
+
const unknownLevels = unknownLevelsFor(policy, envBase.customRoles);
|
|
148
151
|
const relationCache = envBase.relationCache ?? /* @__PURE__ */ new Map();
|
|
149
152
|
const relations = relationReader(envBase.relations, relationCache, policy.resources);
|
|
150
153
|
const assignableAt = (tenant) => assignableIn(policy, subject, envBase.customRoles, customGrants, tenant, tenant === void 0 ? void 0 : envBase.assignable?.get(tenant));
|
|
@@ -165,11 +168,25 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
165
168
|
});
|
|
166
169
|
const decideImpl = (permission, data, options) => evaluate(policy, subject, permission, data, options ?? {}, envFor(options?.call !== "simulate", options?.call === "can"));
|
|
167
170
|
const explainImpl = (permission, data, options) => {
|
|
168
|
-
|
|
171
|
+
const explained = decideImpl(permission, data, {
|
|
169
172
|
...options,
|
|
170
173
|
call: options?.call ?? "explain",
|
|
171
174
|
explain: true
|
|
172
175
|
});
|
|
176
|
+
const named = unknownLevels.filter((entry) => entry.permission === permission.key);
|
|
177
|
+
return named.length === 0 ? explained : {
|
|
178
|
+
...explained,
|
|
179
|
+
trace: {
|
|
180
|
+
...explained.trace,
|
|
181
|
+
skipped: [...explained.trace.skipped, ...named.map((entry) => ({
|
|
182
|
+
role: entry.role,
|
|
183
|
+
permission: entry.permission,
|
|
184
|
+
effect: "allow",
|
|
185
|
+
why: "unknown-level",
|
|
186
|
+
level: entry.level
|
|
187
|
+
}))]
|
|
188
|
+
}
|
|
189
|
+
};
|
|
173
190
|
};
|
|
174
191
|
const canImpl = (permission, data, options) => {
|
|
175
192
|
try {
|
|
@@ -190,9 +207,44 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
190
207
|
const instance = {
|
|
191
208
|
can: canImpl,
|
|
192
209
|
decide: decideImpl,
|
|
210
|
+
canAll: (checks, options) => canAllWith(canImpl, checks, options),
|
|
211
|
+
decideAll: (checks, options) => decideAllWith(decideImpl, checks, options),
|
|
193
212
|
decideEach(permission, rows, options) {
|
|
194
213
|
return Object.freeze(rows.map((row) => decideImpl(permission, row, options)));
|
|
195
214
|
},
|
|
215
|
+
async decideIds(permission, ids, options) {
|
|
216
|
+
const { data, ...decide } = options;
|
|
217
|
+
const invalid = () => deniedFor(permission, "validation");
|
|
218
|
+
let loaded;
|
|
219
|
+
try {
|
|
220
|
+
loaded = await data(ids);
|
|
221
|
+
} catch {
|
|
222
|
+
return Object.freeze(ids.map(invalid));
|
|
223
|
+
}
|
|
224
|
+
const resource = getResource(policy.permissions, permission.resource);
|
|
225
|
+
const scopes = scopeList(policy.scopes);
|
|
226
|
+
const root = scopes[0]?.name;
|
|
227
|
+
const rowOf = (id) => {
|
|
228
|
+
if (loaded instanceof Map) return loaded.get(id);
|
|
229
|
+
return isReadonlyArray(loaded) ? loaded.find((row) => isRecord(row) && resource !== void 0 && row[resource.id] === id) : void 0;
|
|
230
|
+
};
|
|
231
|
+
const tenantField = root === void 0 ? void 0 : scopeField(resource, root, scopes);
|
|
232
|
+
const results = [];
|
|
233
|
+
for (const id of ids) {
|
|
234
|
+
const row = rowOf(id);
|
|
235
|
+
if (row === void 0 || row === null) {
|
|
236
|
+
results.push(invalid());
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
const tenant = tenantField !== void 0 && isRecord(row) ? row[tenantField] : void 0;
|
|
240
|
+
const target = typeof tenant === "string" && tenant !== "" ? instance.tenant(tenant) : instance;
|
|
241
|
+
results.push(target.decide(permission, row, {
|
|
242
|
+
...decide,
|
|
243
|
+
trusted: true
|
|
244
|
+
}));
|
|
245
|
+
}
|
|
246
|
+
return Object.freeze(results);
|
|
247
|
+
},
|
|
196
248
|
decideFor(principalId, permission, row) {
|
|
197
249
|
return decideForTarget(subject, envBase.principals, envBase.targets, principalId, permission, row);
|
|
198
250
|
},
|
|
@@ -356,11 +408,13 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
356
408
|
...envBase,
|
|
357
409
|
relationCache
|
|
358
410
|
}, team);
|
|
411
|
+
const activeTenant = resolveActiveTenant(subject.principal, id, scopeList(policy.scopes));
|
|
359
412
|
return buildInstance(policy, freezeDeep(compact({
|
|
360
413
|
...subject,
|
|
361
414
|
principal: compact({
|
|
362
415
|
...subject.principal,
|
|
363
|
-
tenant:
|
|
416
|
+
tenant: activeTenant,
|
|
417
|
+
unheldTenant: activeTenant === void 0 ? id : void 0
|
|
364
418
|
})
|
|
365
419
|
})), {
|
|
366
420
|
...envBase,
|
|
@@ -448,6 +502,30 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
448
502
|
//#endregion
|
|
449
503
|
//#region src/core/oauth-scopes.ts
|
|
450
504
|
/**
|
|
505
|
+
* Every OAuth scope a token may carry to the permission keys it reaches: each
|
|
506
|
+
* permission's own scope, the scopes of the keys it was renamed from, and each
|
|
507
|
+
* coarse `oauthScopes` scope. Scopes and keys are sorted by code point. A key
|
|
508
|
+
* outside `permissions` is dropped, so a stale `oauthScopes` entry grants
|
|
509
|
+
* nothing. better-supabase's `delegation.scopes` and the SQL helpers'
|
|
510
|
+
* `rls.tokenScopes` ceiling both read this map.
|
|
511
|
+
*/
|
|
512
|
+
function delegatedScopeMap(permissions, oauthScopes = []) {
|
|
513
|
+
const delegated = /* @__PURE__ */ new Map();
|
|
514
|
+
const add = (scope, key) => {
|
|
515
|
+
const keys = delegated.get(scope) ?? /* @__PURE__ */ new Set();
|
|
516
|
+
keys.add(key);
|
|
517
|
+
delegated.set(scope, keys);
|
|
518
|
+
};
|
|
519
|
+
const known = /* @__PURE__ */ new Set();
|
|
520
|
+
for (const permission of permissions) {
|
|
521
|
+
known.add(permission.key);
|
|
522
|
+
add(permission.scope, permission.key);
|
|
523
|
+
for (const former of permission.renamedFrom ?? []) add(keyToScope(former), permission.key);
|
|
524
|
+
}
|
|
525
|
+
for (const entry of oauthScopes) for (const key of entry.permissions) if (known.has(key)) add(entry.scope, key);
|
|
526
|
+
return Object.fromEntries([...delegated.keys()].toSorted(byCodePoint).map((scope) => [scope, [...delegated.get(scope) ?? []].toSorted(byCodePoint)]));
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
451
529
|
* `delegation` with every coarse OAuth scope the policy declares in
|
|
452
530
|
* `oauthScopes` followed by the scopes of the permissions it covers, so the
|
|
453
531
|
* delegation checks downstream match them. The token's scopes stay first and
|
|
@@ -546,16 +624,22 @@ function assemblePrincipal(policy, user, options, auth) {
|
|
|
546
624
|
}
|
|
547
625
|
};
|
|
548
626
|
let stale;
|
|
627
|
+
let roles;
|
|
549
628
|
if (principal !== null && source !== void 0 && !fromClaims) {
|
|
550
629
|
live = true;
|
|
551
630
|
memberships = read(source, principal);
|
|
552
631
|
} 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)
|
|
632
|
+
const reread = rereadStale(source, principal, principal.memberships, () => read(source, principal), auth, source.globalRolesFor === void 0 ? void 0 : () => source.globalRolesFor?.(compact({
|
|
633
|
+
id: principal.id,
|
|
634
|
+
kind: principal.kind
|
|
635
|
+
})) ?? []);
|
|
554
636
|
memberships = reread.memberships;
|
|
555
637
|
stale = reread.stale;
|
|
638
|
+
roles = reread.roles;
|
|
556
639
|
}
|
|
557
640
|
return compact({
|
|
558
641
|
principal,
|
|
642
|
+
roles,
|
|
559
643
|
context: contextResult,
|
|
560
644
|
actor,
|
|
561
645
|
delegation: expandOAuthScopes(policy, delegation),
|
|
@@ -574,7 +658,7 @@ function versionQuery(principal) {
|
|
|
574
658
|
memberships: principal.memberships
|
|
575
659
|
});
|
|
576
660
|
}
|
|
577
|
-
function rereadStale(source, principal, claims, read, auth) {
|
|
661
|
+
function rereadStale(source, principal, claims, read, auth, readRoles) {
|
|
578
662
|
const claimed = principal.authzVersion;
|
|
579
663
|
const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
|
|
580
664
|
const unknown = () => {
|
|
@@ -592,14 +676,39 @@ function rereadStale(source, principal, claims, read, auth) {
|
|
|
592
676
|
} catch {
|
|
593
677
|
freshness = unknown();
|
|
594
678
|
}
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
679
|
+
const failed = () => {
|
|
680
|
+
auth.push({
|
|
681
|
+
reason: "source-threw",
|
|
682
|
+
source: "memberships",
|
|
683
|
+
...sourceName(source)
|
|
684
|
+
});
|
|
685
|
+
return [];
|
|
598
686
|
};
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
687
|
+
const rolesOf = (found) => {
|
|
688
|
+
if (found !== "reread" || readRoles === void 0) return;
|
|
689
|
+
try {
|
|
690
|
+
const roles = readRoles();
|
|
691
|
+
return isThenable(roles) ? Promise.resolve(roles).catch(failed) : roles;
|
|
692
|
+
} catch {
|
|
693
|
+
return failed();
|
|
694
|
+
}
|
|
602
695
|
};
|
|
696
|
+
if (isThenable(freshness)) {
|
|
697
|
+
const settled = freshness.then((found) => ({
|
|
698
|
+
found,
|
|
699
|
+
roles: rolesOf(found)
|
|
700
|
+
}));
|
|
701
|
+
return {
|
|
702
|
+
memberships: settled.then(({ found }) => found === "reread" ? read() : claims),
|
|
703
|
+
stale: settled.then(({ found }) => found === "unknown"),
|
|
704
|
+
roles: settled.then(({ roles }) => roles)
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
return compact({
|
|
708
|
+
memberships: freshness === "reread" ? read() : claims,
|
|
709
|
+
stale: freshness === "unknown",
|
|
710
|
+
roles: rolesOf(freshness)
|
|
711
|
+
});
|
|
603
712
|
}
|
|
604
713
|
function finishSubject(policy, assembled, context, input, options, extra) {
|
|
605
714
|
if (assembled.principal === null) return freezeCopy(compact({
|
|
@@ -617,12 +726,14 @@ function finishSubject(policy, assembled, context, input, options, extra) {
|
|
|
617
726
|
const roles = held === void 0 ? kinds.roles : [];
|
|
618
727
|
const memberships = held === void 0 ? kinds.memberships : outsideHeld(held, options) ? [] : kinds.memberships.filter((membership) => tenantOf(membership, scopes) === held);
|
|
619
728
|
const plans = contact ? [] : [.../* @__PURE__ */ new Set([...assembled.principal.plans ?? [], ...extra.plans])];
|
|
729
|
+
const activeTenant = contact ? void 0 : activeTenantOf(policy, assembled, memberships, options);
|
|
620
730
|
const withMemberships = freezeCopy(compact({
|
|
621
731
|
...assembled.principal,
|
|
622
732
|
roles,
|
|
623
733
|
memberships,
|
|
624
734
|
plans: plans.length > 0 ? plans : contact ? void 0 : assembled.principal.plans,
|
|
625
|
-
tenant:
|
|
735
|
+
tenant: activeTenant,
|
|
736
|
+
unheldTenant: activeTenant === void 0 ? options.tenant : void 0
|
|
626
737
|
}));
|
|
627
738
|
return freezeCopy(compact({
|
|
628
739
|
principal: withMemberships,
|
|
@@ -760,7 +871,17 @@ function withRequestContext(request, resolved) {
|
|
|
760
871
|
};
|
|
761
872
|
}
|
|
762
873
|
function resolveSubject(policy, user, options, auth) {
|
|
763
|
-
const
|
|
874
|
+
const first = assemblePrincipal(policy, user, options, auth);
|
|
875
|
+
const apply = (roles) => resolveAssembled(policy, roles === void 0 || first.principal === null ? first : {
|
|
876
|
+
...first,
|
|
877
|
+
principal: {
|
|
878
|
+
...first.principal,
|
|
879
|
+
roles
|
|
880
|
+
}
|
|
881
|
+
}, options, auth);
|
|
882
|
+
return isThenable(first.roles) ? Promise.resolve(first.roles).then(apply) : apply(first.roles);
|
|
883
|
+
}
|
|
884
|
+
function resolveAssembled(policy, assembled, options, auth) {
|
|
764
885
|
const memberships = settle(assembled.memberships, [], () => {
|
|
765
886
|
auth.push({
|
|
766
887
|
reason: "source-threw",
|
|
@@ -803,35 +924,42 @@ function instantiate(codePolicy, subject, options, auth) {
|
|
|
803
924
|
const customRoles = customRolesFor(roleSource, tenants, auth, subject.principal === null ? void 0 : subject.principal.roles ?? [], (tenant) => heldRoleNamesIn(subject.principal, scopes, tenant));
|
|
804
925
|
const assignable = assignableNamesFor(roleSource, tenants, auth);
|
|
805
926
|
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,
|
|
927
|
+
const build = (roles, names, approvalPolicies) => {
|
|
928
|
+
for (const entry of unknownLevelsFor(policy, roles)) auth.push({
|
|
929
|
+
reason: "schema",
|
|
930
|
+
source: "customRoles",
|
|
931
|
+
cause: `unknown-level: ${entry.role} grants ${entry.permission} at '${entry.level}', which its resource does not declare`
|
|
932
|
+
});
|
|
933
|
+
return buildInstance(policy, subject, compact({
|
|
934
|
+
customRoles: roles,
|
|
935
|
+
sink: options.sink,
|
|
829
936
|
limits: options.limits,
|
|
830
|
-
|
|
937
|
+
limitCache: /* @__PURE__ */ new Map(),
|
|
938
|
+
simulated: false,
|
|
939
|
+
roleSource,
|
|
940
|
+
assignable: names,
|
|
941
|
+
queuedAuth: auth,
|
|
942
|
+
queuedErrors: errors,
|
|
831
943
|
relations: options.relations,
|
|
832
|
-
approvalPolicies
|
|
833
|
-
|
|
834
|
-
|
|
944
|
+
approvalPolicies,
|
|
945
|
+
memberships: options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships),
|
|
946
|
+
principals: options.principals,
|
|
947
|
+
settings: options.settings,
|
|
948
|
+
targets: (principal, tenant) => getPermDock(codePolicy, {
|
|
949
|
+
principal,
|
|
950
|
+
context: {}
|
|
951
|
+
}, compact({
|
|
952
|
+
tenant,
|
|
953
|
+
memberships: options.memberships,
|
|
954
|
+
customRoles: options.customRoles,
|
|
955
|
+
entitlements: options.entitlements,
|
|
956
|
+
limits: options.limits,
|
|
957
|
+
policies: options.policies,
|
|
958
|
+
relations: options.relations,
|
|
959
|
+
approvalPolicies: options.approvalPolicies
|
|
960
|
+
}))
|
|
961
|
+
}));
|
|
962
|
+
};
|
|
835
963
|
if (isThenable(customRoles) || isThenable(assignable) || isThenable(approvals)) return Promise.all([
|
|
836
964
|
customRoles,
|
|
837
965
|
assignable,
|
|
@@ -865,4 +993,4 @@ function getPermDock(policy, user, options = {}) {
|
|
|
865
993
|
return Promise.resolve().then(() => create(policy, user, options));
|
|
866
994
|
}
|
|
867
995
|
//#endregion
|
|
868
|
-
export {
|
|
996
|
+
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,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { i as
|
|
1
|
+
import { G as CustomRoleSourceFactory, Gt as Snapshot, Hn as ExplainedDecision, J as EntitlementSource, Kn as Obligation, Ln as Decision, Q as LimitStore, Rt as Instant, T as Policy, W as CustomRoleSource, Wn as LimitDetail, Zn as Actor, Zt as AuthEvent, _ as GrantLimit, at as SettingsSource, en as DecisionEvent, et as MembershipSource, fn as Scope, fr as AdapterId, h as Grant, i as ApprovalOption, it as RelationSource, j as PolicyVocabulary, lr as Subject, mr as Condition, or as Membership, q as DecisionSink, qn as Quota, rr as Delegation, sr as Principal, ut as TokenSigner } from "./policy-types-B-F-qAZk.js";
|
|
2
|
+
import { O as AppData, b as ResourceNode, u as Permission } from "./permission-types-DhNEmoRG.js";
|
|
3
|
+
import { a as RoleTree, n as PlanTree, r as Role } from "./vocabulary-Bg3eeT2H.js";
|
|
4
|
+
import { i as OperationEffect, s as OperationMeta, t as Operation, u as OperationRisk } from "./operations-BNLes61x.js";
|
|
5
|
+
import { a as HostedPolicies } from "./hosted-BmjzxQhp.js";
|
|
5
6
|
//#region src/core/approval-policies.d.ts
|
|
6
7
|
/**
|
|
7
8
|
* One approval requirement kept as data, for a tenant or the whole platform.
|
|
@@ -122,6 +123,10 @@ declare function tightenApproval(code: Grant["approval"], entries: readonly Load
|
|
|
122
123
|
readonly operation?: OperationMeta | undefined;
|
|
123
124
|
}): Grant["approval"];
|
|
124
125
|
//#endregion
|
|
126
|
+
//#region src/core/checks.d.ts
|
|
127
|
+
/** One check of `canAll` or `decideAll`: a permission alone, or with the row it is checked on. */
|
|
128
|
+
type PermissionCheck = Permission | readonly [permission: Permission, data?: unknown];
|
|
129
|
+
//#endregion
|
|
125
130
|
//#region src/core/limits.d.ts
|
|
126
131
|
declare function memoryLimitStore(): LimitStore & {
|
|
127
132
|
/** Live counters, for tests and diagnostics. */
|
|
@@ -216,6 +221,12 @@ declare function memoryPrincipalSource<TPrincipal extends Principal>(input: {
|
|
|
216
221
|
type Boundary = "http-body" | "mcp-args" | "tool-args" | "decision-endpoint" | "manual";
|
|
217
222
|
//#endregion
|
|
218
223
|
//#region src/core/permdock.d.ts
|
|
224
|
+
/** Rows the server loaded for `decideIds`: by id, or a list carrying the resource id field. */
|
|
225
|
+
type LoadedRows = ReadonlyMap<string, unknown> | readonly unknown[];
|
|
226
|
+
type DecideIdsOptions = Omit<DecideOptions, "trusted" | "boundary"> & {
|
|
227
|
+
/** Loads the rows for `ids`; ids it leaves out are denied with `validation`. */
|
|
228
|
+
readonly data: (ids: readonly string[]) => LoadedRows | Promise<LoadedRows>;
|
|
229
|
+
};
|
|
219
230
|
type DecideOptions = {
|
|
220
231
|
/** `true` skips schema validation for a row the server loaded itself. Otherwise `data` is validated against the resource schema first (`validate: 'boundary'`), and a failure denies with reason `validation`. */
|
|
221
232
|
readonly trusted?: boolean;
|
|
@@ -316,12 +327,30 @@ type PermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
|
316
327
|
*/
|
|
317
328
|
(permission: Permission, data: unknown, options?: DecideOptions): Decision;
|
|
318
329
|
};
|
|
330
|
+
/**
|
|
331
|
+
* `can` for every check, on one instance: `true` only when each is
|
|
332
|
+
* granted, and `false` for an empty list. A check is a permission, or a
|
|
333
|
+
* `[permission, row]` pair. It stops at the first check that is not granted.
|
|
334
|
+
*/
|
|
335
|
+
readonly canAll: (checks: readonly PermissionCheck[], options?: DecideOptions) => boolean;
|
|
336
|
+
/** `decide` for every check, in check order; a check is a permission or a `[permission, row]` pair. */
|
|
337
|
+
readonly decideAll: (checks: readonly PermissionCheck[], options?: DecideOptions) => readonly Decision[];
|
|
319
338
|
/**
|
|
320
339
|
* `decide` for each row, in row order. Each row is its own call: a limit
|
|
321
340
|
* is consumed once per granted row, so rows past the cap are denied with
|
|
322
341
|
* `limit`, and each `approval-required` row carries its own token.
|
|
323
342
|
*/
|
|
324
343
|
readonly decideEach: (permission: Permission, rows: readonly unknown[], options?: DecideOptions) => readonly Decision[];
|
|
344
|
+
/**
|
|
345
|
+
* `decide` for each id, in id order, on rows the server loads itself:
|
|
346
|
+
* `options.data(ids)` answers a map from id to row, or the rows with their
|
|
347
|
+
* resource id field. Each row is trusted (no schema check) and decided in
|
|
348
|
+
* the tenant its own root scope field names, as `permdock.tenant(<that
|
|
349
|
+
* value>)` would, so one call can span tenants. An id with no loaded row,
|
|
350
|
+
* a loader that throws and a row of another resource are denied with
|
|
351
|
+
* `validation`. A snapshot instance denies every id with `unsupported`.
|
|
352
|
+
*/
|
|
353
|
+
readonly decideIds: (permission: Permission, ids: readonly string[], options: DecideIdsOptions) => Promise<readonly Decision[]>;
|
|
325
354
|
/**
|
|
326
355
|
* What `permission` on `row` decides for the principal `principalId`,
|
|
327
356
|
* loaded from `principals` in this instance's active tenant with no actor
|
|
@@ -499,4 +528,4 @@ declare function getPermDockSync<TUser, TPrincipal extends Principal = Principal
|
|
|
499
528
|
/** The instance for `user`: waits for every source, then builds it. `getPermDockSync` is the synchronous twin. */
|
|
500
529
|
declare function getPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, user: TUser | Subject | null, options?: PermDockOptions): Promise<PermDock<V>>;
|
|
501
530
|
//#endregion
|
|
502
|
-
export {
|
|
531
|
+
export { ApprovalPolicy as C, approvalPolicies as D, ApprovalPolicyValidation as E, memoryApprovalPolicySource as O, ApprovalPolicies as S, ApprovalPolicySource as T, PermittedIdsOptions as _, PermDock as a, memoryLimitStore as b, SimulateOptions as c, getPermDock as d, getPermDockSync as f, memoryPrincipalSource as g, PrincipalSource as h, LoadedRows as i, validateApprovalPolicy as k, SnapshotOptions as l, PrincipalIdentityLink as m, DecideOptions as n, PermDockOptions as o, PrincipalIdentity as p, DeriveOptions as r, RowPair as s, DecideIdsOptions as t, WhereResult as u, Limits as v, ApprovalPolicyProblem as w, PermissionCheck as x, limits as y };
|
|
@@ -382,4 +382,4 @@ function renamedKeys(tree) {
|
|
|
382
382
|
return map;
|
|
383
383
|
}
|
|
384
384
|
//#endregion
|
|
385
|
-
export {
|
|
385
|
+
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 };
|
|
@@ -238,70 +238,10 @@ type ActionNames<A extends ActionList | undefined> = A extends readonly string[]
|
|
|
238
238
|
type LeavesFrom<Prefix extends string, Names extends string, T, Kind extends PermissionKind, X = never> = [Names] extends [never] ? object : { readonly [K in Names]: WithX<Permission<Prefix extends "" ? K : `${Prefix}.${K}`, T, Kind>, X>; };
|
|
239
239
|
type InferResourceLeaves<R extends ResourceInit, Prefix extends string, X = never> = R extends ResourceInit<infer T, infer A, infer C> ? LeavesFrom<Prefix, ActionNames<A>, T, "instance", X> & LeavesFrom<Prefix, ActionNames<C>, T, "collection", X> : object;
|
|
240
240
|
type InferPermissionTree<Input, Prefix extends string = "", X = never> = Input extends ResourceInit ? InferResourceLeaves<Input, Prefix, X> : Input extends Record<string, unknown> ? { readonly [K in keyof Input & string]: InferPermissionTree<Input[K], Prefix extends "" ? K : `${Prefix}.${K}`, X>; } : never;
|
|
241
|
-
//#endregion
|
|
242
|
-
//#region src/core/vocabulary.d.ts
|
|
243
|
-
declare const ROLE_KIND: "role";
|
|
244
|
-
declare const PLAN_KIND: "plan";
|
|
245
|
-
/** `defineRoles` and `definePlans` options. */
|
|
246
|
-
type VocabularyOptions<X = never> = {
|
|
247
|
-
/**
|
|
248
|
-
* A Standard Schema for every leaf's `meta.x`, validated synchronously at
|
|
249
|
-
* definition time. On a role tree it also checks the `meta.x` of custom
|
|
250
|
-
* roles a `CustomRoleSource` returns; an invalid one is dropped, not the role.
|
|
251
|
-
*/
|
|
252
|
-
readonly x?: AppDataSchema<X>;
|
|
253
|
-
};
|
|
254
241
|
/**
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
* audiences of the roles held in the active scope.
|
|
242
|
+
* The tree `definePermissions(input, options)` returns, nameable for an
|
|
243
|
+
* explicit annotation under `isolatedDeclarations`.
|
|
258
244
|
*/
|
|
259
|
-
type
|
|
260
|
-
readonly audience?: string;
|
|
261
|
-
};
|
|
262
|
-
type Role<K extends string = string> = {
|
|
263
|
-
readonly key: K;
|
|
264
|
-
/** A declared scope name, or the `tenant` / `team` alias. */
|
|
265
|
-
readonly on?: string;
|
|
266
|
-
readonly assignable: boolean;
|
|
267
|
-
readonly meta: RoleMeta;
|
|
268
|
-
/** A shared custom role: the platform defines it for every tenant, and a tenant admin cannot edit it. */
|
|
269
|
-
readonly shared?: true;
|
|
270
|
-
readonly kind: typeof ROLE_KIND;
|
|
271
|
-
};
|
|
272
|
-
type Plan<K extends string = string> = {
|
|
273
|
-
readonly key: K;
|
|
274
|
-
readonly meta: ActionMeta;
|
|
275
|
-
readonly kind: typeof PLAN_KIND;
|
|
276
|
-
};
|
|
277
|
-
type RoleInit = {
|
|
278
|
-
/** A declared scope name, or the `tenant` / `team` alias. */
|
|
279
|
-
readonly on?: string;
|
|
280
|
-
readonly assignable?: boolean;
|
|
281
|
-
readonly meta?: RoleMeta;
|
|
282
|
-
};
|
|
283
|
-
type PlanInit = {
|
|
284
|
-
readonly meta?: ActionMeta;
|
|
285
|
-
};
|
|
286
|
-
type RoleTree = {
|
|
287
|
-
readonly [key: string]: Role;
|
|
288
|
-
};
|
|
289
|
-
type PlanTree = {
|
|
290
|
-
readonly [key: string]: Plan;
|
|
291
|
-
};
|
|
292
|
-
type Vocabulary = {
|
|
293
|
-
readonly permissions?: unknown;
|
|
294
|
-
readonly roles?: RoleTree;
|
|
295
|
-
readonly plans?: PlanTree;
|
|
296
|
-
};
|
|
297
|
-
type InferRoleTree<Input, X = never> = { readonly [K in keyof Input & string]: WithX<Role<K>, X>; };
|
|
298
|
-
type InferPlanTree<Input, X = never> = { readonly [K in keyof Input & string]: WithX<Plan<K>, X>; };
|
|
299
|
-
declare function isRole(value: unknown): value is Role;
|
|
300
|
-
declare function isPlan(value: unknown): value is Plan;
|
|
301
|
-
declare function defineRoles<const Input extends Record<string, RoleInit>, X = never>(input: Input, options?: VocabularyOptions<X>): InferRoleTree<Input, X>;
|
|
302
|
-
declare function definePlans<const Input extends Record<string, PlanInit>, X = never>(input: Input, options?: VocabularyOptions<X>): InferPlanTree<Input, X>;
|
|
303
|
-
declare function listRoles(tree: RoleTree | undefined): readonly Role[];
|
|
304
|
-
declare function listPlans(tree: PlanTree | undefined): readonly Plan[];
|
|
305
|
-
declare function findRole(tree: RoleTree | undefined, key: string): Role | undefined;
|
|
245
|
+
type PermissionsOf<Input, PX = never, RX = never> = InferPermissionTree<Input, "", PX> & ResourceXTree<RX>;
|
|
306
246
|
//#endregion
|
|
307
|
-
export {
|
|
247
|
+
export { MetaValue as A, ResourceRelation as C, RESOURCE_X as D, ResourceXTree as E, AppData as O, ResourceParent as S, ResourceRestricted as T, ResourceLevel as _, EdgeGroups as a, ResourceNode as b, FieldRelation as c, PermissionKind as d, PermissionTree as f, ResourceInit as g, PrincipalRelation as h, EdgeGroup as i, WithX as j, AppDataSchema as k, InferPermissionTree as l, PermissionsOptions as m, ActionMeta as n, EdgeMatch as o, PermissionsOf as p, ComputedRelation as r, EdgeRelation as s, ActionList as t, Permission as u, ResourceLink as v, ResourceRelationInput as w, ResourceOptions as x, ResourceMeta as y };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { g as ResourceInit, l as InferPermissionTree } from "./permission-types-DhNEmoRG.js";
|
|
2
|
+
import { r as Role, t as Plan } from "./vocabulary-Bg3eeT2H.js";
|
|
2
3
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
3
4
|
//#region src/testing/saas/permissions.d.ts
|
|
4
5
|
declare const SaasProjectSchema: StandardSchemaV1<SaasProject>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
2
|
-
import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-
|
|
2
|
+
import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-DpPtSKNZ.js";
|
|
3
3
|
import { r as assertGraphTargets } from "./resource-relations-D_jw0BFx.js";
|
|
4
4
|
//#region src/core/operation-risks.ts
|
|
5
5
|
/** Every `meta.risk` level, lowest first. */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { f as definePlans, p as defineRoles } from "./grantee-
|
|
4
|
-
import { t as definePermissions } from "./permissions-
|
|
1
|
+
import { c as crud } from "./src-DLFrtrrC.js";
|
|
2
|
+
import { v as resource } from "./permission-registry-DpPtSKNZ.js";
|
|
3
|
+
import { f as definePlans, p as defineRoles } from "./grantee-BrRANrpT.js";
|
|
4
|
+
import { t as definePermissions } from "./permissions-CyH2MV_B.js";
|
|
5
5
|
//#region src/testing/saas/schema.ts
|
|
6
6
|
function accepts(kind, value) {
|
|
7
7
|
switch (kind) {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/cloud/pkce.ts
|
|
2
|
+
function base64url(bytes) {
|
|
3
|
+
let binary = "";
|
|
4
|
+
for (const byte of bytes) binary += String.fromCodePoint(byte);
|
|
5
|
+
return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/u, "");
|
|
6
|
+
}
|
|
7
|
+
/** `length` random bytes as base64url, from Web Crypto. */
|
|
8
|
+
function randomToken(length) {
|
|
9
|
+
return base64url(globalThis.crypto.getRandomValues(new Uint8Array(length)));
|
|
10
|
+
}
|
|
11
|
+
/** An RFC 7636 verifier of 43 characters and its `S256` challenge. */
|
|
12
|
+
async function pkce() {
|
|
13
|
+
const verifier = randomToken(32);
|
|
14
|
+
const digest = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(verifier));
|
|
15
|
+
return {
|
|
16
|
+
verifier,
|
|
17
|
+
challenge: base64url(new Uint8Array(digest))
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { randomToken as n, pkce as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { a as sole } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { i as configError, n as CliError } from "./errors-
|
|
3
|
-
import { i as requirePeer } from "./peer-
|
|
4
|
-
import {
|
|
2
|
+
import { i as configError, n as CliError } from "./errors-DpP_U6Bf.js";
|
|
3
|
+
import { i as requirePeer } from "./peer-12Q5I_RH.js";
|
|
4
|
+
import { D as qualified, _ as subjectClaimJsonSql } from "./shared-fMKOv8hP.js";
|
|
5
5
|
//#region src/cli/pg.ts
|
|
6
6
|
const CONNECT_TIMEOUT_MS = 1e4;
|
|
7
7
|
const STATEMENT_TIMEOUT_MS = 6e4;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { T as Policy,
|
|
2
|
-
import { c as saasPlans, l as saasRoles, s as saasPermissions } from "./permissions-
|
|
1
|
+
import { T as Policy, lr as Subject, sr as Principal } from "./policy-types-B-F-qAZk.js";
|
|
2
|
+
import { c as saasPlans, l as saasRoles, s as saasPermissions } from "./permissions-CoqCOfJ3.js";
|
|
3
3
|
//#region src/testing/saas/policy.d.ts
|
|
4
4
|
/** Daily API-key quota per subject; the bucket should be per tenant too. */
|
|
5
5
|
declare const SAAS_API_KEY_LIMIT = 5;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
-
import { c as withGrantSchema, d as assertApprovalVersions, i as completeGrant, o as flattenGrants, p as normalizeWhere, s as flattenPermissions, u as assertApprovalRelations } from "./role-builder-
|
|
4
|
-
import { c as listPermissions, i as getRegistry, m as annotationsFor, n as findPermission, s as isRegistryTree } from "./permission-registry-
|
|
3
|
+
import { c as withGrantSchema, d as assertApprovalVersions, i as completeGrant, o as flattenGrants, p as normalizeWhere, s as flattenPermissions, u as assertApprovalRelations } from "./role-builder-C1VJzvcr.js";
|
|
4
|
+
import { c as listPermissions, i as getRegistry, m as annotationsFor, n as findPermission, s as isRegistryTree } from "./permission-registry-DpPtSKNZ.js";
|
|
5
5
|
import { d as isSelfParented, l as isFieldRelation } from "./resource-relations-D_jw0BFx.js";
|
|
6
|
-
import { t as canonicalJson } from "./canonical-json-
|
|
6
|
+
import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
|
|
7
7
|
import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
|
|
8
|
-
import { n as defineScopes,
|
|
9
|
-
import { o as flattenGrantee, r as asGrantee, v as listRoles } from "./grantee-
|
|
8
|
+
import { n as defineScopes, s as resolveScope } from "./scopes-BHsc-wp-.js";
|
|
9
|
+
import { o as flattenGrantee, r as asGrantee, v as listRoles } from "./grantee-BrRANrpT.js";
|
|
10
10
|
import { n as normalizeValidity } from "./validity-CZ7-y0Cj.js";
|
|
11
|
-
import { a as relationStart, i as relationHops, n as isGraphRelation, t as inheritCondition } from "./grantee-conditions-
|
|
12
|
-
import { a as memberOfFields, p as scopeField, u as relatesTo } from "./tenancy-
|
|
11
|
+
import { a as relationStart, i as relationHops, n as isGraphRelation, t as inheritCondition } from "./grantee-conditions-C6P1Tvol.js";
|
|
12
|
+
import { a as memberOfFields, p as scopeField, u as relatesTo } from "./tenancy-CmeBQ6Nv.js";
|
|
13
13
|
import { t as byCodePoint } from "./compare-pfyVnBjE.js";
|
|
14
14
|
//#region src/core/policy-assertions.ts
|
|
15
15
|
function assertParentGraph(resources) {
|
|
@@ -374,6 +374,15 @@ function grantList(policy) {
|
|
|
374
374
|
function declaredRoleNames(policy) {
|
|
375
375
|
return policy.index.declaredRoles;
|
|
376
376
|
}
|
|
377
|
+
/**
|
|
378
|
+
* Whether `value` names a role the policy declares, for a role read as a
|
|
379
|
+
* string from a database or a token. A name it rejects is an unknown role,
|
|
380
|
+
* which grants nothing (`unknown-role`). A tenant's custom roles are not
|
|
381
|
+
* declared; `CustomRoleSource` resolves them.
|
|
382
|
+
*/
|
|
383
|
+
function isRoleName(policy, value) {
|
|
384
|
+
return typeof value === "string" && policy.index.declaredRoles.has(value);
|
|
385
|
+
}
|
|
377
386
|
function separationConflicts(policy, memberships) {
|
|
378
387
|
const exclusive = exclusivePairs(policy);
|
|
379
388
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -396,4 +405,4 @@ function separationConflicts(policy, memberships) {
|
|
|
396
405
|
return conflicts;
|
|
397
406
|
}
|
|
398
407
|
//#endregion
|
|
399
|
-
export {
|
|
408
|
+
export { isRoleName as a, policyLevels as c, normalizeDelegation as d, indexPolicy as i, separationConflicts as l, definePolicy as n, levelCondition as o, grantList as r, levelNames as s, declaredRoleNames as t, policyX as u };
|