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,33 +1,36 @@
|
|
|
1
1
|
import { n as isReadonlyArray, r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep, t as freezeCopy } from "./freeze-
|
|
3
|
-
import { n as PermDockValidationError } from "./validation-error-
|
|
4
|
-
import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-
|
|
5
|
-
import { t as attachInternals } from "./internals-
|
|
6
|
-
import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-
|
|
7
|
-
import { n as isThenable } from "./thenable-
|
|
8
|
-
import { i as readAppData } from "./app-data-
|
|
9
|
-
import { f as scopeList, h as tenantOf, o as normalizeMemberships } from "./scopes-
|
|
10
|
-
import { o as pickVisible, s as sanitizeContext } from "./validity-
|
|
11
|
-
import {
|
|
12
|
-
import { u as
|
|
13
|
-
import {
|
|
14
|
-
import { D as emptyListeners, E as emitSafe, N as contactMemberships, O as finish, P as isContact, i as customRolesFor, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as unknownLevelsFor } from "./evaluate-
|
|
15
|
-
import {
|
|
16
|
-
import { r as relationReader, t as pendingRelations } from "./relations-
|
|
17
|
-
import {
|
|
18
|
-
import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-
|
|
19
|
-
import { i as decideAllWith, n as canAllWith } from "./checks-
|
|
2
|
+
import { n as freezeDeep, t as freezeCopy } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { n as PermDockValidationError } from "./validation-error-CYg2kJEw.js";
|
|
4
|
+
import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-B6R_lg2a.js";
|
|
5
|
+
import { t as attachInternals } from "./internals-B3IgHrvo.js";
|
|
6
|
+
import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-B8tYxPIt.js";
|
|
7
|
+
import { n as isThenable } from "./thenable-BNSM1U2R.js";
|
|
8
|
+
import { i as readAppData } from "./app-data-UNNm07jV.js";
|
|
9
|
+
import { f as scopeList, h as tenantOf, o as normalizeMemberships } from "./scopes-0Up_UA2t.js";
|
|
10
|
+
import { o as pickVisible, s as sanitizeContext } from "./validity-Buc7w8E9.js";
|
|
11
|
+
import { t as byCodePoint } from "./compare-DTfyUunF.js";
|
|
12
|
+
import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-5d1zVBvK.js";
|
|
13
|
+
import { d as policyX } from "./policy-CLQ8__GF.js";
|
|
14
|
+
import { D as emptyListeners, E as emitSafe, N as contactMemberships, O as finish, P as isContact, i as customRolesFor, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as unknownLevelsFor } from "./evaluate-BAmf_AQd.js";
|
|
15
|
+
import { c as heldRoleNames, d as audiencesOf, g as asMembershipSource, i as assignableIn, l as roleLeaf, o as collectSnapshotGrants, s as whereGrant, t as snapshotOf, u as applyRoleKinds } from "./instance-snapshot-DuWf1cT3.js";
|
|
16
|
+
import { r as relationReader, t as pendingRelations } from "./relations-BxvRvDHK.js";
|
|
17
|
+
import { i as snapshotGrant } from "./snapshot-CXlzi69u.js";
|
|
18
|
+
import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-DlCdCM_8.js";
|
|
19
|
+
import { i as decideAllWith, n as canAllWith } from "./checks-CGkP3Z7A.js";
|
|
20
20
|
import { r as isSubject, t as anonymousSubject } from "./subject-BGoM5o8B.js";
|
|
21
21
|
//#region src/core/app.ts
|
|
22
22
|
const APP = Symbol.for("permdock.app");
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* The app definition bound to `policy` by `defineApp`, or `undefined` for a
|
|
25
|
+
* plain policy.
|
|
26
|
+
*/
|
|
24
27
|
function appOf(policy) {
|
|
25
28
|
const value = Reflect.get(policy, APP);
|
|
26
29
|
return value === void 0 ? void 0 : value;
|
|
27
30
|
}
|
|
28
31
|
/**
|
|
29
|
-
* `options` with the app's values under it, key by key, for an adapter
|
|
30
|
-
*
|
|
32
|
+
* `options` with the app's values under it, key by key, for an adapter factory
|
|
33
|
+
* to call first: `options = withApp(policy, options)`.
|
|
31
34
|
*/
|
|
32
35
|
function withApp(policy, options) {
|
|
33
36
|
const app = appOf(policy);
|
|
@@ -39,7 +42,10 @@ function withApp(policy, options) {
|
|
|
39
42
|
}
|
|
40
43
|
//#endregion
|
|
41
44
|
//#region src/core/assert-decision.ts
|
|
42
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* `assert`'s outcome: the granted decision, or the error a refusal throws after
|
|
47
|
+
* `onDenied` runs.
|
|
48
|
+
*/
|
|
43
49
|
function assertDecision(policy, subject, permission, data, decision, onDenied) {
|
|
44
50
|
if (decision.outcome === "granted") return decision;
|
|
45
51
|
if (onDenied !== void 0) onDenied(decision);
|
|
@@ -72,7 +78,10 @@ function assertDecision(policy, subject, permission, data, decision, onDenied) {
|
|
|
72
78
|
}
|
|
73
79
|
//#endregion
|
|
74
80
|
//#region src/core/instance-env.ts
|
|
75
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* The environment `derive(options)` builds on: `base` with the sources
|
|
83
|
+
* `options` replaces loaded again.
|
|
84
|
+
*/
|
|
76
85
|
function deriveEnv(policy, subject, base, relationCache, options) {
|
|
77
86
|
const scopes = scopeList(policy.scopes);
|
|
78
87
|
const tenants = tenantsOf(subject.principal, scopes);
|
|
@@ -140,7 +149,10 @@ function simulateEvent(policy, subject, env, evaluated) {
|
|
|
140
149
|
}
|
|
141
150
|
//#endregion
|
|
142
151
|
//#region src/core/instance.ts
|
|
143
|
-
/**
|
|
152
|
+
/**
|
|
153
|
+
* Each round reads one more layer: link hops, then the chain, then nested
|
|
154
|
+
* groups.
|
|
155
|
+
*/
|
|
144
156
|
const LOAD_ROUNDS = 48;
|
|
145
157
|
function buildInstance(policy, subject, envBase, team) {
|
|
146
158
|
const listeners = emptyListeners();
|
|
@@ -500,6 +512,96 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
500
512
|
return Object.freeze(instance);
|
|
501
513
|
}
|
|
502
514
|
//#endregion
|
|
515
|
+
//#region src/core/freshness.ts
|
|
516
|
+
function versionQuery(principal, issuedAt) {
|
|
517
|
+
return compact({
|
|
518
|
+
id: principal.id,
|
|
519
|
+
roles: principal.roles,
|
|
520
|
+
memberships: principal.memberships,
|
|
521
|
+
authzVersion: principal.authzVersion,
|
|
522
|
+
issuedAt
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
function threw(source, auth) {
|
|
526
|
+
auth.push({
|
|
527
|
+
reason: "source-threw",
|
|
528
|
+
source: "memberships",
|
|
529
|
+
...sourceName(source)
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* `onStale: 'reread'`: a token behind the source's version has its memberships
|
|
534
|
+
* (and global roles, with `readRoles`) read live; a version that cannot be read
|
|
535
|
+
* keeps the claims and marks the subject stale.
|
|
536
|
+
*/
|
|
537
|
+
function rereadStale(source, principal, issuedAt, context, read, auth, readRoles) {
|
|
538
|
+
const claims = principal.memberships ?? [];
|
|
539
|
+
const claimed = principal.authzVersion;
|
|
540
|
+
const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
|
|
541
|
+
const unknown = () => {
|
|
542
|
+
threw(source, auth);
|
|
543
|
+
return "unknown";
|
|
544
|
+
};
|
|
545
|
+
let freshness;
|
|
546
|
+
try {
|
|
547
|
+
const current = source.version?.(versionQuery(principal, issuedAt), context);
|
|
548
|
+
freshness = isThenable(current) ? Promise.resolve(current).then(judge, unknown) : judge(current);
|
|
549
|
+
} catch {
|
|
550
|
+
freshness = unknown();
|
|
551
|
+
}
|
|
552
|
+
const failed = () => {
|
|
553
|
+
threw(source, auth);
|
|
554
|
+
return [];
|
|
555
|
+
};
|
|
556
|
+
const rolesOf = (found) => {
|
|
557
|
+
if (found !== "reread" || readRoles === void 0) return;
|
|
558
|
+
try {
|
|
559
|
+
const roles = readRoles();
|
|
560
|
+
return isThenable(roles) ? Promise.resolve(roles).catch(failed) : roles;
|
|
561
|
+
} catch {
|
|
562
|
+
return failed();
|
|
563
|
+
}
|
|
564
|
+
};
|
|
565
|
+
if (isThenable(freshness)) {
|
|
566
|
+
const settled = freshness.then((found) => ({
|
|
567
|
+
found,
|
|
568
|
+
roles: rolesOf(found)
|
|
569
|
+
}));
|
|
570
|
+
return {
|
|
571
|
+
memberships: settled.then(({ found }) => found === "reread" ? read() : claims),
|
|
572
|
+
stale: settled.then(({ found }) => found === "unknown"),
|
|
573
|
+
roles: settled.then(({ roles }) => roles)
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
return compact({
|
|
577
|
+
memberships: freshness === "reread" ? read() : claims,
|
|
578
|
+
stale: freshness === "unknown",
|
|
579
|
+
roles: rolesOf(freshness)
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Whether the token's memberships are behind the source for `fresh`
|
|
584
|
+
* permissions. Live memberships are never stale; token memberships are stale
|
|
585
|
+
* unless a source reports a version the token's `authzVersion` has reached.
|
|
586
|
+
*/
|
|
587
|
+
function staleness(policy, principal, source, given, auth) {
|
|
588
|
+
if ((policy.fresh ?? []).length === 0 || principal === null || given.live) return false;
|
|
589
|
+
if (given.stale !== void 0) return given.stale;
|
|
590
|
+
const claimed = principal.authzVersion;
|
|
591
|
+
if (source?.version === void 0 || typeof claimed !== "number") return true;
|
|
592
|
+
const compare = (current) => current === void 0 || claimed < current;
|
|
593
|
+
try {
|
|
594
|
+
const current = source.version(versionQuery(principal, given.issuedAt), given.context);
|
|
595
|
+
return isThenable(current) ? Promise.resolve(current).then(compare, () => {
|
|
596
|
+
threw(source, auth);
|
|
597
|
+
return true;
|
|
598
|
+
}) : compare(current);
|
|
599
|
+
} catch {
|
|
600
|
+
threw(source, auth);
|
|
601
|
+
return true;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
//#endregion
|
|
503
605
|
//#region src/core/oauth-scopes.ts
|
|
504
606
|
/**
|
|
505
607
|
* Every OAuth scope a token may carry to the permission keys it reaches: each
|
|
@@ -542,11 +644,17 @@ function expandOAuthScopes(policy, delegation) {
|
|
|
542
644
|
scopes: [...out]
|
|
543
645
|
};
|
|
544
646
|
}
|
|
545
|
-
/**
|
|
647
|
+
/**
|
|
648
|
+
* The coarse scopes the policy declares that cover `permission`, in declaration
|
|
649
|
+
* order.
|
|
650
|
+
*/
|
|
546
651
|
function coarseScopesFor(policy, permission) {
|
|
547
652
|
return (policy.oauthScopes ?? []).filter((entry) => entry.permissions.includes(permission.key)).map((entry) => entry.scope);
|
|
548
653
|
}
|
|
549
|
-
/**
|
|
654
|
+
/**
|
|
655
|
+
* Every token scope that reaches `permission`: its own, any it was renamed
|
|
656
|
+
* from, and the coarse scopes covering it.
|
|
657
|
+
*/
|
|
550
658
|
function scopesReaching(policy, permission) {
|
|
551
659
|
return [
|
|
552
660
|
permission.scope,
|
|
@@ -555,9 +663,9 @@ function scopesReaching(policy, permission) {
|
|
|
555
663
|
];
|
|
556
664
|
}
|
|
557
665
|
/**
|
|
558
|
-
* The scope an `insufficient_scope` challenge names for `permission`: the
|
|
559
|
-
*
|
|
560
|
-
*
|
|
666
|
+
* The scope an `insufficient_scope` challenge names for `permission`: the first
|
|
667
|
+
* coarse scope that covers it, which the authorization server issues, else the
|
|
668
|
+
* permission's own scope.
|
|
561
669
|
*/
|
|
562
670
|
function challengeScope(policy, permission) {
|
|
563
671
|
return coarseScopesFor(policy, permission)[0] ?? permission.scope;
|
|
@@ -567,10 +675,25 @@ function hasScope(granted, scopes) {
|
|
|
567
675
|
return scopes.some((scope) => granted?.includes(scope) === true);
|
|
568
676
|
}
|
|
569
677
|
//#endregion
|
|
678
|
+
//#region src/core/source-memo.ts
|
|
679
|
+
/**
|
|
680
|
+
* One memo per `getPermDock` call. A read that throws is not kept, so the next
|
|
681
|
+
* caller tries again.
|
|
682
|
+
*/
|
|
683
|
+
function sourceMemo() {
|
|
684
|
+
const answers = /* @__PURE__ */ new Map();
|
|
685
|
+
return (key, read) => {
|
|
686
|
+
if (answers.has(key)) return answers.get(key);
|
|
687
|
+
const answer = read();
|
|
688
|
+
answers.set(key, answer);
|
|
689
|
+
return answer;
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
//#endregion
|
|
570
693
|
//#region src/core/resolve-subject.ts
|
|
571
694
|
/**
|
|
572
|
-
* The tenant a user API key holds its owner to (`Credential.tenant`): only
|
|
573
|
-
*
|
|
695
|
+
* The tenant a user API key holds its owner to (`Credential.tenant`): only the
|
|
696
|
+
* memberships inside it count, and no global role.
|
|
574
697
|
*/
|
|
575
698
|
function heldTenantOf(principal) {
|
|
576
699
|
const credential = principal["credential"];
|
|
@@ -581,13 +704,14 @@ function heldTenantOf(principal) {
|
|
|
581
704
|
function outsideHeld(held, options) {
|
|
582
705
|
return held !== void 0 && options.tenant !== void 0 && options.tenant !== held;
|
|
583
706
|
}
|
|
584
|
-
function assemblePrincipal(policy, user, options, auth) {
|
|
707
|
+
function assemblePrincipal(policy, user, options, auth, memo) {
|
|
585
708
|
let principal;
|
|
586
709
|
let context = {};
|
|
587
710
|
let actor = options.actor;
|
|
588
711
|
let delegation = options.delegation;
|
|
589
712
|
let session = options.session;
|
|
590
713
|
let expiresAt = options.expiresAt;
|
|
714
|
+
let issuedAt;
|
|
591
715
|
let liveSession;
|
|
592
716
|
try {
|
|
593
717
|
if (user === null || user === void 0) principal = policy.subject(user);
|
|
@@ -598,6 +722,7 @@ function assemblePrincipal(policy, user, options, auth) {
|
|
|
598
722
|
delegation = user.delegation ?? delegation;
|
|
599
723
|
session = user.session ?? session;
|
|
600
724
|
expiresAt = user.expiresAt ?? expiresAt;
|
|
725
|
+
issuedAt = typeof user.issuedAt === "number" && Number.isFinite(user.issuedAt) ? user.issuedAt : void 0;
|
|
601
726
|
liveSession = user.liveSession === true ? true : void 0;
|
|
602
727
|
} else principal = policy.subject(user);
|
|
603
728
|
} catch {
|
|
@@ -613,7 +738,10 @@ function assemblePrincipal(policy, user, options, auth) {
|
|
|
613
738
|
return from.membershipsFor(compact({
|
|
614
739
|
id: of.id,
|
|
615
740
|
kind: of.kind
|
|
616
|
-
}), compact({
|
|
741
|
+
}), compact({
|
|
742
|
+
tenant: options.tenant,
|
|
743
|
+
memo
|
|
744
|
+
}));
|
|
617
745
|
} catch {
|
|
618
746
|
auth.push({
|
|
619
747
|
reason: "source-threw",
|
|
@@ -629,10 +757,13 @@ function assemblePrincipal(policy, user, options, auth) {
|
|
|
629
757
|
live = true;
|
|
630
758
|
memberships = read(source, principal);
|
|
631
759
|
} else if (principal?.memberships !== void 0 && fromClaims && source.onStale === "reread" && source.version !== void 0) {
|
|
632
|
-
const reread = rereadStale(source, principal,
|
|
760
|
+
const reread = rereadStale(source, principal, issuedAt, {
|
|
761
|
+
memo,
|
|
762
|
+
intent: options.intent ?? "write"
|
|
763
|
+
}, () => read(source, principal), auth, source.globalRolesFor === void 0 ? void 0 : () => source.globalRolesFor?.(compact({
|
|
633
764
|
id: principal.id,
|
|
634
765
|
kind: principal.kind
|
|
635
|
-
})) ?? []);
|
|
766
|
+
}), { memo }) ?? []);
|
|
636
767
|
memberships = reread.memberships;
|
|
637
768
|
stale = reread.stale;
|
|
638
769
|
roles = reread.roles;
|
|
@@ -645,78 +776,21 @@ function assemblePrincipal(policy, user, options, auth) {
|
|
|
645
776
|
delegation: expandOAuthScopes(policy, delegation),
|
|
646
777
|
session,
|
|
647
778
|
expiresAt,
|
|
779
|
+
issuedAt,
|
|
648
780
|
memberships,
|
|
649
781
|
live,
|
|
650
782
|
stale,
|
|
651
783
|
liveSession: principal === null ? void 0 : liveSession
|
|
652
784
|
});
|
|
653
785
|
}
|
|
654
|
-
function versionQuery(principal) {
|
|
655
|
-
return compact({
|
|
656
|
-
id: principal.id,
|
|
657
|
-
roles: principal.roles,
|
|
658
|
-
memberships: principal.memberships
|
|
659
|
-
});
|
|
660
|
-
}
|
|
661
|
-
function rereadStale(source, principal, claims, read, auth, readRoles) {
|
|
662
|
-
const claimed = principal.authzVersion;
|
|
663
|
-
const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
|
|
664
|
-
const unknown = () => {
|
|
665
|
-
auth.push({
|
|
666
|
-
reason: "source-threw",
|
|
667
|
-
source: "memberships",
|
|
668
|
-
...sourceName(source)
|
|
669
|
-
});
|
|
670
|
-
return "unknown";
|
|
671
|
-
};
|
|
672
|
-
let freshness;
|
|
673
|
-
try {
|
|
674
|
-
const current = source.version?.(versionQuery(principal));
|
|
675
|
-
freshness = isThenable(current) ? Promise.resolve(current).then(judge, unknown) : judge(current);
|
|
676
|
-
} catch {
|
|
677
|
-
freshness = unknown();
|
|
678
|
-
}
|
|
679
|
-
const failed = () => {
|
|
680
|
-
auth.push({
|
|
681
|
-
reason: "source-threw",
|
|
682
|
-
source: "memberships",
|
|
683
|
-
...sourceName(source)
|
|
684
|
-
});
|
|
685
|
-
return [];
|
|
686
|
-
};
|
|
687
|
-
const rolesOf = (found) => {
|
|
688
|
-
if (found !== "reread" || readRoles === void 0) return;
|
|
689
|
-
try {
|
|
690
|
-
const roles = readRoles();
|
|
691
|
-
return isThenable(roles) ? Promise.resolve(roles).catch(failed) : roles;
|
|
692
|
-
} catch {
|
|
693
|
-
return failed();
|
|
694
|
-
}
|
|
695
|
-
};
|
|
696
|
-
if (isThenable(freshness)) {
|
|
697
|
-
const settled = freshness.then((found) => ({
|
|
698
|
-
found,
|
|
699
|
-
roles: rolesOf(found)
|
|
700
|
-
}));
|
|
701
|
-
return {
|
|
702
|
-
memberships: settled.then(({ found }) => found === "reread" ? read() : claims),
|
|
703
|
-
stale: settled.then(({ found }) => found === "unknown"),
|
|
704
|
-
roles: settled.then(({ roles }) => roles)
|
|
705
|
-
};
|
|
706
|
-
}
|
|
707
|
-
return compact({
|
|
708
|
-
memberships: freshness === "reread" ? read() : claims,
|
|
709
|
-
stale: freshness === "unknown",
|
|
710
|
-
roles: rolesOf(freshness)
|
|
711
|
-
});
|
|
712
|
-
}
|
|
713
786
|
function finishSubject(policy, assembled, context, input, options, extra) {
|
|
714
787
|
if (assembled.principal === null) return freezeCopy(compact({
|
|
715
788
|
...anonymousSubject(context),
|
|
716
789
|
actor: assembled.actor,
|
|
717
790
|
delegation: assembled.delegation,
|
|
718
791
|
session: assembled.session,
|
|
719
|
-
expiresAt: assembled.expiresAt
|
|
792
|
+
expiresAt: assembled.expiresAt,
|
|
793
|
+
issuedAt: assembled.issuedAt
|
|
720
794
|
}));
|
|
721
795
|
const scopes = scopeList(policy.scopes);
|
|
722
796
|
const held = heldTenantOf(assembled.principal);
|
|
@@ -742,11 +816,15 @@ function finishSubject(policy, assembled, context, input, options, extra) {
|
|
|
742
816
|
context: freezeCopy(context),
|
|
743
817
|
session: assembled.session,
|
|
744
818
|
expiresAt: assembled.expiresAt,
|
|
819
|
+
issuedAt: assembled.issuedAt,
|
|
745
820
|
stale: extra.stale ? true : void 0,
|
|
746
821
|
liveSession: assembled.liveSession
|
|
747
822
|
}));
|
|
748
823
|
}
|
|
749
|
-
/**
|
|
824
|
+
/**
|
|
825
|
+
* Runs the policy's membership schema over each `x`; an invalid one is dropped
|
|
826
|
+
* and reported, never the membership.
|
|
827
|
+
*/
|
|
750
828
|
function checkMembershipX(memberships, schema, auth) {
|
|
751
829
|
if (schema === void 0) return memberships;
|
|
752
830
|
let dropped = false;
|
|
@@ -786,37 +864,6 @@ function settle(value, fallback, onError) {
|
|
|
786
864
|
});
|
|
787
865
|
return value;
|
|
788
866
|
}
|
|
789
|
-
/**
|
|
790
|
-
* Whether the token's memberships are behind the source for `fresh`
|
|
791
|
-
* permissions. Live memberships are never stale; token memberships are stale
|
|
792
|
-
* unless a source reports a version the token's `authzVersion` has reached.
|
|
793
|
-
*/
|
|
794
|
-
function staleness(policy, assembled, options, auth) {
|
|
795
|
-
const principal = assembled.principal;
|
|
796
|
-
if ((policy.fresh ?? []).length === 0 || principal === null || assembled.live) return false;
|
|
797
|
-
if (assembled.stale !== void 0) return assembled.stale;
|
|
798
|
-
const source = options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships);
|
|
799
|
-
const claimed = principal.authzVersion;
|
|
800
|
-
if (source?.version === void 0 || typeof claimed !== "number") return true;
|
|
801
|
-
const compare = (current) => current === void 0 || claimed < current;
|
|
802
|
-
try {
|
|
803
|
-
const current = source.version(versionQuery(principal));
|
|
804
|
-
return isThenable(current) ? settle(Promise.resolve(current).then(compare), true, () => {
|
|
805
|
-
auth.push({
|
|
806
|
-
reason: "source-threw",
|
|
807
|
-
source: "memberships",
|
|
808
|
-
...sourceName(source)
|
|
809
|
-
});
|
|
810
|
-
}) : compare(current);
|
|
811
|
-
} catch {
|
|
812
|
-
auth.push({
|
|
813
|
-
reason: "source-threw",
|
|
814
|
-
source: "memberships",
|
|
815
|
-
...sourceName(source)
|
|
816
|
-
});
|
|
817
|
-
return true;
|
|
818
|
-
}
|
|
819
|
-
}
|
|
820
867
|
function cleanNames(list) {
|
|
821
868
|
return Array.isArray(list) ? list.filter((item) => typeof item === "string" && item !== "") : [];
|
|
822
869
|
}
|
|
@@ -870,25 +917,33 @@ function withRequestContext(request, resolved) {
|
|
|
870
917
|
...resolved
|
|
871
918
|
};
|
|
872
919
|
}
|
|
873
|
-
function resolveSubject(policy, user, options, auth) {
|
|
874
|
-
const first = assemblePrincipal(policy, user, options, auth);
|
|
920
|
+
function resolveSubject(policy, user, options, auth, memo = sourceMemo()) {
|
|
921
|
+
const first = assemblePrincipal(policy, user, options, auth, memo);
|
|
875
922
|
const apply = (roles) => resolveAssembled(policy, roles === void 0 || first.principal === null ? first : {
|
|
876
923
|
...first,
|
|
877
924
|
principal: {
|
|
878
925
|
...first.principal,
|
|
879
926
|
roles
|
|
880
927
|
}
|
|
881
|
-
}, options, auth);
|
|
928
|
+
}, options, auth, memo);
|
|
882
929
|
return isThenable(first.roles) ? Promise.resolve(first.roles).then(apply) : apply(first.roles);
|
|
883
930
|
}
|
|
884
|
-
function resolveAssembled(policy, assembled, options, auth) {
|
|
931
|
+
function resolveAssembled(policy, assembled, options, auth, memo) {
|
|
885
932
|
const memberships = settle(assembled.memberships, [], () => {
|
|
886
933
|
auth.push({
|
|
887
934
|
reason: "source-threw",
|
|
888
935
|
source: "memberships"
|
|
889
936
|
});
|
|
890
937
|
});
|
|
891
|
-
const stale = staleness(policy, assembled, options,
|
|
938
|
+
const stale = staleness(policy, assembled.principal, options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships), {
|
|
939
|
+
live: assembled.live,
|
|
940
|
+
stale: assembled.stale,
|
|
941
|
+
issuedAt: assembled.issuedAt,
|
|
942
|
+
context: {
|
|
943
|
+
memo,
|
|
944
|
+
intent: options.intent ?? "write"
|
|
945
|
+
}
|
|
946
|
+
}, auth);
|
|
892
947
|
const withPlans = (resolved) => entitlementsOf(assembled, activeTenantOf(policy, assembled, applyRoleKinds(policy, assembled.principal?.roles, normalizeMemberships(resolved, scopeList(policy.scopes))).memberships, options), options, auth);
|
|
893
948
|
if (isThenable(assembled.context) || isThenable(memberships) || isThenable(stale)) return Promise.all([
|
|
894
949
|
Promise.resolve(assembled.context),
|
|
@@ -913,7 +968,7 @@ function resolveAssembled(policy, assembled, options, auth) {
|
|
|
913
968
|
}
|
|
914
969
|
//#endregion
|
|
915
970
|
//#region src/core/permdock.ts
|
|
916
|
-
function instantiate(codePolicy, subject, options, auth) {
|
|
971
|
+
function instantiate(codePolicy, subject, options, auth, memo) {
|
|
917
972
|
const { policy, errors } = options.policies?.apply(codePolicy) ?? {
|
|
918
973
|
policy: codePolicy,
|
|
919
974
|
errors: []
|
|
@@ -921,7 +976,7 @@ function instantiate(codePolicy, subject, options, auth) {
|
|
|
921
976
|
const scopes = scopeList(policy.scopes);
|
|
922
977
|
const tenants = tenantsOf(subject.principal, scopes);
|
|
923
978
|
const roleSource = roleSourceFor(options.customRoles, subject, auth);
|
|
924
|
-
const customRoles = customRolesFor(roleSource, tenants, auth, subject.principal === null ? void 0 : subject.principal.roles ?? [], (tenant) => heldRoleNamesIn(subject.principal, scopes, tenant));
|
|
979
|
+
const customRoles = customRolesFor(roleSource, tenants, auth, subject.principal === null ? void 0 : subject.principal.roles ?? [], (tenant) => heldRoleNamesIn(subject.principal, scopes, tenant), memo);
|
|
925
980
|
const assignable = assignableNamesFor(roleSource, tenants, auth);
|
|
926
981
|
const approvals = options.approvalPolicies?.load(policy, tenants, auth);
|
|
927
982
|
const build = (roles, names, approvalPolicies) => {
|
|
@@ -950,6 +1005,7 @@ function instantiate(codePolicy, subject, options, auth) {
|
|
|
950
1005
|
context: {}
|
|
951
1006
|
}, compact({
|
|
952
1007
|
tenant,
|
|
1008
|
+
intent: options.intent,
|
|
953
1009
|
memberships: options.memberships,
|
|
954
1010
|
customRoles: options.customRoles,
|
|
955
1011
|
entitlements: options.entitlements,
|
|
@@ -970,15 +1026,16 @@ function instantiate(codePolicy, subject, options, auth) {
|
|
|
970
1026
|
function create(policy, user, given) {
|
|
971
1027
|
const options = withApp(policy, given);
|
|
972
1028
|
const auth = [];
|
|
973
|
-
const
|
|
974
|
-
|
|
975
|
-
return instantiate(policy,
|
|
1029
|
+
const memo = sourceMemo();
|
|
1030
|
+
const subject = resolveSubject(policy, user, options, auth, memo);
|
|
1031
|
+
if (isThenable(subject)) return subject.then((resolved) => instantiate(policy, resolved, options, auth, memo));
|
|
1032
|
+
return instantiate(policy, subject, options, auth, memo);
|
|
976
1033
|
}
|
|
977
1034
|
/**
|
|
978
1035
|
* The instance for `user`, built synchronously. Every input must answer
|
|
979
1036
|
* synchronously: the subject mapper, `memberships`, `customRoles`,
|
|
980
|
-
* `entitlements`, `approvalPolicies` and the freshness check. One that
|
|
981
|
-
*
|
|
1037
|
+
* `entitlements`, `approvalPolicies` and the freshness check. One that answers
|
|
1038
|
+
* with a Promise throws here; use `getPermDock` for those.
|
|
982
1039
|
*/
|
|
983
1040
|
function getPermDockSync(policy, user, options = {}) {
|
|
984
1041
|
const created = create(policy, user, options);
|
|
@@ -988,7 +1045,10 @@ function getPermDockSync(policy, user, options = {}) {
|
|
|
988
1045
|
}
|
|
989
1046
|
return created;
|
|
990
1047
|
}
|
|
991
|
-
/**
|
|
1048
|
+
/**
|
|
1049
|
+
* The instance for `user`: waits for every source, then builds it.
|
|
1050
|
+
* `getPermDockSync` is the synchronous twin.
|
|
1051
|
+
*/
|
|
992
1052
|
function getPermDock(policy, user, options = {}) {
|
|
993
1053
|
return Promise.resolve().then(() => create(policy, user, options));
|
|
994
1054
|
}
|