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,24 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { a as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
1
|
+
import { Bn as DenialReason, C as MembershipFixture, Cr as SqlFunctionArg, D as PolicyDelegation, Gt as Snapshot, I as SeparationConflict, J as EntitlementSource, Ln as Decision, Lt as InstanceHandle, N as RoleBinding, P as RoleOptions, R as SupportAccessOptions, Rn as Denial, Rt as Instant, T as Policy, Ut as LocalSnapshotManifest, V as VocabularyFromInput, W as CustomRoleSource, Xt as AccessEvent, Y as JwtClaims, at as SettingsSource, c as BreakGlassOptions, ct as TenantSettings, dn as PolicyScopesInput, en as DecisionEvent, et as MembershipSource, fn as Scope, g as GrantCondition, h as Grant, hr as ConditionRef, i as ApprovalOption, it as RelationSource, j as PolicyVocabulary, k as PolicyOptions, lr as Subject, nn as DeliveryEvent, nt as RelationGroup, or as Membership, ot as SnapshotSource, rr as Delegation, s as AssuranceRequirement, sn as SinkEvent, sr as Principal, tr as CustomRole, ut as TokenSigner, wr as SqlFunctionCondition, yr as OpaqueCondition } from "./policy-types-CCiDRZBH.js";
|
|
2
|
+
import { E as ResourceXTree, S as ResourceParent, T as ResourceRestricted, b as ResourceNode, d as PermissionKind, f as PermissionTree, g as ResourceInit, m as PermissionsOptions, n as ActionMeta, p as PermissionsOf, t as ActionList, u as Permission, w as ResourceRelationInput, x as ResourceOptions, y as ResourceMeta } from "./permission-types-CAY-GU7e.js";
|
|
3
|
+
import { a as RoleTree, r as Role } from "./vocabulary-DEJ5j4mR.js";
|
|
4
|
+
import { a as PermDock, o as PermDockOptions } from "./permdock-B6Sf4T_S.js";
|
|
5
|
+
import { o as PolicyDocument } from "./hosted-Cmtxogd0.js";
|
|
6
|
+
import { m as ApprovalStore } from "./types-B_tiYvk8.js";
|
|
7
|
+
import { t as InstanceOptions } from "./instance-options-B0KXqTrJ.js";
|
|
8
|
+
import { n as PermDockWrap } from "./wrap-DlJE3gS_.js";
|
|
9
|
+
import { t as JsonSchemaNode } from "./json-schema-BfXgnRNT.js";
|
|
10
|
+
import { i as CatalogEventData, s as CloudEvent } from "./sink-Dvi7YZG_.js";
|
|
10
11
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
11
12
|
//#region src/conditions/refs.d.ts
|
|
12
|
-
type KnownRefField = "id" | "issuer" | "kind" | "tenant" | "team" | "roles" | "plans" | "memberships" | "assurance" | "binding" | "session";
|
|
13
|
+
type KnownRefField = "id" | "issuer" | "kind" | "tenant" | "team" | "roles" | "plans" | "memberships" | "assurance" | "binding" | "session" | "claims";
|
|
13
14
|
type SubjectRef = ConditionRef & { readonly [K in KnownRefField]: SubjectRef; } & {
|
|
14
15
|
readonly [key: string]: SubjectRef;
|
|
15
16
|
};
|
|
16
17
|
declare const principal: SubjectRef;
|
|
17
18
|
declare const context: SubjectRef;
|
|
19
|
+
/**
|
|
20
|
+
* `principal.claims.<path>` for a dot path such as `team_ids` or
|
|
21
|
+
* `attrs.region`, typed `SubjectRef` under `noUncheckedIndexedAccess` and
|
|
22
|
+
* `noPropertyAccessFromIndexSignature`.
|
|
23
|
+
*/
|
|
24
|
+
declare function claim(path: string): SubjectRef;
|
|
18
25
|
//#endregion
|
|
19
26
|
//#region src/core/custom-roles.d.ts
|
|
20
27
|
type CustomRoleDropReason = "unknown-permission" | "outside-ceiling" | "condition-not-allowed" | "unknown-level";
|
|
21
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Why part of a custom role was left out: a permission, or an undeclared
|
|
30
|
+
* include.
|
|
31
|
+
*/
|
|
22
32
|
type CustomRoleDrop = {
|
|
23
33
|
readonly permission: string;
|
|
24
34
|
readonly reason: CustomRoleDropReason;
|
|
@@ -37,10 +47,16 @@ type CustomRoleRename = {
|
|
|
37
47
|
readonly to: string;
|
|
38
48
|
};
|
|
39
49
|
type ResolvedCustomRole = {
|
|
40
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* Declared grants re-targeted to the custom role; conditions and approvals
|
|
52
|
+
* kept.
|
|
53
|
+
*/
|
|
41
54
|
readonly grants: readonly Grant[];
|
|
42
55
|
readonly dropped: readonly CustomRoleDrop[];
|
|
43
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Grants stored under a former key (`definePermissions` `renamed`), resolved
|
|
58
|
+
* to the current one.
|
|
59
|
+
*/
|
|
44
60
|
readonly renamed: readonly CustomRoleRename[];
|
|
45
61
|
};
|
|
46
62
|
type CustomRoleValidation = {
|
|
@@ -61,15 +77,36 @@ type CustomRoleValidation = {
|
|
|
61
77
|
*/
|
|
62
78
|
declare function resolveCustomRole(policy: Policy, role: CustomRole): ResolvedCustomRole;
|
|
63
79
|
type ValidateCustomRoleOptions = {
|
|
64
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* The shared custom roles: a tenant role with one of their names is dropped
|
|
82
|
+
* as `name-taken`.
|
|
83
|
+
*/
|
|
65
84
|
readonly shared?: readonly CustomRole[];
|
|
66
85
|
};
|
|
67
86
|
declare function validateCustomRole(policy: Policy, role: CustomRole, options?: ValidateCustomRoleOptions): CustomRoleValidation;
|
|
87
|
+
/** The outcome of one stored allow entry, `<permission>[@<level>]`. */
|
|
88
|
+
type CustomRoleEntry = {
|
|
89
|
+
readonly ok: true;
|
|
90
|
+
/** The current key, after a `renamed` key resolves. */
|
|
91
|
+
readonly permission: string;
|
|
92
|
+
readonly level?: string;
|
|
93
|
+
} | {
|
|
94
|
+
readonly ok: false;
|
|
95
|
+
readonly cause: "unknown-permission" | "outside-ceiling" | "unknown-level";
|
|
96
|
+
};
|
|
68
97
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
|
|
98
|
+
* Checks one stored allow entry, `<permission>[@<level>]`, the way
|
|
99
|
+
* `permdock_custom_role_entry_problem` does in SQL. `scope` defaults to the
|
|
100
|
+
* first scope; its ceiling is the allows of that scope's assignable roles.
|
|
101
|
+
*/
|
|
102
|
+
declare function parseCustomRoleEntry(policy: Policy, entry: string, options?: {
|
|
103
|
+
readonly scope?: string;
|
|
104
|
+
}): CustomRoleEntry;
|
|
105
|
+
/**
|
|
106
|
+
* The compact JWT form of custom roles for the `memberships[].grants` claim RLS
|
|
107
|
+
* reads in `jwt` mode: role name to entries, where `key` allows, `-key` denies
|
|
108
|
+
* and `@role` includes. Put a team custom role on its team membership. Pass
|
|
109
|
+
* `policy` to write keys stored under a former name as the current key.
|
|
73
110
|
*/
|
|
74
111
|
declare function customRoleClaim(roles: readonly CustomRole[], policy?: Policy): Readonly<Record<string, readonly string[]>>;
|
|
75
112
|
//#endregion
|
|
@@ -87,7 +124,23 @@ declare function emptySnapshot(): Snapshot;
|
|
|
87
124
|
declare function requiresApproval(approval: Grant["approval"] | undefined): boolean;
|
|
88
125
|
//#endregion
|
|
89
126
|
//#region src/core/policy.d.ts
|
|
90
|
-
declare function definePolicy<TUser, TPrincipal extends Principal, const Input extends PermissionTree | PolicyVocabulary, const S extends PolicyScopesInput = PolicyScopesInput>(permissions: Input, options: PolicyOptions<TUser, TPrincipal, S>): Policy<TUser, TPrincipal, VocabularyFromInput<Input
|
|
127
|
+
declare function definePolicy<TUser, TPrincipal extends Principal, const Input extends PermissionTree | PolicyVocabulary, const S extends PolicyScopesInput = PolicyScopesInput>(permissions: Input, options: PolicyOptions<TUser, TPrincipal, S>): Policy<TUser, TPrincipal, VocabularyFromInput<Input>, S>;
|
|
128
|
+
/**
|
|
129
|
+
* The role names a policy declares: the keys of its `defineRoles` vocabulary,
|
|
130
|
+
* else `string`.
|
|
131
|
+
*/
|
|
132
|
+
type RoleNameOf<P> = P extends {
|
|
133
|
+
readonly vocabulary: infer V;
|
|
134
|
+
} ? V extends {
|
|
135
|
+
readonly roles: infer R extends RoleTree;
|
|
136
|
+
} ? R[keyof R]["key"] : string : string;
|
|
137
|
+
/**
|
|
138
|
+
* Whether `value` names a role the policy declares, for a role read as a string
|
|
139
|
+
* from a database or a token. A name it rejects is an unknown role, which
|
|
140
|
+
* grants nothing (`unknown-role`). A tenant's custom roles are not declared;
|
|
141
|
+
* `CustomRoleSource` resolves them.
|
|
142
|
+
*/
|
|
143
|
+
declare function isRoleName<P extends Policy<never>>(policy: P, value: unknown): value is RoleNameOf<P>;
|
|
91
144
|
declare function separationConflicts(policy: Policy, memberships: readonly MembershipFixture[]): readonly SeparationConflict[];
|
|
92
145
|
//#endregion
|
|
93
146
|
//#region src/core/permission-registry.d.ts
|
|
@@ -120,16 +173,22 @@ declare function sqlFunction(name: string, options: {
|
|
|
120
173
|
//#region src/core/memory-sources.d.ts
|
|
121
174
|
declare function memoryEntitlementSource(entries: Readonly<Record<string, readonly string[]>>): EntitlementSource;
|
|
122
175
|
declare function memorySettingsSource(settings: Readonly<Record<string, TenantSettings>>): SettingsSource;
|
|
123
|
-
/**
|
|
176
|
+
/**
|
|
177
|
+
* Memberships keyed by principal id; `tenant` is not a filter, as for a
|
|
178
|
+
* database source.
|
|
179
|
+
*/
|
|
124
180
|
declare function memoryMembershipSource(entries: Readonly<Record<string, readonly Membership[]>>): MembershipSource;
|
|
125
181
|
/** A snapshot held in memory; `set` replaces it and notifies every subscriber. */
|
|
126
182
|
declare function memorySnapshotSource(initial: Snapshot | string): SnapshotSource & {
|
|
127
|
-
set(snapshot: Snapshot | string)
|
|
183
|
+
set: (snapshot: Snapshot | string) => void;
|
|
128
184
|
};
|
|
129
185
|
declare function memoryCustomRoleSource(customRoles: readonly CustomRole[]): CustomRoleSource;
|
|
130
186
|
//#endregion
|
|
131
187
|
//#region src/core/approval-state.d.ts
|
|
132
|
-
/**
|
|
188
|
+
/**
|
|
189
|
+
* The denial detail when an `ApprovalPolicySource` threw or returned an invalid
|
|
190
|
+
* entry.
|
|
191
|
+
*/
|
|
133
192
|
declare const APPROVAL_POLICY_UNAVAILABLE = "approval-policy-unavailable";
|
|
134
193
|
//#endregion
|
|
135
194
|
//#region src/core/memberships.d.ts
|
|
@@ -141,23 +200,26 @@ declare const APPROVAL_POLICY_UNAVAILABLE = "approval-policy-unavailable";
|
|
|
141
200
|
*/
|
|
142
201
|
declare function composeMemberships(sources: readonly MembershipSource[]): MembershipSource;
|
|
143
202
|
/**
|
|
144
|
-
* Trust the memberships the verified token carries, and read `source` only
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
203
|
+
* Trust the memberships the verified token carries, and read `source` only when
|
|
204
|
+
* the token marks them truncated. With `version`, a token minted before the
|
|
205
|
+
* latest membership change is stale for the policy's `fresh` permissions, or
|
|
206
|
+
* with `onStale: 'reread'` has its memberships read from `source` instead.
|
|
148
207
|
*/
|
|
149
208
|
declare function claimsFirst(source: MembershipSource | readonly MembershipSource[], options?: {
|
|
150
209
|
readonly version?: MembershipSource["version"];
|
|
151
210
|
readonly onStale?: "deny" | "reread";
|
|
152
211
|
}): MembershipSource;
|
|
153
|
-
/**
|
|
212
|
+
/**
|
|
213
|
+
* Whether the identity provider owns `membership`: the application must not
|
|
214
|
+
* add, change or remove it.
|
|
215
|
+
*/
|
|
154
216
|
declare function isExternallyManaged(membership: Membership): boolean;
|
|
155
217
|
/**
|
|
156
|
-
* How many principals hold `role` in one scope instance now, from the
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
218
|
+
* How many principals hold `role` in one scope instance now, from the source's
|
|
219
|
+
* member list (`MembershipSource.list`): live memberships of exactly that scope
|
|
220
|
+
* and instance, each principal counted once. The `holders` a `decideRoleChange`
|
|
221
|
+
* with `min`, `max` or `transferOnly` needs. `undefined` when the source cannot
|
|
222
|
+
* list or the read fails, which that check denies.
|
|
161
223
|
*/
|
|
162
224
|
declare function countHolders(source: MembershipSource | readonly MembershipSource[], query: {
|
|
163
225
|
readonly scope: string;
|
|
@@ -168,15 +230,18 @@ declare function countHolders(source: MembershipSource | readonly MembershipSour
|
|
|
168
230
|
}): Promise<number | undefined>;
|
|
169
231
|
//#endregion
|
|
170
232
|
//#region src/core/stripe-entitlements.d.ts
|
|
171
|
-
/**
|
|
233
|
+
/**
|
|
234
|
+
* The part of the Stripe Node SDK this source calls:
|
|
235
|
+
* `stripe.entitlements.activeEntitlements.list`.
|
|
236
|
+
*/
|
|
172
237
|
type StripeEntitlementsClient = {
|
|
173
238
|
readonly entitlements: {
|
|
174
239
|
readonly activeEntitlements: {
|
|
175
|
-
list(params: {
|
|
240
|
+
list: (params: {
|
|
176
241
|
readonly customer: string;
|
|
177
242
|
readonly limit?: number;
|
|
178
243
|
readonly starting_after?: string;
|
|
179
|
-
})
|
|
244
|
+
}) => PromiseLike<{
|
|
180
245
|
readonly data: readonly {
|
|
181
246
|
readonly id: string;
|
|
182
247
|
readonly lookup_key: string;
|
|
@@ -208,14 +273,17 @@ type MemoryEdge = {
|
|
|
208
273
|
readonly expiresAt?: number;
|
|
209
274
|
};
|
|
210
275
|
type MemoryRelationSourceData = {
|
|
211
|
-
/**
|
|
276
|
+
/**
|
|
277
|
+
* Rows per resource: parent pointers, links, restricted flags and relation
|
|
278
|
+
* columns are read from them.
|
|
279
|
+
*/
|
|
212
280
|
readonly rows?: Readonly<Record<string, readonly Readonly<Record<string, unknown>>[]>>;
|
|
213
281
|
/** Edge-table rows per resource and relation. */
|
|
214
282
|
readonly edges?: Readonly<Record<string, Readonly<Record<string, readonly MemoryEdge[]>>>>;
|
|
215
283
|
/**
|
|
216
|
-
* Edge tables as the database holds them, keyed by `edge` name: each row
|
|
217
|
-
*
|
|
218
|
-
*
|
|
284
|
+
* Edge tables as the database holds them, keyed by `edge` name: each row is
|
|
285
|
+
* read through the relation's `object`, `subject`, `expiresAt`, `match` and
|
|
286
|
+
* `groups` columns. A relation whose table is here ignores `edges`.
|
|
219
287
|
*/
|
|
220
288
|
readonly tables?: Readonly<Record<string, readonly Readonly<Record<string, unknown>>[]>>;
|
|
221
289
|
};
|
|
@@ -235,7 +303,10 @@ type HoldingVia = {
|
|
|
235
303
|
readonly kind: "relation";
|
|
236
304
|
readonly resource: string;
|
|
237
305
|
readonly relation: string;
|
|
238
|
-
/**
|
|
306
|
+
/**
|
|
307
|
+
* The instance the relation is held on: the object or one of its
|
|
308
|
+
* ancestors.
|
|
309
|
+
*/
|
|
239
310
|
readonly id: string;
|
|
240
311
|
} | {
|
|
241
312
|
readonly kind: "share";
|
|
@@ -243,7 +314,10 @@ type HoldingVia = {
|
|
|
243
314
|
readonly relation: string;
|
|
244
315
|
readonly id: string;
|
|
245
316
|
readonly expiresAt?: number;
|
|
246
|
-
/**
|
|
317
|
+
/**
|
|
318
|
+
* The group the share names, when the principal holds it as one of its
|
|
319
|
+
* members.
|
|
320
|
+
*/
|
|
247
321
|
readonly group?: RelationGroup;
|
|
248
322
|
};
|
|
249
323
|
type Holder = {
|
|
@@ -253,10 +327,10 @@ type Holder = {
|
|
|
253
327
|
readonly via: readonly HoldingVia[];
|
|
254
328
|
};
|
|
255
329
|
/**
|
|
256
|
-
* Who holds a permission on one object, for share dialogs and access
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
*
|
|
330
|
+
* Who holds a permission on one object, for share dialogs and access reviews.
|
|
331
|
+
* It lists and never grants. `complete: false` means some grantee could not be
|
|
332
|
+
* enumerated (a global role, a plan, a source without `list`, an unavailable
|
|
333
|
+
* relation): holders may be missing, so check with `decide`.
|
|
260
334
|
*/
|
|
261
335
|
type WhoCan = {
|
|
262
336
|
readonly permission: string;
|
|
@@ -264,11 +338,11 @@ type WhoCan = {
|
|
|
264
338
|
readonly complete: boolean;
|
|
265
339
|
};
|
|
266
340
|
/**
|
|
267
|
-
* Who holds `permission` on `resource` for the instance's policy and how
|
|
268
|
-
*
|
|
269
|
-
* `RelationSource.related`. It lists and never grants; `complete: false`
|
|
270
|
-
*
|
|
271
|
-
*
|
|
341
|
+
* Who holds `permission` on `resource` for the instance's policy and how (role,
|
|
342
|
+
* relation or share), from `MembershipSource.list` and
|
|
343
|
+
* `RelationSource.related`. It lists and never grants; `complete: false` means
|
|
344
|
+
* some holders could not be listed. An instance built from a snapshot answers
|
|
345
|
+
* an empty, incomplete list.
|
|
272
346
|
*/
|
|
273
347
|
declare function whoCan(permdock: InstanceHandle, permission: Permission<string, unknown, "instance">, resource: unknown): Promise<WhoCan>;
|
|
274
348
|
//#endregion
|
|
@@ -276,7 +350,10 @@ declare function whoCan(permdock: InstanceHandle, permission: Permission<string,
|
|
|
276
350
|
type SignPolicyDocumentOptions = {
|
|
277
351
|
/** `aud`: the environment URL `cloud().policies` checks it against. */
|
|
278
352
|
readonly audience: string | readonly string[];
|
|
279
|
-
/**
|
|
353
|
+
/**
|
|
354
|
+
* `exp`, a NumericDate; the signer's default (one hour after `iat`) when
|
|
355
|
+
* absent.
|
|
356
|
+
*/
|
|
280
357
|
readonly expiresAt?: number;
|
|
281
358
|
};
|
|
282
359
|
/**
|
|
@@ -292,9 +369,30 @@ type SignSnapshotOptions = {
|
|
|
292
369
|
readonly audience?: string | readonly string[];
|
|
293
370
|
};
|
|
294
371
|
/**
|
|
295
|
-
*
|
|
296
|
-
* `
|
|
297
|
-
|
|
372
|
+
* The claims of a `vnd.permdock.snapshot+jwt` apart from `iss`, `aud` and
|
|
373
|
+
* `jti`.
|
|
374
|
+
*/
|
|
375
|
+
type SnapshotClaims = {
|
|
376
|
+
readonly snapshot: Omit<Snapshot, "issuedAt" | "expiresAt">;
|
|
377
|
+
/** The principal's id; absent for an anonymous snapshot. */
|
|
378
|
+
readonly sub?: string;
|
|
379
|
+
/** `issuedAt` in NumericDate seconds; absent when it is not after the epoch. */
|
|
380
|
+
readonly iat?: number;
|
|
381
|
+
/**
|
|
382
|
+
* `expiresAt` in NumericDate seconds; absent when the snapshot has none, and
|
|
383
|
+
* the signer then sets its default.
|
|
384
|
+
*/
|
|
385
|
+
readonly exp?: number;
|
|
386
|
+
};
|
|
387
|
+
/**
|
|
388
|
+
* The claims `signSnapshot` signs for `snapshot`. `issuedAt` and `expiresAt`
|
|
389
|
+
* become `iat` and `exp` and leave the `snapshot` claim, so the registered
|
|
390
|
+
* claims are the only times a verifier reads.
|
|
391
|
+
*/
|
|
392
|
+
declare function snapshotClaims(snapshot: Snapshot): SnapshotClaims;
|
|
393
|
+
/**
|
|
394
|
+
* Signs `snapshot` as a `vnd.permdock.snapshot+jwt` with the claims
|
|
395
|
+
* `snapshotClaims` answers.
|
|
298
396
|
*/
|
|
299
397
|
declare function signSnapshot(snapshot: Snapshot, signer: TokenSigner, options?: SignSnapshotOptions): Promise<string>;
|
|
300
398
|
/**
|
|
@@ -340,10 +438,9 @@ type ArazzoFinding = {
|
|
|
340
438
|
};
|
|
341
439
|
declare function arazzoFindings(input: ArazzoSimulateInput, tree: PermissionTree | undefined): readonly ArazzoFinding[];
|
|
342
440
|
/**
|
|
343
|
-
* Walks an Arazzo workflow against `permdock`: each step's operation is
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
* snapshot too.
|
|
441
|
+
* Walks an Arazzo workflow against `permdock`: each step's operation is decided
|
|
442
|
+
* as `permdock.simulate` would, and a server instance emits one simulate event
|
|
443
|
+
* for the whole plan. Works on an instance built from a snapshot too.
|
|
347
444
|
*/
|
|
348
445
|
declare function simulateArazzo(permdock: PermDock, input: ArazzoSimulateInput): ArazzoPlan;
|
|
349
446
|
//#endregion
|
|
@@ -357,16 +454,17 @@ declare function localSnapshotManifest(policy: Policy): LocalSnapshotManifest;
|
|
|
357
454
|
//#endregion
|
|
358
455
|
//#region src/core/app.d.ts
|
|
359
456
|
/**
|
|
360
|
-
* How strict `defineApp` is about the services the policy needs. `dev`
|
|
361
|
-
*
|
|
362
|
-
*
|
|
363
|
-
* service the app does not configure, instead of denying at run
|
|
457
|
+
* How strict `defineApp` is about the services the policy needs. `dev` fills in
|
|
458
|
+
* in-process defaults (a memory approval store and a memory limit store) so a
|
|
459
|
+
* new app runs before any infrastructure exists. `prod` throws at startup when
|
|
460
|
+
* a grant needs a service the app does not configure, instead of denying at run
|
|
461
|
+
* time.
|
|
364
462
|
*/
|
|
365
463
|
type AppProfile = "dev" | "prod";
|
|
366
464
|
/**
|
|
367
|
-
* Everything an app wires once and every adapter reads: the data sources,
|
|
368
|
-
*
|
|
369
|
-
*
|
|
465
|
+
* Everything an app wires once and every adapter reads: the data sources, the
|
|
466
|
+
* opt-in features and the services. An adapter's own options win over these,
|
|
467
|
+
* key by key.
|
|
370
468
|
*/
|
|
371
469
|
type AppOptions = InstanceOptions & Pick<PermDockOptions, "settings"> & {
|
|
372
470
|
/** Where approval requests open and resume, for every adapter. */
|
|
@@ -376,10 +474,10 @@ type AppOptions = InstanceOptions & Pick<PermDockOptions, "settings"> & {
|
|
|
376
474
|
//#endregion
|
|
377
475
|
//#region src/app/define-app.d.ts
|
|
378
476
|
/**
|
|
379
|
-
* Binds the app's sources, features and services to `policy`. The result
|
|
380
|
-
*
|
|
381
|
-
*
|
|
382
|
-
*
|
|
477
|
+
* Binds the app's sources, features and services to `policy`. The result is a
|
|
478
|
+
* policy: pass it wherever a policy goes (`createPermDock`, every adapter, the
|
|
479
|
+
* CLI) and each picks up the app definition, with its own options taking
|
|
480
|
+
* precedence. The profile defaults to `prod`.
|
|
383
481
|
*/
|
|
384
482
|
declare function defineApp<TUser, TPrincipal extends Principal, V extends PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options?: AppOptions): Policy<TUser, TPrincipal, V>;
|
|
385
483
|
//#endregion
|
|
@@ -403,20 +501,20 @@ type ShadowMismatch = {
|
|
|
403
501
|
type ShadowOptions = {
|
|
404
502
|
readonly legacy: LegacyCheck;
|
|
405
503
|
/**
|
|
406
|
-
* Permissions PermDock decides; every other check returns the legacy
|
|
407
|
-
*
|
|
504
|
+
* Permissions PermDock decides; every other check returns the legacy answer.
|
|
505
|
+
* `"all"` once every mismatch is resolved; default none.
|
|
408
506
|
*/
|
|
409
507
|
readonly enforce?: readonly Permission[] | "all";
|
|
410
508
|
/** Called for each disagreement; a throw here is ignored. */
|
|
411
509
|
readonly onMismatch?: (mismatch: ShadowMismatch) => void;
|
|
412
510
|
};
|
|
413
511
|
/**
|
|
414
|
-
* Runs PermDock beside the application's existing checks while adopting
|
|
415
|
-
*
|
|
416
|
-
*
|
|
417
|
-
*
|
|
418
|
-
*
|
|
419
|
-
*
|
|
512
|
+
* Runs PermDock beside the application's existing checks while adopting it.
|
|
513
|
+
* Each `can`, `decide`, `decideEach`, `filter` and `assert` asks both; the
|
|
514
|
+
* legacy answer is returned unless the permission is in `enforce`, and every
|
|
515
|
+
* disagreement reaches `onMismatch`. Promote permissions one by one as their
|
|
516
|
+
* mismatches are resolved, then remove the wrap. Pass it as an adapter's `wrap`
|
|
517
|
+
* option, or call it on a core instance.
|
|
420
518
|
*/
|
|
421
519
|
declare function shadowMode(options: ShadowOptions): PermDockWrap;
|
|
422
520
|
//#endregion
|
|
@@ -433,28 +531,41 @@ declare function mayAccess(policy: Policy, user: unknown, permission: Permission
|
|
|
433
531
|
}): boolean;
|
|
434
532
|
//#endregion
|
|
435
533
|
//#region src/core/custom-role-source.d.ts
|
|
436
|
-
/**
|
|
534
|
+
/**
|
|
535
|
+
* Reads custom roles from the application's store, as `customRoleSource` takes
|
|
536
|
+
* them.
|
|
537
|
+
*/
|
|
437
538
|
type CustomRoleReader = {
|
|
438
|
-
/**
|
|
439
|
-
|
|
440
|
-
|
|
539
|
+
/**
|
|
540
|
+
* Every custom role of `tenant`, whether or not anyone in the request holds
|
|
541
|
+
* it.
|
|
542
|
+
*/
|
|
543
|
+
rolesFor: (tenant: string) => CustomRole[] | Promise<CustomRole[]>;
|
|
544
|
+
assignable?: (tenant: string) => string[] | Promise<string[]>;
|
|
441
545
|
/** Platform custom roles (`scope: 'global'`). */
|
|
442
|
-
globalRoles
|
|
546
|
+
globalRoles?: () => CustomRole[] | Promise<CustomRole[]>;
|
|
443
547
|
/** Shared custom roles (`shared: true`), the same for every tenant. */
|
|
444
|
-
sharedRoles
|
|
548
|
+
sharedRoles?: () => CustomRole[] | Promise<CustomRole[]>;
|
|
445
549
|
};
|
|
446
550
|
type CustomRoleSourceOptions = {
|
|
447
|
-
/**
|
|
551
|
+
/**
|
|
552
|
+
* `'all'` (default): read every custom role of each tenant, so
|
|
553
|
+
* `assignableRoles` and `decideRoleChange` see them all.
|
|
554
|
+
*/
|
|
448
555
|
readonly read?: "all";
|
|
449
556
|
} | {
|
|
450
|
-
/**
|
|
557
|
+
/**
|
|
558
|
+
* `'held'`: skip a tenant's read, and the platform read, when every role
|
|
559
|
+
* the subject holds there is declared in `policy`. For requests that
|
|
560
|
+
* never manage roles.
|
|
561
|
+
*/
|
|
451
562
|
readonly read: "held";
|
|
452
563
|
readonly policy: Policy;
|
|
453
564
|
};
|
|
454
565
|
/**
|
|
455
|
-
* A `CustomRoleSource` over a reader that returns every custom role of a
|
|
456
|
-
* It keeps only the roles of the requested tenant. With `read: 'held'`
|
|
457
|
-
* skips a tenant's read, and `globalRoles` and `sharedRoles`, when the
|
|
566
|
+
* A `CustomRoleSource` over a reader that returns every custom role of a
|
|
567
|
+
* tenant. It keeps only the roles of the requested tenant. With `read: 'held'`
|
|
568
|
+
* it skips a tenant's read, and `globalRoles` and `sharedRoles`, when the
|
|
458
569
|
* subject holds only declared roles there.
|
|
459
570
|
*/
|
|
460
571
|
declare function customRoleSource(reader: CustomRoleReader, options?: CustomRoleSourceOptions): CustomRoleSource;
|
|
@@ -472,7 +583,10 @@ type SnapshotForOptions = {
|
|
|
472
583
|
readonly memberships?: readonly Membership[];
|
|
473
584
|
/** The tenant's custom roles, typically from a shared, tagged cache. */
|
|
474
585
|
readonly customRoles?: readonly CustomRole[];
|
|
475
|
-
/**
|
|
586
|
+
/**
|
|
587
|
+
* Per tenant, the role names `CustomRoleSource.assignable` returns; narrows
|
|
588
|
+
* `assignable`.
|
|
589
|
+
*/
|
|
476
590
|
readonly assignable?: Readonly<Record<string, readonly string[]>>;
|
|
477
591
|
/** Plans of the active tenant; replaces `principal.plans`. */
|
|
478
592
|
readonly plans?: readonly string[];
|
|
@@ -482,15 +596,15 @@ type SnapshotForOptions = {
|
|
|
482
596
|
readonly now?: Instant;
|
|
483
597
|
};
|
|
484
598
|
/**
|
|
485
|
-
* Builds the serializable access snapshot for a subject without a request,
|
|
486
|
-
*
|
|
487
|
-
*
|
|
488
|
-
*
|
|
599
|
+
* Builds the serializable access snapshot for a subject without a request, a
|
|
600
|
+
* network call or a cache directive: call it inside the app's own `'use cache:
|
|
601
|
+
* private'` function. Synchronous; the policy's `subject` and `context` mappers
|
|
602
|
+
* must be synchronous too.
|
|
489
603
|
*/
|
|
490
604
|
declare function snapshotFor<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, user: TUser | Subject | null, options?: SnapshotForOptions): Snapshot;
|
|
491
605
|
//#endregion
|
|
492
606
|
//#region src/core/permissions.d.ts
|
|
493
|
-
declare function definePermissions<const Input, PX = never, RX = never>(input: Input, options?: PermissionsOptions<PX, RX>):
|
|
607
|
+
declare function definePermissions<const Input, PX = never, RX = never>(input: Input, options?: PermissionsOptions<PX, RX>): PermissionsOf<Input, PX, RX>;
|
|
494
608
|
//#endregion
|
|
495
609
|
//#region src/core/permission-leaf.d.ts
|
|
496
610
|
/**
|
|
@@ -498,8 +612,12 @@ declare function definePermissions<const Input, PX = never, RX = never>(input: I
|
|
|
498
612
|
* renames and for one that crossed a serialisation boundary.
|
|
499
613
|
*/
|
|
500
614
|
declare function formerKeys(permission: object): readonly string[];
|
|
501
|
-
declare function resource<T, const A extends ActionList = readonly [], const C extends ActionList = readonly []>(schema: StandardSchemaV1<unknown, T>, options?: ResourceOptions<A, C>
|
|
502
|
-
|
|
615
|
+
declare function resource<T, const A extends ActionList = readonly [], const C extends ActionList = readonly [], const N extends string = never>(schema: StandardSchemaV1<unknown, T>, options?: ResourceOptions<A, C> & {
|
|
616
|
+
readonly name?: N;
|
|
617
|
+
}): ResourceInit<T, A, C, N>;
|
|
618
|
+
declare function resource<const A extends ActionList = readonly [], const C extends ActionList = readonly [], const N extends string = never>(options: ResourceOptions<A, C> & {
|
|
619
|
+
readonly name?: N;
|
|
620
|
+
}): ResourceInit<unknown, A, C, N>;
|
|
503
621
|
//#endregion
|
|
504
622
|
//#region src/core/presets.d.ts
|
|
505
623
|
type ReadOnlyMeta = {
|
|
@@ -562,7 +680,10 @@ declare function writable<const A extends ActionList | undefined = undefined, co
|
|
|
562
680
|
//#endregion
|
|
563
681
|
//#region src/core/role-builder.d.ts
|
|
564
682
|
type RoleGrants = readonly (Omit<Grant, "role" | "scope"> | readonly Omit<Grant, "role" | "scope">[])[];
|
|
565
|
-
/**
|
|
683
|
+
/**
|
|
684
|
+
* A role held at a named scope: `on` is checked against `definePolicy({ scopes
|
|
685
|
+
* })`.
|
|
686
|
+
*/
|
|
566
687
|
declare function role<const S extends string>(name: string | Role, grants: RoleGrants, options: RoleOptions<S> & {
|
|
567
688
|
readonly on: S;
|
|
568
689
|
}): RoleBinding<S>;
|
|
@@ -574,7 +695,18 @@ declare function normalizeAssurance(input: AssuranceRequirement | undefined): As
|
|
|
574
695
|
//#endregion
|
|
575
696
|
//#region src/core/grant-builders.d.ts
|
|
576
697
|
declare function allow<T, K extends PermissionKind = PermissionKind>(permission: Permission<string, T, K> | readonly Permission<string, T, K>[], condition?: GrantCondition<T, K>): Omit<Grant, "role" | "scope"> | Omit<Grant, "role" | "scope">[];
|
|
698
|
+
/**
|
|
699
|
+
* Every action of a resource (`permissions.post`), of several, or of the whole
|
|
700
|
+
* tree, unconditionally. Each grant is listed in the policy as if written out,
|
|
701
|
+
* and an action added to the resource later is granted too.
|
|
702
|
+
*/
|
|
703
|
+
declare function allow(permissions: PermissionTree | readonly (Permission | PermissionTree)[]): Omit<Grant, "role" | "scope"> | Omit<Grant, "role" | "scope">[];
|
|
577
704
|
declare function deny<T, K extends PermissionKind = PermissionKind>(permission: Permission<string, T, K> | readonly Permission<string, T, K>[], condition?: GrantCondition<T, K>): Omit<Grant, "role" | "scope"> | Omit<Grant, "role" | "scope">[];
|
|
705
|
+
/**
|
|
706
|
+
* Every action of a resource, of several, or of the whole tree,
|
|
707
|
+
* unconditionally.
|
|
708
|
+
*/
|
|
709
|
+
declare function deny(permissions: PermissionTree | readonly (Permission | PermissionTree)[]): Omit<Grant, "role" | "scope"> | Omit<Grant, "role" | "scope">[];
|
|
578
710
|
//#endregion
|
|
579
711
|
//#region src/core/approval-normalize.d.ts
|
|
580
712
|
declare function normalizeApproval(approval: ApprovalOption | undefined, permission?: string): Grant["approval"];
|
|
@@ -599,7 +731,10 @@ declare function supportAccess<const S extends string>(options: SupportAccessOpt
|
|
|
599
731
|
declare function supportAccess(options: SupportAccessOptions<never>): RoleBinding<"tenant">;
|
|
600
732
|
type ActivateInput = {
|
|
601
733
|
readonly role: string | Role;
|
|
602
|
-
/**
|
|
734
|
+
/**
|
|
735
|
+
* The scope the activation applies in (a declared name or the `tenant` /
|
|
736
|
+
* `team` alias).
|
|
737
|
+
*/
|
|
603
738
|
readonly scope: string;
|
|
604
739
|
readonly id: string;
|
|
605
740
|
/** Ancestor scope ids, keyed by scope name, for a nested-scope activation. */
|
|
@@ -609,30 +744,57 @@ type ActivateInput = {
|
|
|
609
744
|
readonly reason?: string;
|
|
610
745
|
};
|
|
611
746
|
/**
|
|
612
|
-
* Requests a just-in-time role activation. It never writes: a granted
|
|
613
|
-
*
|
|
614
|
-
*
|
|
615
|
-
*
|
|
616
|
-
*
|
|
747
|
+
* Requests a just-in-time role activation. It never writes: a granted decision
|
|
748
|
+
* carries the elevated membership under `elevation` for the app to write.
|
|
749
|
+
* `approval-required` comes back first when the role's `activation` sets
|
|
750
|
+
* `approval`. Fail-closed: an unknown role, an ineligible subject, a missing
|
|
751
|
+
* justification or stale authentication all deny.
|
|
617
752
|
*/
|
|
618
753
|
/**
|
|
619
754
|
* Requests a just-in-time activation of an eligible role for the subject of
|
|
620
755
|
* `permdock`. It never writes: a granted decision carries the elevated
|
|
621
|
-
* membership under `elevation` for the app to write, and
|
|
622
|
-
*
|
|
623
|
-
*
|
|
756
|
+
* membership under `elevation` for the app to write, and `approval-required`
|
|
757
|
+
* comes back first when the role's `activation` sets `approval`. An instance
|
|
758
|
+
* built from a snapshot denies with `unsupported`.
|
|
624
759
|
*/
|
|
625
760
|
declare function activate(permdock: InstanceHandle, input: ActivateInput): Decision;
|
|
626
761
|
//#endregion
|
|
762
|
+
//#region src/core/scope-helpers.d.ts
|
|
763
|
+
/**
|
|
764
|
+
* The canonical form PermDock evaluates one membership in, or `undefined` when
|
|
765
|
+
* it is malformed and grants nothing. `scopes` is the policy's or the catalog's
|
|
766
|
+
* scope list; absent or empty means the implicit `tenant` and `team` pair.
|
|
767
|
+
*/
|
|
768
|
+
declare function normalizeMembership(input: unknown, scopes?: readonly Scope[]): Membership | undefined;
|
|
769
|
+
/**
|
|
770
|
+
* Every well-formed membership of `input` in canonical form; malformed entries
|
|
771
|
+
* are dropped.
|
|
772
|
+
*/
|
|
773
|
+
declare function normalizeMemberships(input: unknown, scopes?: readonly Scope[]): readonly Membership[];
|
|
774
|
+
/**
|
|
775
|
+
* The declared scope `name` stands for: the name itself, or the scope the
|
|
776
|
+
* `tenant` (first) or `team` (second) alias names. `undefined` otherwise.
|
|
777
|
+
*/
|
|
778
|
+
declare function resolveScope(scopes: readonly Scope[] | undefined, name: unknown): string | undefined;
|
|
779
|
+
//#endregion
|
|
627
780
|
//#region src/core/ownership.d.ts
|
|
628
|
-
/**
|
|
781
|
+
/**
|
|
782
|
+
* Who a role change is about: their principal id and their membership in the
|
|
783
|
+
* scope instance.
|
|
784
|
+
*/
|
|
629
785
|
type RoleChangeTarget = {
|
|
630
786
|
readonly id: string;
|
|
631
|
-
/**
|
|
787
|
+
/**
|
|
788
|
+
* The kind of the target's membership in the instance (`staff`, `contact`,
|
|
789
|
+
* ...).
|
|
790
|
+
*/
|
|
632
791
|
readonly via?: string;
|
|
633
792
|
/** The roles the target holds in the instance now. */
|
|
634
793
|
readonly roles?: readonly string[];
|
|
635
|
-
/**
|
|
794
|
+
/**
|
|
795
|
+
* `idp` when the identity provider owns the target's membership: the
|
|
796
|
+
* application cannot change it.
|
|
797
|
+
*/
|
|
636
798
|
readonly managedBy?: "idp";
|
|
637
799
|
};
|
|
638
800
|
type RoleChangeBase = {
|
|
@@ -642,16 +804,15 @@ type RoleChangeBase = {
|
|
|
642
804
|
readonly within?: Readonly<Record<string, string>>;
|
|
643
805
|
readonly target: RoleChangeTarget;
|
|
644
806
|
/**
|
|
645
|
-
* How many principals hold `role` in the instance now, from the
|
|
646
|
-
*
|
|
647
|
-
* `transferOnly` is denied.
|
|
807
|
+
* How many principals hold `role` in the instance now, from the application's
|
|
808
|
+
* store. Without it a role with `min`, `max` or `transferOnly` is denied.
|
|
648
809
|
*/
|
|
649
810
|
readonly holders?: number;
|
|
650
811
|
};
|
|
651
812
|
/**
|
|
652
813
|
* A role held at a named scope instance (`scope` is a declared name or alias
|
|
653
|
-
* and `id` the instance), or a global role: `scope: 'global'` with no `id`.
|
|
654
|
-
*
|
|
814
|
+
* and `id` the instance), or a global role: `scope: 'global'` with no `id`. A
|
|
815
|
+
* global change has no tenant, so `within` and `holders` do not apply to it.
|
|
655
816
|
*/
|
|
656
817
|
type RoleChange = RoleChangeBase & ({
|
|
657
818
|
/** The scope the role is held at (a declared name or alias). */
|
|
@@ -676,12 +837,65 @@ type RoleChangeDecision = {
|
|
|
676
837
|
readonly change: RoleChange;
|
|
677
838
|
readonly denials: readonly Denial[];
|
|
678
839
|
};
|
|
840
|
+
/**
|
|
841
|
+
* The holder-count, membership-kind, exclusivity and `assigns` rules of one
|
|
842
|
+
* role, as the catalog lists them (`CatalogRole`).
|
|
843
|
+
*/
|
|
844
|
+
type RoleRules = {
|
|
845
|
+
readonly key: string;
|
|
846
|
+
readonly min?: number;
|
|
847
|
+
readonly max?: number;
|
|
848
|
+
readonly transferOnly?: boolean;
|
|
849
|
+
readonly assigns?: readonly string[];
|
|
850
|
+
readonly for?: readonly string[];
|
|
851
|
+
readonly exclusiveWith?: readonly string[];
|
|
852
|
+
};
|
|
853
|
+
type RoleChangeCheckInput = {
|
|
854
|
+
readonly change: {
|
|
855
|
+
readonly kind: "assign" | "revoke" | "transfer";
|
|
856
|
+
readonly target: Pick<RoleChangeTarget, "via" | "roles">;
|
|
857
|
+
};
|
|
858
|
+
/**
|
|
859
|
+
* How many principals hold the role in the instance now; without it a role
|
|
860
|
+
* with `min`, `max` or `transferOnly` is denied.
|
|
861
|
+
*/
|
|
862
|
+
readonly holders?: number;
|
|
863
|
+
/**
|
|
864
|
+
* Every declared role: adds the `exclusiveWith` other roles declare against
|
|
865
|
+
* this one, and with `actorRoles` the `assigns` rule.
|
|
866
|
+
*/
|
|
867
|
+
readonly roles?: readonly RoleRules[];
|
|
868
|
+
/**
|
|
869
|
+
* The roles the actor holds at the instance, highest rank first. With `roles`
|
|
870
|
+
* naming any `assigns`, one of them must assign this role.
|
|
871
|
+
*/
|
|
872
|
+
readonly actorRoles?: readonly string[];
|
|
873
|
+
};
|
|
874
|
+
/**
|
|
875
|
+
* `by` names the actor role whose `assigns` allowed the change, `null` when the
|
|
876
|
+
* rule did not apply.
|
|
877
|
+
*/
|
|
878
|
+
type RoleChangeCheck = {
|
|
879
|
+
readonly ok: true;
|
|
880
|
+
readonly by: string | null;
|
|
881
|
+
} | {
|
|
882
|
+
readonly ok: false;
|
|
883
|
+
readonly denials: readonly Denial[];
|
|
884
|
+
};
|
|
885
|
+
/**
|
|
886
|
+
* The rules of a role change that need no subject: `assigns`, `for`,
|
|
887
|
+
* `exclusiveWith`, `min`, `max` and `transferOnly`, from holder counts and the
|
|
888
|
+
* target's roles alone. `decideRoleChange` runs the same function after its
|
|
889
|
+
* actor, tenant and ceiling checks; a service that holds only the catalog calls
|
|
890
|
+
* it with the `CatalogRole` entries.
|
|
891
|
+
*/
|
|
892
|
+
declare function checkRoleChange(role: RoleRules, input: RoleChangeCheckInput): RoleChangeCheck;
|
|
679
893
|
type RoleChangeOptions = {
|
|
680
894
|
/**
|
|
681
|
-
* `true` when the application loaded `change.within` from its own store
|
|
682
|
-
*
|
|
683
|
-
*
|
|
684
|
-
*
|
|
895
|
+
* `true` when the application loaded `change.within` from its own store (the
|
|
896
|
+
* instance's stored parent), not from the request. Without it, a nested
|
|
897
|
+
* instance's tenant comes only from a live membership the actor holds on that
|
|
898
|
+
* instance or under it.
|
|
685
899
|
*/
|
|
686
900
|
readonly trusted?: boolean;
|
|
687
901
|
};
|
|
@@ -690,12 +904,12 @@ type RoleChangeOptions = {
|
|
|
690
904
|
* the instance's own principal; nothing in `change` can stand in for it.
|
|
691
905
|
*/
|
|
692
906
|
/**
|
|
693
|
-
* Whether the subject of `permdock` may assign, revoke or transfer a role
|
|
694
|
-
*
|
|
695
|
-
* `
|
|
696
|
-
*
|
|
697
|
-
* instance's tenant comes from a live membership the subject holds on it,
|
|
698
|
-
*
|
|
907
|
+
* Whether the subject of `permdock` may assign, revoke or transfer a role in
|
|
908
|
+
* one scope instance: `assigns`, the ceiling, `for`, `exclusiveWith`, `min`,
|
|
909
|
+
* `max` and `transferOnly`. It never writes; the application does, and
|
|
910
|
+
* generated RLS triggers re-check the holder counts at commit. A nested
|
|
911
|
+
* instance's tenant comes from a live membership the subject holds on it, or
|
|
912
|
+
* from `change.within` only with `{ trusted: true }`; otherwise
|
|
699
913
|
* `no-membership`. An instance built from a snapshot denies with
|
|
700
914
|
* `unsupported`.
|
|
701
915
|
*/
|
|
@@ -703,17 +917,20 @@ declare function decideRoleChange(permdock: InstanceHandle, change: RoleChange,
|
|
|
703
917
|
//#endregion
|
|
704
918
|
//#region src/core/parse-sink-events.d.ts
|
|
705
919
|
/**
|
|
706
|
-
* Validates one untrusted sink event against its family's schema and returns
|
|
707
|
-
*
|
|
920
|
+
* Validates one untrusted sink event against its family's schema and returns a
|
|
921
|
+
* frozen copy, or `null` for anything else. Never throws.
|
|
708
922
|
*/
|
|
709
923
|
declare function parseSinkEvent(value: unknown): SinkEvent | null;
|
|
710
924
|
/**
|
|
711
925
|
* Validates an untrusted list of sink events, such as a request body a sink
|
|
712
|
-
* receiver read. Each event that fails its schema is dropped, and a value
|
|
713
|
-
*
|
|
926
|
+
* receiver read. Each event that fails its schema is dropped, and a value that
|
|
927
|
+
* is not an array yields no events. Never throws.
|
|
714
928
|
*/
|
|
715
929
|
declare function parseSinkEvents(value: unknown): readonly SinkEvent[];
|
|
716
|
-
/**
|
|
930
|
+
/**
|
|
931
|
+
* Validates the data of a `com.permdock.catalog.*` CloudEvent; `null` when it
|
|
932
|
+
* does not match.
|
|
933
|
+
*/
|
|
717
934
|
declare function parseCatalogEventData(value: unknown): CatalogEventData | null;
|
|
718
935
|
/**
|
|
719
936
|
* Validates one CloudEvent against the closed type list, its `dataschema` and
|
|
@@ -728,7 +945,10 @@ declare function parseCloudEvent(value: unknown): CloudEvent | null;
|
|
|
728
945
|
declare function parseCloudEventBatch(value: unknown): readonly CloudEvent[] | null;
|
|
729
946
|
//#endregion
|
|
730
947
|
//#region src/core/event-schemas.d.ts
|
|
731
|
-
/**
|
|
948
|
+
/**
|
|
949
|
+
* The URL each event family's schema is published at, and its CloudEvents
|
|
950
|
+
* `dataschema`.
|
|
951
|
+
*/
|
|
732
952
|
declare const EVENT_SCHEMA_IDS: {
|
|
733
953
|
readonly decision: "https://permdock.com/schemas/decision-event-v1.json";
|
|
734
954
|
readonly directory: "https://permdock.com/schemas/directory-event-v1.json";
|
|
@@ -762,9 +982,9 @@ declare const SINK_EVENT_SCHEMAS: {
|
|
|
762
982
|
/** The OCSF schema version `toOcsf` emits. */
|
|
763
983
|
declare const OCSF_VERSION = "1.9.0";
|
|
764
984
|
/**
|
|
765
|
-
* An OCSF Authorize Session (class 3003, category Identity and Access
|
|
766
|
-
* API Activity (6003) would fit a per-request decision, but
|
|
767
|
-
* `src_endpoint`, which a decision event does not carry.
|
|
985
|
+
* An OCSF Authorize Session (class 3003, category Identity and Access
|
|
986
|
+
* Management) event. API Activity (6003) would fit a per-request decision, but
|
|
987
|
+
* it requires `api` and `src_endpoint`, which a decision event does not carry.
|
|
768
988
|
*/
|
|
769
989
|
type OcsfAuthorizeSession = {
|
|
770
990
|
readonly class_uid: 3003;
|
|
@@ -822,15 +1042,16 @@ type OcsfAuthorizeSession = {
|
|
|
822
1042
|
};
|
|
823
1043
|
};
|
|
824
1044
|
/**
|
|
825
|
-
* Projects a decision or approval event onto OCSF Authorize Session; the event
|
|
826
|
-
* An event whose `at` does not parse has no OCSF `time`
|
|
1045
|
+
* Projects a decision or approval event onto OCSF Authorize Session; the event
|
|
1046
|
+
* itself is unchanged. An event whose `at` does not parse has no OCSF `time`
|
|
1047
|
+
* and projects to `undefined`.
|
|
827
1048
|
*/
|
|
828
1049
|
declare function toOcsf(event: DecisionEvent): OcsfAuthorizeSession | undefined;
|
|
829
1050
|
/**
|
|
830
1051
|
* An OCSF User Management (class 3007) event for a support-access lifecycle
|
|
831
1052
|
* event: `started` enables the session, `ended` and `revoked` disable it.
|
|
832
|
-
* Support access is high severity, so a SIEM can alert on vendor access.
|
|
833
|
-
*
|
|
1053
|
+
* Support access is high severity, so a SIEM can alert on vendor access. OCSF
|
|
1054
|
+
* 1.9.0 deprecates Account Change (3001) in favour of this class.
|
|
834
1055
|
*/
|
|
835
1056
|
type OcsfUserManagement = {
|
|
836
1057
|
readonly class_uid: 3007;
|
|
@@ -875,35 +1096,53 @@ declare function accessToOcsf(event: AccessEvent): OcsfUserManagement | undefine
|
|
|
875
1096
|
/** The CSV export columns, in order; the header row of every CSV file. */
|
|
876
1097
|
declare const CSV_COLUMNS: readonly ["time", "principal", "actor", "tenant", "permission", "outcome", "matched.role", "via", "denials.reason", "token"];
|
|
877
1098
|
/**
|
|
878
|
-
* One RFC 4180 row for a decision or approval event, without a line
|
|
879
|
-
*
|
|
1099
|
+
* One RFC 4180 row for a decision or approval event, without a line terminator;
|
|
1100
|
+
* join rows with CRLF under a `CSV_COLUMNS` header.
|
|
880
1101
|
*/
|
|
881
1102
|
declare function toCsvRow(event: DecisionEvent): string;
|
|
882
1103
|
//#endregion
|
|
883
1104
|
//#region src/core/catalog-fingerprint.d.ts
|
|
884
1105
|
/**
|
|
885
|
-
* The catalog v1 fingerprint: the `sha-256:` digest of its RFC 8785 JSON
|
|
886
|
-
*
|
|
887
|
-
* call sites
|
|
1106
|
+
* The catalog v1 fingerprint: the `sha-256:` digest of its RFC 8785 JSON
|
|
1107
|
+
* without `generatedAt`, `generator`, `fingerprint` and every
|
|
1108
|
+
* `permissions[].usages`, so neither the CLI version, the clock nor call sites
|
|
1109
|
+
* change it.
|
|
888
1110
|
*/
|
|
889
1111
|
declare function catalogFingerprint(catalog: unknown): string;
|
|
890
1112
|
//#endregion
|
|
1113
|
+
//#region src/core/canonical-json.d.ts
|
|
1114
|
+
/**
|
|
1115
|
+
* RFC 8785 (JCS) output for I-JSON input: keys sorted by UTF-16 code units,
|
|
1116
|
+
* ECMAScript number and string serialisation, no whitespace. `undefined`
|
|
1117
|
+
* members are dropped. Outside I-JSON, Dates become ISO strings, bigints
|
|
1118
|
+
* `"<n>n"`, and a repeated object on the current path `"[Circular]"`, so any
|
|
1119
|
+
* validated row serialises.
|
|
1120
|
+
*/
|
|
1121
|
+
declare function canonicalJson(value: unknown): string;
|
|
1122
|
+
//#endregion
|
|
1123
|
+
//#region src/core/sha256.d.ts
|
|
1124
|
+
/**
|
|
1125
|
+
* The one digest notation: `sha-256:` plus the unpadded base64url SHA-256 of
|
|
1126
|
+
* `text`. An RFC 9651 sf-token, so it fits a structured header as is.
|
|
1127
|
+
*/
|
|
1128
|
+
declare function sha256Digest(text: string): string;
|
|
1129
|
+
//#endregion
|
|
891
1130
|
//#region src/core/delegation.d.ts
|
|
892
1131
|
type DelegatedPermission = Pick<Permission, "scope" | "resource" | "action">;
|
|
893
1132
|
/**
|
|
894
1133
|
* Whether a delegated caller may use a permission its principal holds, through
|
|
895
|
-
* OAuth `scopes`, RFC 9396 `authorizationDetails` or GNAP `access`.
|
|
896
|
-
*
|
|
1134
|
+
* OAuth `scopes`, RFC 9396 `authorizationDetails` or GNAP `access`. `undefined`
|
|
1135
|
+
* means covered; otherwise the denial reason `decide` would add.
|
|
897
1136
|
*/
|
|
898
1137
|
declare function coveredByDelegation(permission: DelegatedPermission, delegation: Delegation | undefined, resourceId?: string, hasActor?: boolean): DenialReason | undefined;
|
|
899
1138
|
/**
|
|
900
1139
|
* The permission keys the policy's delegations let `subject.actor` use for
|
|
901
1140
|
* `subject.principal` right now: the union over every active delegation whose
|
|
902
|
-
* `to` matches the actor and whose `from` the principal holds. `undefined`
|
|
903
|
-
*
|
|
904
|
-
*
|
|
905
|
-
*
|
|
1141
|
+
* `to` matches the actor and whose `from` the principal holds. `undefined` when
|
|
1142
|
+
* none applies, so the call falls back to the token delegation alone. An actor
|
|
1143
|
+
* with `readOnly: true` gets only each delegation's read-only keys. Attenuation
|
|
1144
|
+
* only: a key here still needs a matching allow and no deny.
|
|
906
1145
|
*/
|
|
907
1146
|
declare function delegatedPermissions(delegations: readonly PolicyDelegation[] | undefined, subject: Subject, heldRoles: ReadonlySet<string>, now: number): ReadonlySet<string> | undefined;
|
|
908
1147
|
//#endregion
|
|
909
|
-
export {
|
|
1148
|
+
export { resource as $, listPermissions as $t, RoleChangeCheckInput as A, HoldingVia as At, ActivateInput as B, countHolders as Bt, parseCatalogEventData as C, SnapshotClaims as Ct, parseSinkEvents as D, SignPolicyDocumentOptions as Dt, parseSinkEvent as E, snapshotFromClaims as Et, checkRoleChange as F, memoryRelationSource as Ft, allow as G, memoryMembershipSource as Gt, breakGlass as H, APPROVAL_POLICY_UNAVAILABLE as Ht, decideRoleChange as I, StripeEntitlementsClient as It, role as J, sqlFunction as Jt, deny as K, memorySettingsSource as Kt, normalizeMembership as L, stripeEntitlementSource as Lt, RoleChangeOptions as M, whoCan as Mt, RoleChangeTarget as N, MemoryEdge as Nt, RoleChange as O, signPolicyDocument as Ot, RoleRules as P, MemoryRelationSourceData as Pt, formerKeys as Q, isPermission as Qt, normalizeMemberships as R, claimsFirst as Rt, SINK_EVENT_SCHEMAS as S, principal as Sn, SignSnapshotOptions as St, parseCloudEventBatch as T, snapshotClaims as Tt, supportAccess as U, memoryCustomRoleSource as Ut, activate as V, isExternallyManaged as Vt, normalizeApproval as W, memoryEntitlementSource as Wt, readable as X, findPermission as Xt, crud as Y, opaque as Yt, writable as Z, getResource as Zt, DECISION_EVENT_SCHEMA as _, parseCustomRoleEntry as _n, ArazzoSimulateInput as _t, catalogFingerprint as a, requiresApproval as an, customRoleSource as at, EVENT_SCHEMA_IDS as b, claim as bn, simulateArazzo as bt, OCSF_VERSION as c, parseSnapshot as cn, ShadowMismatch as ct, accessToOcsf as d, CustomRoleEntry as dn, defineApp as dt, mergePermissions as en, definePermissions as et, toOcsf as f, CustomRoleRename as fn, AppOptions as ft, CREDENTIAL_EVENT_SCHEMA as g, customRoleClaim as gn, ArazzoPlan as gt, CATALOG_EVENT_SCHEMA as h, ValidateCustomRoleOptions as hn, ArazzoFinding as ht, canonicalJson as i, separationConflicts as in, CustomRoleSourceOptions as it, RoleChangeDecision as j, WhoCan as jt, RoleChangeCheck as k, Holder as kt, OcsfAuthorizeSession as l, CustomRoleDrop as ln, ShadowOptions as lt, AUTOMATION_EVENT_SCHEMA as m, ResolvedCustomRole as mn, localSnapshotManifest as mt, delegatedPermissions as n, definePolicy as nn, snapshotFor as nt, CSV_COLUMNS as o, emptySnapshot as on, mayAccess as ot, ACCESS_EVENT_SCHEMA as p, CustomRoleValidation as pn, AppProfile as pt, normalizeAssurance as q, memorySnapshotSource as qt, sha256Digest as r, isRoleName as rn, CustomRoleReader as rt, toCsvRow as s, fromSnapshot as sn, LegacyCheck as st, coveredByDelegation as t, RoleNameOf as tn, SnapshotForOptions as tt, OcsfUserManagement as u, CustomRoleDropReason as un, shadowMode as ut, DELIVERY_EVENT_SCHEMA as v, resolveCustomRole as vn, ArazzoStepResult as vt, parseCloudEvent as w, signSnapshot as wt, MEMBERSHIP_EVENT_SCHEMA as x, context as xn, deliveryEvent as xt, DIRECTORY_EVENT_SCHEMA as y, validateCustomRole as yn, arazzoFindings as yt, resolveScope as z, composeMemberships as zt };
|