permdock 0.7.0 → 0.9.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-BcudBQOF.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-Ch07MdxN.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-K0faOLFp.d.ts → approval-prompt-3BqWczTt.d.ts} +13 -11
- package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
- 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-BpS7LnV0.js} +2 -2
- package/dist/{arazzo-rdeJ8n1J.js → arazzo-CmQaGPkM.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-DTjR8xet.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-C6Jg75xq.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-D1nO6fiC.js → bind-BNQA9JK9.js} +26 -10
- package/dist/{bind-JDuvxjuW.d.ts → bind-YYjvfpB9.d.ts} +32 -12
- 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-BWXqwQYU.js} +3 -3
- package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-D4UC9TTW.d.ts → capability-Di9tiUvi.d.ts} +41 -29
- package/dist/{casbin-BHijLuHY.js → casbin-B7_yS-oo.js} +2 -2
- package/dist/{casbin-BW9pS47J.js → casbin-bHyIxTNQ.js} +16 -8
- 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-CGlSwU6j.js} +20 -19
- package/dist/catalog-D3oS2GH3.js +1 -0
- package/dist/{catalog-BaMQfQ6Y.js → catalog-amPDr0JQ.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-operations-DeHTrJSV.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-3kWfjnYy.js} +4 -5
- package/dist/{codemod-BP6n8N9L.js → codemod-Bv5i-Mzo.js} +523 -201
- package/dist/{codemod-i4N2BhDc.js → codemod-D9Aiii1r.js} +3 -4
- package/dist/{collect-DNm3oKOk.js → collect-B80GYEot.js} +4 -5
- package/dist/collect-D-eroIfV.js +1 -0
- package/dist/{collect-BaWeMjwV.js → collect-WCl8cJQV.js} +26 -63
- 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-BEklRUYo.d.ts} +36 -12
- package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BNdVf7X2.js → completion-_bc0OUQ-.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-DGZzMV1B.js → config-D5XrLWpk.js} +2 -2
- package/dist/{config-report-Cm7UITNA.js → config-report-BmWIskD7.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-CQkE8Esr.d.ts → core-CFepFiDP.d.ts} +49 -22
- package/dist/{core-B5-w6Kw9.js → core-DzVINFbU.js} +26 -20
- package/dist/{create-Cb86Z8Im.js → create-6EwRQlig.js} +10 -7
- package/dist/{create-DJrlhEp9.js → create-BLPKnJKa.js} +35 -25
- package/dist/{create-UTnUVETj.d.ts → create-BPUopdfL.d.ts} +70 -37
- package/dist/{create-QHuuPw3q.d.ts → create-BamXmeob.d.ts} +37 -29
- package/dist/{create-B2-CQqCI.d.ts → create-DBvUsgzK.d.ts} +49 -28
- 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-DHldhVUv.d.ts +22 -0
- package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
- package/dist/{describe-O0SwYIK8.d.ts → describe-BbFPBSms.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-Btr1c1Ow.js → diff-BwR1JdP2.js} +2 -2
- package/dist/{diff-DzT-xD13.js → diff-CQegtBAo.js} +22 -13
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BU1szn63.js → doctor-ClRVAtXQ.js} +287 -135
- package/dist/{doctor-BoK_y0KO.js → doctor-LPMYjSqO.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-B_Qg9D3e.d.ts → errors-BIM4MFsJ.d.ts} +22 -6
- 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/{evaluate-B_oqFbWC.js → evaluate-BAmf_AQd.js} +153 -82
- package/dist/{evaluations-BCddEOfO.d.ts → evaluations-DOWuBpWv.d.ts} +11 -5
- package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
- 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-BIbBAtPZ.d.ts} +9 -6
- package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-dPTgJVHd.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-BFfzZSLH.js +58 -0
- package/dist/gen-BtfFWGbz.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-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -21
- package/dist/{hosted-BmjzxQhp.d.ts → hosted-DVxlLZMe.d.ts} +33 -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-DB2EG_iy.js → import-ACkOrv6g.js} +6 -6
- package/dist/{import-Bz0GefWg.js → import-CST57XLp.js} +64 -51
- package/dist/{index-CMiPH2Tv.d.ts → index-BinlXeU-.d.ts} +64 -37
- package/dist/{index-BSfRl0hZ.d.ts → index-CV-7DWeD.d.ts} +64 -52
- package/dist/{index-BE8y3moU.d.ts → index-DJwEgYzA.d.ts} +127 -82
- package/dist/{index-DH9DUDEM.d.ts → index-Dj2qF9VC.d.ts} +54 -30
- package/dist/{index-BTkwrK7v.d.ts → index-vYjMrXyK.d.ts} +336 -173
- package/dist/{index-DLwcuCN_.d.ts → index-ymept53A.d.ts} +51 -30
- package/dist/index.d.ts +22 -22
- package/dist/index.js +34 -34
- package/dist/{init-B-4t1NzC.js → init-BjuFDYT1.js} +10 -10
- package/dist/{init-5TXNji88.js → init-txYTuW9u.js} +5 -5
- package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-CoHn-0e8.d.ts} +4 -4
- package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot-DuWf1cT3.js} +86 -61
- 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-qv4cr9w8.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-CfImTJGb.js} +4 -4
- package/dist/{login-WC9HPJpU.js → login-CgfCTO3F.js} +16 -9
- package/dist/{manifest-Dv6q4i5s.js → manifest-B2QPh19C.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-C-nv08_n.js} +16 -9
- 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 +79 -26
- package/dist/next/index.js +121 -10
- 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-ztVaux6j.js → openapi-BGeuunWC.js} +23 -14
- package/dist/{openapi-DMocl1bh.js → openapi-BIpw3Mb7.js} +4 -5
- package/dist/{openapi-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
- 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-DgSDLrta.js → output-DV5dwOTs.js} +9 -5
- package/dist/output-files-BHOIlrfD.js +1 -0
- package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/ownership-DA5YdYTm.js +1059 -0
- package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
- package/dist/parse-local-manifest-CCmbhnxP.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-BfWEeMqk.js → permdock-BvjivVb9.js} +200 -140
- package/dist/{permdock-Dco6dyCK.d.ts → permdock-CprAPN3w.d.ts} +260 -129
- 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-CYcHj_w7.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-BycVKnXv.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-CU3An8uP.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-DGIO_gxq.d.ts} +782 -357
- package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
- package/dist/{postgrest-r5faDIzD.js → postgrest-5Dr3W64L.js} +84 -86
- package/dist/{postgrest-CYacM_u7.d.ts → postgrest-D5nUGm-c.d.ts} +55 -35
- package/dist/powersync-B701tvhE.js +1 -0
- package/dist/{powersync-13odBwiM.js → powersync-Bg8u-JcR.js} +3 -3
- package/dist/{powersync-53ryOZip.js → powersync-CJrT1DSc.js} +127 -69
- 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-D8x73IGm.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-DfLeek9O.d.ts} +1 -1
- package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/{pull-CN5OLxrF.js → pull-2nJr0qg_.js} +12 -11
- package/dist/pull-C3EEGzSw.js +1 -0
- package/dist/{push-tVdG8dUL.js → push-Bn-lMEmI.js} +19 -13
- package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-CDuOL2de.js} +10 -7
- package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-CryQheKq.d.ts} +12 -6
- 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-Bs9Df2fQ.d.ts} +1 -1
- package/dist/{request-context-BykKLmyE.js → request-context-Duzdf0cd.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-ConCSj1y.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-Ck_PocSp.js → rls-Ba9wN0SP.js} +13 -6
- package/dist/{rls-CxBZb4rZ.js → rls-Cx0dtsB7.js} +310 -128
- 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-vHIwyXCp.js} +8 -5
- package/dist/run-Ck22anC2.js +1 -0
- package/dist/{run-uLD2aWuO.js → run-PbRlXTfh.js} +26 -23
- package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-B2o2Kxz8.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-DK4V-3Is.js} +42 -29
- package/dist/{scan-DSljDE1Y.js → scan-CRTj6fke.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-gIcCx7zM.js → schema-BTsE1WRT.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-CyRN0-Cd.d.ts} +88 -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-Cp_Eot9W.d.ts → sink-B5zoUW_O.d.ts} +44 -20
- package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
- package/dist/{skills-g_3BS9NC.js → skills-C9uKfSF5.js} +3 -3
- package/dist/{skills-Dcjw9_1C.js → skills-CQQcuGBi.js} +12 -8
- package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BjAWkchD.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-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
- package/dist/{sources-DEEuGb8S.d.ts → sources-CWG32C0G.d.ts} +126 -53
- 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-C_pi2Rnh.js} +292 -101
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +47 -35
- package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
- package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-DOYEuOLx.d.ts} +7 -7
- 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-DZJvxFIZ.d.ts +59 -0
- package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-2Vwhl7Er.d.ts → stream-9y9qw51m.d.ts} +4 -3
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- 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-DnMMg5Fn.js} +79 -35
- package/dist/{supabase-Bqp7iIY2.js → supabase-SBs3MYUE.js} +3 -3
- package/dist/supabase-hook-C0FyEACZ.js +1 -0
- package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-CrgU06WH.js} +175 -196
- package/dist/{supautils-MESd81bF.js → supautils-ByezN3b8.js} +385 -219
- 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-BqrxBCir.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 +225 -141
- package/dist/testing/index.js +352 -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-c7Xo_2Cu.d.ts +50 -0
- package/dist/{types-CfiKC5aN.d.ts → types-B2efzoSX.d.ts} +14 -11
- package/dist/{types-CIeZcG8v.d.ts → types-B6ExllNo.d.ts} +2 -2
- package/dist/{types-DBHftjgS.d.ts → types-BB-zWDcR.d.ts} +45 -33
- package/dist/{types-BfVmNJO5.d.ts → types-BMVDHvI0.d.ts} +128 -50
- package/dist/{types-DXmwu78Z.d.ts → types-CEinc15V.d.ts} +31 -14
- package/dist/{types-g7Oy6Zg4.d.ts → types-CN0LsqbK.d.ts} +47 -24
- package/dist/{types-CeIscIKp.d.ts → types-CWBsAwqn.d.ts} +23 -12
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-BWZybqs9.d.ts → types-CzOeVvcC.d.ts} +384 -203
- package/dist/{types-DC44-hqb.d.ts → types-DLvhVm1r.d.ts} +59 -32
- package/dist/{types-D3A19w4A.d.ts → types-DlelvQk4.d.ts} +22 -13
- package/dist/{types-cTos-H7p.d.ts → types-DsHGPtkR.d.ts} +68 -32
- package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-CQVEQawv.d.ts → types-rCRV4Ge-.d.ts} +24 -14
- package/dist/types-tQB2CEnY.d.ts +262 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-0hjZPIRX.js +1 -0
- package/dist/{usage-Bybmck7f.js → usage-B9EtHWLa.js} +50 -26
- package/dist/{usage-CDaLXCfL.js → usage-CBzgwfIs.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-CQpoquwj.d.ts → validation-error-uvp-kyfO.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-DlUcTDBz.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-CqUKX6CY.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-C-4VmFlL.js → watch-BFDKqmUa.js} +8 -8
- package/dist/watch-ClLuO2TL.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-BoDJm0Nc.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-DxXB54Wu.d.ts} +8 -5
- package/package.json +8 -8
- 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 +16 -23
- 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,10 +1,13 @@
|
|
|
1
|
-
import { n as SCIM_TABLES, r as SCIM_UNIQUE } from "./postgres-store-
|
|
2
|
-
import { o as quoteSqlIdent } from "./sql-
|
|
3
|
-
import { n as fileSummary, t as applyFiles } from "./files-
|
|
4
|
-
import { r as driftOf } from "./output-files-
|
|
1
|
+
import { n as SCIM_TABLES, r as SCIM_UNIQUE } from "./postgres-store-DcyrPS-r.js";
|
|
2
|
+
import { o as quoteSqlIdent } from "./sql-0WjxIp9g.js";
|
|
3
|
+
import { n as fileSummary, t as applyFiles } from "./files-B3AA05f1.js";
|
|
4
|
+
import { r as driftOf } from "./output-files-BIQ_9pIs.js";
|
|
5
5
|
//#region src/cli/scim/generate.ts
|
|
6
6
|
const SCIM_MARKER = "-- generated by permdock scim generate";
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* The client roles each dialect's data API connects as; none may reach the
|
|
9
|
+
* directory.
|
|
10
|
+
*/
|
|
8
11
|
function clientRoles(dialect) {
|
|
9
12
|
switch (dialect) {
|
|
10
13
|
case "supabase": return [
|
|
@@ -25,8 +28,8 @@ function clientRoles(dialect) {
|
|
|
25
28
|
* The directory `postgresDirectoryStore` reads and writes: users, groups and
|
|
26
29
|
* group members keyed on `(tenant, id)`, with `userName` and `externalId`
|
|
27
30
|
* unique per tenant. Member values are SCIM `value`s, not a foreign key to
|
|
28
|
-
* users, because a member may be a nested group. No client role may read
|
|
29
|
-
*
|
|
31
|
+
* users, because a member may be a nested group. No client role may read or
|
|
32
|
+
* write the tables.
|
|
30
33
|
*/
|
|
31
34
|
function scimSchemaSql(input) {
|
|
32
35
|
const schema = quoteSqlIdent(input.schema);
|
|
@@ -93,7 +96,10 @@ alter table ${members} enable row level security;
|
|
|
93
96
|
revoke all on table ${all} from ${clientRoles(input.dialect).join(", ")};
|
|
94
97
|
`;
|
|
95
98
|
}
|
|
96
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* `supabase/schemas/<schema>/scim.sql` for Supabase, the pg-delta per-schema
|
|
101
|
+
* layout; `permdock_scim.sql` otherwise.
|
|
102
|
+
*/
|
|
97
103
|
function scimOut(dialect, schema) {
|
|
98
104
|
return dialect === "supabase" ? `supabase/schemas/${schema}/scim.sql` : "permdock_scim.sql";
|
|
99
105
|
}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { t as byCodePoint } from "./compare-DTfyUunF.js";
|
|
3
|
+
//#region src/cli/generate.ts
|
|
4
|
+
const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
|
|
5
|
+
const MAX_DEPTH = 6;
|
|
6
|
+
function isSchemaKind(value) {
|
|
7
|
+
return value === "zod" || value === "valibot" || value === "arktype";
|
|
8
|
+
}
|
|
9
|
+
function schemaImport(kind) {
|
|
10
|
+
switch (kind) {
|
|
11
|
+
case "zod": return "import { z } from 'zod'";
|
|
12
|
+
case "valibot": return "import * as v from 'valibot'";
|
|
13
|
+
case "arktype": return "import { type } from 'arktype'";
|
|
14
|
+
default: return kind;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function emptySchema(kind) {
|
|
18
|
+
return schemaExpression(kind, { type: "object" });
|
|
19
|
+
}
|
|
20
|
+
function propertyKey(name) {
|
|
21
|
+
return IDENTIFIER.test(name) ? name : JSON.stringify(name);
|
|
22
|
+
}
|
|
23
|
+
function literalEnum(schema) {
|
|
24
|
+
const type = schema["type"];
|
|
25
|
+
const nullable = Array.isArray(type) && type.includes("null");
|
|
26
|
+
const all = schema["enum"];
|
|
27
|
+
const values = nullable && Array.isArray(all) ? all.filter((value) => value !== null) : all;
|
|
28
|
+
if (!Array.isArray(values) || values.length === 0 || !values.every((value) => typeof value === "string")) return;
|
|
29
|
+
return values;
|
|
30
|
+
}
|
|
31
|
+
function schemaType(schema) {
|
|
32
|
+
const type = schema["type"];
|
|
33
|
+
if (typeof type === "string") return type;
|
|
34
|
+
if (Array.isArray(type)) {
|
|
35
|
+
const named = type.filter((item) => item !== "null");
|
|
36
|
+
return named.length === 1 && typeof named[0] === "string" ? named[0] : void 0;
|
|
37
|
+
}
|
|
38
|
+
return isRecord(schema["properties"]) ? "object" : void 0;
|
|
39
|
+
}
|
|
40
|
+
function bound(node, key) {
|
|
41
|
+
const value = node[key];
|
|
42
|
+
return typeof value === "number" && Number.isFinite(value) ? value : void 0;
|
|
43
|
+
}
|
|
44
|
+
function isNullable(node, emit) {
|
|
45
|
+
const type = node["type"];
|
|
46
|
+
return emit.constraints && Array.isArray(type) && type.includes("null");
|
|
47
|
+
}
|
|
48
|
+
function formatOf(node, emit) {
|
|
49
|
+
const format = node["format"];
|
|
50
|
+
return emit.constraints && typeof format === "string" ? format : void 0;
|
|
51
|
+
}
|
|
52
|
+
/** `[method, value]` pairs for the bounds `keys` names, in order. */
|
|
53
|
+
function bounds(node, emit, keys) {
|
|
54
|
+
if (!emit.constraints) return [];
|
|
55
|
+
return keys.flatMap(([key, method]) => {
|
|
56
|
+
const value = bound(node, key);
|
|
57
|
+
return value === void 0 ? [] : [[method, value]];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
const NUMBER_BOUNDS = [
|
|
61
|
+
["minimum", "min"],
|
|
62
|
+
["exclusiveMinimum", "gt"],
|
|
63
|
+
["maximum", "max"],
|
|
64
|
+
["exclusiveMaximum", "lt"]
|
|
65
|
+
];
|
|
66
|
+
const LENGTH_BOUNDS = [["minLength", "min"], ["maxLength", "max"]];
|
|
67
|
+
const ITEM_BOUNDS = [["minItems", "min"], ["maxItems", "max"]];
|
|
68
|
+
const ZOD_FORMATS = {
|
|
69
|
+
uuid: "z.uuid()",
|
|
70
|
+
email: "z.email()",
|
|
71
|
+
uri: "z.url()",
|
|
72
|
+
"date-time": "z.iso.datetime({ offset: true })",
|
|
73
|
+
date: "z.iso.date()"
|
|
74
|
+
};
|
|
75
|
+
function zodChain(base, pairs) {
|
|
76
|
+
return `${base}${pairs.map(([method, value]) => `.${method}(${String(value)})`).join("")}`;
|
|
77
|
+
}
|
|
78
|
+
function zodOf(schema, emit, depth) {
|
|
79
|
+
const node = emit.resolve(schema);
|
|
80
|
+
const expression = zodNode(node, emit, depth);
|
|
81
|
+
return isNullable(node, emit) ? `${expression}.nullable()` : expression;
|
|
82
|
+
}
|
|
83
|
+
function zodNode(node, emit, depth) {
|
|
84
|
+
const values = literalEnum(node);
|
|
85
|
+
if (values !== void 0) return `z.enum(${JSON.stringify(values)})`;
|
|
86
|
+
const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
|
|
87
|
+
if (type === void 0) return "z.unknown()";
|
|
88
|
+
switch (type) {
|
|
89
|
+
case "string": return zodChain(ZOD_FORMATS[formatOf(node, emit) ?? ""] ?? "z.string()", bounds(node, emit, LENGTH_BOUNDS));
|
|
90
|
+
case "number": return zodChain("z.number()", bounds(node, emit, NUMBER_BOUNDS));
|
|
91
|
+
case "integer": return zodChain("z.number().int()", bounds(node, emit, NUMBER_BOUNDS));
|
|
92
|
+
case "boolean": return "z.boolean()";
|
|
93
|
+
case "array": return zodChain(`z.array(${isRecord(node["items"]) ? zodOf(node["items"], emit, depth + 1) : "z.unknown()"})`, bounds(node, emit, ITEM_BOUNDS));
|
|
94
|
+
case "object": {
|
|
95
|
+
const fields = objectFields(node).map(([name, child, required]) => {
|
|
96
|
+
const expression = zodOf(child, emit, depth + 1);
|
|
97
|
+
return `${propertyKey(name)}: ${required ? expression : `${expression}.optional()`}`;
|
|
98
|
+
});
|
|
99
|
+
return `z.object({${fields.length === 0 ? "" : ` ${fields.join(", ")} `}})`;
|
|
100
|
+
}
|
|
101
|
+
default: return "z.unknown()";
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** Each property of an object schema with whether `required` names it. */
|
|
105
|
+
function objectFields(node) {
|
|
106
|
+
const required = new Set(Array.isArray(node["required"]) ? node["required"] : []);
|
|
107
|
+
const properties = isRecord(node["properties"]) ? node["properties"] : {};
|
|
108
|
+
return Object.entries(properties).filter((entry) => isRecord(entry[1])).map(([name, child]) => [
|
|
109
|
+
name,
|
|
110
|
+
child,
|
|
111
|
+
required.has(name)
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
const VALIBOT_FORMATS = {
|
|
115
|
+
uuid: "v.uuid()",
|
|
116
|
+
email: "v.email()",
|
|
117
|
+
uri: "v.url()",
|
|
118
|
+
"date-time": "v.isoTimestamp()",
|
|
119
|
+
date: "v.isoDate()"
|
|
120
|
+
};
|
|
121
|
+
const VALIBOT_NUMBER_BOUNDS = [
|
|
122
|
+
["minimum", "minValue"],
|
|
123
|
+
["exclusiveMinimum", "gtValue"],
|
|
124
|
+
["maximum", "maxValue"],
|
|
125
|
+
["exclusiveMaximum", "ltValue"]
|
|
126
|
+
];
|
|
127
|
+
function valibotPipe(base, actions) {
|
|
128
|
+
return actions.length === 0 ? base : `v.pipe(${[base, ...actions].join(", ")})`;
|
|
129
|
+
}
|
|
130
|
+
function valibotLength(pairs) {
|
|
131
|
+
return pairs.map(([method, value]) => `v.${method === "min" ? "minLength" : "maxLength"}(${String(value)})`);
|
|
132
|
+
}
|
|
133
|
+
function valibotOf(schema, emit, depth) {
|
|
134
|
+
const node = emit.resolve(schema);
|
|
135
|
+
const expression = valibotNode(node, emit, depth);
|
|
136
|
+
return isNullable(node, emit) ? `v.nullable(${expression})` : expression;
|
|
137
|
+
}
|
|
138
|
+
function valibotNode(node, emit, depth) {
|
|
139
|
+
const values = literalEnum(node);
|
|
140
|
+
if (values !== void 0) return `v.picklist(${JSON.stringify(values)})`;
|
|
141
|
+
const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
|
|
142
|
+
if (type === void 0) return "v.unknown()";
|
|
143
|
+
const numeric = bounds(node, emit, VALIBOT_NUMBER_BOUNDS).map(([method, value]) => `v.${method}(${String(value)})`);
|
|
144
|
+
switch (type) {
|
|
145
|
+
case "string": {
|
|
146
|
+
const format = VALIBOT_FORMATS[formatOf(node, emit) ?? ""];
|
|
147
|
+
return valibotPipe("v.string()", [...format === void 0 ? [] : [format], ...valibotLength(bounds(node, emit, LENGTH_BOUNDS))]);
|
|
148
|
+
}
|
|
149
|
+
case "number": return valibotPipe("v.number()", numeric);
|
|
150
|
+
case "integer": return valibotPipe("v.number()", ["v.integer()", ...numeric]);
|
|
151
|
+
case "boolean": return "v.boolean()";
|
|
152
|
+
case "array": return valibotPipe(`v.array(${isRecord(node["items"]) ? valibotOf(node["items"], emit, depth + 1) : "v.unknown()"})`, valibotLength(bounds(node, emit, ITEM_BOUNDS)));
|
|
153
|
+
case "object": {
|
|
154
|
+
const fields = objectFields(node).map(([name, child, required]) => {
|
|
155
|
+
const expression = valibotOf(child, emit, depth + 1);
|
|
156
|
+
return `${propertyKey(name)}: ${required ? expression : `v.optional(${expression})`}`;
|
|
157
|
+
});
|
|
158
|
+
return `v.object({${fields.length === 0 ? "" : ` ${fields.join(", ")} `}})`;
|
|
159
|
+
}
|
|
160
|
+
default: return "v.unknown()";
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const ARKTYPE_FORMATS = {
|
|
164
|
+
uuid: "string.uuid",
|
|
165
|
+
email: "string.email",
|
|
166
|
+
uri: "string.url",
|
|
167
|
+
"date-time": "string.date.iso",
|
|
168
|
+
date: "string.date.iso"
|
|
169
|
+
};
|
|
170
|
+
/** `1 <= string <= 120`; arktype bounds apply to `string` and `number` only. */
|
|
171
|
+
function arktypeRange(keyword, pairs) {
|
|
172
|
+
const lower = pairs.find(([method]) => method === "min" || method === "gt");
|
|
173
|
+
const upper = pairs.find(([method]) => method === "max" || method === "lt");
|
|
174
|
+
const left = lower === void 0 ? "" : `${String(lower[1])} ${lower[0] === "gt" ? "<" : "<="} `;
|
|
175
|
+
const right = upper === void 0 ? "" : ` ${upper[0] === "lt" ? "<" : "<="} ${String(upper[1])}`;
|
|
176
|
+
return lower !== void 0 && upper === void 0 ? `${keyword} ${lower[0] === "gt" ? ">" : ">="} ${String(lower[1])}` : `${left}${keyword}${right}`;
|
|
177
|
+
}
|
|
178
|
+
/** An arktype definition: a string keyword or an object literal. */
|
|
179
|
+
function arktypeOf(schema, emit, depth) {
|
|
180
|
+
const node = emit.resolve(schema);
|
|
181
|
+
const definition = arktypeNode(node, emit, depth);
|
|
182
|
+
if (!isNullable(node, emit)) return definition;
|
|
183
|
+
return definition.startsWith("'") ? `'${definition.slice(1, -1)} | null'` : `[${definition}, '|', 'null']`;
|
|
184
|
+
}
|
|
185
|
+
function arktypeNode(node, emit, depth) {
|
|
186
|
+
const values = literalEnum(node);
|
|
187
|
+
if (values !== void 0) return JSON.stringify(values.map((value) => `'${value.replaceAll("'", "\\'")}'`).join(" | "));
|
|
188
|
+
const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
|
|
189
|
+
if (type === void 0) return "'unknown'";
|
|
190
|
+
switch (type) {
|
|
191
|
+
case "string": {
|
|
192
|
+
const format = ARKTYPE_FORMATS[formatOf(node, emit) ?? ""];
|
|
193
|
+
return format === void 0 ? `'${arktypeRange("string", bounds(node, emit, LENGTH_BOUNDS))}'` : `'${format}'`;
|
|
194
|
+
}
|
|
195
|
+
case "number": return `'${arktypeRange("number", bounds(node, emit, NUMBER_BOUNDS))}'`;
|
|
196
|
+
case "integer": return "'number.integer'";
|
|
197
|
+
case "boolean": return "'boolean'";
|
|
198
|
+
case "array": {
|
|
199
|
+
if (!isRecord(node["items"])) return "'unknown[]'";
|
|
200
|
+
const item = arktypeOf(node["items"], emit, depth + 1);
|
|
201
|
+
return item.startsWith("'") && !item.includes("|") ? `'${item.slice(1, -1)}[]'` : `[${item}, '[]']`;
|
|
202
|
+
}
|
|
203
|
+
case "object": {
|
|
204
|
+
const fields = objectFields(node).map(([name, child, required]) => `${JSON.stringify(required ? name : `${name}?`)}: ${arktypeOf(child, emit, depth + 1)}`);
|
|
205
|
+
return `{${fields.length === 0 ? "" : ` ${fields.join(", ")} `}}`;
|
|
206
|
+
}
|
|
207
|
+
default: return "'unknown'";
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* A validator expression for a JSON Schema object. Only the portable core
|
|
212
|
+
* (primitives, enums of strings, arrays, objects with `required`) is
|
|
213
|
+
* translated, plus with `constraints` the formats, bounds and nullable types;
|
|
214
|
+
* anything else becomes the validator's `unknown`.
|
|
215
|
+
*/
|
|
216
|
+
function schemaExpression(kind, schema, resolve = (node) => node, options = {}) {
|
|
217
|
+
const emit = {
|
|
218
|
+
resolve,
|
|
219
|
+
constraints: options.constraints === true
|
|
220
|
+
};
|
|
221
|
+
switch (kind) {
|
|
222
|
+
case "zod": return zodOf(schema, emit, 0);
|
|
223
|
+
case "valibot": return valibotOf(schema, emit, 0);
|
|
224
|
+
case "arktype": return `type(${arktypeOf(schema, emit, 0)})`;
|
|
225
|
+
default: return kind;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function renderList(value, indent) {
|
|
229
|
+
if (Array.isArray(value)) return JSON.stringify(value);
|
|
230
|
+
return JSON.stringify(value, null, 2).replaceAll("\n", `\n${indent}`);
|
|
231
|
+
}
|
|
232
|
+
function renderResource(resource, indent) {
|
|
233
|
+
const inner = `${indent} `;
|
|
234
|
+
const options = [
|
|
235
|
+
`${inner}id: '${(resource.id ?? "id").replaceAll("\\", "\\\\").replaceAll("'", "\\'")}',`,
|
|
236
|
+
`${inner}actions: ${renderList(resource.actions, inner)},`,
|
|
237
|
+
`${inner}collection: ${renderList(resource.collection, inner)},`
|
|
238
|
+
].join("\n");
|
|
239
|
+
return `${resource.schema === void 0 ? "resource({" : `resource(${resource.schema}, {`}\n${options}\n${indent}})`;
|
|
240
|
+
}
|
|
241
|
+
function insert(trie, resource) {
|
|
242
|
+
let node = trie;
|
|
243
|
+
for (const [index, segment] of resource.path.entries()) {
|
|
244
|
+
if (index === resource.path.length - 1) {
|
|
245
|
+
node.set(segment, resource);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const next = node.get(segment);
|
|
249
|
+
if (next instanceof Map) node = next;
|
|
250
|
+
else {
|
|
251
|
+
const created = /* @__PURE__ */ new Map();
|
|
252
|
+
node.set(segment, created);
|
|
253
|
+
node = created;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function renderTrie(trie, indent) {
|
|
258
|
+
return [...trie.entries()].toSorted(([a], [b]) => byCodePoint(a, b)).map(([segment, value]) => value instanceof Map ? `${indent}${propertyKey(segment)}: {\n${renderTrie(value, `${indent} `)}\n${indent}},` : `${indent}${propertyKey(segment)}: ${renderResource(value, indent)},`).join("\n");
|
|
259
|
+
}
|
|
260
|
+
/** A deterministic `definePermissions()` module with a `// @generated` header. */
|
|
261
|
+
function emitPermissionsModule(input) {
|
|
262
|
+
const trie = /* @__PURE__ */ new Map();
|
|
263
|
+
for (const resource of input.resources) insert(trie, resource);
|
|
264
|
+
const imports = ["import { definePermissions, resource } from 'permdock'", ...input.schema === void 0 ? [] : [schemaImport(input.schema)]];
|
|
265
|
+
const extras = Object.entries(input.exports ?? {}).map(([name, value]) => `export const ${name} = ${JSON.stringify(value, null, 2)} as const\n\n`);
|
|
266
|
+
return `// @generated by permdock ${input.generator}
|
|
267
|
+
${imports.join("\n")}
|
|
268
|
+
|
|
269
|
+
${extras.join("")}export const permissions = definePermissions({
|
|
270
|
+
${renderTrie(trie, " ")}
|
|
271
|
+
})
|
|
272
|
+
`;
|
|
273
|
+
}
|
|
274
|
+
//#endregion
|
|
275
|
+
export { schemaExpression as i, emptySchema as n, isSchemaKind as r, emitPermissionsModule as t };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep, t as freezeCopy } from "./freeze-
|
|
3
|
-
import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-
|
|
4
|
-
import { c as listPermissions, o as isPermission } from "./permission-registry-
|
|
5
|
-
import { i as readAppData, r as parseAppData, t as assertAppData } from "./app-data-
|
|
2
|
+
import { n as freezeDeep, t as freezeCopy } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-CUvURzHp.js";
|
|
4
|
+
import { c as listPermissions, o as isPermission } from "./permission-registry-B8tYxPIt.js";
|
|
5
|
+
import { i as readAppData, r as parseAppData, t as assertAppData } from "./app-data-UNNm07jV.js";
|
|
6
6
|
//#region src/core/vocabulary.ts
|
|
7
7
|
const ROLE_KIND = "role";
|
|
8
8
|
const PLAN_KIND = "plan";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { a as sole, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { a as expandRelation, c as isEdgeRelation, d as isSelfParented, l as isFieldRelation, m as restrictedStops, p as restrictedFor, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-
|
|
3
|
-
import { d as isoNow } from "./time-
|
|
4
|
-
import { f as scopeList, l as rootScope, s as resolveScope } from "./scopes-
|
|
2
|
+
import { a as expandRelation, c as isEdgeRelation, d as isSelfParented, l as isFieldRelation, m as restrictedStops, p as restrictedFor, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-8-pCScBO.js";
|
|
3
|
+
import { d as isoNow } from "./time-nR1JesoH.js";
|
|
4
|
+
import { f as scopeList, l as rootScope, s as resolveScope } from "./scopes-0Up_UA2t.js";
|
|
5
5
|
//#region src/core/grantee-conditions.ts
|
|
6
6
|
/**
|
|
7
|
-
* Where a graph relation starts on the row: its own id when the relation is
|
|
8
|
-
*
|
|
7
|
+
* Where a graph relation starts on the row: its own id when the relation is on
|
|
8
|
+
* the row's resource, the parent field when it is on the parent resource.
|
|
9
9
|
* `undefined` when `through` cannot reach the relation's resource.
|
|
10
10
|
*/
|
|
11
11
|
function relationStart(grantee, resource, target) {
|
|
@@ -25,10 +25,10 @@ function relationStart(grantee, resource, target) {
|
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
|
-
* A resource role held on self-parented `membershipResource` instances
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
28
|
+
* A resource role held on self-parented `membershipResource` instances (`ids`)
|
|
29
|
+
* reaches rows below them: the row itself when it is of that resource, its
|
|
30
|
+
* parent field when its parent is, walked up to the default depth. `undefined`
|
|
31
|
+
* when the row is not on such a chain.
|
|
32
32
|
*/
|
|
33
33
|
function resourceRoleCondition(resource, membershipResource, ids, resources) {
|
|
34
34
|
if (resource === void 0 || !isSelfParented(resources.get(membershipResource))) return;
|
|
@@ -72,9 +72,9 @@ function linkStop(resource, link) {
|
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
|
-
* The link path from the row to the grantee's resource: the row field of
|
|
76
|
-
*
|
|
77
|
-
*
|
|
75
|
+
* The link path from the row to the grantee's resource: the row field of the
|
|
76
|
+
* first link and each hop. `undefined` when a link is not declared or the path
|
|
77
|
+
* ends on another resource.
|
|
78
78
|
*/
|
|
79
79
|
function relationHops(grantee, resource, resources) {
|
|
80
80
|
const through = grantee.through;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { u as isoAt } from "./time-
|
|
3
|
-
import { f as scopeList, t as activeFor } from "./scopes-
|
|
4
|
-
import { o as flattenGrantee } from "./grantee-
|
|
5
|
-
import { r as relationCondition, t as inheritCondition } from "./grantee-conditions-
|
|
2
|
+
import { u as isoAt } from "./time-nR1JesoH.js";
|
|
3
|
+
import { f as scopeList, t as activeFor } from "./scopes-0Up_UA2t.js";
|
|
4
|
+
import { o as flattenGrantee } from "./grantee-Dke-9rd1.js";
|
|
5
|
+
import { r as relationCondition, t as inheritCondition } from "./grantee-conditions-BrYPe-w0.js";
|
|
6
6
|
//#region src/core/grantee-match.ts
|
|
7
7
|
function combineWhere(left, right) {
|
|
8
8
|
if (left === void 0) return right;
|
|
@@ -12,7 +12,10 @@ function combineWhere(left, right) {
|
|
|
12
12
|
conditions: [left, right]
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Seats (`Membership.entitlements`) held through memberships that apply under
|
|
17
|
+
* the active tenant.
|
|
18
|
+
*/
|
|
16
19
|
function seatsInTenant(subject, scopes) {
|
|
17
20
|
const principal = subject.principal;
|
|
18
21
|
if (principal === null) return [];
|
|
@@ -110,7 +113,10 @@ function matchOne(grantee, subject, now, resource, scopes, resources) {
|
|
|
110
113
|
default: return unknownGrantee(grantee);
|
|
111
114
|
}
|
|
112
115
|
}
|
|
113
|
-
/**
|
|
116
|
+
/**
|
|
117
|
+
* A kind this build does not know, from a forged snapshot or a newer document,
|
|
118
|
+
* never matches.
|
|
119
|
+
*/
|
|
114
120
|
function unknownGrantee(_grantee) {
|
|
115
121
|
return {
|
|
116
122
|
matched: false,
|
|
@@ -19,9 +19,9 @@ type RelationsMapping = {
|
|
|
19
19
|
/** The table of each resource the graph reads; default the resource name. */
|
|
20
20
|
readonly tables?: Readonly<Record<string, string>>;
|
|
21
21
|
/**
|
|
22
|
-
* A closure table (`resource`, `ancestor`, `descendant`, `depth`) such as
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* A closure table (`resource`, `ancestor`, `descendant`, `depth`) such as the
|
|
23
|
+
* one `permdock rls` keeps. Without it, parent walks are a bounded recursive
|
|
24
|
+
* query over the resource's own table.
|
|
25
25
|
*/
|
|
26
26
|
readonly closure?: string;
|
|
27
27
|
};
|
package/dist/h3/index.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as PermDock } from "../permdock-
|
|
3
|
-
import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-
|
|
4
|
-
import { a as ProtectTarget, n as FetchAdapterOptions, r as FetchProtect, t as ContextReader } from "../fetch-adapter-
|
|
1
|
+
import { T as Policy, Zt as Snapshot, j as PolicyVocabulary, pr as Principal } from "../policy-types-DGIO_gxq.js";
|
|
2
|
+
import { a as PermDock } from "../permdock-CprAPN3w.js";
|
|
3
|
+
import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-CyRN0-Cd.js";
|
|
4
|
+
import { a as ProtectTarget, n as FetchAdapterOptions, r as FetchProtect, t as ContextReader } from "../fetch-adapter-BIbBAtPZ.js";
|
|
5
5
|
import { EventHandler, H3Event, H3EventContext, Middleware } from "h3";
|
|
6
6
|
//#region src/h3/create.d.ts
|
|
7
7
|
type H3PermDockOptions<TUser = unknown> = FetchAdapterOptions<H3Event, TUser>;
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* `event.context` once `middleware()` or `protect` ran: the instance and the
|
|
10
|
+
* loaded row.
|
|
11
|
+
*/
|
|
9
12
|
type H3PermDockContext<TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = H3EventContext & {
|
|
10
13
|
readonly permdock: PermDock<V>;
|
|
11
14
|
readonly permdockData: TData;
|
|
@@ -23,8 +26,8 @@ type H3PermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
|
23
26
|
readonly getSnapshot: (event: H3Event, query?: SnapshotQuery) => Promise<Snapshot>;
|
|
24
27
|
/**
|
|
25
28
|
* Types `event.context.permdock` and `permdockData` for the handler, builds
|
|
26
|
-
* the instance when no middleware set it, and answers a thrown PermDock
|
|
27
|
-
*
|
|
29
|
+
* the instance when no middleware set it, and answers a thrown PermDock error
|
|
30
|
+
* with Problem Details.
|
|
28
31
|
*/
|
|
29
32
|
readonly withPermDock: <TData = unknown>(handler: (event: H3PermDockEvent<TData, V>) => unknown) => EventHandler;
|
|
30
33
|
readonly connection: (event: H3Event, connectionOptions?: ConnectionOptions) => Promise<Connection>;
|
package/dist/h3/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { l as InvalidSignatureError, p as webBotAuthVerifier, u as discoverViaSignatureAgent } from "../evaluations-
|
|
2
|
-
import { i as decorate } from "../bind-
|
|
3
|
-
import { t as fetchAdapter } from "../fetch-adapter-
|
|
1
|
+
import { l as InvalidSignatureError, p as webBotAuthVerifier, u as discoverViaSignatureAgent } from "../evaluations-IBceAeKT.js";
|
|
2
|
+
import { i as decorate } from "../bind-BNQA9JK9.js";
|
|
3
|
+
import { t as fetchAdapter } from "../fetch-adapter-dPTgJVHd.js";
|
|
4
4
|
//#region src/h3/create.ts
|
|
5
5
|
function createPermDock(policy, options) {
|
|
6
6
|
const adapter = fetchAdapter(policy, options, "h3", (event) => event.req);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/client/headers.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The `PermDock-Approval` header for a resume; a `TypeError` for a token that
|
|
4
|
+
* is not an RFC 9651 sf-token.
|
|
5
|
+
*/
|
|
6
|
+
declare function approvalHeaders(token: string): {
|
|
7
|
+
readonly "PermDock-Approval": string;
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { approvalHeaders as t };
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
3
|
-
import { r as approverLeaves } from "./approvers-
|
|
4
|
-
import {
|
|
5
|
-
import { i as getRegistry, n as findPermission } from "./permission-registry-
|
|
6
|
-
import { t as assertAppData } from "./app-data-
|
|
7
|
-
import { a as durationOf, i as dateAt, u as isoAt } from "./time-
|
|
8
|
-
import { r as relationReader, t as pendingRelations } from "./relations-
|
|
9
|
-
import { n as resolveRelated } from "./relation-walk-
|
|
2
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { r as approverLeaves } from "./approvers-B4r0N_Uz.js";
|
|
4
|
+
import { n as describe } from "./describe-Bb4hGK5d.js";
|
|
5
|
+
import { i as getRegistry, n as findPermission } from "./permission-registry-B8tYxPIt.js";
|
|
6
|
+
import { t as assertAppData } from "./app-data-UNNm07jV.js";
|
|
7
|
+
import { a as durationOf, i as dateAt, u as isoAt } from "./time-nR1JesoH.js";
|
|
8
|
+
import { r as relationReader, t as pendingRelations } from "./relations-BxvRvDHK.js";
|
|
9
|
+
import { n as resolveRelated } from "./relation-walk-DK_gkgL7.js";
|
|
10
10
|
import { n as toWireDelegation } from "./wire-delegation-Cv3W2eaM.js";
|
|
11
|
-
import { i as approverRelationKey, s as ApprovalError, t as APPROVAL_HEADER } from "./types-
|
|
12
|
-
import { n as assertApprover, u as listAllApprovals } from "./store-
|
|
13
|
-
import { n as parseApprovalHeader } from "./approval-header-
|
|
11
|
+
import { i as approverRelationKey, s as ApprovalError, t as APPROVAL_HEADER } from "./types-CcUXciSj.js";
|
|
12
|
+
import { n as assertApprover, u as listAllApprovals } from "./store-RNFvaJJv.js";
|
|
13
|
+
import { n as parseApprovalHeader } from "./approval-header-8QV6MU4H.js";
|
|
14
14
|
//#region src/approvals/relations.ts
|
|
15
15
|
const DEFAULT_PARENT_DEPTH = 16;
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Every approver a request names: `by`, each stage and its escalation, and
|
|
18
|
+
* `escalation.to`, inside `anyOf` groups too.
|
|
19
|
+
*/
|
|
17
20
|
function requestApprovers(approvers) {
|
|
18
21
|
return [
|
|
19
22
|
...approverLeaves(approvers.by),
|
|
@@ -31,7 +34,10 @@ async function settled(read, unread, cache) {
|
|
|
31
34
|
await Promise.all(pending);
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* The id of `item.resource` the walk starts from, after following `through`
|
|
39
|
+
* links.
|
|
40
|
+
*/
|
|
35
41
|
async function startOf(item, resource, id, reader, cache, registry) {
|
|
36
42
|
if (!Array.isArray(item.through)) return resource === item.resource ? id : void 0;
|
|
37
43
|
let current = resource;
|
|
@@ -61,8 +67,8 @@ function depthOf(item) {
|
|
|
61
67
|
/**
|
|
62
68
|
* The relation approvers of `request` that `subject` holds on its resource,
|
|
63
69
|
* keyed by `approverRelationKey`, for `ApprovalVerdict.relations`. Reads go
|
|
64
|
-
* through `relations` by the request's resource id; a request without an id,
|
|
65
|
-
*
|
|
70
|
+
* through `relations` by the request's resource id; a request without an id, a
|
|
71
|
+
* missing source or a read that fails holds nothing.
|
|
66
72
|
*/
|
|
67
73
|
async function approverRelations(request, subject, options) {
|
|
68
74
|
const approvers = request.approvers;
|
|
@@ -118,7 +124,10 @@ function approverPermissions(request, approver) {
|
|
|
118
124
|
}
|
|
119
125
|
});
|
|
120
126
|
}
|
|
121
|
-
/**
|
|
127
|
+
/**
|
|
128
|
+
* The permission approvers `subject` holds on `request`, read through
|
|
129
|
+
* `permdockFor`.
|
|
130
|
+
*/
|
|
122
131
|
async function heldPermissions(request, subject, permdockFor) {
|
|
123
132
|
if (permdockFor === void 0 || request.approvers === void 0) return [];
|
|
124
133
|
try {
|
|
@@ -156,9 +165,9 @@ function summarizeSubject(subject) {
|
|
|
156
165
|
});
|
|
157
166
|
}
|
|
158
167
|
/**
|
|
159
|
-
* The window (`meta.ttl`, else the store's `ttl`, else the default) capped by
|
|
160
|
-
* `approval.ttl`: a grant shortens how long a request stays open,
|
|
161
|
-
* extends it.
|
|
168
|
+
* The window (`meta.ttl`, else the store's `ttl`, else the default) capped by
|
|
169
|
+
* the grant's `approval.ttl`: a grant shortens how long a request stays open,
|
|
170
|
+
* never extends it.
|
|
162
171
|
*/
|
|
163
172
|
function approvalTtl(storeTtl, approval) {
|
|
164
173
|
if (storeTtl !== void 0 && durationOf(storeTtl) === void 0) throw new RangeError(`PermDock: approval ttl must be a whole number of seconds above 0, got ${String(storeTtl)}`);
|
|
@@ -391,7 +400,10 @@ async function cancelApprovals(store, filter, meta) {
|
|
|
391
400
|
}
|
|
392
401
|
}))).filter(Boolean).length;
|
|
393
402
|
}
|
|
394
|
-
/**
|
|
403
|
+
/**
|
|
404
|
+
* The token of a `PermDock-Approval` field: one RFC 9651 sf-token Item with no
|
|
405
|
+
* parameters, else `undefined`.
|
|
406
|
+
*/
|
|
395
407
|
function readApprovalHeader(headers) {
|
|
396
408
|
return parseApprovalHeader(headers.get(APPROVAL_HEADER));
|
|
397
409
|
}
|
|
@@ -405,14 +417,14 @@ function resumeFromHeader(store, headers, now) {
|
|
|
405
417
|
}
|
|
406
418
|
/**
|
|
407
419
|
* The token to resume `decision` with when the caller carries none: the
|
|
408
|
-
* decision's own token when the store holds an approved or rejected request
|
|
409
|
-
*
|
|
410
|
-
*
|
|
411
|
-
*
|
|
412
|
-
*
|
|
413
|
-
*
|
|
414
|
-
*
|
|
415
|
-
*
|
|
420
|
+
* decision's own token when the store holds an approved or rejected request for
|
|
421
|
+
* it, so `resumeDecision` resumes (or denies) the call without the caller
|
|
422
|
+
* passing the token back. The token already binds permission, resource (or the
|
|
423
|
+
* call's data when there is no row id), subject and actor. A pending request
|
|
424
|
+
* counts only with `denyPending: true`, which makes the call deny with
|
|
425
|
+
* `approval-pending` instead of asking again. `undefined` when the decision
|
|
426
|
+
* needs no approval, there is no store, or the store has no unexpired request
|
|
427
|
+
* for the token; a store that throws counts as none.
|
|
416
428
|
*/
|
|
417
429
|
async function storedApprovalToken(store, decision, options = {}) {
|
|
418
430
|
if (store === void 0 || decision.outcome !== "approval-required") return;
|
package/dist/hono/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { T as Policy, j as PolicyVocabulary,
|
|
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, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-
|
|
6
|
-
import { t as ServerAdapterOptions } from "../bind-
|
|
1
|
+
import { T as Policy, j as PolicyVocabulary, pr as Principal } from "../policy-types-DGIO_gxq.js";
|
|
2
|
+
import { u as Permission } from "../permission-types-CAY-GU7e.js";
|
|
3
|
+
import { a as PermDock } from "../permdock-CprAPN3w.js";
|
|
4
|
+
import { n as RevocationFeed } from "../revocations-BaUXHM1N.js";
|
|
5
|
+
import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-CyRN0-Cd.js";
|
|
6
|
+
import { t as ServerAdapterOptions } from "../bind-YYjvfpB9.js";
|
|
7
7
|
import { Context, Hono, MiddlewareHandler } from "hono";
|
|
8
8
|
import { SSEMessage, SSEStreamingApi } from "hono/streaming";
|
|
9
9
|
import { WSEvents } from "hono/ws";
|
|
@@ -20,19 +20,25 @@ type HonoPermDockEnv<TData = unknown, V extends PolicyVocabulary = PolicyVocabul
|
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
22
|
type HonoPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* The `PermDock` for one request, for code the middleware does not run
|
|
25
|
+
* before.
|
|
26
|
+
*/
|
|
24
27
|
readonly getPermDock: (c: Context) => Promise<PermDock<V>>;
|
|
25
28
|
readonly middleware: () => MiddlewareHandler<HonoPermDockEnv<unknown, V>>;
|
|
26
29
|
readonly protect: <TData = unknown>(permission: Permission | null, data?: (c: Context) => TData | Promise<TData>, protectOptions?: ProtectOptions) => MiddlewareHandler<HonoPermDockEnv<NonNullable<TData>, V>>;
|
|
27
30
|
/** A long-lived connection for the request behind `c`. */
|
|
28
31
|
readonly connection: (c: Context, connectionOptions?: ConnectionOptions) => Promise<Connection>;
|
|
29
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* `upgradeWebSocket` events that close with `1008` when the connection
|
|
34
|
+
* aborts.
|
|
35
|
+
*/
|
|
30
36
|
readonly socket: <T = unknown>(connection: Connection, events: WSEvents<T>) => WSEvents<T>;
|
|
31
37
|
/**
|
|
32
38
|
* Writes `source` to a `streamSSE` stream, dropping items the subscriber
|
|
33
39
|
* cannot read, and resolves when it ends: after an `event: permdock` frame
|
|
34
|
-
* when the connection aborts, when the client disconnects, or when the
|
|
35
|
-
*
|
|
40
|
+
* when the connection aborts, when the client disconnects, or when the source
|
|
41
|
+
* is done. Await it as the last statement of the callback.
|
|
36
42
|
*/
|
|
37
43
|
readonly sse: <T>(connection: Connection, stream: SSEStreamingApi, source: AsyncIterable<T>, options?: SseOptions<T>) => Promise<void>;
|
|
38
44
|
readonly permdockHandler: () => Hono;
|