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,8 +1,8 @@
|
|
|
1
|
-
import { Q as LimitStore, Rt as Instant, Zn as Actor, it as RelationSource, lr as Subject, or as Membership, rr as Delegation, sr as Principal, tr as CustomRole } from "../../policy-types-
|
|
2
|
-
import { u as Permission } from "../../permission-types-
|
|
3
|
-
import { o as PermDockOptions } from "../../permdock-
|
|
4
|
-
import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-
|
|
5
|
-
import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-
|
|
1
|
+
import { Q as LimitStore, Rt as Instant, Zn as Actor, it as RelationSource, lr as Subject, or as Membership, rr as Delegation, sr as Principal, tr as CustomRole } from "../../policy-types-CCiDRZBH.js";
|
|
2
|
+
import { u as Permission } from "../../permission-types-CAY-GU7e.js";
|
|
3
|
+
import { o as PermDockOptions } from "../../permdock-B6Sf4T_S.js";
|
|
4
|
+
import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-Bx6UI8n1.js";
|
|
5
|
+
import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-Ba4bDhaj.js";
|
|
6
6
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
7
7
|
//#region src/testing/saas/schema.d.ts
|
|
8
8
|
type FieldKind = "string" | "boolean" | "nullable-string";
|
|
@@ -53,6 +53,7 @@ type SaasSeed = {
|
|
|
53
53
|
export declare const SAAS_EXPIRED_AT = 1e9;
|
|
54
54
|
/**
|
|
55
55
|
* Users, one hazard each:
|
|
56
|
+
*
|
|
56
57
|
* - alice: admin in acme, viewer in globex (different role per org)
|
|
57
58
|
* - bob: member in acme (owns p1, p3, p4)
|
|
58
59
|
* - carol: owner in acme
|
|
@@ -62,16 +63,21 @@ export declare const SAAS_EXPIRED_AT = 1e9;
|
|
|
62
63
|
* - mallory: no memberships at all
|
|
63
64
|
* - gina: `lead` of team-a in acme
|
|
64
65
|
* - hank: viewer in acme, `collaborator` on project p3 only
|
|
65
|
-
* - `user-2` and `2`: members of `org-1`; `Date.parse` maps both ids to one
|
|
66
|
+
* - `user-2` and `2`: members of `org-1`; `Date.parse` maps both ids to one
|
|
67
|
+
* instant
|
|
66
68
|
* - tina: member of `tenant-1`; `Date.parse('org-1') === Date.parse('tenant-1')`
|
|
67
|
-
* - ivan: viewer in acme who holds the team role `lead` on the tenant membership
|
|
69
|
+
* - ivan: viewer in acme who holds the team role `lead` on the tenant membership
|
|
70
|
+
* (the wrong scope)
|
|
68
71
|
*
|
|
69
72
|
* Acme's folders: `root` ─ `eng` ─ `platform` ─ `infra`, and `root` ─ `hr`
|
|
70
73
|
* (restricted) ─ `payroll`. bob views `root`, hank views `hr`, gina edits
|
|
71
74
|
* `eng`, frank's view of `root` expired.
|
|
72
75
|
*/
|
|
73
76
|
export declare const saasSeed: SaasSeed;
|
|
74
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* The seed's folder tree and shares as a `RelationSource`, for
|
|
79
|
+
* `createPermDock({ relations })`.
|
|
80
|
+
*/
|
|
75
81
|
export declare function saasRelations(seed?: SaasSeed): RelationSource;
|
|
76
82
|
/** Every user id in the seed. */
|
|
77
83
|
export declare const saasUsers: readonly string[];
|
|
@@ -81,18 +87,18 @@ export declare function saasMemberships(user: string, members?: readonly SaasMem
|
|
|
81
87
|
/** Custom roles of every org, as `createPermDock({ customRoles })` expects. */
|
|
82
88
|
export declare const saasCustomRoles: readonly CustomRole[];
|
|
83
89
|
/**
|
|
84
|
-
* The principal for `user`, with the plans of the requested `tenant`'s org.
|
|
85
|
-
*
|
|
86
|
-
*
|
|
90
|
+
* The principal for `user`, with the plans of the requested `tenant`'s org. The
|
|
91
|
+
* tenant itself is passed to `createPermDock({ tenant })`, never trusted from
|
|
92
|
+
* here.
|
|
87
93
|
*/
|
|
88
94
|
export declare function saasPrincipal(user: string, tenant?: string): Principal;
|
|
89
95
|
//#endregion
|
|
90
96
|
//#region src/testing/saas/sql.d.ts
|
|
91
97
|
/**
|
|
92
|
-
* Postgres tables for the SaaS domain. Column names match the resource
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
98
|
+
* Postgres tables for the SaaS domain. Column names match the resource fields
|
|
99
|
+
* (`"orgId"`, `"ownerId"`) so generated RLS and ORM filters compile against
|
|
100
|
+
* them without a column map. RLS is enabled and forced on the row tables;
|
|
101
|
+
* policies come from `permdock rls generate`.
|
|
96
102
|
*/
|
|
97
103
|
export declare const saasSchemaSql = "\ncreate table org (\n id text primary key,\n name text not null,\n plan text not null check (plan in ('free', 'pro'))\n);\ncreate table org_member (\n user_id text not null,\n org_id text references org (id),\n team_id text,\n resource text,\n resource_id text,\n role text not null,\n expires_at bigint\n);\ncreate table project (\n id text primary key,\n \"orgId\" text not null references org (id),\n \"ownerId\" text not null,\n name text not null,\n archived boolean not null default false\n);\nalter table project enable row level security;\nalter table project force row level security;\ncreate table doc (\n id text primary key,\n \"orgId\" text not null references org (id),\n \"teamId\" text,\n title text not null,\n locked boolean not null default false\n);\nalter table doc enable row level security;\nalter table doc force row level security;\ncreate table folder (\n id text primary key,\n \"orgId\" text not null references org (id),\n \"parentId\" text references folder (id),\n name text not null,\n restricted boolean not null default false\n);\nalter table folder enable row level security;\nalter table folder force row level security;\ncreate table folder_share (\n folder_id text not null references folder (id) on delete cascade,\n user_id text not null,\n expires_at timestamptz\n);\ncreate table folder_editor (\n folder_id text not null references folder (id) on delete cascade,\n user_id text not null\n);\n";
|
|
98
104
|
/** `insert` statements for a seed; the default is the full shared seed. */
|
|
@@ -119,7 +125,10 @@ export declare const saasIssuer = "https://saas.permdock.test";
|
|
|
119
125
|
export declare const saasAudience = "permdock-saas";
|
|
120
126
|
export declare const SAAS_TOKEN_TTL_SECONDS = 3600;
|
|
121
127
|
type SaasTokenOptions = {
|
|
122
|
-
/**
|
|
128
|
+
/**
|
|
129
|
+
* Claim memberships; `false` omits the claim (database mode). Defaults to the
|
|
130
|
+
* seed.
|
|
131
|
+
*/
|
|
123
132
|
readonly memberships?: readonly Membership[] | false;
|
|
124
133
|
readonly ttl?: number;
|
|
125
134
|
/** The instant used for `iat`; defaults to the current time. */
|
|
@@ -131,9 +140,9 @@ type SaasTokenOptions = {
|
|
|
131
140
|
/** Signs an ES256 access token for `sub` with WebCrypto; no dependency. */
|
|
132
141
|
export declare function signSaasToken(sub: string, options?: SaasTokenOptions): Promise<string>;
|
|
133
142
|
/**
|
|
134
|
-
* Verifies a token from `signSaasToken` (ES256, `kid`, `iss`, `aud`, `exp`)
|
|
135
|
-
*
|
|
136
|
-
*
|
|
143
|
+
* Verifies a token from `signSaasToken` (ES256, `kid`, `iss`, `aud`, `exp`) and
|
|
144
|
+
* returns its `sub`, or `null`; never throws. Identity only: memberships and
|
|
145
|
+
* plans come from the seed, never from the token.
|
|
137
146
|
*/
|
|
138
147
|
export declare function verifySaasToken(token: string | null | undefined, now?: Instant): Promise<string | null>;
|
|
139
148
|
/** `verifySaasToken` plus the token's `exp` as `expiresAt` (epoch seconds). */
|
|
@@ -162,8 +171,8 @@ type SaasScenario = {
|
|
|
162
171
|
*/
|
|
163
172
|
readonly client?: boolean;
|
|
164
173
|
/**
|
|
165
|
-
* The client outcome when it is stricter than the server's: a snapshot
|
|
166
|
-
*
|
|
174
|
+
* The client outcome when it is stricter than the server's: a snapshot cannot
|
|
175
|
+
* evaluate a closure deny, so it fails closed.
|
|
167
176
|
*/
|
|
168
177
|
readonly clientOutcome?: SaasOutcome;
|
|
169
178
|
/** An agent acting for `user`; without `delegation` it reaches nothing. */
|
|
@@ -172,23 +181,30 @@ type SaasScenario = {
|
|
|
172
181
|
/** Units of the daily api-key quota this subject already used in the tenant. */
|
|
173
182
|
readonly quotaUsed?: number;
|
|
174
183
|
};
|
|
175
|
-
/**
|
|
184
|
+
/**
|
|
185
|
+
* What the policy's `subject` receives: the principal, or a `Subject` carrying
|
|
186
|
+
* the actor.
|
|
187
|
+
*/
|
|
176
188
|
export declare function saasUser(scenario: SaasScenario): Principal | Subject;
|
|
177
189
|
/** A memory quota store in which every subject has already used `used` units. */
|
|
178
190
|
export declare function saasLimitStore(used?: number): LimitStore;
|
|
179
|
-
/**
|
|
191
|
+
/**
|
|
192
|
+
* The `createPermDock` options a scenario runs with: tenant, custom roles,
|
|
193
|
+
* quota and folder tree.
|
|
194
|
+
*/
|
|
180
195
|
export declare function saasScenarioOptions(scenario: SaasScenario): PermDockOptions;
|
|
181
196
|
export declare function saasProject(id: string): SaasProject;
|
|
182
197
|
export declare function saasDoc(id: string): SaasDoc;
|
|
183
198
|
export declare function saasFolder(id: string): SaasFolder;
|
|
184
199
|
/**
|
|
185
|
-
* The folder tree, decided with `createPermDock({ relations: saasRelations()
|
|
186
|
-
* A snapshot carries no graph, so every graph grant is server-only on a
|
|
200
|
+
* The folder tree, decided with `createPermDock({ relations: saasRelations()
|
|
201
|
+
* })`. A snapshot carries no graph, so every graph grant is server-only on a
|
|
202
|
+
* client.
|
|
187
203
|
*/
|
|
188
204
|
export declare const saasFolderScenarios: readonly SaasScenario[];
|
|
189
205
|
/**
|
|
190
|
-
* Hand-written expectations. Never derive `expected` from the engine: the
|
|
191
|
-
*
|
|
206
|
+
* Hand-written expectations. Never derive `expected` from the engine: the list
|
|
207
|
+
* is the oracle every adapter, ORM and client suite runs against.
|
|
192
208
|
*/
|
|
193
209
|
export declare const saasScenarios: readonly SaasScenario[];
|
|
194
210
|
//#endregion
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-
|
|
2
|
-
import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-
|
|
1
|
+
import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-mDcTWoBs.js";
|
|
2
|
+
import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-iWnUdwCt.js";
|
|
3
3
|
export { SAAS_API_KEY_LIMIT, SAAS_EXPIRED_AT, SAAS_TOKEN_TTL_SECONDS, SaasDocSchema, SaasFolderSchema, SaasProjectSchema, rowSchema, saasAudience, saasCustomRoles, saasDoc, saasFolder, saasFolderScenarios, saasIssuer, saasJwks, saasLimitStore, saasMemberships, saasOrg, saasPermissions, saasPlans, saasPolicy, saasPrincipal, saasPrivateJwk, saasProject, saasPublicJwk, saasRelations, saasRoles, saasScenarioOptions, saasScenarios, saasSchemaSql, saasSeed, saasSeedSql, saasTenantRoleNames, saasUser, saasUsers, signSaasToken, verifySaasSession, verifySaasToken };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-
|
|
1
|
+
import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-Bx6UI8n1.js";
|
|
2
2
|
export { SaasDoc, SaasDocSchema, SaasFolder, SaasFolderSchema, SaasProject, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as SaasDocSchema, n as SaasFolderSchema, r as SaasProjectSchema, i as saasPermissions, a as saasPlans, o as saasRoles, s as saasTenantRoleNames } from "../../permissions-
|
|
1
|
+
export { t as SaasDocSchema, n as SaasFolderSchema, r as SaasProjectSchema, i as saasPermissions, a as saasPlans, o as saasRoles, s as saasTenantRoleNames } from "../../permissions-mDcTWoBs.js";
|
|
@@ -431,8 +431,8 @@ function splitLines(text) {
|
|
|
431
431
|
//#region src/cli/core/text-diff.ts
|
|
432
432
|
const MAX_LINES = 40;
|
|
433
433
|
/**
|
|
434
|
-
* A unified diff from the file on disk to what the command would write,
|
|
435
|
-
*
|
|
434
|
+
* A unified diff from the file on disk to what the command would write, cut to
|
|
435
|
+
* the first {@link MAX_LINES} lines so a CI log stays readable.
|
|
436
436
|
*/
|
|
437
437
|
function shortDiff(file, onDisk, next) {
|
|
438
438
|
const lines = createTwoFilesPatch(`${file} (on disk)`, `${file} (generated)`, onDisk, next, void 0, void 0, { context: 2 }).split("\n").filter((line) => !line.startsWith("=====")).filter((line, index, all) => line !== "" || index < all.length - 1);
|
|
@@ -3,11 +3,17 @@ import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
|
3
3
|
function isThenable(value) {
|
|
4
4
|
return value !== null && typeof value === "object" && "then" in value && typeof value.then === "function";
|
|
5
5
|
}
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Settles a promise nobody awaits, so its rejection is not reported as
|
|
8
|
+
* unhandled.
|
|
9
|
+
*/
|
|
7
10
|
function ignoreRejection(value) {
|
|
8
11
|
Promise.resolve(value).then(void 0, () => void 0);
|
|
9
12
|
}
|
|
10
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Runs a Standard Schema that must answer synchronously; an asynchronous answer
|
|
15
|
+
* fails.
|
|
16
|
+
*/
|
|
11
17
|
function validateSync(schema, value) {
|
|
12
18
|
const result = schema["~standard"].validate(value);
|
|
13
19
|
if (isThenable(result)) {
|
|
@@ -22,7 +28,10 @@ function validateSync(schema, value) {
|
|
|
22
28
|
issues: result.issues
|
|
23
29
|
};
|
|
24
30
|
}
|
|
25
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* `validateSync` for a schema whose output must be an object; anything else is
|
|
33
|
+
* `undefined`.
|
|
34
|
+
*/
|
|
26
35
|
function validateRecord(schema, value) {
|
|
27
36
|
const validated = validateSync(schema, value);
|
|
28
37
|
return validated.ok && isRecord(validated.value) ? validated.value : void 0;
|
|
@@ -9,19 +9,31 @@ function isRfc3339(value) {
|
|
|
9
9
|
function rfc3339(seconds) {
|
|
10
10
|
return (/* @__PURE__ */ new Date(seconds * 1e3)).toISOString();
|
|
11
11
|
}
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Milliseconds since the epoch as RFC 3339 in UTC, milliseconds kept; throws a
|
|
14
|
+
* `RangeError` for a value outside the `Date` range.
|
|
15
|
+
*/
|
|
13
16
|
function isoAt(millis) {
|
|
14
17
|
return new Date(millis).toISOString();
|
|
15
18
|
}
|
|
16
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* RFC 3339 in UTC of `now`, or of the clock when absent; throws a `RangeError`
|
|
21
|
+
* for a `now` that is not an `Instant`.
|
|
22
|
+
*/
|
|
17
23
|
function isoNow(now) {
|
|
18
24
|
return dateAt(now).toISOString();
|
|
19
25
|
}
|
|
20
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Whole seconds since the epoch of an RFC 3339 instant; `undefined` for
|
|
28
|
+
* anything else.
|
|
29
|
+
*/
|
|
21
30
|
function secondsOf(value) {
|
|
22
31
|
return isRfc3339(value) ? Math.floor(Date.parse(value) / 1e3) : void 0;
|
|
23
32
|
}
|
|
24
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Whole seconds since the epoch of an RFC 3339 string or an `Instant`;
|
|
35
|
+
* `undefined` for anything else, Unix seconds included.
|
|
36
|
+
*/
|
|
25
37
|
function instantOf(value) {
|
|
26
38
|
if (typeof value === "string") return secondsOf(value);
|
|
27
39
|
if (typeof value === "object" && value !== null && "epochMilliseconds" in value && typeof value.epochMilliseconds === "number" && Number.isFinite(value.epochMilliseconds)) return Math.floor(value.epochMilliseconds / 1e3);
|
|
@@ -30,7 +42,10 @@ function instantOf(value) {
|
|
|
30
42
|
function durationOf(value) {
|
|
31
43
|
return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : void 0;
|
|
32
44
|
}
|
|
33
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Throws at definition time unless `value` is a whole number of seconds above
|
|
47
|
+
* zero.
|
|
48
|
+
*/
|
|
34
49
|
function assertDuration(value, label) {
|
|
35
50
|
if (durationOf(value) === void 0) throw new Error(`PermDock: ${label} must be a whole number of seconds above 0, got ${JSON.stringify(value) ?? String(value)}`);
|
|
36
51
|
}
|
|
@@ -43,13 +58,19 @@ const INVALID_NOW = Object.freeze({
|
|
|
43
58
|
field: "now",
|
|
44
59
|
message: "now must be an Instant ({ epochMilliseconds }), such as a Temporal.Instant"
|
|
45
60
|
});
|
|
46
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* The `Date` of `now`, or of the clock when absent; throws a `RangeError` for a
|
|
63
|
+
* `now` that is not an `Instant`.
|
|
64
|
+
*/
|
|
47
65
|
function dateAt(now) {
|
|
48
66
|
const millis = nowMillis(now);
|
|
49
67
|
if (!Number.isFinite(millis)) throw new RangeError(`PermDock: ${INVALID_NOW.message}`);
|
|
50
68
|
return new Date(millis);
|
|
51
69
|
}
|
|
52
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* Whole seconds since the epoch of `now`, or of the clock when absent; throws a
|
|
72
|
+
* `RangeError` for a `now` that is not an `Instant`.
|
|
73
|
+
*/
|
|
53
74
|
function secondsAt(now) {
|
|
54
75
|
return Math.floor(dateAt(now).getTime() / 1e3);
|
|
55
76
|
}
|
|
@@ -61,7 +82,10 @@ function instantAt(seconds) {
|
|
|
61
82
|
function epochSeconds(now) {
|
|
62
83
|
return nowMillis(now) / 1e3;
|
|
63
84
|
}
|
|
64
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* Milliseconds since the epoch of `now`, or of the clock when absent; `NaN` for
|
|
87
|
+
* a `now` that is not an `Instant`.
|
|
88
|
+
*/
|
|
65
89
|
function nowMillis(now) {
|
|
66
90
|
if (now === void 0) return Date.now();
|
|
67
91
|
const millis = typeof now === "object" && now !== null ? now.epochMilliseconds : void 0;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
|
|
2
|
-
import { r as sha256Digest } from "./sha256-
|
|
2
|
+
import { r as sha256Digest } from "./sha256-C-4WXKIu.js";
|
|
3
3
|
//#region src/core/token.ts
|
|
4
4
|
/**
|
|
5
|
-
* Only stable identity goes into the token, so refreshing a session (new
|
|
6
|
-
*
|
|
5
|
+
* Only stable identity goes into the token, so refreshing a session (new roles,
|
|
6
|
+
* assurance or claims) does not orphan an outstanding approval.
|
|
7
7
|
*/
|
|
8
8
|
function principalIdentity(principal) {
|
|
9
9
|
if (principal === null) return null;
|
|
@@ -13,7 +13,10 @@ function principalIdentity(principal) {
|
|
|
13
13
|
issuer: principal.issuer ?? null
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* A row's `version` field as token input; `null` when it is missing or not a
|
|
18
|
+
* scalar.
|
|
19
|
+
*/
|
|
17
20
|
function versionOf(row, field) {
|
|
18
21
|
if (row === null || typeof row !== "object" || !Object.hasOwn(row, field)) return null;
|
|
19
22
|
const value = row[field];
|
|
@@ -25,20 +28,19 @@ function payloadDigest(data) {
|
|
|
25
28
|
return sha256Digest(canonicalJson(data));
|
|
26
29
|
}
|
|
27
30
|
/**
|
|
28
|
-
* The payload a decision token binds: the call's `args` when the caller
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
+
* The payload a decision token binds: the call's `args` when the caller passes
|
|
32
|
+
* them (an agent or MCP tool call, row or not), otherwise the data of a call
|
|
33
|
+
* without a row id. `undefined` binds nothing beyond the row id.
|
|
31
34
|
*/
|
|
32
35
|
function tokenPayload(resourceId, data, args) {
|
|
33
36
|
if (args !== void 0) return payloadDigest(args);
|
|
34
37
|
return resourceId === "*" && data !== void 0 ? payloadDigest(data) : void 0;
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
37
|
-
* `version` is set only for an approval that goes stale on a resource
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* others.
|
|
40
|
+
* `version` is set only for an approval that goes stale on a resource change;
|
|
41
|
+
* without it the payload, and so every other token, is unchanged. `payload` is
|
|
42
|
+
* set when `resourceId` is `*` (a collection action or a row without an id), so
|
|
43
|
+
* an approval covers the arguments it was given and no others.
|
|
42
44
|
*/
|
|
43
45
|
function decisionToken(input) {
|
|
44
46
|
const payload = canonicalJson({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
|
|
2
|
-
import {
|
|
2
|
+
import { n as describe } from "./describe-Bb4hGK5d.js";
|
|
3
3
|
//#region src/core/tool-refusal.ts
|
|
4
4
|
function deniedToolRefusal(decision, permission, resource) {
|
|
5
5
|
const alternatives = decision.alternatives.map((leaf) => leaf.key);
|
|
@@ -26,7 +26,10 @@ function approvalToolRefusal(decision, permission, resource) {
|
|
|
26
26
|
}
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* An MCP `CallToolResult` with `isError` set, as MCP and WebMCP clients read
|
|
31
|
+
* it.
|
|
32
|
+
*/
|
|
30
33
|
function toolErrorResult(refusal) {
|
|
31
34
|
return {
|
|
32
35
|
isError: true,
|
package/dist/trpc/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { T as Policy, sr as Principal } from "../policy-types-
|
|
2
|
-
import { u as Permission } from "../permission-types-
|
|
3
|
-
import { a as PermDock } from "../permdock-
|
|
4
|
-
import { n as RevocationFeed } from "../revocations-
|
|
5
|
-
import { D as ConnectionOptions, T as Connection, i as OpenApiHooks } from "../server-types-
|
|
6
|
-
import { t as ServerAdapterOptions } from "../bind-
|
|
7
|
-
import { t as StreamProtectOptions } from "../stream-
|
|
1
|
+
import { T as Policy, 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 RevocationFeed } from "../revocations-BaUXHM1N.js";
|
|
5
|
+
import { D as ConnectionOptions, T as Connection, i as OpenApiHooks } from "../server-types-CIlpSA2G.js";
|
|
6
|
+
import { t as ServerAdapterOptions } from "../bind-Cp2hBHzP.js";
|
|
7
|
+
import { t as StreamProtectOptions } from "../stream-ltuLdtTG.js";
|
|
8
8
|
import { AnyTRPCMiddlewareFunction } from "@trpc/server";
|
|
9
9
|
//#region src/trpc/create.d.ts
|
|
10
10
|
type TrpcMiddlewareOpts<TCtx = object, TInput = unknown> = {
|
|
@@ -34,7 +34,10 @@ type TrpcOpenApiHooks = {
|
|
|
34
34
|
readonly securitySchemes: OpenApiHooks["securitySchemes"];
|
|
35
35
|
};
|
|
36
36
|
type TrpcPermDock<TCtx = object> = {
|
|
37
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* The `PermDock` for one procedure call, for code the middleware does not run
|
|
39
|
+
* before.
|
|
40
|
+
*/
|
|
38
41
|
readonly getPermDock: (opts: TrpcMiddlewareOpts<TCtx>) => Promise<PermDock>;
|
|
39
42
|
readonly middleware: () => TrpcMiddleware;
|
|
40
43
|
readonly protect: (permission: Permission | null, data?: (opts: TrpcMiddlewareOpts<TCtx>) => unknown, protectOptions?: StreamProtectOptions) => TrpcMiddleware;
|
package/dist/trpc/index.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import { o as problemMessage } from "../http-
|
|
2
|
-
import { t as problemFromError } from "../map-error-
|
|
3
|
-
import { n as attached } from "../bind-
|
|
4
|
-
import { i as isAsyncIterable, o as reloadAfter } from "../stream-
|
|
5
|
-
import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-
|
|
1
|
+
import { o as problemMessage } from "../http-DKLXrFGk.js";
|
|
2
|
+
import { t as problemFromError } from "../map-error-pasIGqMT.js";
|
|
3
|
+
import { n as attached } from "../bind-D_sZSVA3.js";
|
|
4
|
+
import { i as isAsyncIterable, o as reloadAfter } from "../stream-CDvF0sJm.js";
|
|
5
|
+
import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-fNqAIqQk.js";
|
|
6
6
|
import { TRPCError, isTrackedEnvelope } from "@trpc/server";
|
|
7
7
|
//#region src/trpc/create.ts
|
|
8
8
|
const PROBLEM = Symbol.for("permdock.problem");
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* A `TRPCError` for a revoked subscription; the Problem Details body rides on
|
|
11
|
+
* `cause`.
|
|
12
|
+
*/
|
|
10
13
|
function trpcErrorFrom(error) {
|
|
11
14
|
const problem = error.toProblemDetails();
|
|
12
15
|
const cause = { ...problem };
|
|
@@ -34,8 +37,8 @@ async function throwTrpcError(response) {
|
|
|
34
37
|
});
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
37
|
-
* A PermDock error thrown further down (an `assert` in a resolver) arrives as
|
|
38
|
-
*
|
|
40
|
+
* A PermDock error thrown further down (an `assert` in a resolver) arrives as a
|
|
41
|
+
* failed middleware result; it becomes the same TRPCError `protect` throws.
|
|
39
42
|
*/
|
|
40
43
|
function mapDownstream(result) {
|
|
41
44
|
if (result === null || typeof result !== "object" || result.ok !== false) return Promise.resolve(result);
|
|
@@ -70,7 +73,10 @@ function createPermDock(policy, options) {
|
|
|
70
73
|
attach(nextCtx, request);
|
|
71
74
|
return mapDownstream(await opts.next({ ctx: nextCtx }));
|
|
72
75
|
});
|
|
73
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Wraps a subscription's iterable so revocation ends it and unreadable items
|
|
78
|
+
* drop.
|
|
79
|
+
*/
|
|
74
80
|
const guardSubscription = async (result, opts, permission, data, protectOptions) => {
|
|
75
81
|
if (result === null || typeof result !== "object" || result.ok !== true || !isAsyncIterable(result.data)) return result;
|
|
76
82
|
return {
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { j as PolicyVocabulary, mn as ScopeNames } from "./policy-types-CCiDRZBH.js";
|
|
2
|
+
import { k as POLICY_SCOPES, u as Permission } from "./permission-types-CAY-GU7e.js";
|
|
3
|
+
import { n as PlanTree } from "./vocabulary-DEJ5j4mR.js";
|
|
4
|
+
import { o as OperationMap } from "./operations-Ci_rT6Uo.js";
|
|
5
|
+
//#region src/core/type-helpers.d.ts
|
|
6
|
+
/** Recursion guard: a tree nests resources at most this many levels deep. */
|
|
7
|
+
type Depth = [never, 0, 1, 2, 3, 4, 5, 6, 7];
|
|
8
|
+
/** The literal string keys of `T`, without an index signature. */
|
|
9
|
+
type KnownKeys<T> = keyof { readonly [K in keyof T as string extends K ? never : K extends string ? K : never]: 0; };
|
|
10
|
+
type LeavesOf<T, D extends number> = [D] extends [never] ? never : T extends Permission ? T : { readonly [K in KnownKeys<T>]-?: LeavesOf<T[K], Depth[D]>; }[KnownKeys<T>];
|
|
11
|
+
/** The union of the permission leaves of a `definePermissions` tree. */
|
|
12
|
+
type PermissionOf<T> = [KnownKeys<T>] extends [never] ? Permission : LeavesOf<T, 8>;
|
|
13
|
+
type TreeOf<P> = P extends {
|
|
14
|
+
readonly vocabulary: {
|
|
15
|
+
readonly permissions: infer T;
|
|
16
|
+
};
|
|
17
|
+
} ? T : P;
|
|
18
|
+
/** The resource names of a policy or a permission tree, else `string`. */
|
|
19
|
+
type ResourceNameOf<P> = PermissionOf<TreeOf<P>>["resource"];
|
|
20
|
+
/** The action names of a policy or a permission tree, else `string`. */
|
|
21
|
+
type ActionNameOf<P> = PermissionOf<TreeOf<P>>["action"];
|
|
22
|
+
/** The permission keys of a policy or a permission tree, else `string`. */
|
|
23
|
+
type PermissionKeyOf<P> = PermissionOf<TreeOf<P>>["key"];
|
|
24
|
+
/**
|
|
25
|
+
* The scope names a policy's `definePolicy({ scopes })` declares, plus the
|
|
26
|
+
* `tenant` / `team` aliases; `string` for a policy that declares none.
|
|
27
|
+
*/
|
|
28
|
+
type ScopeNameOf<P> = P extends {
|
|
29
|
+
readonly [POLICY_SCOPES]?: infer S;
|
|
30
|
+
} ? ScopeNames<Exclude<S, undefined>> : string;
|
|
31
|
+
/**
|
|
32
|
+
* The plan names a policy declares: the keys of its `definePlans` vocabulary,
|
|
33
|
+
* else `string`.
|
|
34
|
+
*/
|
|
35
|
+
type PlanNameOf<P> = P extends {
|
|
36
|
+
readonly vocabulary: infer V;
|
|
37
|
+
} ? V extends {
|
|
38
|
+
readonly plans: infer T extends PlanTree;
|
|
39
|
+
} ? T[keyof T]["key"] : string : string;
|
|
40
|
+
/** The operation names of a `defineOperations` map, else `string`. */
|
|
41
|
+
type OperationNameOf<O> = O extends OperationMap<infer D> ? keyof D & string : string;
|
|
42
|
+
/**
|
|
43
|
+
* The vocabulary a policy was defined with, for an instance type such as
|
|
44
|
+
* `usePermDock<VocabularyOf<typeof policy>>()`; `PolicyVocabulary` otherwise.
|
|
45
|
+
*/
|
|
46
|
+
type VocabularyOf<P> = P extends {
|
|
47
|
+
readonly vocabulary: infer V extends PolicyVocabulary;
|
|
48
|
+
} ? V : PolicyVocabulary;
|
|
49
|
+
//#endregion
|
|
50
|
+
export { PlanNameOf as a, VocabularyOf as c, PermissionOf as i, OperationNameOf as n, ResourceNameOf as o, PermissionKeyOf as r, ScopeNameOf as s, ActionNameOf as t };
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { dt as TokenVerifier, lr as Subject, ot as SnapshotSource, q as DecisionSink, ut as TokenSigner } from "./policy-types-
|
|
2
|
-
import { s as PolicySource } from "./hosted-
|
|
3
|
-
import { m as ApprovalStore, u as ApprovalRequest } from "./types-
|
|
4
|
-
import { a as CatalogDocument } from "./types-
|
|
5
|
-
import { a as CatalogFinding } from "./sink-
|
|
1
|
+
import { dt as TokenVerifier, lr as Subject, ot as SnapshotSource, q as DecisionSink, ut as TokenSigner } from "./policy-types-CCiDRZBH.js";
|
|
2
|
+
import { s as PolicySource } from "./hosted-Cmtxogd0.js";
|
|
3
|
+
import { m as ApprovalStore, u as ApprovalRequest } from "./types-B_tiYvk8.js";
|
|
4
|
+
import { a as CatalogDocument } from "./types-ZzRGoViD.js";
|
|
5
|
+
import { a as CatalogFinding } from "./sink-Dvi7YZG_.js";
|
|
6
6
|
//#region src/cloud/types.d.ts
|
|
7
7
|
type CloudEndpointOptions = {
|
|
8
8
|
readonly url?: string;
|
|
9
9
|
readonly environment?: string;
|
|
10
10
|
};
|
|
11
11
|
type CloudEndpoints = {
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* The environment URL, `<url>/v1/environments/<env>`: `iss` and `aud` of the
|
|
14
|
+
* policy document.
|
|
15
|
+
*/
|
|
13
16
|
readonly issuer: string;
|
|
14
17
|
/** The environment's JWK Set URL, for `joseTokenVerifier({ jwks })`. */
|
|
15
18
|
readonly jwks: string;
|
|
@@ -24,51 +27,60 @@ type CloudConnectionOptions = CloudEndpointOptions & {
|
|
|
24
27
|
type CloudApproverOptions = {
|
|
25
28
|
/**
|
|
26
29
|
* Signs the token with a key the environment trusts as an issuer, such as
|
|
27
|
-
* `joseTokenSigner` over your own key. Never `cloudSigner`: a client key
|
|
28
|
-
*
|
|
30
|
+
* `joseTokenSigner` over your own key. Never `cloudSigner`: a client key that
|
|
31
|
+
* could mint approver tokens could forge any approver.
|
|
29
32
|
*/
|
|
30
33
|
readonly signer: TokenSigner;
|
|
31
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* `aud` of the token; defaults to `<issuer>/approvals`, the environment URL
|
|
36
|
+
* plus `/approvals`.
|
|
37
|
+
*/
|
|
32
38
|
readonly audience?: string | readonly string[];
|
|
33
39
|
/**
|
|
34
40
|
* The `holder(permission)` approvers of `request` that `approver` holds,
|
|
35
41
|
* typically `approverPermissions(request, permdockFor(approver))`. Signed
|
|
36
|
-
* into the token as `permissions`; without it the verdict's own
|
|
37
|
-
*
|
|
42
|
+
* into the token as `permissions`; without it the verdict's own `permissions`
|
|
43
|
+
* are signed. A throw signs none.
|
|
38
44
|
*/
|
|
39
45
|
readonly permissions?: (request: ApprovalRequest, approver: Subject) => readonly string[] | Promise<readonly string[]>;
|
|
40
46
|
/**
|
|
41
47
|
* The relation approvers of `request` that `approver` holds, typically
|
|
42
|
-
* `approverRelations(request, approver, { relations, permissions })`.
|
|
43
|
-
*
|
|
44
|
-
*
|
|
48
|
+
* `approverRelations(request, approver, { relations, permissions })`. Signed
|
|
49
|
+
* into the token as `relations`; without it the verdict's own `relations` are
|
|
50
|
+
* signed. A throw signs none.
|
|
45
51
|
*/
|
|
46
52
|
readonly relations?: (request: ApprovalRequest, approver: Subject) => readonly string[] | Promise<readonly string[]>;
|
|
47
53
|
};
|
|
48
54
|
type CloudOptions = CloudConnectionOptions & {
|
|
49
55
|
/**
|
|
50
|
-
* Proves the approver on `approvals.resolve`. Without it, every resolve but
|
|
51
|
-
*
|
|
56
|
+
* Proves the approver on `approvals.resolve`. Without it, every resolve but a
|
|
57
|
+
* `system` rejection throws `approver-unauthenticated` and sends nothing.
|
|
52
58
|
*/
|
|
53
59
|
readonly approver?: CloudApproverOptions;
|
|
54
60
|
readonly flushAt?: number;
|
|
55
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* Most events the sink holds while the Cloud is unreachable (default 10 000);
|
|
63
|
+
* the oldest are dropped first.
|
|
64
|
+
*/
|
|
56
65
|
readonly capacity?: number;
|
|
57
66
|
readonly waitUntil?: (task: Promise<void>) => void;
|
|
58
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* The CloudEvents `source` of every event the sink sends, an absolute URI;
|
|
69
|
+
* defaults to the environment URL.
|
|
70
|
+
*/
|
|
59
71
|
readonly source?: string;
|
|
60
72
|
/**
|
|
61
|
-
* Verifies the environment's signed policy document, typically
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* `
|
|
73
|
+
* Verifies the environment's signed policy document, typically `({ jwks }) =>
|
|
74
|
+
* joseTokenVerifier({ jwks })`. A function is called once, with the resolved
|
|
75
|
+
* endpoints, on the first refresh. Without one, `policies.current()` stays
|
|
76
|
+
* `null`: an unverifiable document is never applied.
|
|
65
77
|
*/
|
|
66
78
|
readonly verifier?: TokenVerifier | ((endpoints: CloudEndpoints) => TokenVerifier);
|
|
67
79
|
};
|
|
68
80
|
/**
|
|
69
81
|
* What `POST /catalog` answers: `201` with the new version and the drift
|
|
70
|
-
* findings against the previous one, or `200` with `unchanged: true` when
|
|
71
|
-
*
|
|
82
|
+
* findings against the previous one, or `200` with `unchanged: true` when the
|
|
83
|
+
* fingerprint is already published.
|
|
72
84
|
*/
|
|
73
85
|
type CloudCatalogPush = {
|
|
74
86
|
readonly version: number;
|
|
@@ -81,19 +93,19 @@ type CloudCatalogPush = {
|
|
|
81
93
|
};
|
|
82
94
|
type CloudCatalog = {
|
|
83
95
|
/**
|
|
84
|
-
* Posts the catalog, its `operations` included, to the environment.
|
|
85
|
-
*
|
|
86
|
-
*
|
|
96
|
+
* Posts the catalog, its `operations` included, to the environment. Throws
|
|
97
|
+
* when the Cloud refuses it or answers another shape. The Cloud shows and
|
|
98
|
+
* diffs it; it never decides with it.
|
|
87
99
|
*/
|
|
88
|
-
push(catalog: CatalogDocument)
|
|
100
|
+
push: (catalog: CatalogDocument) => Promise<CloudCatalogPush>;
|
|
89
101
|
};
|
|
90
102
|
type CloudClient = Partial<CloudEndpoints> & {
|
|
91
103
|
/**
|
|
92
|
-
* The environment URL and JWK Set URL. `issuer` and `jwks` are set only
|
|
93
|
-
*
|
|
94
|
-
*
|
|
104
|
+
* The environment URL and JWK Set URL. `issuer` and `jwks` are set only when
|
|
105
|
+
* the environment is configured; otherwise the first call asks `GET
|
|
106
|
+
* /v1/environment` which environment the key belongs to.
|
|
95
107
|
*/
|
|
96
|
-
endpoints()
|
|
108
|
+
endpoints: () => Promise<CloudEndpoints>;
|
|
97
109
|
readonly approvals: ApprovalStore;
|
|
98
110
|
readonly sink: DecisionSink;
|
|
99
111
|
/**
|
|
@@ -102,7 +114,7 @@ type CloudClient = Partial<CloudEndpoints> & {
|
|
|
102
114
|
* signed. Sent as `PermDock-Subject`; the Cloud never takes a subject from
|
|
103
115
|
* anything else.
|
|
104
116
|
*/
|
|
105
|
-
snapshotsFor(token: string)
|
|
117
|
+
snapshotsFor: (token: string) => SnapshotSource;
|
|
106
118
|
readonly policies: PolicySource;
|
|
107
119
|
readonly catalog: CloudCatalog;
|
|
108
120
|
};
|