permdock 0.7.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 +1 -3
- package/dist/a2a/index.d.ts +7 -7
- package/dist/a2a/index.js +8 -8
- 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-D-feE7BE.js → adoption-scan-BLs67P1l.js} +5 -5
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +19 -13
- package/dist/ai-sdk/index.js +6 -6
- 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-K0faOLFp.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
- package/dist/approvals/index.d.ts +4 -4
- package/dist/approvals/index.js +6 -6
- package/dist/{approvals-CMRfsbBh.js → approvals-DnIBTuXE.js} +66 -42
- package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
- package/dist/{arazzo-ClrF3PVb.js → arazzo-3RhGfkAK.js} +2 -2
- package/dist/{arazzo-rdeJ8n1J.js → arazzo-B5-ulWif.js} +6 -6
- package/dist/{args-CC3OwyHW.js → args-0FrVs5EH.js} +14 -7
- package/dist/astro/index.d.ts +30 -12
- package/dist/astro/index.js +2 -2
- package/dist/{audience-BrMs8c4o.js → audience-BAkBDMqn.js} +8 -8
- package/dist/{auth-CscUX8Sy.js → auth--yPyZNgr.js} +19 -7
- package/dist/authzen/index.d.ts +34 -28
- package/dist/authzen/index.js +23 -20
- package/dist/{automation-DOtAFWdy.d.ts → automation-DqEoWHBc.d.ts} +42 -32
- package/dist/{automation-ySsxp_Yp.js → automation-x3KEUusw.js} +22 -21
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +13 -7
- package/dist/better-supabase/index.d.ts +357 -227
- package/dist/better-supabase/index.js +219 -140
- package/dist/{bind-JDuvxjuW.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
- package/dist/{bind-D1nO6fiC.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-DxE7czo9.js → build-instance-CNWaYJyr.js} +3 -3
- package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-D4UC9TTW.d.ts → capability-ChuiONQU.d.ts} +41 -29
- package/dist/{casbin-BW9pS47J.js → casbin-H0rKxBx2.js} +16 -8
- package/dist/{casbin-BHijLuHY.js → casbin-cbSbhT_k.js} +2 -2
- package/dist/{casl-CmJlgziS.js → casl-C4OINZHI.js} +2 -2
- package/dist/{casl-UbI8v-Wq.js → casl-CHHoCldP.js} +19 -10
- package/dist/catalog/index.d.ts +51 -30
- package/dist/catalog/index.js +18 -15
- package/dist/{catalog-D69WhFii.js → catalog-BFpz2EmT.js} +20 -19
- package/dist/{catalog-BaMQfQ6Y.js → catalog-DCspHDc8.js} +3 -3
- package/dist/{catalog-doc-CV9s6B1S.js → catalog-doc-DjMKzJp9.js} +28 -14
- package/dist/{catalog-fingerprint-C144oW4M.js → catalog-fingerprint-e6aCWosn.js} +18 -14
- package/dist/catalog-mRQQQhNK.js +1 -0
- package/dist/catalog-operations-Dadrl7Z-.js +60 -0
- package/dist/{challenge-nGWma08S.js → challenge-DImNcR7B.js} +48 -27
- 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-BC_0mPIq.js → checks-CGkP3Z7A.js} +4 -1
- 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 +84 -52
- package/dist/cloud/index.js +53 -39
- package/dist/{cloud-CO8pYtwr.js → cloud-BFlGMaak.js} +4 -5
- package/dist/{codemod-i4N2BhDc.js → codemod-DLQ9Zpo4.js} +3 -4
- package/dist/{codemod-BP6n8N9L.js → codemod-DWSN2erG.js} +523 -201
- package/dist/collect-B5BL3klN.js +1 -0
- package/dist/{collect-BaWeMjwV.js → collect-B7ZFAJU3.js} +26 -63
- package/dist/{collect-DNm3oKOk.js → collect-Bzv3le0A.js} +4 -5
- 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-COM2VKuN.d.ts → compile-BFzysW3o.d.ts} +36 -12
- package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BNdVf7X2.js → completion-saoYiRFO.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-DGZzMV1B.js → config-DBeXXmBF.js} +2 -2
- package/dist/{config-report-Cm7UITNA.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-_VCSsdtD.js → connector-schema-CYLQNMYq.js} +3 -2
- package/dist/{context--uM9V3Ui.js → context-BnIzxTNE.js} +4 -3
- package/dist/convex/index.d.ts +13 -7
- package/dist/convex/index.js +9 -6
- package/dist/{core-B5-w6Kw9.js → core-H-mbhpZc.js} +26 -20
- package/dist/{core-CQkE8Esr.d.ts → core-hWIARPDz.d.ts} +49 -22
- package/dist/{create-UTnUVETj.d.ts → create-BSNrVuxh.d.ts} +70 -37
- package/dist/{create-B2-CQqCI.d.ts → create-BVq1lNQE.d.ts} +49 -28
- package/dist/{create-QHuuPw3q.d.ts → create-CM1FciYG.d.ts} +37 -29
- package/dist/{create-Cb86Z8Im.js → create-Cq4Uox0f.js} +10 -7
- package/dist/{create-DJrlhEp9.js → create-_noSrY1T.js} +15 -21
- package/dist/{credential-CIM7wHwA.js → credential-CyyyvCsL.js} +41 -38
- package/dist/{credentials-BpuTwd7a.js → credentials-CdDxp7jN.js} +6 -6
- package/dist/{deciding-columns-DRo2QM6E.js → deciding-columns-NB4wcyBf.js} +2 -2
- package/dist/{delegation-C5rOdTp5.js → delegation-CDB6_keF.js} +31 -22
- package/dist/delivery/index.d.ts +4 -4
- package/dist/delivery/index.js +5 -5
- package/dist/{delivery-rwOKLWRm.js → delivery-BupfvJIV.js} +34 -22
- package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
- package/dist/denied-text-CHNlVInN.d.ts +22 -0
- package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
- package/dist/{describe-O0SwYIK8.d.ts → describe-ByS9LgHK.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-Btr1c1Ow.js → diff-CN8IYhC_.js} +2 -2
- package/dist/{diff-DzT-xD13.js → diff-iZWV65nC.js} +22 -13
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BU1szn63.js → doctor-CHD1M9R5.js} +287 -135
- package/dist/{doctor-BoK_y0KO.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-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
- package/dist/{errors-B_Qg9D3e.d.ts → errors-zi_4T-rx.d.ts} +22 -6
- package/dist/{evaluate-B_oqFbWC.js → evaluate-Dd8Ta0Ie.js} +140 -78
- package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
- package/dist/{evaluations-BCddEOfO.d.ts → evaluations-z8dQFDaN.d.ts} +11 -5
- 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-CuhyYwC1.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
- package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-JL43jD3E.js} +14 -11
- package/dist/fields-D0vUI6dq.js +498 -0
- package/dist/{files-acUbNwWt.js → files-B3AA05f1.js} +8 -5
- package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
- package/dist/{fixtures-BTMW6zgU.js → fixtures-A1_sp_tR.js} +15 -6
- package/dist/{flags-aaeRAdiD.js → flags-DXjoTVbS.js} +2 -2
- package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
- package/dist/{from-snapshot-Bz469dIh.js → from-snapshot-DCakWRsr.js} +18 -15
- package/dist/gen-B5kvbAoZ.js +58 -0
- package/dist/gen-DWCYcMQM.js +827 -0
- package/dist/{generate-3FNO5P5Q.js → generate-CRVV5V7l.js} +14 -8
- package/dist/generate-CezbCaTI.js +275 -0
- package/dist/{grantee-BrRANrpT.js → grantee-Dke-9rd1.js} +4 -4
- package/dist/{grantee-conditions-C6P1Tvol.js → grantee-conditions-BrYPe-w0.js} +12 -12
- package/dist/{grantee-match-0RtHWQDx.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-DY3vXuGs.js → helpers-DJicaG6f.js} +40 -28
- package/dist/hono/index.d.ts +16 -10
- package/dist/hono/index.js +5 -5
- package/dist/{hosted-BmjzxQhp.d.ts → hosted-Cmtxogd0.d.ts} +33 -21
- package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -21
- package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
- package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
- package/dist/{http-Ca3Sr5x1.js → http-DOL33cO0.js} +11 -8
- package/dist/{import-Bz0GefWg.js → import-CST57XLp.js} +64 -51
- package/dist/{import-DB2EG_iy.js → import-_YqhhwvX.js} +6 -6
- package/dist/{index-BSfRl0hZ.d.ts → index-B8s204GL.d.ts} +64 -52
- package/dist/{index-DH9DUDEM.d.ts → index-BT5-1VsX.d.ts} +54 -30
- package/dist/{index-BTkwrK7v.d.ts → index-BW_0MZOS.d.ts} +282 -172
- package/dist/{index-CMiPH2Tv.d.ts → index-BhxEUY9J.d.ts} +64 -37
- package/dist/{index-DLwcuCN_.d.ts → index-Bv5iXPqU.d.ts} +51 -30
- package/dist/{index-BE8y3moU.d.ts → index-_9UiQIkt.d.ts} +127 -82
- package/dist/index.d.ts +22 -22
- package/dist/index.js +33 -33
- package/dist/{init-5TXNji88.js → init-Dz_PsHdv.js} +5 -5
- package/dist/{init-B-4t1NzC.js → init-cE3A8aXq.js} +10 -10
- package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
- package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot--JWiTrvO.js} +75 -55
- 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 +57 -27
- package/dist/jwt/index.js +24 -21
- package/dist/{kernel-DVExUwkp.js → kernel-C-fYydV2.js} +32 -23
- 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-DxroEzH1.js → load-DjSU5KXO.js} +6 -6
- package/dist/load-Dm0pSYH3.js +1 -0
- package/dist/{login-ClSJh5t5.js → login-D-8tMqzo.js} +4 -4
- package/dist/{login-WC9HPJpU.js → login-DplQ0s84.js} +16 -9
- package/dist/{manifest-Dv6q4i5s.js → manifest-Cgiq5oqc.js} +49 -38
- package/dist/{manifest-BVhExYhw.d.ts → manifest-CzzWtnAb.d.ts} +126 -31
- package/dist/{manifest-schema-Cv492Qev.js → manifest-schema-2r37XRhD.js} +44 -3
- package/dist/{manifest-B79YuF2T.js → manifest-wg8WkkpD.js} +6 -6
- package/dist/{map-claims-etGIS_Dv.js → map-claims-BNWCJtmP.js} +14 -8
- package/dist/{map-error-BQGyDm_M.js → map-error-pasIGqMT.js} +7 -7
- package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
- package/dist/mcp/index.d.ts +114 -61
- package/dist/mcp/index.js +70 -40
- package/dist/{migrate-Dodel0IJ.js → migrate-B7oP_sQU.js} +35 -17
- 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 +51 -30
- package/dist/openapi/index.js +2 -2
- package/dist/{openapi-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
- package/dist/{openapi-DMocl1bh.js → openapi-CBZUhA3l.js} +4 -5
- package/dist/{openapi-ztVaux6j.js → openapi-VeHHU2l9.js} +23 -14
- package/dist/{operation-findings-kRcEp8lE.js → operation-findings-CXtFzlKJ.js} +3 -3
- package/dist/{operations-BNLes61x.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-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/{output-DgSDLrta.js → output-tkju6U7R.js} +9 -5
- package/dist/ownership-B4L59T9u.js +1054 -0
- package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
- package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
- package/dist/{parse-local-manifest-T1Q8X3A2.js → parse-local-manifest-DEiCF4ah.js} +19 -7
- 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 +20 -13
- package/dist/{peer-DOzzMfZL.js → peer-C9LvBCcb.js} +1 -1
- package/dist/{peer-12Q5I_RH.js → peer-Q0fuZ6hx.js} +9 -3
- package/dist/{permdock-Dco6dyCK.d.ts → permdock-B6Sf4T_S.d.ts} +253 -129
- package/dist/{permdock-BfWEeMqk.js → permdock-L-_I_3zP.js} +59 -35
- package/dist/{permission-registry-DpPtSKNZ.js → permission-registry-B8tYxPIt.js} +23 -10
- package/dist/{permission-types-DhNEmoRG.d.ts → permission-types-CAY-GU7e.d.ts} +127 -41
- package/dist/{permissions-CoqCOfJ3.d.ts → permissions-Bx6UI8n1.d.ts} +6 -3
- package/dist/{permissions-CyH2MV_B.js → permissions-CVXmRILq.js} +3 -3
- package/dist/{permissions-DArULThq.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-5h8NgMQJ.js → pkce-CnmmYqUZ.js} +1 -1
- package/dist/{policy-B7dg_yzu.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
- package/dist/{policy-DaJy4nK4.js → policy-CLQ8__GF.js} +43 -23
- package/dist/{policy-from-catalog-DFWYkNdu.js → policy-from-catalog-CJgOm6aq.js} +28 -25
- package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
- package/dist/{policy-types-B-F-qAZk.d.ts → policy-types-CCiDRZBH.d.ts} +738 -349
- package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
- package/dist/{postgrest-r5faDIzD.js → postgrest-D4nuPXIQ.js} +52 -33
- package/dist/{postgrest-CYacM_u7.d.ts → postgrest-DicQyqm-.d.ts} +54 -35
- package/dist/{powersync-53ryOZip.js → powersync-DHNQX06W.js} +127 -69
- package/dist/{powersync-13odBwiM.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-CHTbd-DQ.js → preset-BjLzeFpp.js} +56 -32
- 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-DwtVemER.js → prompt-BYc6drYW.js} +4 -1
- package/dist/protected-action-BE7N_Luo.d.ts +58 -0
- package/dist/protected-action-DUYqb-Ma.js +80 -0
- package/dist/{protected-DXE3cQYg.js → protected-action-QEA8arRB.js} +48 -14
- package/dist/{provider-BQsTYYy0.js → provider-C55OGXJ7.js} +5 -4
- package/dist/{provider-Csk-THAn.d.ts → provider-DXfq5c2d.d.ts} +1 -1
- package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/pull-B65ndFNZ.js +1 -0
- package/dist/{pull-CN5OLxrF.js → pull-CwpGaQSi.js} +12 -11
- package/dist/{push-tVdG8dUL.js → push-DgssgzkK.js} +19 -13
- package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
- package/dist/{pushed-policy-CmYeSQqq.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 +94 -55
- package/dist/react-native/index.js +200 -61
- package/dist/{refs-CNJBiTFo.js → refs-C8BKxc_e.js} +2 -2
- 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-DCDD_ZfL.d.ts → replay-DNftIb_R.d.ts} +1 -1
- package/dist/{request-context-BykKLmyE.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-Wj6dkyDE.js → retire-B2xffQgY.js} +15 -6
- package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
- package/dist/{rls-CxBZb4rZ.js → rls-CNEH2_BG.js} +299 -124
- package/dist/{rls-Ck_PocSp.js → rls-Ca8Jz9b5.js} +13 -6
- package/dist/{role-builder-C1VJzvcr.js → role-builder-BK2-T6oD.js} +41 -20
- package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
- package/dist/{rpc-Bk1bE-ch.js → rpc-fNqAIqQk.js} +8 -5
- package/dist/{run-uLD2aWuO.js → run-Bz26OTfO.js} +26 -23
- package/dist/run-D-JE8QWb.js +1 -0
- package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-DbWI9f99.d.ts} +29 -14
- package/dist/{run-ticket-B5d_63Ma.js → run-ticket-Dv7aF7Dk.js} +9 -9
- package/dist/{runtime-Vif3_-zf.js → runtime-BGnrOkVH.js} +5 -2
- package/dist/{saas-Az_Kz-4D.js → saas-iWnUdwCt.js} +42 -29
- package/dist/{scan-DSljDE1Y.js → scan-DCj1KQfn.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-gIcCx7zM.js → schema-Dst9I9Gs.js} +8 -4
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +2 -2
- package/dist/{scim-C7JYhySg.js → scim-D8YupzX1.js} +2 -2
- package/dist/{scim-YNieBO1U.js → scim-jJBJ7g1Z.js} +33 -15
- package/dist/{scopes-BHsc-wp-.js → scopes-0Up_UA2t.js} +41 -23
- package/dist/server/index.d.ts +11 -11
- package/dist/server/index.js +12 -12
- package/dist/{server-Bnga6I50.js → server-3cVlTLde.js} +31 -31
- package/dist/{server-types-C4gZUEZy.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
- package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
- package/dist/{shared-fMKOv8hP.js → shared-Afctg7B0.js} +65 -32
- package/dist/{shared-C8LjUdVU.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-Cp_Eot9W.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
- package/dist/{skills-Dcjw9_1C.js → skills-Bjj7BNEQ.js} +12 -8
- package/dist/{skills-g_3BS9NC.js → skills-OuoMR49L.js} +3 -3
- package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
- package/dist/{snapshot-cache-DT2Kx1F8.js → snapshot-cache-Bx_4xC_6.js} +14 -11
- package/dist/solid/index.d.ts +55 -16
- 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-DEEuGb8S.d.ts → sources-B1Os_YUu.d.ts} +126 -53
- package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
- package/dist/{sql-B96movIM.js → sql-0WjxIp9g.js} +28 -7
- package/dist/{sql-CDEPCA0g.d.ts → sql-B80DFdpG.d.ts} +2 -2
- package/dist/{src-DLFrtrrC.js → src-DZ0l9UAg.js} +190 -100
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +47 -35
- package/dist/{standard-webhooks-B_qRg0ws.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-DSP9oGvh.js → store-RNFvaJJv.js} +32 -26
- package/dist/{store-options-B_poyYvg.js → store-options-Dil3lraY.js} +105 -15
- package/dist/stores-C0Kta5Ft.d.ts +59 -0
- package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{stream-2Vwhl7Er.d.ts → stream-ltuLdtTG.d.ts} +4 -3
- package/dist/{style-Ds1gNm77.js → style-DblOtSga.js} +1 -1
- package/dist/{style-Cqo7-73x.js → style-Ds11Hmk4.js} +2 -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 -38
- package/dist/supabase/index.js +5 -5
- package/dist/supabase/middleware.d.ts +19 -13
- package/dist/supabase/middleware.js +7 -7
- package/dist/{supabase--0aJdLEd.js → supabase-BL1qJzzY.js} +79 -35
- package/dist/{supabase-Bqp7iIY2.js → supabase-D39cuGPt.js} +3 -3
- package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-B-yXnzUl.js} +175 -196
- package/dist/supabase-hook-H-MtE9Wd.js +1 -0
- package/dist/{supautils-MESd81bF.js → supautils-BU-pAEpf.js} +166 -47
- package/dist/{support-session-Cna49-3f.js → support-session-BsmPCbz8.js} +21 -21
- 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-Z2LpxsGa.js → tables-DeMNEy6V.js} +641 -1104
- 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-CmeBQ6Nv.js → tenancy-5d1zVBvK.js} +25 -19
- package/dist/terminal/index.d.ts +23 -14
- package/dist/terminal/index.js +17 -20
- package/dist/testing/core.d.ts +1 -1
- package/dist/testing/core.js +1 -1
- package/dist/testing/fixtures/index.d.ts +8 -5
- package/dist/testing/fixtures/index.js +78 -17
- package/dist/testing/index.d.ts +224 -141
- package/dist/testing/index.js +299 -234
- 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-DhITNCnD.js → text-diff-BtfSmdUo.js} +2 -2
- package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
- package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
- package/dist/{token-2qYDvXz2.js → token-DC9EQiet.js} +14 -12
- package/dist/{tool-refusal-reAhIzdl.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-DBHftjgS.d.ts → types-AMJ5qoU_.d.ts} +45 -33
- package/dist/{types-CfiKC5aN.d.ts → types-B2mlGuhW.d.ts} +14 -11
- package/dist/{types-D3A19w4A.d.ts → types-B4uqKDnp.d.ts} +22 -13
- package/dist/{types-CQVEQawv.d.ts → types-BJk0BKRX.d.ts} +24 -14
- package/dist/types-B_d_g7T3.d.ts +262 -0
- package/dist/{types-DC44-hqb.d.ts → types-B_tiYvk8.d.ts} +59 -32
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-BWZybqs9.d.ts → types-DC1Loeh3.d.ts} +381 -202
- package/dist/{types-CIeZcG8v.d.ts → types-DHKPcqzr.d.ts} +2 -2
- package/dist/{types-cTos-H7p.d.ts → types-DjuMBNF9.d.ts} +68 -32
- package/dist/{types-CeIscIKp.d.ts → types-HzqOtvsJ.d.ts} +23 -12
- package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-BfVmNJO5.d.ts → types-ah9NlU6j.d.ts} +128 -50
- package/dist/{types-DXmwu78Z.d.ts → types-djVzLlIV.d.ts} +31 -14
- package/dist/{types-g7Oy6Zg4.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-Bybmck7f.js → usage-CxEzS4ey.js} +50 -26
- package/dist/{usage-CDaLXCfL.js → usage-ab0PdusX.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-CQpoquwj.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-pe8rL_Qw.js → verify-DZeqoWu5.js} +148 -487
- package/dist/version-DMQ0dnN5.js +48 -0
- package/dist/version-DizhmD72.js +1 -0
- package/dist/{views-BB8E9dTP.js → views-CD8wuL4Z.js} +19 -6
- package/dist/{vocabulary-Bg3eeT2H.d.ts → vocabulary-DEJ5j4mR.d.ts} +7 -4
- package/dist/vue/index.d.ts +71 -22
- package/dist/vue/index.js +50 -13
- package/dist/{waiter-DwEyouan.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-C-4VmFlL.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-wq2coopv.js → where-scope-DlCdCM_8.js} +24 -18
- package/dist/{who-can-BwNsI_Js.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-CiSc_KCq.js → wrap-B2wziJI_.js} +4 -4
- package/dist/{wrap-B6R0cMRL.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
- package/package.json +7 -7
- package/schemas/catalog-v1.json +3 -0
- package/schemas/supabase-manifest-v1.json +33 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
- package/skills/permdock-data/references/queries-and-rls.md +2 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -2
- package/skills/permdock-wire/references/adapters.md +14 -22
- package/dist/catalog-BCCjSAdH.js +0 -1
- package/dist/collect-k_Dulxr5.js +0 -1
- package/dist/config-CoQHDrDi.js +0 -166
- package/dist/denied-text-D4qkEtFz.d.ts +0 -19
- package/dist/fields-ClcQLrVc.js +0 -238
- package/dist/generate-CNU1pIOo.js +0 -171
- package/dist/headers-BIjfMaoC.js +0 -8
- package/dist/headers-CIbDTUTK.d.ts +0 -7
- package/dist/load-DrMHXzgN.js +0 -1
- package/dist/output-files-DPAY7-GX.js +0 -1
- package/dist/package-root-Dk_ETdkp.js +0 -31
- package/dist/parse-local-manifest-e4mdwAKd.d.ts +0 -10
- package/dist/policies-B2lZIurj.js +0 -295
- package/dist/powersync-CExtTLyA.js +0 -1
- package/dist/problem-details-Tcfmj3bV.d.ts +0 -7
- package/dist/protected-BwZYL1X_.d.ts +0 -39
- package/dist/pull-Cty6Ovyu.js +0 -1
- package/dist/run-Bz7DXGEv.js +0 -1
- package/dist/stores-BAZwSYZA.d.ts +0 -31
- package/dist/supabase-hook-DJxC4PoP.js +0 -1
- package/dist/types-CKV71kKh.d.ts +0 -172
- package/dist/usage-y-kBNdqs.js +0 -1
- package/dist/version-CEbQ5UeM.js +0 -18
- package/dist/version-DXkYUISx.js +0 -1
- package/dist/watch-Bd9mx3rd.js +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { gn as Approver } from "./policy-types-
|
|
1
|
+
import { gn as Approver } from "./policy-types-CCiDRZBH.js";
|
|
2
2
|
//#region src/approvals/access-reviews/types.d.ts
|
|
3
3
|
type AccessReviewStatus = "open" | "closed";
|
|
4
4
|
type AccessReviewItemStatus = "pending" | "kept" | "revoked";
|
|
5
5
|
/**
|
|
6
|
-
* Access review v1: who holds `permissions` in one tenant, and who may
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Access review v1: who holds `permissions` in one tenant, and who may confirm
|
|
7
|
+
* or revoke each holding. PermDock records the reviewer's decision and never
|
|
8
|
+
* changes the role or membership itself.
|
|
9
9
|
*/
|
|
10
10
|
type AccessReview = {
|
|
11
11
|
readonly v: 1;
|
|
@@ -20,7 +20,10 @@ type AccessReview = {
|
|
|
20
20
|
/** `false` when the population can omit a holder, such as a global role. */
|
|
21
21
|
readonly complete: boolean;
|
|
22
22
|
};
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* One holding in a review. `via` names the roles the population attributed it
|
|
25
|
+
* to.
|
|
26
|
+
*/
|
|
24
27
|
type AccessReviewItem = {
|
|
25
28
|
readonly v: 1;
|
|
26
29
|
readonly id: string;
|
|
@@ -54,12 +57,12 @@ type AccessReviewDecision = {
|
|
|
54
57
|
type AccessReviewStore = {
|
|
55
58
|
/** Names the implementation in errors and events. */
|
|
56
59
|
readonly name?: string;
|
|
57
|
-
create(review: AccessReview, items: readonly AccessReviewItem[])
|
|
58
|
-
get(id: string)
|
|
59
|
-
items(query: AccessReviewItemQuery)
|
|
60
|
-
decide(reviewId: string, itemId: string, decision: AccessReviewDecision)
|
|
61
|
-
markApplied(reviewId: string, itemId: string, at: string)
|
|
62
|
-
close(id: string)
|
|
60
|
+
create: (review: AccessReview, items: readonly AccessReviewItem[]) => Promise<void> | void;
|
|
61
|
+
get: (id: string) => Promise<AccessReview | null> | AccessReview | null;
|
|
62
|
+
items: (query: AccessReviewItemQuery) => Promise<AccessReviewItemPage> | AccessReviewItemPage;
|
|
63
|
+
decide: (reviewId: string, itemId: string, decision: AccessReviewDecision) => Promise<AccessReviewItem> | AccessReviewItem;
|
|
64
|
+
markApplied: (reviewId: string, itemId: string, at: string) => Promise<AccessReviewItem> | AccessReviewItem;
|
|
65
|
+
close: (id: string) => Promise<AccessReview> | AccessReview;
|
|
63
66
|
};
|
|
64
67
|
//#endregion
|
|
65
68
|
export { AccessReviewItemQuery as a, AccessReviewStore as c, AccessReviewItemPage as i, AccessReviewDecision as n, AccessReviewItemStatus as o, AccessReviewItem as r, AccessReviewStatus as s, AccessReview as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Hn as ExplainedDecision, Ln as Decision, T as Policy, j as PolicyVocabulary, lr as Subject, or as Membership, sr as Principal } from "./policy-types-
|
|
2
|
-
import { f as PermissionTree, u as Permission } from "./permission-types-
|
|
3
|
-
import {
|
|
1
|
+
import { Hn as ExplainedDecision, Ln as Decision, T as Policy, j as PolicyVocabulary, lr as Subject, or as Membership, sr as Principal } from "./policy-types-CCiDRZBH.js";
|
|
2
|
+
import { f as PermissionTree, u as Permission } from "./permission-types-CAY-GU7e.js";
|
|
3
|
+
import { C as PermissionCheck, a as PermDock, f as WhereResult, l as SimulateOptions, n as DecideOptions, o as PermDockOptions, r as DeriveOptions } from "./permdock-B6Sf4T_S.js";
|
|
4
4
|
//#region src/pdp/types.d.ts
|
|
5
5
|
type RemotePdpAuth = {
|
|
6
6
|
readonly bearer: string | (() => string | Promise<string>);
|
|
@@ -40,9 +40,9 @@ type RemotePdpOptions = {
|
|
|
40
40
|
readonly fetch?: typeof fetch;
|
|
41
41
|
};
|
|
42
42
|
/**
|
|
43
|
-
* One tuple callback per delegated permission. The callback receives the
|
|
44
|
-
*
|
|
45
|
-
*
|
|
43
|
+
* One tuple callback per delegated permission. The callback receives the row
|
|
44
|
+
* for a check and `undefined` for a listing; returning `null` denies with
|
|
45
|
+
* `pdp-denied`, throwing denies with `pdp-invalid-response`.
|
|
46
46
|
*/
|
|
47
47
|
type RelationMap<T> = readonly (readonly [Permission, (subject: Subject, data: unknown) => T | null])[];
|
|
48
48
|
type OpenFgaTuple = {
|
|
@@ -90,25 +90,34 @@ type PdpPermDock<V extends PolicyVocabulary = PolicyVocabulary> = Omit<PermDock<
|
|
|
90
90
|
/** `permdock.derive` with the same providers: the result asks the PDP too. */
|
|
91
91
|
readonly derive: (options: DeriveOptions) => Promise<PdpPermDock<V>>;
|
|
92
92
|
/**
|
|
93
|
-
* For a delegated permission whose provider lists ids, an `in` over them
|
|
94
|
-
*
|
|
95
|
-
*
|
|
93
|
+
* For a delegated permission whose provider lists ids, an `in` over them (AND
|
|
94
|
+
* the local condition when local grants exist); otherwise the local `where`,
|
|
95
|
+
* or an always-false `partial` result.
|
|
96
96
|
*/
|
|
97
97
|
readonly where: (permission: Permission) => Promise<WhereResult>;
|
|
98
98
|
readonly can: (permission: Permission, data?: unknown, options?: DecideOptions) => Promise<boolean>;
|
|
99
99
|
readonly decide: (permission: Permission, data?: unknown, options?: DecideOptions) => Promise<Decision>;
|
|
100
|
-
/**
|
|
100
|
+
/**
|
|
101
|
+
* `can` for every check, asking the PDP for each in parallel; `false` for an
|
|
102
|
+
* empty list.
|
|
103
|
+
*/
|
|
101
104
|
readonly canAll: (checks: readonly PermissionCheck[], options?: DecideOptions) => Promise<boolean>;
|
|
102
|
-
/**
|
|
105
|
+
/**
|
|
106
|
+
* `decide` for every check, in check order, asking the PDP for each in
|
|
107
|
+
* parallel.
|
|
108
|
+
*/
|
|
103
109
|
readonly decideAll: (checks: readonly PermissionCheck[], options?: DecideOptions) => Promise<readonly Decision[]>;
|
|
104
110
|
/** `decide` for each row, in row order, asking the PDP per row. */
|
|
105
111
|
readonly decideEach: (permission: Permission, rows: readonly unknown[], options?: DecideOptions) => Promise<readonly Decision[]>;
|
|
106
112
|
readonly assert: (permission: Permission, data?: unknown, options?: DecideOptions) => Promise<Extract<Decision, {
|
|
107
113
|
readonly outcome: "granted";
|
|
108
114
|
}>>;
|
|
109
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* `decide` with a trace of the local grants; a decision the remote PDP made
|
|
117
|
+
* carries an empty trace.
|
|
118
|
+
*/
|
|
110
119
|
readonly explain: (permission: Permission, data?: unknown, options?: Omit<DecideOptions, "explain">) => Promise<ExplainedDecision>;
|
|
111
|
-
readonly filter: <T>(permission: Permission<string, T
|
|
120
|
+
readonly filter: <T>(permission: Permission<string, NoInfer<T>, "instance">, rows: readonly T[], options?: DecideOptions) => Promise<T[]>;
|
|
112
121
|
readonly simulate: {
|
|
113
122
|
(checks: readonly (readonly [Permission, unknown?])[], options?: SimulateOptions): Promise<readonly Decision[]>;
|
|
114
123
|
(preview: {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Gt as Snapshot, In as ApprovalRequiredDecision, Ln as Decision, Un as GrantedDecision, dt as TokenVerifier } from "./policy-types-
|
|
2
|
-
import { u as Permission } from "./permission-types-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { Gt as Snapshot, In as ApprovalRequiredDecision, Ln as Decision, Un as GrantedDecision, dt as TokenVerifier } from "./policy-types-CCiDRZBH.js";
|
|
2
|
+
import { u as Permission } from "./permission-types-CAY-GU7e.js";
|
|
3
|
+
import { s as RowData } from "./permdock-B6Sf4T_S.js";
|
|
4
|
+
import { n as DescribeMessages } from "./describe-ByS9LgHK.js";
|
|
5
|
+
import { _ as ClientStoreOptions } from "./types-B_d_g7T3.js";
|
|
5
6
|
import { ReactNode } from "react";
|
|
6
7
|
//#region src/react/types.d.ts
|
|
7
8
|
type PermDockProviderProps = ({
|
|
@@ -9,21 +10,24 @@ type PermDockProviderProps = ({
|
|
|
9
10
|
readonly snapshotPromise?: never;
|
|
10
11
|
} | {
|
|
11
12
|
/**
|
|
12
|
-
* An unawaited snapshot from a Server Component. Hooks never suspend on
|
|
13
|
-
* resolves they deny with `status: 'pending'`, then
|
|
14
|
-
* (`server-only`). Set `suspend` to
|
|
13
|
+
* An unawaited snapshot from a Server Component. Hooks never suspend on
|
|
14
|
+
* it: until it resolves they deny with `status: 'pending'`, then
|
|
15
|
+
* re-render. A rejection fails closed (`server-only`). Set `suspend` to
|
|
16
|
+
* suspend readers through `use()` instead.
|
|
15
17
|
*/
|
|
16
18
|
readonly snapshotPromise: PromiseLike<Snapshot | string>;
|
|
17
19
|
readonly snapshot?: never;
|
|
18
20
|
}) & {
|
|
19
21
|
/**
|
|
20
|
-
* With `snapshotPromise`: `true` suspends every hook to the nearest Suspense
|
|
21
|
-
* resolves, and a rejection reaches the nearest error
|
|
22
|
+
* With `snapshotPromise`: `true` suspends every hook to the nearest Suspense
|
|
23
|
+
* boundary until it resolves, and a rejection reaches the nearest error
|
|
24
|
+
* boundary. Defaults to `false`.
|
|
22
25
|
*/
|
|
23
26
|
readonly suspend?: boolean;
|
|
24
27
|
/**
|
|
25
|
-
* The AuthZEN evaluations endpoint for checks the snapshot cannot answer.
|
|
26
|
-
* fetches: those checks answer `denied` with reason
|
|
28
|
+
* The AuthZEN evaluations endpoint for checks the snapshot cannot answer.
|
|
29
|
+
* `false` never fetches: those checks answer `denied` with reason
|
|
30
|
+
* `server-only`.
|
|
27
31
|
*/
|
|
28
32
|
readonly endpoint?: string | false;
|
|
29
33
|
/** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
|
|
@@ -44,6 +48,11 @@ type PermDockProviderProps = ({
|
|
|
44
48
|
readonly onClear?: () => void;
|
|
45
49
|
/** Milliseconds between approval status polls. Defaults to 2000. */
|
|
46
50
|
readonly approvalInterval?: number;
|
|
51
|
+
/**
|
|
52
|
+
* Triggers that refresh the snapshot, such as `eventSourceRefresh(url)`; read
|
|
53
|
+
* when the store is built.
|
|
54
|
+
*/
|
|
55
|
+
readonly refreshOn?: ClientStoreOptions["refreshOn"];
|
|
47
56
|
readonly children: ReactNode;
|
|
48
57
|
};
|
|
49
58
|
/** Provider-wide content for the `<Protected>` slots a component leaves out. */
|
|
@@ -52,9 +61,10 @@ type PermDockDefaults = {
|
|
|
52
61
|
readonly denied?: ReactNode | ((decision: Decision) => ReactNode);
|
|
53
62
|
readonly approval?: ReactNode | ((decision: ApprovalRequiredDecision) => ReactNode);
|
|
54
63
|
};
|
|
55
|
-
type ProtectedProps = {
|
|
56
|
-
readonly permission:
|
|
57
|
-
|
|
64
|
+
type ProtectedProps<P extends Permission = Permission> = {
|
|
65
|
+
readonly permission: P;
|
|
66
|
+
/** Any part of the permission's row; see `RowData`. */
|
|
67
|
+
readonly data?: RowData<P>;
|
|
58
68
|
readonly tenant?: string;
|
|
59
69
|
readonly pending?: ReactNode;
|
|
60
70
|
readonly denied?: ReactNode | ((decision: Decision) => ReactNode);
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { Gt as Snapshot, Ln as Decision, Zn as Actor, dt as TokenVerifier, j as PolicyVocabulary, rr as Delegation, sr as Principal } from "./policy-types-CCiDRZBH.js";
|
|
2
|
+
import { u as Permission } from "./permission-types-CAY-GU7e.js";
|
|
3
|
+
import { a as PermDock } from "./permdock-B6Sf4T_S.js";
|
|
4
|
+
import { n as DescribeMessages, t as DecisionDescription } from "./describe-ByS9LgHK.js";
|
|
5
|
+
import { t as ActionResult } from "./action-result-CL-QCITA.js";
|
|
6
|
+
//#region src/client/refresh-on.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* Calls `refresh` when the snapshot may be out of date (a membership event, a
|
|
9
|
+
* window focus, a realtime message) and returns the unsubscribe. A refresh
|
|
10
|
+
* re-fetches the signed snapshot; it never grants by itself.
|
|
11
|
+
*/
|
|
12
|
+
type RefreshTrigger = (refresh: () => void) => () => void;
|
|
13
|
+
type EventSourceRefreshOptions = {
|
|
14
|
+
/**
|
|
15
|
+
* CloudEvent `type` values that refresh; a trailing `*` matches a prefix.
|
|
16
|
+
* Defaults to `com.permdock.membership.*` and `com.permdock.catalog.*`.
|
|
17
|
+
*/
|
|
18
|
+
readonly types?: readonly string[];
|
|
19
|
+
readonly withCredentials?: boolean;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* A `refreshOn` trigger over Server-Sent Events: each `message` whose data is a
|
|
23
|
+
* structured CloudEvent with a matching `type` refreshes the snapshot. Without
|
|
24
|
+
* a global `EventSource` it never fires.
|
|
25
|
+
*/
|
|
26
|
+
declare function eventSourceRefresh(url: string, options?: EventSourceRefreshOptions): RefreshTrigger;
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region src/client/request.d.ts
|
|
29
|
+
type StoreHeaders = Readonly<Record<string, string>>;
|
|
30
|
+
//#endregion
|
|
31
|
+
//#region src/client/store.d.ts
|
|
32
|
+
type ClientStoreOptions = {
|
|
33
|
+
readonly snapshot: Snapshot | string;
|
|
34
|
+
readonly endpoint?: string;
|
|
35
|
+
readonly snapshotUrl?: string;
|
|
36
|
+
readonly approvals?: string;
|
|
37
|
+
readonly tenant?: string;
|
|
38
|
+
readonly fetch?: typeof fetch;
|
|
39
|
+
/**
|
|
40
|
+
* Request headers, or a getter read on every request so a rotated token needs
|
|
41
|
+
* no new store.
|
|
42
|
+
*/
|
|
43
|
+
readonly headers?: StoreHeaders | (() => StoreHeaders | undefined);
|
|
44
|
+
readonly maxAge?: number;
|
|
45
|
+
readonly verifier?: TokenVerifier;
|
|
46
|
+
/**
|
|
47
|
+
* `raw` is the compact JWS the snapshot was verified from, so a signed
|
|
48
|
+
* snapshot can be persisted signed.
|
|
49
|
+
*/
|
|
50
|
+
readonly onSnapshot?: (snapshot: Snapshot, tenant: string | undefined, raw: string | undefined) => void;
|
|
51
|
+
readonly onClear?: () => void;
|
|
52
|
+
/**
|
|
53
|
+
* Called once per key the snapshot cannot answer when there is no `endpoint`
|
|
54
|
+
* to ask.
|
|
55
|
+
*/
|
|
56
|
+
readonly onServerOnly?: (permission: Permission) => void;
|
|
57
|
+
/**
|
|
58
|
+
* `true` while rendering on the server: endpoint checks answer `pending`
|
|
59
|
+
* without a request. Defaults to `typeof window === 'undefined'`.
|
|
60
|
+
*/
|
|
61
|
+
readonly server?: boolean;
|
|
62
|
+
/** Milliseconds between approval status polls. Defaults to 2000. */
|
|
63
|
+
readonly approvalInterval?: number;
|
|
64
|
+
/** Start `pending`: the snapshot arrives later through `track()`. */
|
|
65
|
+
readonly awaiting?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* The first snapshot that hydrates with a principal is a persisted copy:
|
|
68
|
+
* `stale` until a refresh or a `replace()` lands.
|
|
69
|
+
*/
|
|
70
|
+
readonly stale?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Reuse decisions for the same row object until the next microtask. Only for
|
|
73
|
+
* renderers that do not track the fields a check reads (React): Vue, Svelte
|
|
74
|
+
* and Solid would stop re-running when a reactive row changes in place.
|
|
75
|
+
*/
|
|
76
|
+
readonly passCache?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Triggers that refresh the snapshot, started while something subscribes and
|
|
79
|
+
* never during a server render. Calls within 250 ms fold into one refresh.
|
|
80
|
+
*/
|
|
81
|
+
readonly refreshOn?: readonly RefreshTrigger[];
|
|
82
|
+
};
|
|
83
|
+
type ClientStore = {
|
|
84
|
+
get: () => ClientPermDock;
|
|
85
|
+
subscribe: (listener: () => void) => () => void;
|
|
86
|
+
permissionState: (permission: Permission, data?: unknown) => PermissionState;
|
|
87
|
+
requestApproval: (decision: Decision, note?: string) => Promise<void>;
|
|
88
|
+
/** Hydrate from a pushed snapshot; a compact JWS goes through the verifier. */
|
|
89
|
+
replace: (value: unknown) => void;
|
|
90
|
+
/**
|
|
91
|
+
* Stay `pending` until `value` settles, then hydrate; a rejection fails
|
|
92
|
+
* closed.
|
|
93
|
+
*/
|
|
94
|
+
follow: (value: PromiseLike<Snapshot | string>) => void;
|
|
95
|
+
/**
|
|
96
|
+
* `follow()` once per `value`, without suspending. A thenable React already
|
|
97
|
+
* settled (`status: 'fulfilled'`) hydrates at once.
|
|
98
|
+
*/
|
|
99
|
+
track: (value: PromiseLike<Snapshot | string>) => void;
|
|
100
|
+
/**
|
|
101
|
+
* The approval state for a decision. While something subscribes, an
|
|
102
|
+
* `approval-required` decision is polled at `<approvals>/<token>`.
|
|
103
|
+
*/
|
|
104
|
+
approvalState: (decision: Decision) => ApprovalState;
|
|
105
|
+
/**
|
|
106
|
+
* Hydrate from a resolved `snapshotPromise` during render. Idempotent per
|
|
107
|
+
* `source`; subscribers are notified in a microtask, never synchronously
|
|
108
|
+
* inside render.
|
|
109
|
+
*/
|
|
110
|
+
adopt: (value: Snapshot | string, source: object) => void;
|
|
111
|
+
snapshot: () => Snapshot;
|
|
112
|
+
/** The tenant the store currently answers for. */
|
|
113
|
+
tenant: () => string | undefined;
|
|
114
|
+
/**
|
|
115
|
+
* Stops polls, drops in-flight results and persistence; the store keeps
|
|
116
|
+
* answering from its last snapshot.
|
|
117
|
+
*/
|
|
118
|
+
dispose: () => void;
|
|
119
|
+
};
|
|
120
|
+
//#endregion
|
|
121
|
+
//#region src/client/protected-action.d.ts
|
|
122
|
+
type ProtectedActionState<T> = {
|
|
123
|
+
/** The last call's answer; `undefined` before the first call. */
|
|
124
|
+
readonly result: ActionResult<T> | undefined;
|
|
125
|
+
/** A call is in flight. */
|
|
126
|
+
readonly pending: boolean;
|
|
127
|
+
};
|
|
128
|
+
//#endregion
|
|
129
|
+
//#region src/client/types.d.ts
|
|
130
|
+
type ClientStatus = "ready" | "pending" | "stale" | "server-only";
|
|
131
|
+
type PermissionState = {
|
|
132
|
+
readonly allowed: boolean;
|
|
133
|
+
readonly status: ClientStatus;
|
|
134
|
+
readonly decision: Decision;
|
|
135
|
+
};
|
|
136
|
+
type PermissionSet = {
|
|
137
|
+
readonly granted: readonly Permission[];
|
|
138
|
+
get: (permission: Permission) => PermissionState | undefined;
|
|
139
|
+
};
|
|
140
|
+
type ClientPermDock<V extends PolicyVocabulary = PolicyVocabulary> = PermDock<V> & {
|
|
141
|
+
status: (permission?: Permission, data?: unknown) => ClientStatus;
|
|
142
|
+
invalidate: (ref: Permission | {
|
|
143
|
+
readonly [key: string]: unknown;
|
|
144
|
+
}) => void;
|
|
145
|
+
refresh: (options?: {
|
|
146
|
+
readonly tenant?: string;
|
|
147
|
+
}) => Promise<void>;
|
|
148
|
+
clear: () => void;
|
|
149
|
+
subscribe: (listener: () => void) => () => void;
|
|
150
|
+
};
|
|
151
|
+
type ApprovalState = "not-needed" | "required" | "pending" | "approved" | "rejected" | "expired";
|
|
152
|
+
type ApprovalHandle = {
|
|
153
|
+
readonly state: ApprovalState;
|
|
154
|
+
readonly token: string | undefined;
|
|
155
|
+
readonly request: (note?: string) => Promise<void>;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* A protected server action wired to a control: the gate for its button, the
|
|
159
|
+
* last answer, and the approval its `approval-required` problem carries. The
|
|
160
|
+
* client decides nothing; the action answers.
|
|
161
|
+
*/
|
|
162
|
+
type ProtectedActionView<T> = ProtectedActionState<T> & {
|
|
163
|
+
readonly gate: GateView;
|
|
164
|
+
/** On an `approval-required` problem, the handle for its token. */
|
|
165
|
+
readonly approval: ApprovalHandle | undefined;
|
|
166
|
+
};
|
|
167
|
+
type ProtectedActionHandle<T> = ProtectedActionView<T> & {
|
|
168
|
+
readonly run: (input: unknown) => Promise<ActionResult<T>>;
|
|
169
|
+
/** Resends the last input with the approval token; `undefined` without one. */
|
|
170
|
+
readonly retry: () => Promise<ActionResult<T> | undefined>;
|
|
171
|
+
};
|
|
172
|
+
type SubjectView = {
|
|
173
|
+
readonly principal: Principal | null;
|
|
174
|
+
readonly actor: Actor | undefined;
|
|
175
|
+
readonly delegation: Delegation | undefined;
|
|
176
|
+
readonly expiresAt: number | undefined;
|
|
177
|
+
readonly simulated: boolean;
|
|
178
|
+
};
|
|
179
|
+
type TenantView = {
|
|
180
|
+
readonly tenant: string | null;
|
|
181
|
+
readonly tenants: readonly string[];
|
|
182
|
+
readonly switchTo: (id: string) => Promise<void>;
|
|
183
|
+
readonly status: ClientStatus;
|
|
184
|
+
};
|
|
185
|
+
type FilterResult<T> = readonly T[] & {
|
|
186
|
+
readonly partial: boolean;
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* Which held roles `useRoles` lists: those of a tenant (the active one by
|
|
190
|
+
* default), or only those on the memberships of one `scope`, and of one
|
|
191
|
+
* instance `id` of it.
|
|
192
|
+
*/
|
|
193
|
+
type RolesOptions = {
|
|
194
|
+
readonly tenant?: string;
|
|
195
|
+
readonly scope?: string;
|
|
196
|
+
readonly id?: string;
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* The provider options Vue, Svelte and Solid share; each adds its own reactive
|
|
200
|
+
* `snapshot`, `tenant`, `headers`, `verifier` and `defaults`.
|
|
201
|
+
*/
|
|
202
|
+
type ProviderOptionsBase = {
|
|
203
|
+
/**
|
|
204
|
+
* The AuthZEN evaluations endpoint for checks the snapshot cannot answer.
|
|
205
|
+
* `false` never calls one: such a check is denied with reason `server-only`.
|
|
206
|
+
*/
|
|
207
|
+
readonly endpoint?: string | false;
|
|
208
|
+
/** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
|
|
209
|
+
readonly snapshotUrl?: string;
|
|
210
|
+
readonly approvals?: string;
|
|
211
|
+
/** Read on every request, so a new `fetch` applies without a new store. */
|
|
212
|
+
readonly fetch?: typeof fetch;
|
|
213
|
+
readonly maxAge?: number;
|
|
214
|
+
/** Localised text for the describe helper. */
|
|
215
|
+
readonly messages?: DescribeMessages;
|
|
216
|
+
/** Called with each snapshot the store accepts. */
|
|
217
|
+
readonly onSnapshot?: NonNullable<ClientStoreOptions["onSnapshot"]>;
|
|
218
|
+
/** Called when the store drops its snapshot. */
|
|
219
|
+
readonly onClear?: () => void;
|
|
220
|
+
/** Milliseconds between approval status polls. Defaults to 2000. */
|
|
221
|
+
readonly approvalInterval?: number;
|
|
222
|
+
/**
|
|
223
|
+
* Triggers that refresh the snapshot, such as `eventSourceRefresh(url)`; read
|
|
224
|
+
* once.
|
|
225
|
+
*/
|
|
226
|
+
readonly refreshOn?: readonly RefreshTrigger[];
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* How a control shows a permission it cannot use: hidden, or disabled with a
|
|
230
|
+
* reason.
|
|
231
|
+
*/
|
|
232
|
+
type GateMode = "hide" | "disable";
|
|
233
|
+
/**
|
|
234
|
+
* Everything a permission-gated control renders from, in one value: a button, a
|
|
235
|
+
* menu item or a link reads these fields and decides nothing itself. The client
|
|
236
|
+
* is a hint; the server checks again.
|
|
237
|
+
*/
|
|
238
|
+
type GateView = {
|
|
239
|
+
/** The decision granted the action. */
|
|
240
|
+
readonly allowed: boolean;
|
|
241
|
+
/** The snapshot is loading; render the control disabled, not hidden. */
|
|
242
|
+
readonly pending: boolean;
|
|
243
|
+
/** `mode: "hide"` and the action is not available: render nothing. */
|
|
244
|
+
readonly hidden: boolean;
|
|
245
|
+
/**
|
|
246
|
+
* The control cannot run the action now (denied, pending or awaiting
|
|
247
|
+
* approval).
|
|
248
|
+
*/
|
|
249
|
+
readonly disabled: boolean;
|
|
250
|
+
/** The decision needs a person's approval first; offer to request it. */
|
|
251
|
+
readonly needsApproval: boolean;
|
|
252
|
+
/**
|
|
253
|
+
* The plans that would grant the action, for an upgrade prompt; empty
|
|
254
|
+
* otherwise.
|
|
255
|
+
*/
|
|
256
|
+
readonly upgrade: readonly string[];
|
|
257
|
+
/** Title and detail for a tooltip or an accessible description. */
|
|
258
|
+
readonly reason: DecisionDescription;
|
|
259
|
+
readonly decision: Decision;
|
|
260
|
+
};
|
|
261
|
+
//#endregion
|
|
262
|
+
export { ClientStoreOptions as _, FilterResult as a, eventSourceRefresh as b, PermissionSet as c, ProtectedActionView as d, ProviderOptionsBase as f, ClientStore as g, TenantView as h, ClientStatus as i, PermissionState as l, SubjectView as m, ApprovalState as n, GateMode as o, RolesOptions as p, ClientPermDock as r, GateView as s, ApprovalHandle as t, ProtectedActionHandle as u, EventSourceRefreshOptions as v, RefreshTrigger as y };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Dn as RelationGrantee, Rt as Instant, fr as AdapterId, gn as Approver, lr as Subject, o as ApprovalStage, or as Membership, r as ApprovalMode, un as WireDelegation } from "./policy-types-
|
|
2
|
-
import {
|
|
1
|
+
import { Dn as RelationGrantee, Rt as Instant, fr as AdapterId, gn as Approver, lr as Subject, o as ApprovalStage, or as Membership, r as ApprovalMode, un as WireDelegation } from "./policy-types-CCiDRZBH.js";
|
|
2
|
+
import { M as AppData } from "./permission-types-CAY-GU7e.js";
|
|
3
3
|
//#region src/approvals/types.d.ts
|
|
4
4
|
type ApprovalStatus = "pending" | "approved" | "rejected" | "expired";
|
|
5
5
|
type ApprovalApprovers = {
|
|
@@ -12,30 +12,42 @@ type ApprovalApprovers = {
|
|
|
12
12
|
readonly distinct?: boolean;
|
|
13
13
|
/** Set when the approval no longer applies once the row's `version` changes. */
|
|
14
14
|
readonly staleOn?: "resource-change";
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Distinct approvers of `by` needed before `status` becomes `approved`;
|
|
17
|
+
* absent means 1.
|
|
18
|
+
*/
|
|
16
19
|
readonly quorum?: number;
|
|
17
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Who else may approve once the request has waited `after` seconds since
|
|
22
|
+
* `createdAt`.
|
|
23
|
+
*/
|
|
18
24
|
readonly escalation?: {
|
|
19
25
|
readonly after: number;
|
|
20
26
|
readonly to: Approver | readonly Approver[];
|
|
21
27
|
};
|
|
22
28
|
};
|
|
23
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* One recorded approval: who gave it, when, and under `stages` the index of the
|
|
31
|
+
* stage it counts for.
|
|
32
|
+
*/
|
|
24
33
|
type ApprovalSignature = {
|
|
25
34
|
readonly by: string;
|
|
26
35
|
readonly at: string;
|
|
27
36
|
readonly stage?: number;
|
|
28
37
|
readonly vouched?: string;
|
|
29
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* The principal `by` approved for, when `by` acted under an
|
|
40
|
+
* `ApprovalDelegation`.
|
|
41
|
+
*/
|
|
30
42
|
readonly onBehalfOf?: string;
|
|
31
43
|
/** The `ApprovalDelegation` id `onBehalfOf` was read from. */
|
|
32
44
|
readonly delegation?: string;
|
|
33
45
|
};
|
|
34
46
|
/**
|
|
35
|
-
* One out-of-office delegation: `delegate` may approve what `delegator`
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
47
|
+
* One out-of-office delegation: `delegate` may approve what `delegator` could
|
|
48
|
+
* approve, from `from` until `until`. Both instants are required, so a
|
|
49
|
+
* delegation cannot be open-ended. `permissions` and `resources` narrow it;
|
|
50
|
+
* absent, it covers every request. `tenant` holds it to one tenant.
|
|
39
51
|
*/
|
|
40
52
|
type ApprovalDelegation = {
|
|
41
53
|
readonly id: string;
|
|
@@ -57,12 +69,12 @@ type ApprovalDelegation = {
|
|
|
57
69
|
type ApprovalDelegationSource = {
|
|
58
70
|
/** Names the implementation in errors and events. */
|
|
59
71
|
readonly name?: string;
|
|
60
|
-
delegationsFor(query: {
|
|
72
|
+
delegationsFor: (query: {
|
|
61
73
|
readonly delegate: string;
|
|
62
74
|
readonly tenant?: string;
|
|
63
75
|
/** RFC 3339. The source returns delegations active at this instant. */
|
|
64
76
|
readonly at: string;
|
|
65
|
-
})
|
|
77
|
+
}) => readonly ApprovalDelegation[] | Promise<readonly ApprovalDelegation[]>;
|
|
66
78
|
};
|
|
67
79
|
type ApprovalSubjectSummary = {
|
|
68
80
|
readonly principal: {
|
|
@@ -97,15 +109,24 @@ type ApprovalRequest = {
|
|
|
97
109
|
readonly createdAt: string;
|
|
98
110
|
readonly expiresAt: string;
|
|
99
111
|
readonly status: ApprovalStatus;
|
|
100
|
-
/**
|
|
112
|
+
/**
|
|
113
|
+
* Approvals given so far, oldest first; the request is `approved` once there
|
|
114
|
+
* are `approvers.quorum` of them.
|
|
115
|
+
*/
|
|
101
116
|
readonly approvals?: readonly ApprovalSignature[];
|
|
102
117
|
readonly resolvedAt?: string;
|
|
103
|
-
/**
|
|
118
|
+
/**
|
|
119
|
+
* The approver whose verdict resolved the request (the last of `approvals` on
|
|
120
|
+
* a quorum), or `system:<by>` for a cancellation.
|
|
121
|
+
*/
|
|
104
122
|
readonly resolvedBy?: string;
|
|
105
123
|
readonly vouched?: string;
|
|
106
124
|
readonly note?: string;
|
|
107
125
|
readonly consumedAt?: string;
|
|
108
|
-
/**
|
|
126
|
+
/**
|
|
127
|
+
* The application's own data, set when the request opens; plain JSON, never
|
|
128
|
+
* read by a decision.
|
|
129
|
+
*/
|
|
109
130
|
readonly x?: AppData;
|
|
110
131
|
};
|
|
111
132
|
type ApprovalVerdict = {
|
|
@@ -120,8 +141,8 @@ type ApprovalVerdict = {
|
|
|
120
141
|
*/
|
|
121
142
|
readonly relations?: readonly string[];
|
|
122
143
|
/**
|
|
123
|
-
* The `holder(permission)` approvers (by permission key) that `by` holds
|
|
124
|
-
*
|
|
144
|
+
* The `holder(permission)` approvers (by permission key) that `by` holds in
|
|
145
|
+
* the request's tenant, as `approverPermissions` read them from the
|
|
125
146
|
* approver's own instance. Server-side input, never from the request body.
|
|
126
147
|
* Absent means none, so permission approvers match nobody.
|
|
127
148
|
*/
|
|
@@ -130,8 +151,8 @@ type ApprovalVerdict = {
|
|
|
130
151
|
/**
|
|
131
152
|
* Set when `by` is not an approver and acts for this principal under an
|
|
132
153
|
* `ApprovalDelegation`. Server-side input: the handler resolves the
|
|
133
|
-
* delegator, and `applyApprovalVerdict` checks them again. `relations`
|
|
134
|
-
*
|
|
154
|
+
* delegator, and `applyApprovalVerdict` checks them again. `relations` and
|
|
155
|
+
* `permissions` are that principal's facts, never the delegate's.
|
|
135
156
|
*/
|
|
136
157
|
readonly onBehalfOf?: {
|
|
137
158
|
readonly subject: Subject;
|
|
@@ -169,28 +190,28 @@ type ApprovalStore = {
|
|
|
169
190
|
/** Names the implementation in errors and events. */
|
|
170
191
|
readonly name?: string;
|
|
171
192
|
/**
|
|
172
|
-
* Seconds a request opened against this store stays open when the
|
|
173
|
-
*
|
|
174
|
-
*
|
|
193
|
+
* Seconds a request opened against this store stays open when the caller sets
|
|
194
|
+
* no `ttl`; absent means `DEFAULT_APPROVAL_TTL`. A grant's `approval.ttl`
|
|
195
|
+
* still caps it.
|
|
175
196
|
*/
|
|
176
197
|
readonly ttl?: number;
|
|
177
|
-
create(request: ApprovalRequest)
|
|
178
|
-
get(token: string)
|
|
198
|
+
create: (request: ApprovalRequest) => Promise<void> | void;
|
|
199
|
+
get: (token: string) => Promise<ApprovalRequest | null> | ApprovalRequest | null;
|
|
179
200
|
/**
|
|
180
201
|
* The request with this `id`, for `approvalsHandler`, which routes by id.
|
|
181
202
|
* Without it the handler pages through `list` to find the id.
|
|
182
203
|
*/
|
|
183
|
-
getById
|
|
184
|
-
resolve(token: string, verdict: ApprovalVerdict)
|
|
185
|
-
list(query: ApprovalListQuery)
|
|
186
|
-
expire(now?: Instant)
|
|
204
|
+
getById?: (id: string) => Promise<ApprovalRequest | null> | ApprovalRequest | null;
|
|
205
|
+
resolve: (token: string, verdict: ApprovalVerdict) => Promise<ApprovalRequest> | ApprovalRequest;
|
|
206
|
+
list: (query: ApprovalListQuery) => Promise<ApprovalPage> | ApprovalPage;
|
|
207
|
+
expire: (now?: Instant) => Promise<number> | number;
|
|
187
208
|
/**
|
|
188
209
|
* Marks an approved, unexpired, unconsumed request consumed and returns it;
|
|
189
210
|
* returns `null` otherwise. Must be atomic: two concurrent calls for one
|
|
190
211
|
* token never both return the request.
|
|
191
212
|
*/
|
|
192
|
-
consume(token: string, now?: Instant)
|
|
193
|
-
cancel
|
|
213
|
+
consume: (token: string, now?: Instant) => Promise<ApprovalRequest | null> | ApprovalRequest | null;
|
|
214
|
+
cancel?: (filter: ApprovalListFilter, meta: ApprovalCancelMeta) => Promise<number> | number;
|
|
194
215
|
};
|
|
195
216
|
type ApprovalResumeFailureCause = "approval-not-found" | "approval-pending" | "approval-rejected" | "approval-expired" | "approval-consumed";
|
|
196
217
|
type ApprovalInspectResult = {
|
|
@@ -201,9 +222,15 @@ type ApprovalInspectResult = {
|
|
|
201
222
|
readonly cause: ApprovalResumeFailureCause;
|
|
202
223
|
};
|
|
203
224
|
declare const APPROVAL_HEADER: "PermDock-Approval";
|
|
204
|
-
/**
|
|
225
|
+
/**
|
|
226
|
+
* Seconds a request stays open when neither the store nor the call sets a
|
|
227
|
+
* `ttl`.
|
|
228
|
+
*/
|
|
205
229
|
declare const DEFAULT_APPROVAL_TTL: number;
|
|
206
|
-
/**
|
|
230
|
+
/**
|
|
231
|
+
* The approvals a request needs in total: `approvers.quorum` (or 1), or the sum
|
|
232
|
+
* of its stages' quorums.
|
|
233
|
+
*/
|
|
207
234
|
declare function approvalQuorum(request: ApprovalRequest): number;
|
|
208
235
|
/**
|
|
209
236
|
* The instant from which `approvers.escalation.to` may approve, in epoch
|