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
package/dist/ssf/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import { o as statusProblem } from "../problem-details-
|
|
3
|
-
import { o as epochSeconds } from "../time-
|
|
4
|
-
import { n as readBodyText } from "../body-text-
|
|
5
|
-
import {
|
|
6
|
-
import { t as cancelApprovals } from "../helpers-
|
|
7
|
-
import { i as issuerFromDiscovery, t as joseTokenVerifier } from "../verifier-
|
|
8
|
-
import { t as memoryReplayStore } from "../replay-
|
|
2
|
+
import { o as statusProblem } from "../problem-details-CLDgX1KV.js";
|
|
3
|
+
import { o as epochSeconds } from "../time-nR1JesoH.js";
|
|
4
|
+
import { n as readBodyText } from "../body-text-DQhcmqdY.js";
|
|
5
|
+
import { f as validationProblem, l as problemResponse, o as methodNotAllowed, s as notFoundProblem } from "../problem-BVLHFK33.js";
|
|
6
|
+
import { t as cancelApprovals } from "../helpers-DJicaG6f.js";
|
|
7
|
+
import { i as issuerFromDiscovery, t as joseTokenVerifier } from "../verifier-DUV6pLqZ.js";
|
|
8
|
+
import { t as memoryReplayStore } from "../replay-BU09ad4L.js";
|
|
9
9
|
import { t as timeoutSignal } from "../timeout-D51niuQP.js";
|
|
10
10
|
//#region src/ssf/claims.ts
|
|
11
11
|
function asSubject(mapped, session, issuer) {
|
|
@@ -162,8 +162,8 @@ const PUSH_TIMEOUT_MS = 3e4;
|
|
|
162
162
|
const MAX_ERROR_BYTES = 16384;
|
|
163
163
|
/**
|
|
164
164
|
* Signs one event as an RFC 8417 Security Event Token (`typ: secevent+jwt`):
|
|
165
|
-
* `sub_id` is the event's subject and `events` holds exactly one entry, as
|
|
166
|
-
*
|
|
165
|
+
* `sub_id` is the event's subject and `events` holds exactly one entry, as SSF
|
|
166
|
+
* 1.0 requires. `iss` is the signer's own.
|
|
167
167
|
*/
|
|
168
168
|
function signSet(event, signer, options) {
|
|
169
169
|
return signer.sign(compact({
|
|
@@ -200,10 +200,10 @@ async function errorBody(response) {
|
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
/**
|
|
203
|
-
* Pushes one SET to a receiver (RFC 8935). A `2xx` is delivery; a `400`
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
203
|
+
* Pushes one SET to a receiver (RFC 8935). A `2xx` is delivery; a `400` maps
|
|
204
|
+
* the receiver's `err` to a cause; `401` and `403` are `authentication-failed`
|
|
205
|
+
* and `access-denied`; a network failure, a timeout, a `429` or a `5xx` is
|
|
206
|
+
* `unavailable` with `retry: true`. Never throws.
|
|
207
207
|
*/
|
|
208
208
|
async function pushSet(set, options) {
|
|
209
209
|
const fetchFn = options.fetch ?? globalThis.fetch;
|
|
@@ -295,7 +295,10 @@ function risc(name, subject, payload) {
|
|
|
295
295
|
payload: Object.freeze(payload)
|
|
296
296
|
});
|
|
297
297
|
}
|
|
298
|
-
/**
|
|
298
|
+
/**
|
|
299
|
+
* RISC 1.0 event builders for the events PermDock's receiver treats as revoking
|
|
300
|
+
* every session.
|
|
301
|
+
*/
|
|
299
302
|
const riscEvents = Object.freeze({
|
|
300
303
|
accountDisabled: (input) => risc("account-disabled", input.subject, compact({ reason: input.reason })),
|
|
301
304
|
accountPurged: (input) => risc("account-purged", input.subject, {}),
|
|
@@ -437,8 +440,8 @@ const CHANGED_EVENTS = /* @__PURE__ */ new Set([
|
|
|
437
440
|
]);
|
|
438
441
|
/**
|
|
439
442
|
* When the replay record of a SET may be dropped: its `exp`, or for a SET
|
|
440
|
-
* without one (RFC 8417 section 2.2) the end of its acceptance window, so
|
|
441
|
-
*
|
|
443
|
+
* without one (RFC 8417 section 2.2) the end of its acceptance window, so the
|
|
444
|
+
* same `jti` cannot pass verification again once the record is gone.
|
|
442
445
|
*/
|
|
443
446
|
function replayExpiresAt(claims, clockTolerance = 0, maxTokenAge = DEFAULT_SET_MAX_AGE) {
|
|
444
447
|
if (typeof claims["exp"] === "number") return claims["exp"] + clockTolerance;
|
|
@@ -875,13 +878,16 @@ function createPermDock(policy, options) {
|
|
|
875
878
|
}
|
|
876
879
|
//#endregion
|
|
877
880
|
//#region src/ssf/set-queue.ts
|
|
878
|
-
/**
|
|
881
|
+
/**
|
|
882
|
+
* The largest poll request body read: acknowledgements and errors for many
|
|
883
|
+
* SETs.
|
|
884
|
+
*/
|
|
879
885
|
const MAX_POLL_BYTES = 262144;
|
|
880
886
|
const DEFAULT_MAX_EVENTS = 100;
|
|
881
887
|
/**
|
|
882
888
|
* An in-process `SetQueue`: pending SETs per stream in insertion order. A
|
|
883
|
-
* process restart loses them; a deployment with more than one instance needs
|
|
884
|
-
*
|
|
889
|
+
* process restart loses them; a deployment with more than one instance needs a
|
|
890
|
+
* shared queue.
|
|
885
891
|
*/
|
|
886
892
|
function memorySetQueue() {
|
|
887
893
|
const streams = /* @__PURE__ */ new Map();
|
|
@@ -943,10 +949,10 @@ function parsePollRequest(text) {
|
|
|
943
949
|
};
|
|
944
950
|
}
|
|
945
951
|
/**
|
|
946
|
-
* The RFC 8936 poll endpoint over a `SetQueue`. It applies the request's
|
|
947
|
-
*
|
|
948
|
-
*
|
|
949
|
-
*
|
|
952
|
+
* The RFC 8936 poll endpoint over a `SetQueue`. It applies the request's `acks`
|
|
953
|
+
* and `setErrs`, then answers `{ sets, moreAvailable }` with up to `maxEvents`
|
|
954
|
+
* pending SETs. It answers at once whatever `returnImmediately` says, which RFC
|
|
955
|
+
* 8936 section 2.4 allows.
|
|
950
956
|
*/
|
|
951
957
|
function setPollHandler(options) {
|
|
952
958
|
const cap = options.maxEvents ?? DEFAULT_MAX_EVENTS;
|
|
@@ -1066,9 +1072,9 @@ function readDelivery(value) {
|
|
|
1066
1072
|
});
|
|
1067
1073
|
}
|
|
1068
1074
|
/**
|
|
1069
|
-
* The receiver-supplied properties of a stream request (SSF 1.0 section
|
|
1070
|
-
*
|
|
1071
|
-
*
|
|
1075
|
+
* The receiver-supplied properties of a stream request (SSF 1.0 section 8.1.1).
|
|
1076
|
+
* `previous` keeps the properties a PATCH leaves out; without it an absent
|
|
1077
|
+
* property takes its default. Transmitter-supplied properties are ignored.
|
|
1072
1078
|
*/
|
|
1073
1079
|
function readProperties(body, previous) {
|
|
1074
1080
|
let delivery = previous?.delivery ?? { method: "urn:ietf:rfc:8936" };
|
|
@@ -1110,7 +1116,10 @@ async function owned(streams, id, owner) {
|
|
|
1110
1116
|
const stream = await streams.get(id);
|
|
1111
1117
|
return stream?.owner === owner ? stream : notFoundProblem();
|
|
1112
1118
|
}
|
|
1113
|
-
/**
|
|
1119
|
+
/**
|
|
1120
|
+
* Acknowledges every pending SET of `stream`; a queue that never empties is
|
|
1121
|
+
* read at most until it repeats.
|
|
1122
|
+
*/
|
|
1114
1123
|
async function drain(queue, stream) {
|
|
1115
1124
|
let previous;
|
|
1116
1125
|
for (;;) {
|
|
@@ -1121,7 +1130,10 @@ async function drain(queue, stream) {
|
|
|
1121
1130
|
await Promise.all(pending.map(({ jti }) => Promise.resolve(queue.ack(stream, jti))));
|
|
1122
1131
|
}
|
|
1123
1132
|
}
|
|
1124
|
-
/**
|
|
1133
|
+
/**
|
|
1134
|
+
* Pushes the SETs a paused push stream held, oldest first, until one may be
|
|
1135
|
+
* retried.
|
|
1136
|
+
*/
|
|
1125
1137
|
async function flush(queue, configuration, fetchFn) {
|
|
1126
1138
|
const { stream_id: stream, delivery } = configuration;
|
|
1127
1139
|
if (delivery.endpoint_url === void 0) return;
|
|
@@ -1170,9 +1182,9 @@ async function deliver(stream, status, jti, set, options) {
|
|
|
1170
1182
|
}
|
|
1171
1183
|
/**
|
|
1172
1184
|
* Signs `event` once per distinct stream audience and delivers it to every
|
|
1173
|
-
* stream that is not disabled and has the event in `events_delivered`: a
|
|
1174
|
-
*
|
|
1175
|
-
*
|
|
1185
|
+
* stream that is not disabled and has the event in `events_delivered`: a push
|
|
1186
|
+
* stream through `pushSet`, a poll stream or a paused stream into the queue.
|
|
1187
|
+
* Answers one row per stream that took the event.
|
|
1176
1188
|
*/
|
|
1177
1189
|
async function fanOutSet(event, options) {
|
|
1178
1190
|
const groups = /* @__PURE__ */ new Map();
|
|
@@ -1203,10 +1215,10 @@ async function fanOutSet(event, options) {
|
|
|
1203
1215
|
}
|
|
1204
1216
|
/**
|
|
1205
1217
|
* An SSF 1.0 transmitter as one Fetch handler, routed by path suffix:
|
|
1206
|
-
* `/.well-known/ssf-configuration` (section 7.1), `/stream` (8.1.1),
|
|
1207
|
-
*
|
|
1208
|
-
*
|
|
1209
|
-
*
|
|
1218
|
+
* `/.well-known/ssf-configuration` (section 7.1), `/stream` (8.1.1), `/status`
|
|
1219
|
+
* (8.1.2), `/verify` (8.1.4) and `/poll` (RFC 8936). Each receiver sees only
|
|
1220
|
+
* the streams it created. Disabling or deleting a stream drops its pending
|
|
1221
|
+
* SETs; a paused stream holds them until it is enabled again.
|
|
1210
1222
|
*/
|
|
1211
1223
|
function ssfTransmitter(options) {
|
|
1212
1224
|
const base = (options.endpoint ?? options.issuer).replace(/\/+$/u, "");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { m as rfc3339, p as nowSeconds } from "./time-
|
|
2
|
-
import { n as readBodyText } from "./body-text-
|
|
1
|
+
import { m as rfc3339, p as nowSeconds } from "./time-nR1JesoH.js";
|
|
2
|
+
import { n as readBodyText } from "./body-text-DQhcmqdY.js";
|
|
3
3
|
//#region src/server/standard-webhooks.ts
|
|
4
4
|
const DEFAULT_TOLERANCE = 300;
|
|
5
5
|
const JWKS_TTL_SECONDS = 300;
|
|
@@ -41,9 +41,9 @@ function validId(id) {
|
|
|
41
41
|
return id.length > 0 && id.length <= 256 && !/\s/u.test(id);
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
|
-
* Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_`
|
|
45
|
-
*
|
|
46
|
-
*
|
|
44
|
+
* Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_` secret,
|
|
45
|
+
* `v1a` Ed25519 with a private JWK. Throws on an invalid key or id, because
|
|
46
|
+
* both come from the sender's own configuration.
|
|
47
47
|
*/
|
|
48
48
|
function webhookSigner(options) {
|
|
49
49
|
if (options.keys.length === 0) throw new TypeError("PermDock: webhookSigner() needs at least one key");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { l as ReplayStore } from "./types-
|
|
1
|
+
import { Wt as Instant, dr as JsonWebKeyLike } from "./policy-types-DGIO_gxq.js";
|
|
2
|
+
import { l as ReplayStore } from "./types-DsHGPtkR.js";
|
|
3
3
|
//#region src/server/standard-webhooks.d.ts
|
|
4
4
|
/** The three Standard Webhooks headers a delivery carries. */
|
|
5
5
|
type WebhookHeaders = {
|
|
@@ -34,7 +34,7 @@ type WebhookMessage = {
|
|
|
34
34
|
readonly now?: Instant;
|
|
35
35
|
};
|
|
36
36
|
type WebhookSigner = {
|
|
37
|
-
sign(message: WebhookMessage)
|
|
37
|
+
sign: (message: WebhookMessage) => Promise<WebhookHeaders>;
|
|
38
38
|
};
|
|
39
39
|
/** An Ed25519 public JWK set for `v1a`, or the URL that serves one. */
|
|
40
40
|
type WebhookJwks = {
|
|
@@ -70,12 +70,12 @@ type VerifiedWebhookMessage = {
|
|
|
70
70
|
};
|
|
71
71
|
type WebhookVerifier = {
|
|
72
72
|
/** Never throws; claims the `webhook-id` only after a signature verifies. */
|
|
73
|
-
verify(input: WebhookInput)
|
|
73
|
+
verify: (input: WebhookInput) => Promise<VerifiedWebhookMessage>;
|
|
74
74
|
};
|
|
75
75
|
/**
|
|
76
|
-
* Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_`
|
|
77
|
-
*
|
|
78
|
-
*
|
|
76
|
+
* Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_` secret,
|
|
77
|
+
* `v1a` Ed25519 with a private JWK. Throws on an invalid key or id, because
|
|
78
|
+
* both come from the sender's own configuration.
|
|
79
79
|
*/
|
|
80
80
|
declare function webhookSigner(options: WebhookSignerOptions): WebhookSigner;
|
|
81
81
|
/**
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
3
|
-
import { i as flattenApprovers } from "./approvers-
|
|
4
|
-
import { a as durationOf, i as dateAt } from "./time-
|
|
5
|
-
import { c as rootMembershipId } from "./scopes-
|
|
6
|
-
import { n as matchGrantee } from "./grantee-match-
|
|
7
|
-
import { a as escalationOpenAt, i as approverRelationKey, o as stageEscalationOpenAt, r as approvalQuorum, s as ApprovalError } from "./types-
|
|
2
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { i as flattenApprovers } from "./approvers-B4r0N_Uz.js";
|
|
4
|
+
import { a as durationOf, i as dateAt } from "./time-nR1JesoH.js";
|
|
5
|
+
import { c as rootMembershipId } from "./scopes-0Up_UA2t.js";
|
|
6
|
+
import { n as matchGrantee } from "./grantee-match-7RZZvoT_.js";
|
|
7
|
+
import { a as escalationOpenAt, i as approverRelationKey, o as stageEscalationOpenAt, r as approvalQuorum, s as ApprovalError } from "./types-CcUXciSj.js";
|
|
8
8
|
//#region src/approvals/page.ts
|
|
9
9
|
const DEFAULT_PAGE_SIZE = 50;
|
|
10
10
|
const MAX_PAGE_SIZE = 200;
|
|
@@ -26,7 +26,10 @@ function compare(a, b) {
|
|
|
26
26
|
function encodeApprovalCursor(request) {
|
|
27
27
|
return JSON.stringify(positionOf(request));
|
|
28
28
|
}
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* The `(createdAt, token)` position a `next` cursor names, or `null` for one
|
|
31
|
+
* that does not parse.
|
|
32
|
+
*/
|
|
30
33
|
function decodeApprovalCursor(cursor) {
|
|
31
34
|
try {
|
|
32
35
|
const parsed = JSON.parse(cursor);
|
|
@@ -38,8 +41,8 @@ function decodeApprovalCursor(cursor) {
|
|
|
38
41
|
/**
|
|
39
42
|
* Pages already-filtered requests in `(createdAt, token)` order, as the
|
|
40
43
|
* built-in stores do: `limit` within 1 to 200 (50 when absent), `cursor` from
|
|
41
|
-
* the previous page's `next`, and no items for a cursor that does not parse.
|
|
42
|
-
*
|
|
44
|
+
* the previous page's `next`, and no items for a cursor that does not parse. A
|
|
45
|
+
* custom `ApprovalStore` that filters in memory returns it from `list`.
|
|
43
46
|
*/
|
|
44
47
|
function pageApprovals(matching, query) {
|
|
45
48
|
const after = query.cursor === void 0 ? void 0 : decodeApprovalCursor(query.cursor);
|
|
@@ -53,7 +56,10 @@ function pageApprovals(matching, query) {
|
|
|
53
56
|
next: encodeApprovalCursor(last)
|
|
54
57
|
} : { items };
|
|
55
58
|
}
|
|
56
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Every matching request of `store`, following `next` until the last page (at
|
|
61
|
+
* most 1000 pages of 200).
|
|
62
|
+
*/
|
|
57
63
|
function listAllApprovals(store, filter) {
|
|
58
64
|
const collect = async (cursor, pages, items) => {
|
|
59
65
|
const page = await store.list(cursor === void 0 ? {
|
|
@@ -74,8 +80,8 @@ function listAllApprovals(store, filter) {
|
|
|
74
80
|
/**
|
|
75
81
|
* The tenants a subject acts in for approvals: `principal.tenant` and the
|
|
76
82
|
* instance of every membership at the first scope. A membership at a nested
|
|
77
|
-
* scope (a team, or one with `within`) names no tenant, even when its parent
|
|
78
|
-
*
|
|
83
|
+
* scope (a team, or one with `within`) names no tenant, even when its parent is
|
|
84
|
+
* the request's tenant.
|
|
79
85
|
*/
|
|
80
86
|
function membershipTenants(subject) {
|
|
81
87
|
const principal = subject.principal;
|
|
@@ -172,14 +178,14 @@ function vouchedRule(verdict) {
|
|
|
172
178
|
return typeof verdict.vouched === "string" && verdict.vouched !== "" ? verdict.vouched : void 0;
|
|
173
179
|
}
|
|
174
180
|
/**
|
|
175
|
-
* Refuses `by` as an approver of `request`, or returns the index of the
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
181
|
+
* Refuses `by` as an approver of `request`, or returns the index of the stage
|
|
182
|
+
* the approval counts for (`undefined` without `stages`). Eligibility is
|
|
183
|
+
* `approvers.by` or, under `stages`, the first incomplete stage (`sequential`)
|
|
184
|
+
* or any incomplete stage (`all`); `approvers.escalation.to` is eligible too
|
|
185
|
+
* once the request has waited `escalation.after`. A principal who already
|
|
186
|
+
* approved is refused, so one person never completes two stages. `relations`
|
|
187
|
+
* are the relation approvers `by` holds on the request's resource (see
|
|
188
|
+
* `ApprovalVerdict.relations`).
|
|
183
189
|
*/
|
|
184
190
|
function assertApprover(request, by, requireDistinctApprover, at, relations = [], permissions = []) {
|
|
185
191
|
const now = dateAt(at);
|
|
@@ -219,12 +225,12 @@ function isSystemSubject(by) {
|
|
|
219
225
|
return by.actor?.kind === "system";
|
|
220
226
|
}
|
|
221
227
|
/**
|
|
222
|
-
* The request after `verdict`, for a store to persist: a rejection resolves
|
|
223
|
-
*
|
|
224
|
-
* `approvers.quorum` (default 1). Throws an `ApprovalError` when the request
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
+
* The request after `verdict`, for a store to persist: a rejection resolves it;
|
|
229
|
+
* an approval is appended to `approvals` and resolves it once there are
|
|
230
|
+
* `approvers.quorum` (default 1). Throws an `ApprovalError` when the request is
|
|
231
|
+
* not pending, has expired or `verdict.by` may not approve it. Stores should
|
|
232
|
+
* write the result only when the stored row is still pending with the same
|
|
233
|
+
* number of approvals, so two approvers racing both count.
|
|
228
234
|
*/
|
|
229
235
|
function applyApprovalVerdict(request, verdict, at) {
|
|
230
236
|
const now = dateAt(at);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { g as secondsOf } from "./time-
|
|
3
|
-
import { c as rowIdOf } from "./delegation-
|
|
4
|
-
import { c as nowSeconds } from "./tenancy-
|
|
5
|
-
import { n as payloadDigest } from "./token-
|
|
6
|
-
import { n as parseSnapshot } from "./snapshot-
|
|
7
|
-
import { c as snapshotClaim } from "./where-scope-
|
|
8
|
-
import { n as fromSnapshot, t as emptySnapshot } from "./from-snapshot-
|
|
2
|
+
import { g as secondsOf } from "./time-nR1JesoH.js";
|
|
3
|
+
import { c as rowIdOf } from "./delegation-CDB6_keF.js";
|
|
4
|
+
import { c as nowSeconds } from "./tenancy-5d1zVBvK.js";
|
|
5
|
+
import { n as payloadDigest } from "./token-DC9EQiet.js";
|
|
6
|
+
import { n as parseSnapshot } from "./snapshot-CXlzi69u.js";
|
|
7
|
+
import { c as snapshotClaim } from "./where-scope-DlCdCM_8.js";
|
|
8
|
+
import { n as fromSnapshot, t as emptySnapshot } from "./from-snapshot-DCakWRsr.js";
|
|
9
9
|
import { t as timeoutSignal } from "./timeout-D51niuQP.js";
|
|
10
10
|
//#region src/client/source.ts
|
|
11
11
|
/** A compact JWS: three non-empty dot-separated parts. */
|
|
@@ -131,7 +131,10 @@ const NO_ENDPOINT = {
|
|
|
131
131
|
}],
|
|
132
132
|
alternatives: []
|
|
133
133
|
};
|
|
134
|
-
/**
|
|
134
|
+
/**
|
|
135
|
+
* The row's id under the snapshot's id field, or `undefined` for a row without
|
|
136
|
+
* one.
|
|
137
|
+
*/
|
|
135
138
|
function rowId(snapshot, permission, data) {
|
|
136
139
|
const id = rowIdOf(data, snapshot.ids?.[permission.resource]);
|
|
137
140
|
return id === "*" ? void 0 : id;
|
|
@@ -140,7 +143,10 @@ function cacheKey(snapshot, permission, data) {
|
|
|
140
143
|
if (data === void 0) return `${permission.key}:*`;
|
|
141
144
|
return `${permission.key}:${rowId(snapshot, permission, data) ?? `#${payloadDigest(data)}`}`;
|
|
142
145
|
}
|
|
143
|
-
/**
|
|
146
|
+
/**
|
|
147
|
+
* Collects the checks the snapshot cannot answer and posts them as one AuthZEN
|
|
148
|
+
* batch per microtask.
|
|
149
|
+
*/
|
|
144
150
|
function createBatch(options) {
|
|
145
151
|
const { answers, endpoint } = options;
|
|
146
152
|
let queued = [];
|
|
@@ -230,8 +236,75 @@ function createBatch(options) {
|
|
|
230
236
|
};
|
|
231
237
|
}
|
|
232
238
|
//#endregion
|
|
239
|
+
//#region src/client/refresh-on.ts
|
|
240
|
+
const DEFAULT_TYPES = ["com.permdock.membership.*", "com.permdock.catalog.*"];
|
|
241
|
+
const REFRESH_DELAY = 250;
|
|
242
|
+
function matches(type, patterns) {
|
|
243
|
+
return patterns.some((pattern) => pattern.endsWith("*") ? type.startsWith(pattern.slice(0, -1)) : type === pattern);
|
|
244
|
+
}
|
|
245
|
+
function eventType(data) {
|
|
246
|
+
if (typeof data !== "string") return;
|
|
247
|
+
try {
|
|
248
|
+
const parsed = JSON.parse(data);
|
|
249
|
+
if (typeof parsed === "object" && parsed !== null && "type" in parsed && typeof parsed.type === "string") return parsed.type;
|
|
250
|
+
} catch {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* A `refreshOn` trigger over Server-Sent Events: each `message` whose data is a
|
|
256
|
+
* structured CloudEvent with a matching `type` refreshes the snapshot. Without
|
|
257
|
+
* a global `EventSource` it never fires.
|
|
258
|
+
*/
|
|
259
|
+
function eventSourceRefresh(url, options = {}) {
|
|
260
|
+
const types = options.types ?? DEFAULT_TYPES;
|
|
261
|
+
return (refresh) => {
|
|
262
|
+
if (typeof globalThis.EventSource !== "function") return () => void 0;
|
|
263
|
+
const source = new globalThis.EventSource(url, { withCredentials: options.withCredentials === true });
|
|
264
|
+
source.addEventListener("message", (event) => {
|
|
265
|
+
const type = eventType(event.data);
|
|
266
|
+
if (type !== void 0 && matches(type, types)) refresh();
|
|
267
|
+
});
|
|
268
|
+
return () => {
|
|
269
|
+
source.close();
|
|
270
|
+
};
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Runs `triggers` while `start()` holds, folding calls within 250 ms into one
|
|
275
|
+
* `refresh`. `skip()` answering `true` drops a call: after `clear()` or
|
|
276
|
+
* `dispose()` nothing refetches.
|
|
277
|
+
*/
|
|
278
|
+
function refreshTriggers(triggers, refresh, skip) {
|
|
279
|
+
let offs = [];
|
|
280
|
+
let timer;
|
|
281
|
+
const fire = () => {
|
|
282
|
+
if (skip() || timer !== void 0) return;
|
|
283
|
+
timer = setTimeout(() => {
|
|
284
|
+
timer = void 0;
|
|
285
|
+
if (!skip()) refresh();
|
|
286
|
+
}, REFRESH_DELAY);
|
|
287
|
+
};
|
|
288
|
+
return {
|
|
289
|
+
start() {
|
|
290
|
+
if (offs.length === 0) offs = triggers.map((trigger) => trigger(fire));
|
|
291
|
+
},
|
|
292
|
+
stop() {
|
|
293
|
+
for (const off of offs) off();
|
|
294
|
+
offs = [];
|
|
295
|
+
if (timer !== void 0) {
|
|
296
|
+
clearTimeout(timer);
|
|
297
|
+
timer = void 0;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
//#endregion
|
|
233
303
|
//#region src/client/request.ts
|
|
234
|
-
/**
|
|
304
|
+
/**
|
|
305
|
+
* Milliseconds a decision, refresh or approval request may take; a slower one
|
|
306
|
+
* is an error like a failed request.
|
|
307
|
+
*/
|
|
235
308
|
const STORE_TIMEOUT_MS = 1e4;
|
|
236
309
|
function storeRequest(fetchImpl, headers) {
|
|
237
310
|
return (url, body) => fetchImpl(url, {
|
|
@@ -313,6 +386,7 @@ function createClientStore(options) {
|
|
|
313
386
|
let generation = 0;
|
|
314
387
|
let disposed = false;
|
|
315
388
|
let staleNext = options.stale === true;
|
|
389
|
+
let cleared = false;
|
|
316
390
|
let rawJws;
|
|
317
391
|
const request = storeRequest(fetchImpl, () => typeof options.headers === "function" ? options.headers() : options.headers);
|
|
318
392
|
const emit = () => {
|
|
@@ -364,6 +438,7 @@ function createClientStore(options) {
|
|
|
364
438
|
reset();
|
|
365
439
|
if ((snapshot.subject.principal?.id ?? null) !== (next.subject.principal?.id ?? null)) approvals.forget();
|
|
366
440
|
snapshot = next;
|
|
441
|
+
cleared = false;
|
|
367
442
|
instance = fromSnapshot(snapshot, compact({ tenant }));
|
|
368
443
|
base = "ready";
|
|
369
444
|
if (staleNext && next.subject.principal !== null) {
|
|
@@ -511,12 +586,21 @@ function createClientStore(options) {
|
|
|
511
586
|
decision
|
|
512
587
|
};
|
|
513
588
|
};
|
|
589
|
+
const triggers = refreshTriggers(server ? [] : options.refreshOn ?? [], () => {
|
|
590
|
+
cached.refresh().catch(() => void 0);
|
|
591
|
+
}, () => disposed || cleared);
|
|
514
592
|
const subscribe = (listener) => {
|
|
515
593
|
listeners.add(listener);
|
|
516
|
-
if (listeners.size === 1)
|
|
594
|
+
if (listeners.size === 1) {
|
|
595
|
+
approvals.resume();
|
|
596
|
+
triggers.start();
|
|
597
|
+
}
|
|
517
598
|
return () => {
|
|
518
599
|
listeners.delete(listener);
|
|
519
|
-
if (listeners.size === 0)
|
|
600
|
+
if (listeners.size === 0) {
|
|
601
|
+
approvals.stop();
|
|
602
|
+
triggers.stop();
|
|
603
|
+
}
|
|
520
604
|
};
|
|
521
605
|
};
|
|
522
606
|
const wrap = (permdock) => {
|
|
@@ -596,6 +680,7 @@ function createClientStore(options) {
|
|
|
596
680
|
reset();
|
|
597
681
|
tenant = options.tenant;
|
|
598
682
|
snapshot = emptySnapshot();
|
|
683
|
+
cleared = true;
|
|
599
684
|
instance = fromSnapshot(snapshot, compact({ tenant }));
|
|
600
685
|
base = "server-only";
|
|
601
686
|
approvals.forget();
|
|
@@ -679,6 +764,7 @@ function createClientStore(options) {
|
|
|
679
764
|
generation += 1;
|
|
680
765
|
batch.clear();
|
|
681
766
|
approvals.forget();
|
|
767
|
+
triggers.stop();
|
|
682
768
|
listeners.clear();
|
|
683
769
|
},
|
|
684
770
|
requestApproval: approvals.request
|
|
@@ -688,7 +774,10 @@ function createClientStore(options) {
|
|
|
688
774
|
}
|
|
689
775
|
//#endregion
|
|
690
776
|
//#region src/client/store-options.ts
|
|
691
|
-
/**
|
|
777
|
+
/**
|
|
778
|
+
* One hint per store: the first check `endpoint: false` turns into a
|
|
779
|
+
* `server-only` denial.
|
|
780
|
+
*/
|
|
692
781
|
function hintOnce() {
|
|
693
782
|
let shown = false;
|
|
694
783
|
return (permission) => {
|
|
@@ -723,8 +812,9 @@ function adapterStore(options, snapshot, native) {
|
|
|
723
812
|
stale: native?.stale,
|
|
724
813
|
onSnapshot: both(native?.onSnapshot, options.onSnapshot),
|
|
725
814
|
onClear: both(native?.onClear, options.onClear),
|
|
726
|
-
approvalInterval: options.approvalInterval
|
|
815
|
+
approvalInterval: options.approvalInterval,
|
|
816
|
+
refreshOn: options.refreshOn
|
|
727
817
|
}));
|
|
728
818
|
}
|
|
729
819
|
//#endregion
|
|
730
|
-
export { isPromiseLike as i, storeOf as n,
|
|
820
|
+
export { isPromiseLike as a, isJws as i, storeOf as n, eventSourceRefresh as r, adapterStore as t };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Un as Decision, fr as Membership, j as PolicyVocabulary } from "./policy-types-DGIO_gxq.js";
|
|
2
|
+
import { u as Permission } from "./permission-types-CAY-GU7e.js";
|
|
3
|
+
import { r as Role } from "./vocabulary-DEJ5j4mR.js";
|
|
4
|
+
import { d as UncheckedData, s as RowData } from "./permdock-CprAPN3w.js";
|
|
5
|
+
import { r as DescribeOptions, t as DecisionDescription } from "./describe-BbFPBSms.js";
|
|
6
|
+
import { n as ProtectedAction } from "./action-result-BcudBQOF.js";
|
|
7
|
+
import { a as FilterResult, c as PermissionSet, h as TenantView, l as PermissionState, m as SubjectView, o as GateMode, p as RolesOptions, r as ClientPermDock, s as GateView, t as ApprovalHandle } from "./types-tQB2CEnY.js";
|
|
8
|
+
import { n as ProtectedActionReadable, r as SveltePermDockOptions } from "./types-CEinc15V.js";
|
|
9
|
+
import { Readable } from "svelte/store";
|
|
10
|
+
//#region src/svelte/stores.d.ts
|
|
11
|
+
declare function setPermDock(options: SveltePermDockOptions): ClientPermDock;
|
|
12
|
+
declare function getPermDock<V extends PolicyVocabulary = PolicyVocabulary>(): ClientPermDock<V>;
|
|
13
|
+
/**
|
|
14
|
+
* `describe` with the provider's `messages`; a call's own `messages` win. Call
|
|
15
|
+
* it during component init.
|
|
16
|
+
*/
|
|
17
|
+
declare function getDescribe(): (decision: Decision, options?: DescribeOptions) => DecisionDescription;
|
|
18
|
+
declare function permission<D>(reference: Permission, data?: () => UncheckedData<D>): Readable<PermissionState>;
|
|
19
|
+
declare function permission<P extends Permission>(reference: P, data?: () => RowData<P>): Readable<PermissionState>;
|
|
20
|
+
/**
|
|
21
|
+
* What a permission-gated control renders, as `useGate` in React: `hidden`,
|
|
22
|
+
* `disabled`, `needsApproval`, `upgrade` and a `reason` in the provider's
|
|
23
|
+
* `messages`. Call it during component initialisation.
|
|
24
|
+
*/
|
|
25
|
+
declare function gate<D>(reference: Permission, data?: () => UncheckedData<D>, options?: {
|
|
26
|
+
readonly mode?: GateMode;
|
|
27
|
+
}): Readable<GateView>;
|
|
28
|
+
declare function gate<P extends Permission>(reference: P, data?: () => RowData<P>, options?: {
|
|
29
|
+
readonly mode?: GateMode;
|
|
30
|
+
}): Readable<GateView>;
|
|
31
|
+
declare function permissions(references: () => readonly Permission[], data?: () => unknown): Readable<PermissionSet>;
|
|
32
|
+
declare function filtered<T>(reference: Permission<string, NoInfer<T>, "instance">, rows: () => readonly T[]): Readable<FilterResult<T>>;
|
|
33
|
+
declare function tenant(): Readable<TenantView>;
|
|
34
|
+
declare function memberships(): Readable<readonly Membership[]>;
|
|
35
|
+
declare function roles(options?: () => RolesOptions): Readable<{
|
|
36
|
+
readonly roles: readonly Role[];
|
|
37
|
+
}>;
|
|
38
|
+
declare function assignable(): Readable<readonly Role[]>;
|
|
39
|
+
type AssignableOptions = {
|
|
40
|
+
readonly tenant?: string;
|
|
41
|
+
} | (() => {
|
|
42
|
+
readonly tenant?: string;
|
|
43
|
+
});
|
|
44
|
+
declare function assignablePermissions(options?: AssignableOptions): Readable<readonly Permission[]>;
|
|
45
|
+
declare function subject(): Readable<SubjectView>;
|
|
46
|
+
declare function approval(decision: () => Decision): Readable<ApprovalHandle>;
|
|
47
|
+
/**
|
|
48
|
+
* A `protectAction` server action wired to a control, as `useProtectedAction`
|
|
49
|
+
* in React: a readable store of `gate`, `result`, `pending` and `approval`,
|
|
50
|
+
* with `run` and `retry`. Call it during component initialisation.
|
|
51
|
+
*/
|
|
52
|
+
declare function protectedAction<T, D>(action: ProtectedAction<T>, reference: Permission, data?: () => UncheckedData<D>, options?: {
|
|
53
|
+
readonly mode?: GateMode;
|
|
54
|
+
}): ProtectedActionReadable<T>;
|
|
55
|
+
declare function protectedAction<T, P extends Permission>(action: ProtectedAction<T>, reference: P, data?: () => RowData<P>, options?: {
|
|
56
|
+
readonly mode?: GateMode;
|
|
57
|
+
}): ProtectedActionReadable<T>;
|
|
58
|
+
//#endregion
|
|
59
|
+
export { gate as a, memberships as c, protectedAction as d, roles as f, tenant as h, filtered as i, permission as l, subject as m, assignable as n, getDescribe as o, setPermDock as p, assignablePermissions as r, getPermDock as s, approval as t, permissions as u };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as
|
|
3
|
-
import {
|
|
1
|
+
import { n as actionRunner, t as actionApproval } from "./protected-action-DUYqb-Ma.js";
|
|
2
|
+
import { a as livePermDock, c as rolesView, d as subjectView, f as tenantView, i as gateView, n as describeWith, o as permissionSet, r as filterResult, t as approvalHandle } from "./views-CD8wuL4Z.js";
|
|
3
|
+
import { n as getUi, r as providePermDock, t as getStore } from "./context-BnIzxTNE.js";
|
|
4
|
+
import { derived, readable, toStore, writable } from "svelte/store";
|
|
4
5
|
//#region src/svelte/stores.ts
|
|
5
6
|
function fromStore(store, compute) {
|
|
6
7
|
return readable(compute(), (set) => {
|
|
@@ -23,7 +24,10 @@ function setPermDock(options) {
|
|
|
23
24
|
function getPermDock() {
|
|
24
25
|
return sveltePermDock(getStore());
|
|
25
26
|
}
|
|
26
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* `describe` with the provider's `messages`; a call's own `messages` win. Call
|
|
29
|
+
* it during component init.
|
|
30
|
+
*/
|
|
27
31
|
function getDescribe() {
|
|
28
32
|
return describeWith(getUi().messages);
|
|
29
33
|
}
|
|
@@ -33,6 +37,16 @@ function permission(reference, data) {
|
|
|
33
37
|
function permissionFor(store, reference, data) {
|
|
34
38
|
return fromStore(store, () => store.permissionState(reference, data?.()));
|
|
35
39
|
}
|
|
40
|
+
function gate(reference, data, options = {}) {
|
|
41
|
+
return gateFor(getStore(), reference, data, {
|
|
42
|
+
...options,
|
|
43
|
+
describe: getDescribe()
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function gateFor(store, reference, data, options = {}) {
|
|
47
|
+
const describeDecision = options.describe ?? describeWith(void 0);
|
|
48
|
+
return fromStore(store, () => gateView(store.permissionState(reference, data?.()), (decision) => describeDecision(decision, { permission: reference }), options.mode));
|
|
49
|
+
}
|
|
36
50
|
function permissions(references, data) {
|
|
37
51
|
return permissionsFor(getStore(), references, data);
|
|
38
52
|
}
|
|
@@ -87,5 +101,28 @@ function approval(decision) {
|
|
|
87
101
|
function approvalFor(store, decision) {
|
|
88
102
|
return fromStore(store, () => approvalHandle(store, decision()));
|
|
89
103
|
}
|
|
104
|
+
function protectedAction(action, reference, data, options = {}) {
|
|
105
|
+
return protectedActionFor(getStore(), action, reference, data, {
|
|
106
|
+
...options,
|
|
107
|
+
describe: getDescribe()
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
function protectedActionFor(store, action, reference, data, options = {}) {
|
|
111
|
+
const state = writable({
|
|
112
|
+
result: void 0,
|
|
113
|
+
pending: false
|
|
114
|
+
});
|
|
115
|
+
const runner = actionRunner(() => action, state.set);
|
|
116
|
+
return {
|
|
117
|
+
subscribe: derived([gateFor(store, reference, data, options), state], ([gated, current]) => ({
|
|
118
|
+
gate: gated,
|
|
119
|
+
result: current.result,
|
|
120
|
+
pending: current.pending,
|
|
121
|
+
approval: actionApproval(store, current.result)
|
|
122
|
+
})).subscribe,
|
|
123
|
+
run: runner.run,
|
|
124
|
+
retry: runner.retry
|
|
125
|
+
};
|
|
126
|
+
}
|
|
90
127
|
//#endregion
|
|
91
|
-
export {
|
|
128
|
+
export { gate as a, memberships as c, protectedAction as d, roles as f, tenant as h, filtered as i, permission as l, subject as m, assignable as n, getDescribe as o, setPermDock as p, assignablePermissions as r, getPermDock as s, approval as t, permissions as u };
|