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,34 +1,40 @@
|
|
|
1
1
|
import { a as sole, n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
3
|
-
import { n as isForbiddenKey } from "./paths-
|
|
4
|
-
import { n as role, t as normalizeAssurance } from "./role-builder-
|
|
5
|
-
import { n as PermDockValidationError } from "./validation-error-
|
|
2
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { n as isForbiddenKey } from "./paths-CUvURzHp.js";
|
|
4
|
+
import { n as role, t as normalizeAssurance } from "./role-builder-BK2-T6oD.js";
|
|
5
|
+
import { n as PermDockValidationError } from "./validation-error-CYg2kJEw.js";
|
|
6
6
|
import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
|
|
7
|
-
import { o as sameId } from "./expiry-
|
|
8
|
-
import { n as internalsOf } from "./internals-
|
|
9
|
-
import { a as getResource, c as listPermissions, h as formerKeys, m as annotationsFor, n as findPermission } from "./permission-registry-
|
|
10
|
-
import { n as isThenable, t as ignoreRejection } from "./thenable-
|
|
11
|
-
import { i as readAppData } from "./app-data-
|
|
12
|
-
import { a as durationOf, d as isoNow, o as epochSeconds, r as assertDuration, s as instantAt, t as INVALID_NOW } from "./time-
|
|
13
|
-
import { t as canonicalJson } from "./canonical-json-
|
|
14
|
-
import {
|
|
15
|
-
import { a as readOnlyActorRefuses, c as rowIdOf, i as delegatedPermissions, l as rowValues, n as coveredByDelegation, o as requiresStandIn, r as coversRequirements, s as isRowPair, u as evaluateCondition } from "./delegation-
|
|
16
|
-
import { a as authenticated, g as isRole, i as assurance, m as findRole, o as flattenGrantee, r as asGrantee } from "./grantee-
|
|
17
|
-
import { a as grantCoversField, i as wireValidity, t as isActive } from "./validity-
|
|
18
|
-
import { o as resourceRoleCondition } from "./grantee-conditions-
|
|
19
|
-
import { c as nowSeconds, i as matchScopedMembership, l as partitionsOf, n as inTeam, p as scopeField, r as isMembershipExpired } from "./tenancy-
|
|
20
|
-
import {
|
|
7
|
+
import { o as sameId } from "./expiry-6XByK0dm.js";
|
|
8
|
+
import { n as internalsOf } from "./internals-B3IgHrvo.js";
|
|
9
|
+
import { a as getResource, c as listPermissions, h as formerKeys, m as annotationsFor, n as findPermission } from "./permission-registry-B8tYxPIt.js";
|
|
10
|
+
import { n as isThenable, t as ignoreRejection } from "./thenable-BNSM1U2R.js";
|
|
11
|
+
import { i as readAppData } from "./app-data-UNNm07jV.js";
|
|
12
|
+
import { a as durationOf, d as isoNow, o as epochSeconds, r as assertDuration, s as instantAt, t as INVALID_NOW } from "./time-nR1JesoH.js";
|
|
13
|
+
import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
|
|
14
|
+
import { c as rootMembershipId, f as scopeList, h as tenantOf, i as keepsPermission, o as normalizeMemberships, p as subjectForPermission, s as resolveScope } from "./scopes-0Up_UA2t.js";
|
|
15
|
+
import { a as readOnlyActorRefuses, c as rowIdOf, i as delegatedPermissions, l as rowValues, n as coveredByDelegation, o as requiresStandIn, r as coversRequirements, s as isRowPair, u as evaluateCondition } from "./delegation-CDB6_keF.js";
|
|
16
|
+
import { a as authenticated, g as isRole, i as assurance, m as findRole, o as flattenGrantee, r as asGrantee } from "./grantee-Dke-9rd1.js";
|
|
17
|
+
import { a as grantCoversField, i as wireValidity, t as isActive } from "./validity-Buc7w8E9.js";
|
|
18
|
+
import { o as resourceRoleCondition } from "./grantee-conditions-BrYPe-w0.js";
|
|
19
|
+
import { c as nowSeconds, i as matchScopedMembership, l as partitionsOf, n as inTeam, p as scopeField, r as isMembershipExpired } from "./tenancy-5d1zVBvK.js";
|
|
20
|
+
import { i as grantList, n as declaredRoleNames, s as levelCondition } from "./policy-CLQ8__GF.js";
|
|
21
21
|
import { t as requiresApproval } from "./approval-required-TzNB9oQA.js";
|
|
22
|
-
import { i as versionOf, r as tokenPayload, t as decisionToken } from "./token-
|
|
23
|
-
import { n as resolveRelated } from "./relation-walk-
|
|
24
|
-
import { t as eventInstant } from "./event-time-
|
|
22
|
+
import { i as versionOf, r as tokenPayload, t as decisionToken } from "./token-DC9EQiet.js";
|
|
23
|
+
import { n as resolveRelated } from "./relation-walk-DK_gkgL7.js";
|
|
24
|
+
import { t as eventInstant } from "./event-time-BGy48400.js";
|
|
25
25
|
import { n as toWireDelegation } from "./wire-delegation-Cv3W2eaM.js";
|
|
26
|
-
import { n as matchGrantee, t as combineWhere } from "./grantee-match-
|
|
26
|
+
import { n as matchGrantee, t as combineWhere } from "./grantee-match-7RZZvoT_.js";
|
|
27
27
|
import { t as resourceIdOf } from "./resource-ref-CaS9yVPi.js";
|
|
28
28
|
//#region src/core/approval-state.ts
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* The denial detail when an `ApprovalPolicySource` threw or returned an invalid
|
|
31
|
+
* entry.
|
|
32
|
+
*/
|
|
30
33
|
const APPROVAL_POLICY_UNAVAILABLE = "approval-policy-unavailable";
|
|
31
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* The tenant a matched allow applies in: its membership's root scope, else the
|
|
36
|
+
* active tenant.
|
|
37
|
+
*/
|
|
32
38
|
function decisionTenant(subject, membership) {
|
|
33
39
|
return (membership === void 0 ? void 0 : rootMembershipId(membership)) ?? subject.principal?.tenant;
|
|
34
40
|
}
|
|
@@ -38,9 +44,9 @@ function isContact(principal) {
|
|
|
38
44
|
return principal?.kind === "contact";
|
|
39
45
|
}
|
|
40
46
|
/**
|
|
41
|
-
* A contact's memberships: only the `{ on }` ones count, each as
|
|
42
|
-
*
|
|
43
|
-
*
|
|
47
|
+
* A contact's memberships: only the `{ on }` ones count, each as `via:
|
|
48
|
+
* 'contact'` and without seats, so a role whose `for` excludes `contact` never
|
|
49
|
+
* applies and no `plan()` grantee matches.
|
|
44
50
|
*/
|
|
45
51
|
function contactMemberships(memberships) {
|
|
46
52
|
const kept = [];
|
|
@@ -58,14 +64,17 @@ function optsIn(policy, grant) {
|
|
|
58
64
|
if (grant.role === null) return false;
|
|
59
65
|
return policy.roles.find(({ name }) => name === grant.role)?.for?.includes("contact") === true;
|
|
60
66
|
}
|
|
61
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* Whether `subject` may use the allow `grant`: false only for a contact and a
|
|
69
|
+
* write its role does not open to contacts.
|
|
70
|
+
*/
|
|
62
71
|
function contactMayUse(policy, subject, grant) {
|
|
63
72
|
return grant.effect !== "allow" || !isContact(subject.principal) || annotationsFor(grant.permission).readOnlyHint || optsIn(policy, grant);
|
|
64
73
|
}
|
|
65
74
|
/**
|
|
66
|
-
* The allows a contact may use for `permission`: all of them for a
|
|
67
|
-
*
|
|
68
|
-
*
|
|
75
|
+
* The allows a contact may use for `permission`: all of them for a read-only
|
|
76
|
+
* permission, otherwise only those from a role whose `for` lists `contact`.
|
|
77
|
+
* Every other subject keeps every allow.
|
|
69
78
|
*/
|
|
70
79
|
function contactAllows(policy, subject, permission, allows) {
|
|
71
80
|
if (!isContact(subject.principal) || annotationsFor(permission).readOnlyHint) return allows;
|
|
@@ -190,7 +199,10 @@ function evaluateBreakGlass(spec, subject, now) {
|
|
|
190
199
|
}] : []]
|
|
191
200
|
};
|
|
192
201
|
}
|
|
193
|
-
/**
|
|
202
|
+
/**
|
|
203
|
+
* Support memberships (`via: 'support'`) the subject holds that demand an
|
|
204
|
+
* actor.
|
|
205
|
+
*/
|
|
194
206
|
function actorRequiredVias(supports) {
|
|
195
207
|
return new Set(supports.filter((spec) => spec.actorRequired).map((spec) => spec.role));
|
|
196
208
|
}
|
|
@@ -225,18 +237,18 @@ function activationDenied(reason, to) {
|
|
|
225
237
|
});
|
|
226
238
|
}
|
|
227
239
|
/**
|
|
228
|
-
* Requests a just-in-time role activation. It never writes: a granted
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
240
|
+
* Requests a just-in-time role activation. It never writes: a granted decision
|
|
241
|
+
* carries the elevated membership under `elevation` for the app to write.
|
|
242
|
+
* `approval-required` comes back first when the role's `activation` sets
|
|
243
|
+
* `approval`. Fail-closed: an unknown role, an ineligible subject, a missing
|
|
244
|
+
* justification or stale authentication all deny.
|
|
233
245
|
*/
|
|
234
246
|
/**
|
|
235
247
|
* Requests a just-in-time activation of an eligible role for the subject of
|
|
236
248
|
* `permdock`. It never writes: a granted decision carries the elevated
|
|
237
|
-
* membership under `elevation` for the app to write, and
|
|
238
|
-
*
|
|
239
|
-
*
|
|
249
|
+
* membership under `elevation` for the app to write, and `approval-required`
|
|
250
|
+
* comes back first when the role's `activation` sets `approval`. An instance
|
|
251
|
+
* built from a snapshot denies with `unsupported`.
|
|
240
252
|
*/
|
|
241
253
|
function activate(permdock, input) {
|
|
242
254
|
const internals = internalsOf(permdock);
|
|
@@ -526,7 +538,10 @@ function credentialRef(subject) {
|
|
|
526
538
|
kind
|
|
527
539
|
} : void 0;
|
|
528
540
|
}
|
|
529
|
-
/**
|
|
541
|
+
/**
|
|
542
|
+
* `context.supportSession` counts only next to the `support` actor
|
|
543
|
+
* `subjectFromSupportSession` sets.
|
|
544
|
+
*/
|
|
530
545
|
function supportSessionRef(subject) {
|
|
531
546
|
const value = subject.context["supportSession"];
|
|
532
547
|
if (subject.actor?.kind !== "support" || value === null || typeof value !== "object" || !("id" in value) || typeof value.id !== "string" || value.id === "") return;
|
|
@@ -610,7 +625,10 @@ function finish(policy, subject, permission, data, decision, options, env, trust
|
|
|
610
625
|
}
|
|
611
626
|
//#endregion
|
|
612
627
|
//#region src/core/evaluate/complete.ts
|
|
613
|
-
/**
|
|
628
|
+
/**
|
|
629
|
+
* Every exit of `evaluate`: names the permission, freezes, attaches the trace
|
|
630
|
+
* and emits.
|
|
631
|
+
*/
|
|
614
632
|
function complete(call, raw, membership) {
|
|
615
633
|
const { env, permission, tracer } = call;
|
|
616
634
|
const decision = env.outcomeOnly !== true && raw.outcome === "denied" && raw.permission === void 0 ? {
|
|
@@ -640,7 +658,10 @@ function deniedWithAlternatives(state, denials) {
|
|
|
640
658
|
}
|
|
641
659
|
//#endregion
|
|
642
660
|
//#region src/core/evaluate/allowed.ts
|
|
643
|
-
/**
|
|
661
|
+
/**
|
|
662
|
+
* The `granted` or `approval-required` decision for the chosen allow, with its
|
|
663
|
+
* token.
|
|
664
|
+
*/
|
|
644
665
|
function allowedDecision(state, allow, approval, quotaState) {
|
|
645
666
|
const { policy, subject, permission, resource, env, current, next } = state;
|
|
646
667
|
const resourceId = permission.kind === "collection" ? "*" : rowIdOf(current, resource?.id);
|
|
@@ -679,7 +700,10 @@ function allowedDecision(state, allow, approval, quotaState) {
|
|
|
679
700
|
}
|
|
680
701
|
//#endregion
|
|
681
702
|
//#region src/core/custom-roles.ts
|
|
682
|
-
/**
|
|
703
|
+
/**
|
|
704
|
+
* The current key for a stored key, current or former; `undefined` when
|
|
705
|
+
* neither.
|
|
706
|
+
*/
|
|
683
707
|
function currentKey(policy, raw) {
|
|
684
708
|
const leaf = findPermission(policy.permissions, raw);
|
|
685
709
|
if (leaf === void 0) return;
|
|
@@ -711,8 +735,8 @@ function leveled(grant, level, condition) {
|
|
|
711
735
|
}
|
|
712
736
|
/**
|
|
713
737
|
* The scope a custom role is held at: `scope` (a name or alias), the second
|
|
714
|
-
* scope for the `team` input shape, else the first scope. `undefined` when
|
|
715
|
-
*
|
|
738
|
+
* scope for the `team` input shape, else the first scope. `undefined` when the
|
|
739
|
+
* policy does not declare it; such a role resolves to nothing.
|
|
716
740
|
*/
|
|
717
741
|
function customRoleScope(role, scopes) {
|
|
718
742
|
if (role.scope === "global") return role.shared === true ? void 0 : "global";
|
|
@@ -723,11 +747,17 @@ function customRoleScope(role, scopes) {
|
|
|
723
747
|
function customRoleId(role) {
|
|
724
748
|
return role.scope === void 0 ? role.team : role.id;
|
|
725
749
|
}
|
|
726
|
-
/**
|
|
750
|
+
/**
|
|
751
|
+
* A platform custom role: held through `principal.roles`, capped by the
|
|
752
|
+
* assignable global roles.
|
|
753
|
+
*/
|
|
727
754
|
function isGlobalCustomRole(role) {
|
|
728
755
|
return role.scope === "global";
|
|
729
756
|
}
|
|
730
|
-
/**
|
|
757
|
+
/**
|
|
758
|
+
* A shared custom role: defined once for every tenant, held on memberships of
|
|
759
|
+
* its scope in any tenant.
|
|
760
|
+
*/
|
|
731
761
|
function isSharedCustomRole(role) {
|
|
732
762
|
return role.shared === true;
|
|
733
763
|
}
|
|
@@ -752,7 +782,8 @@ function isAssignableRole(policy, name) {
|
|
|
752
782
|
* Every scope's ceiling, keyed by scope name (`global` for platform custom
|
|
753
783
|
* roles): the code allows of declared `assignable` roles in that scope,
|
|
754
784
|
* everything a custom role of the scope may ever reach. Hosted grants never
|
|
755
|
-
* widen it. `assignable` narrows it to those role names
|
|
785
|
+
* widen it. `assignable` narrows it to those role names
|
|
786
|
+
* (`CustomRoleSource.assignable`).
|
|
756
787
|
*/
|
|
757
788
|
function ceilings(policy, assignable) {
|
|
758
789
|
const allowed = assignable === void 0 ? void 0 : new Set(assignable);
|
|
@@ -885,7 +916,7 @@ function resolveCustomRole(policy, role) {
|
|
|
885
916
|
if (level !== void 0) {
|
|
886
917
|
const leaf = findPermission(policy.permissions, key);
|
|
887
918
|
const condition = typeof level === "string" && leaf?.kind === "instance" ? levelCondition(policy, leaf.resource, level) : void 0;
|
|
888
|
-
if (condition === void 0) {
|
|
919
|
+
if (condition === void 0 || typeof level !== "string") {
|
|
889
920
|
drop({
|
|
890
921
|
permission: key,
|
|
891
922
|
reason: "unknown-level",
|
|
@@ -894,7 +925,7 @@ function resolveCustomRole(policy, role) {
|
|
|
894
925
|
denyKeys.add(key);
|
|
895
926
|
continue;
|
|
896
927
|
}
|
|
897
|
-
narrowing = [
|
|
928
|
+
narrowing = [level, condition];
|
|
898
929
|
}
|
|
899
930
|
if (!ceilingKeys.has(key)) {
|
|
900
931
|
drop({
|
|
@@ -952,6 +983,35 @@ function validateCustomRole(policy, role, options = {}) {
|
|
|
952
983
|
renamed: resolved.renamed
|
|
953
984
|
});
|
|
954
985
|
}
|
|
986
|
+
/**
|
|
987
|
+
* Checks one stored allow entry, `<permission>[@<level>]`, the way
|
|
988
|
+
* `permdock_custom_role_entry_problem` does in SQL. `scope` defaults to the
|
|
989
|
+
* first scope; its ceiling is the allows of that scope's assignable roles.
|
|
990
|
+
*/
|
|
991
|
+
function parseCustomRoleEntry(policy, entry, options = {}) {
|
|
992
|
+
const at = entry.indexOf("@");
|
|
993
|
+
const raw = at === -1 ? entry : entry.slice(0, at);
|
|
994
|
+
const level = at === -1 ? void 0 : entry.slice(at + 1);
|
|
995
|
+
const checked = validateCustomRole(policy, {
|
|
996
|
+
name: "entry",
|
|
997
|
+
tenant: "entry",
|
|
998
|
+
...options.scope === void 0 ? {} : { scope: options.scope },
|
|
999
|
+
grants: [{
|
|
1000
|
+
permission: raw,
|
|
1001
|
+
...level === void 0 ? {} : { level }
|
|
1002
|
+
}]
|
|
1003
|
+
});
|
|
1004
|
+
const dropped = checked.dropped[0];
|
|
1005
|
+
if (dropped !== void 0) return {
|
|
1006
|
+
ok: false,
|
|
1007
|
+
cause: dropped.reason === "unknown-level" || dropped.reason === "outside-ceiling" ? dropped.reason : "unknown-permission"
|
|
1008
|
+
};
|
|
1009
|
+
return {
|
|
1010
|
+
ok: true,
|
|
1011
|
+
permission: checked.renamed[0]?.to ?? raw,
|
|
1012
|
+
...level === void 0 ? {} : { level }
|
|
1013
|
+
};
|
|
1014
|
+
}
|
|
955
1015
|
function wellFormed(role) {
|
|
956
1016
|
if (role === null || typeof role !== "object" || typeof role.name !== "string") return false;
|
|
957
1017
|
if (role.shared !== void 0) return role.shared === true && role.tenant === void 0 && role.team === void 0 && role.id === void 0 && (role.scope === void 0 || typeof role.scope === "string" && role.scope !== "global");
|
|
@@ -967,7 +1027,24 @@ function effectiveCustomRoles(roles) {
|
|
|
967
1027
|
const shared = new Set(formed.filter(isSharedCustomRole).map((role) => role.name));
|
|
968
1028
|
return shared.size === 0 ? formed : formed.filter((role) => isSharedCustomRole(role) || isGlobalCustomRole(role) || !shared.has(role.name));
|
|
969
1029
|
}
|
|
970
|
-
/**
|
|
1030
|
+
/** The grants of `roles` that name a level their resource does not declare. */
|
|
1031
|
+
function unknownLevelsFor(policy, roles) {
|
|
1032
|
+
const declared = declaredRoleNames(policy);
|
|
1033
|
+
const out = [];
|
|
1034
|
+
for (const role of effectiveCustomRoles(roles)) {
|
|
1035
|
+
if (declared.has(role.name)) continue;
|
|
1036
|
+
for (const entry of resolveCustomRole(policy, role).dropped) if ("permission" in entry && entry.reason === "unknown-level") out.push({
|
|
1037
|
+
role: role.name,
|
|
1038
|
+
permission: entry.permission,
|
|
1039
|
+
level: entry.level ?? ""
|
|
1040
|
+
});
|
|
1041
|
+
}
|
|
1042
|
+
return out;
|
|
1043
|
+
}
|
|
1044
|
+
/**
|
|
1045
|
+
* Every custom role's resolved grants, once per instance. Malformed roles
|
|
1046
|
+
* resolve to nothing.
|
|
1047
|
+
*/
|
|
971
1048
|
function customGrantsFor(policy, roles) {
|
|
972
1049
|
const declared = declaredRoleNames(policy);
|
|
973
1050
|
const out = [];
|
|
@@ -989,7 +1066,10 @@ function tenantCustomRoles(policy, roles) {
|
|
|
989
1066
|
const declared = declaredRoleNames(policy);
|
|
990
1067
|
return effectiveCustomRoles(roles).filter((role) => !isGlobalCustomRole(role) && !declared.has(role.name));
|
|
991
1068
|
}
|
|
992
|
-
/**
|
|
1069
|
+
/**
|
|
1070
|
+
* Whether a custom role held on memberships belongs to `tenant`: its own, or
|
|
1071
|
+
* shared by every tenant.
|
|
1072
|
+
*/
|
|
993
1073
|
function customRoleOf(role, tenant) {
|
|
994
1074
|
return isSharedCustomRole(role) || sameId(role.tenant, tenant);
|
|
995
1075
|
}
|
|
@@ -1008,15 +1088,18 @@ function holdsCustomRole(membership, role, scopes) {
|
|
|
1008
1088
|
function holdsGlobalCustomRole(roles, role) {
|
|
1009
1089
|
return isGlobalCustomRole(role) && (roles ?? []).includes(role.name);
|
|
1010
1090
|
}
|
|
1011
|
-
/**
|
|
1091
|
+
/**
|
|
1092
|
+
* A tenant's custom role inside that tenant, a shared role in any tenant, or a
|
|
1093
|
+
* platform custom role anywhere.
|
|
1094
|
+
*/
|
|
1012
1095
|
function isCustomRoleName(name, roles, tenant) {
|
|
1013
1096
|
return effectiveCustomRoles(roles).some((item) => item.name === name && (isGlobalCustomRole(item) || tenant !== void 0 && customRoleOf(item, tenant)));
|
|
1014
1097
|
}
|
|
1015
1098
|
/**
|
|
1016
|
-
* The compact JWT form of custom roles for the `memberships[].grants` claim
|
|
1017
|
-
*
|
|
1018
|
-
*
|
|
1019
|
-
*
|
|
1099
|
+
* The compact JWT form of custom roles for the `memberships[].grants` claim RLS
|
|
1100
|
+
* reads in `jwt` mode: role name to entries, where `key` allows, `-key` denies
|
|
1101
|
+
* and `@role` includes. Put a team custom role on its team membership. Pass
|
|
1102
|
+
* `policy` to write keys stored under a former name as the current key.
|
|
1020
1103
|
*/
|
|
1021
1104
|
function customRoleClaim(roles, policy) {
|
|
1022
1105
|
const keyOf = (raw) => policy === void 0 ? raw : currentKey(policy, raw) ?? raw;
|
|
@@ -1054,7 +1137,10 @@ function membershipsClaim(memberships, customRoles, scopes) {
|
|
|
1054
1137
|
}
|
|
1055
1138
|
//#endregion
|
|
1056
1139
|
//#region src/core/source-name.ts
|
|
1057
|
-
/**
|
|
1140
|
+
/**
|
|
1141
|
+
* `{ name }` for a source that names itself, `{}` otherwise: what an auth event
|
|
1142
|
+
* reports about it.
|
|
1143
|
+
*/
|
|
1058
1144
|
function sourceName(source) {
|
|
1059
1145
|
return source?.name === void 0 ? {} : { name: source.name };
|
|
1060
1146
|
}
|
|
@@ -1072,7 +1158,10 @@ function isSharedRole(value) {
|
|
|
1072
1158
|
function onlyShared(roles) {
|
|
1073
1159
|
return Array.isArray(roles) ? roles.filter(isSharedRole) : [];
|
|
1074
1160
|
}
|
|
1075
|
-
/**
|
|
1161
|
+
/**
|
|
1162
|
+
* The `customRoles` option as a source: a factory is called with the resolved
|
|
1163
|
+
* subject, and a throw reads none.
|
|
1164
|
+
*/
|
|
1076
1165
|
function roleSourceFor(option, subject, auth) {
|
|
1077
1166
|
if (typeof option !== "function") return option;
|
|
1078
1167
|
try {
|
|
@@ -1159,8 +1248,8 @@ function assignableNamesFor(source, tenants, auth) {
|
|
|
1159
1248
|
return toMap(loaded);
|
|
1160
1249
|
}
|
|
1161
1250
|
/**
|
|
1162
|
-
* The declared role names among `names`. A custom role of `tenant` is known
|
|
1163
|
-
*
|
|
1251
|
+
* The declared role names among `names`. A custom role of `tenant` is known but
|
|
1252
|
+
* contributes no declared name: its grants are resolved separately
|
|
1164
1253
|
* (`customGrantsFor`), bounded by the ceiling. A tenant's custom role is
|
|
1165
1254
|
* unknown inside another tenant and for a membership without one.
|
|
1166
1255
|
*/
|
|
@@ -1218,7 +1307,10 @@ function validationMessage(permission, resource, issues) {
|
|
|
1218
1307
|
}
|
|
1219
1308
|
//#endregion
|
|
1220
1309
|
//#region src/core/evaluate/call.ts
|
|
1221
|
-
/**
|
|
1310
|
+
/**
|
|
1311
|
+
* The rows after boundary validation; on `invalid`, the rows validated before
|
|
1312
|
+
* the failure.
|
|
1313
|
+
*/
|
|
1222
1314
|
function validatedRows(call, data, rows) {
|
|
1223
1315
|
const { permission, policy, options } = call;
|
|
1224
1316
|
if (data === void 0 && !(permission.kind === "instance" && policy.validate === "always")) return rows;
|
|
@@ -1298,9 +1390,9 @@ function isUnconditionedAllow(grant, now) {
|
|
|
1298
1390
|
return grant.where === void 0 && grant.check === void 0 && grant.closure === void 0 && grant.portable && grant.purpose === void 0 && grant.viaOnly === void 0 && grant.requires === void 0 && isActive(grant.validity, now);
|
|
1299
1391
|
}
|
|
1300
1392
|
/**
|
|
1301
|
-
* The row condition a grant's `requires` adds: the row's instance of some
|
|
1302
|
-
*
|
|
1303
|
-
*
|
|
1393
|
+
* The row condition a grant's `requires` adds: the row's instance of some scope
|
|
1394
|
+
* is one where the subject holds `key` through a role grant without a row
|
|
1395
|
+
* condition, minus the instances a deny of `key` reaches at that scope.
|
|
1304
1396
|
* `undefined` when the subject holds `key` globally that way, so every row
|
|
1305
1397
|
* passes. The in-process mirror of the SQL `permdock_has_permission` and
|
|
1306
1398
|
* `permitted_<scope>_ids_by_permission`.
|
|
@@ -1374,9 +1466,9 @@ function keyRequirement(policy, subject, key, resource, now, customRoles, custom
|
|
|
1374
1466
|
//#endregion
|
|
1375
1467
|
//#region src/core/evaluate/candidates.ts
|
|
1376
1468
|
/**
|
|
1377
|
-
* A collection write proposes `next`; an update pair may move `next` out of
|
|
1378
|
-
*
|
|
1379
|
-
*
|
|
1469
|
+
* A collection write proposes `next`; an update pair may move `next` out of the
|
|
1470
|
+
* scope `current` is in. An allow needs both in scope; a deny applies when
|
|
1471
|
+
* either is, so a move into or out of its scope stays denied.
|
|
1380
1472
|
*/
|
|
1381
1473
|
function matchWriteScope(match, instance, current, next, deny) {
|
|
1382
1474
|
const first = match(instance ? current : next);
|
|
@@ -1386,7 +1478,10 @@ function matchWriteScope(match, instance, current, next, deny) {
|
|
|
1386
1478
|
const moved = match(next);
|
|
1387
1479
|
return moved.ok ? first : moved;
|
|
1388
1480
|
}
|
|
1389
|
-
/**
|
|
1481
|
+
/**
|
|
1482
|
+
* The code grants and custom-role grants for the permission, break-glass grants
|
|
1483
|
+
* aside.
|
|
1484
|
+
*/
|
|
1390
1485
|
function candidatesFor(call) {
|
|
1391
1486
|
const { permission } = call;
|
|
1392
1487
|
const candidates = (call.policy.index.grantsByKey.get(permission.key) ?? []).filter((grant) => grant.breakGlass === void 0).map((grant) => ({ grant }));
|
|
@@ -1444,7 +1539,8 @@ function holdsRole(state, item, custom) {
|
|
|
1444
1539
|
}
|
|
1445
1540
|
/**
|
|
1446
1541
|
* Whether the subject holds every role the grantee names, at a scope the row
|
|
1447
|
-
* (and a write's next row) is in. `held: false` when a denial or skip was
|
|
1542
|
+
* (and a write's next row) is in. `held: false` when a denial or skip was
|
|
1543
|
+
* recorded.
|
|
1448
1544
|
*/
|
|
1449
1545
|
function roleScope(state, grant, custom) {
|
|
1450
1546
|
const { subject, permission, tracer } = state;
|
|
@@ -1510,7 +1606,10 @@ function granteeOf(state, grant, custom) {
|
|
|
1510
1606
|
reason
|
|
1511
1607
|
});
|
|
1512
1608
|
}
|
|
1513
|
-
/**
|
|
1609
|
+
/**
|
|
1610
|
+
* One candidate grant: records an allow, a denial or a skip, or returns the
|
|
1611
|
+
* decision a deny ends with.
|
|
1612
|
+
*/
|
|
1514
1613
|
function evaluateCandidate(state, { grant, custom }, breakGlass) {
|
|
1515
1614
|
const { policy, subject, permission, now, env, tracer } = state;
|
|
1516
1615
|
const displayRole = grant.role;
|
|
@@ -1575,7 +1674,10 @@ function evaluateCandidate(state, { grant, custom }, breakGlass) {
|
|
|
1575
1674
|
membership: scoped.membership
|
|
1576
1675
|
});
|
|
1577
1676
|
}
|
|
1578
|
-
/**
|
|
1677
|
+
/**
|
|
1678
|
+
* Adds the break-glass allow, or puts its denial first, once every candidate
|
|
1679
|
+
* has run.
|
|
1680
|
+
*/
|
|
1579
1681
|
function mergeBreakGlass(state, breakGlass) {
|
|
1580
1682
|
if (breakGlass.grant !== void 0) {
|
|
1581
1683
|
state.tracer?.allows.push(matchedOf(breakGlass.grant, state.permission.key, true));
|
|
@@ -1598,8 +1700,8 @@ function noAllowDecision(state) {
|
|
|
1598
1700
|
}
|
|
1599
1701
|
/**
|
|
1600
1702
|
* The allows a delegation leaves usable. A policy delegation is a ceiling for
|
|
1601
|
-
* the actor: outside it, nothing is delegated; inside it, a token delegation
|
|
1602
|
-
*
|
|
1703
|
+
* the actor: outside it, nothing is delegated; inside it, a token delegation on
|
|
1704
|
+
* the call must still cover.
|
|
1603
1705
|
*/
|
|
1604
1706
|
function delegatedAllows(state) {
|
|
1605
1707
|
const { policy, subject, permission, current } = state;
|
|
@@ -1638,7 +1740,10 @@ function approvalOf(state, candidate) {
|
|
|
1638
1740
|
}
|
|
1639
1741
|
//#endregion
|
|
1640
1742
|
//#region src/core/evaluate/quota.ts
|
|
1641
|
-
/**
|
|
1743
|
+
/**
|
|
1744
|
+
* The quota verdict for one allow: free without a `limit`, unavailable without
|
|
1745
|
+
* the `limits()` feature.
|
|
1746
|
+
*/
|
|
1642
1747
|
function quotaOf(state, grant, consume) {
|
|
1643
1748
|
const { env, subject } = state;
|
|
1644
1749
|
if (grant.limit === void 0) return { ok: true };
|
|
@@ -1686,9 +1791,9 @@ function quotaAllow(state, usable) {
|
|
|
1686
1791
|
/**
|
|
1687
1792
|
* One decision, in stages: the call (clock, rows, delegated permission), the
|
|
1688
1793
|
* subject (held roles, actor), the candidate grants (a matching deny ends
|
|
1689
|
-
* here), break-glass, freshness, delegation and contact, the approval and
|
|
1690
|
-
*
|
|
1691
|
-
*
|
|
1794
|
+
* here), break-glass, freshness, delegation and contact, the approval and quota
|
|
1795
|
+
* of each usable allow, and the decision. Every exit goes through `complete`,
|
|
1796
|
+
* which freezes and emits.
|
|
1692
1797
|
*/
|
|
1693
1798
|
function evaluate(policy, given, permission, data, options, env) {
|
|
1694
1799
|
const call = {
|
|
@@ -1782,4 +1887,4 @@ function evaluate(policy, given, permission, data, options, env) {
|
|
|
1782
1887
|
return allowedDecision(state, chosen.allow, chosen.approval, chosen.quota);
|
|
1783
1888
|
}
|
|
1784
1889
|
//#endregion
|
|
1785
|
-
export {
|
|
1890
|
+
export { breakGlass as A, tenantCustomRoles as C, emptyListeners as D, emitSafe as E, APPROVAL_POLICY_UNAVAILABLE as F, contactMayUse as M, contactMemberships as N, finish as O, isContact as P, roleAllowKeys as S, validateCustomRole as T, isSharedCustomRole as _, expandRoleNames as a, parseCustomRoleEntry as b, andWhere as c, customRoleClaim as d, customRoleId as f, holdsGlobalCustomRole as g, holdsCustomRole as h, customRolesFor as i, supportAccess as j, activate as k, ceilingGrants as l, customRoleScope as m, requirementCondition as n, roleSourceFor as o, customRoleOf as p, assignableNamesFor as r, sourceName as s, evaluate as t, customGrantsFor as u, leveled as v, unknownLevelsFor as w, resolveCustomRole as x, membershipsClaim as y };
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { t as PROBLEM_BASE } from "./validation-error-
|
|
2
|
+
import { t as PROBLEM_BASE } from "./validation-error-CYg2kJEw.js";
|
|
3
3
|
import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
|
|
4
|
-
import { c as listPermissions, g as formerScopes, h as formerKeys } from "./permission-registry-
|
|
5
|
-
import { h as secondsAt } from "./time-
|
|
4
|
+
import { c as listPermissions, g as formerScopes, h as formerKeys } from "./permission-registry-B8tYxPIt.js";
|
|
5
|
+
import { h as secondsAt } from "./time-nR1JesoH.js";
|
|
6
6
|
import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
|
|
7
|
-
import { n as readBodyText } from "./body-text-
|
|
8
|
-
import {
|
|
9
|
-
import { i as readApprovalHeader, s as resumeDecision } from "./helpers-
|
|
10
|
-
import { t as bodyTooLarge } from "./body-
|
|
7
|
+
import { n as readBodyText } from "./body-text-DQhcmqdY.js";
|
|
8
|
+
import { f as validationProblem, l as problemResponse, n as batchTooLarge } from "./problem-BVLHFK33.js";
|
|
9
|
+
import { i as readApprovalHeader, s as resumeDecision } from "./helpers-DJicaG6f.js";
|
|
10
|
+
import { t as bodyTooLarge } from "./body-CJQwYVa8.js";
|
|
11
11
|
import { t as timeoutSignal } from "./timeout-D51niuQP.js";
|
|
12
12
|
//#region src/core/decision.ts
|
|
13
13
|
/** The denial for a check that failed or named no declared permission. */
|
|
@@ -19,16 +19,25 @@ const NO_GRANT = Object.freeze({
|
|
|
19
19
|
})]),
|
|
20
20
|
alternatives: Object.freeze([])
|
|
21
21
|
});
|
|
22
|
+
/** The denial for a check whose row loader threw: it fails closed. */
|
|
23
|
+
const LOAD_FAILED = Object.freeze({
|
|
24
|
+
outcome: "denied",
|
|
25
|
+
denials: Object.freeze([Object.freeze({
|
|
26
|
+
role: null,
|
|
27
|
+
reason: "validation"
|
|
28
|
+
})]),
|
|
29
|
+
alternatives: Object.freeze([])
|
|
30
|
+
});
|
|
22
31
|
//#endregion
|
|
23
32
|
//#region src/server/evaluation-items.ts
|
|
24
33
|
function firstWins(map, name, leaf) {
|
|
25
34
|
if (!map.has(name)) map.set(name, leaf);
|
|
26
35
|
}
|
|
27
36
|
/**
|
|
28
|
-
* Indexes `tree` once. The lookup tries `action` as a permission key or
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
37
|
+
* Indexes `tree` once. The lookup tries `action` as a permission key or scope,
|
|
38
|
+
* then `<resource.type>.<action>`, then the leaf with that resource and action;
|
|
39
|
+
* current names win over former ones and earlier leaves over later ones.
|
|
40
|
+
* Anything else is `undefined`, which the caller denies.
|
|
32
41
|
*/
|
|
33
42
|
function permissionLookup(tree) {
|
|
34
43
|
const current = /* @__PURE__ */ new Map();
|
|
@@ -52,13 +61,19 @@ function permissionLookup(tree) {
|
|
|
52
61
|
}
|
|
53
62
|
/** AuthZEN's sentinel resource id for a collection: the type as a whole, no row. */
|
|
54
63
|
const COLLECTION_ID = "*";
|
|
55
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* A resource id as a row id: `undefined` for none, a non-scalar or the
|
|
66
|
+
* collection sentinel `*`.
|
|
67
|
+
*/
|
|
56
68
|
function wireResourceId(id) {
|
|
57
69
|
if (typeof id !== "string" && typeof id !== "number") return;
|
|
58
70
|
const text = String(id);
|
|
59
71
|
return text === COLLECTION_ID ? void 0 : text;
|
|
60
72
|
}
|
|
61
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* The row an item's resource describes: its `properties`, else `{ id }`, else
|
|
75
|
+
* none for `id: "*"`.
|
|
76
|
+
*/
|
|
62
77
|
function itemResourceData(resource) {
|
|
63
78
|
const properties = resource?.properties;
|
|
64
79
|
if (properties !== null && typeof properties === "object") return properties;
|
|
@@ -67,7 +82,10 @@ function itemResourceData(resource) {
|
|
|
67
82
|
}
|
|
68
83
|
//#endregion
|
|
69
84
|
//#region src/server/web-bot-auth.ts
|
|
70
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* Milliseconds a key directory fetch may take before the signature counts as
|
|
87
|
+
* unverifiable.
|
|
88
|
+
*/
|
|
71
89
|
const DIRECTORY_TIMEOUT_MS = 5e3;
|
|
72
90
|
const DEFAULT_MAX_AGE = 300;
|
|
73
91
|
const FUTURE_SKEW = 60;
|
|
@@ -405,7 +423,10 @@ const EVALUATIONS_SEMANTICS = [
|
|
|
405
423
|
"deny_on_first_deny",
|
|
406
424
|
"permit_on_first_permit"
|
|
407
425
|
];
|
|
408
|
-
/**
|
|
426
|
+
/**
|
|
427
|
+
* The batch's `evaluations_semantic`: `execute_all` when absent, `undefined`
|
|
428
|
+
* for an unknown value.
|
|
429
|
+
*/
|
|
409
430
|
function evaluationsSemantic(body) {
|
|
410
431
|
const options = body["options"];
|
|
411
432
|
const value = isRecord(options) ? options["evaluations_semantic"] : void 0;
|
|
@@ -420,7 +441,7 @@ function unknownSemanticProblem() {
|
|
|
420
441
|
* order, stopping after the first deny or permit.
|
|
421
442
|
*/
|
|
422
443
|
async function evaluateBatch(items, semantic, rowOf) {
|
|
423
|
-
if (semantic === "execute_all") return Promise.all(items.map(rowOf));
|
|
444
|
+
if (semantic === "execute_all") return Promise.all(items.map((item) => rowOf(item)));
|
|
424
445
|
const stopOn = semantic === "permit_on_first_permit";
|
|
425
446
|
const rows = [];
|
|
426
447
|
for (const item of items) {
|
|
@@ -454,9 +475,9 @@ function authzenMetadata(pdp, search = {}) {
|
|
|
454
475
|
});
|
|
455
476
|
}
|
|
456
477
|
/**
|
|
457
|
-
* `reason_admin` and `reason_user` for a decision that is not granted, from
|
|
458
|
-
*
|
|
459
|
-
*
|
|
478
|
+
* `reason_admin` and `reason_user` for a decision that is not granted, from the
|
|
479
|
+
* denial roles and reasons the context already carries. The user reason names
|
|
480
|
+
* no role, grant or subject.
|
|
460
481
|
*/
|
|
461
482
|
function evaluationReasons(decision, permission) {
|
|
462
483
|
switch (decision.outcome) {
|
|
@@ -607,4 +628,4 @@ function evaluationsHandler(options) {
|
|
|
607
628
|
};
|
|
608
629
|
}
|
|
609
630
|
//#endregion
|
|
610
|
-
export {
|
|
631
|
+
export { LOAD_FAILED as _, evaluationReasons as a, withRequestId as c, invalidSignatureProblem as d, invalidSignatureResponse as f, wireResourceId as g, permissionLookup as h, evaluateBatch as i, InvalidSignatureError as l, itemResourceData as m, applyApprovalResume as n, evaluationsHandler as o, webBotAuthVerifier as p, authzenMetadata as r, evaluationsSemantic as s, EVALUATIONS_SEMANTICS as t, discoverViaSignatureAgent as u, NO_GRANT as v };
|