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,21 +1,21 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
3
|
-
import { o as hasConditionOp } from "./refs-
|
|
4
|
-
import { o as sameId } from "./expiry-
|
|
5
|
-
import { a as getResource, c as listPermissions } from "./permission-registry-
|
|
6
|
-
import { n as isThenable } from "./thenable-
|
|
7
|
-
import { u as isPrincipalRelation } from "./resource-relations-
|
|
8
|
-
import { p as nowSeconds, s as instantAt } from "./time-
|
|
2
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { o as hasConditionOp } from "./refs-C8BKxc_e.js";
|
|
4
|
+
import { o as sameId } from "./expiry-6XByK0dm.js";
|
|
5
|
+
import { a as getResource, c as listPermissions } from "./permission-registry-B8tYxPIt.js";
|
|
6
|
+
import { n as isThenable } from "./thenable-BNSM1U2R.js";
|
|
7
|
+
import { u as isPrincipalRelation } from "./resource-relations-8-pCScBO.js";
|
|
8
|
+
import { p as nowSeconds, s as instantAt } from "./time-nR1JesoH.js";
|
|
9
9
|
import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
|
|
10
|
-
import { f as scopeList, h as tenantOf, i as keepsPermission, l as rootScope, s as resolveScope } from "./scopes-
|
|
11
|
-
import { a as readOnlyActorRefuses, i as delegatedPermissions, r as coversRequirements } from "./delegation-
|
|
12
|
-
import { b as synthesiseRole, m as findRole, o as flattenGrantee, v as listRoles, x as treeXSchema, y as sourceRoleMeta } from "./grantee-
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { t as
|
|
16
|
-
import { C as tenantCustomRoles, D as emptyListeners, M as contactMayUse, S as roleAllowKeys, _ as isSharedCustomRole, a as expandRoleNames, g as holdsGlobalCustomRole, h as holdsCustomRole, l as ceilingGrants, m as customRoleScope, n as requirementCondition, p as customRoleOf, t as evaluate, u as customGrantsFor, x as resolveCustomRole } from "./evaluate-
|
|
17
|
-
import { n as matchGrantee, t as combineWhere } from "./grantee-match-
|
|
18
|
-
import { t as buildSnapshot } from "./snapshot-
|
|
10
|
+
import { f as scopeList, h as tenantOf, i as keepsPermission, l as rootScope, s as resolveScope } from "./scopes-0Up_UA2t.js";
|
|
11
|
+
import { a as readOnlyActorRefuses, i as delegatedPermissions, r as coversRequirements } from "./delegation-CDB6_keF.js";
|
|
12
|
+
import { b as synthesiseRole, m as findRole, o as flattenGrantee, v as listRoles, x as treeXSchema, y as sourceRoleMeta } from "./grantee-Dke-9rd1.js";
|
|
13
|
+
import { t as byCodePoint } from "./compare-DTfyUunF.js";
|
|
14
|
+
import { c as nowSeconds$1, d as resolveActiveTenant, l as partitionsOf, p as scopeField, r as isMembershipExpired } from "./tenancy-5d1zVBvK.js";
|
|
15
|
+
import { c as levelNames, i as grantList, n as declaredRoleNames, s as levelCondition, t as coveredLevels } from "./policy-CLQ8__GF.js";
|
|
16
|
+
import { C as tenantCustomRoles, D as emptyListeners, M as contactMayUse, S as roleAllowKeys, _ as isSharedCustomRole, a as expandRoleNames, g as holdsGlobalCustomRole, h as holdsCustomRole, l as ceilingGrants, m as customRoleScope, n as requirementCondition, p as customRoleOf, t as evaluate, u as customGrantsFor, x as resolveCustomRole } from "./evaluate-BAmf_AQd.js";
|
|
17
|
+
import { n as matchGrantee, t as combineWhere } from "./grantee-match-7RZZvoT_.js";
|
|
18
|
+
import { t as buildSnapshot } from "./snapshot-CXlzi69u.js";
|
|
19
19
|
//#region src/core/memberships.ts
|
|
20
20
|
/** Two memberships are the same row when everything but `roles` matches. */
|
|
21
21
|
function identity(membership) {
|
|
@@ -41,8 +41,8 @@ function identity(membership) {
|
|
|
41
41
|
/**
|
|
42
42
|
* Merges memberships from several sources: entries naming the same instance
|
|
43
43
|
* with the same `via`, expiry, owner and seats become one entry with the union
|
|
44
|
-
* of their roles. Entries that differ in any of those stay separate, so a
|
|
45
|
-
*
|
|
44
|
+
* of their roles. Entries that differ in any of those stay separate, so a staff
|
|
45
|
+
* role and a contact role in one instance keep their own `via`.
|
|
46
46
|
*/
|
|
47
47
|
function mergeMemberships(lists) {
|
|
48
48
|
const merged = /* @__PURE__ */ new Map();
|
|
@@ -59,8 +59,8 @@ function mergeMemberships(lists) {
|
|
|
59
59
|
function all(values) {
|
|
60
60
|
return values.some((value) => isThenable(value)) ? Promise.all(values) : values;
|
|
61
61
|
}
|
|
62
|
-
function then(value,
|
|
63
|
-
return isThenable(value) ? Promise.resolve(value).then(
|
|
62
|
+
function then(value, map) {
|
|
63
|
+
return isThenable(value) ? Promise.resolve(value).then(map) : map(value);
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
66
|
* One `MembershipSource` over several: memberships are merged and
|
|
@@ -73,8 +73,8 @@ function composeMemberships(sources) {
|
|
|
73
73
|
const versioned = sources.filter((source) => source.version !== void 0);
|
|
74
74
|
const rolesReaders = sources.filter((source) => source.globalRolesFor !== void 0);
|
|
75
75
|
return {
|
|
76
|
-
...rolesReaders.length === 0 ? {} : { globalRolesFor(principal) {
|
|
77
|
-
return then(all(rolesReaders.map((source) => source.globalRolesFor?.(principal) ?? [])), (lists) => [...new Set(lists.flat())]);
|
|
76
|
+
...rolesReaders.length === 0 ? {} : { globalRolesFor(principal, context) {
|
|
77
|
+
return then(all(rolesReaders.map((source) => source.globalRolesFor?.(principal, context) ?? [])), (lists) => [...new Set(lists.flat())]);
|
|
78
78
|
} },
|
|
79
79
|
membershipsFor(principal, options) {
|
|
80
80
|
return then(all(sources.map((source) => source.membershipsFor(principal, options))), (lists) => mergeMemberships(lists));
|
|
@@ -96,8 +96,8 @@ function composeMemberships(sources) {
|
|
|
96
96
|
return [...seen.values()];
|
|
97
97
|
});
|
|
98
98
|
} },
|
|
99
|
-
...versioned.length === 0 ? {} : { version(principal) {
|
|
100
|
-
return then(all(versioned.map((source) => source.version?.(principal))), (versions) => {
|
|
99
|
+
...versioned.length === 0 ? {} : { version(principal, context) {
|
|
100
|
+
return then(all(versioned.map((source) => source.version?.(principal, context))), (versions) => {
|
|
101
101
|
const known = versions.filter((value) => typeof value === "number" && Number.isFinite(value));
|
|
102
102
|
return known.length === 0 ? void 0 : Math.max(...known);
|
|
103
103
|
});
|
|
@@ -109,33 +109,41 @@ function asMembershipSource(input) {
|
|
|
109
109
|
return Array.isArray(input) ? composeMemberships(input) : input;
|
|
110
110
|
}
|
|
111
111
|
/**
|
|
112
|
-
* Trust the memberships the verified token carries, and read `source` only
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
112
|
+
* Trust the memberships the verified token carries, and read `source` only when
|
|
113
|
+
* the token marks them truncated. With `version`, a token minted before the
|
|
114
|
+
* latest membership change is stale for the policy's `fresh` permissions, or
|
|
115
|
+
* with `onStale: 'reread'` has its memberships read from `source` instead. With
|
|
116
|
+
* `versions`, an instance with intent `read` takes the version from that
|
|
117
|
+
* process-wide cache, so concurrent instances share one read and a token issued
|
|
118
|
+
* within its `maxStaleMs` needs none; intent `write` always reads.
|
|
116
119
|
*/
|
|
117
120
|
function claimsFirst(source, options = {}) {
|
|
118
121
|
const inner = asMembershipSource(source);
|
|
119
|
-
const
|
|
122
|
+
const read = options.version ?? inner.version?.bind(inner);
|
|
123
|
+
const versions = options.versions;
|
|
124
|
+
const version = read === void 0 ? void 0 : versions === void 0 ? (principal, context) => read(principal, context) : (principal, context) => versions.current(principal, () => read(principal, context), { live: context?.intent !== "read" });
|
|
120
125
|
return {
|
|
121
126
|
membershipsFor: (principal, query) => inner.membershipsFor(principal, query),
|
|
122
127
|
...inner.list === void 0 ? {} : { list: (query) => inner.list?.(query) ?? [] },
|
|
123
128
|
...version === void 0 ? {} : { version },
|
|
124
|
-
...inner.globalRolesFor === void 0 ? {} : { globalRolesFor: (principal) => inner.globalRolesFor?.(principal) ?? [] },
|
|
129
|
+
...inner.globalRolesFor === void 0 ? {} : { globalRolesFor: (principal, context) => inner.globalRolesFor?.(principal, context) ?? [] },
|
|
125
130
|
...options.onStale === "reread" ? { onStale: "reread" } : {},
|
|
126
131
|
claimsFirst: true
|
|
127
132
|
};
|
|
128
133
|
}
|
|
129
|
-
/**
|
|
134
|
+
/**
|
|
135
|
+
* Whether the identity provider owns `membership`: the application must not
|
|
136
|
+
* add, change or remove it.
|
|
137
|
+
*/
|
|
130
138
|
function isExternallyManaged(membership) {
|
|
131
139
|
return membership.managedBy === "idp";
|
|
132
140
|
}
|
|
133
141
|
/**
|
|
134
|
-
* How many principals hold `role` in one scope instance now, from the
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
142
|
+
* How many principals hold `role` in one scope instance now, from the source's
|
|
143
|
+
* member list (`MembershipSource.list`): live memberships of exactly that scope
|
|
144
|
+
* and instance, each principal counted once. The `holders` a `decideRoleChange`
|
|
145
|
+
* with `min`, `max` or `transferOnly` needs. `undefined` when the source cannot
|
|
146
|
+
* list or the read fails, which that check denies.
|
|
139
147
|
*/
|
|
140
148
|
async function countHolders(source, query) {
|
|
141
149
|
const composed = asMembershipSource(source);
|
|
@@ -185,8 +193,8 @@ function mayHoldManaged(policy, role, membership) {
|
|
|
185
193
|
/**
|
|
186
194
|
* Drops every role a membership's kind may not hold (fail-closed: a missing
|
|
187
195
|
* `via` is no kind) and every non-assignable role on an identity-provider
|
|
188
|
-
* membership. Global roles have no kind, so a role with `for` held globally
|
|
189
|
-
*
|
|
196
|
+
* membership. Global roles have no kind, so a role with `for` held globally is
|
|
197
|
+
* dropped too.
|
|
190
198
|
*/
|
|
191
199
|
function applyRoleKinds(policy, roles, memberships) {
|
|
192
200
|
const kinds = policy.roles.some((binding) => binding.for !== void 0);
|
|
@@ -208,7 +216,10 @@ function applyRoleKinds(policy, roles, memberships) {
|
|
|
208
216
|
function usesAssigns(policy) {
|
|
209
217
|
return policy.roles.some((binding) => binding.assigns !== void 0);
|
|
210
218
|
}
|
|
211
|
-
/**
|
|
219
|
+
/**
|
|
220
|
+
* Declared role names in declaration order: bindings first, then
|
|
221
|
+
* vocabulary-only leaves.
|
|
222
|
+
*/
|
|
212
223
|
function declarationOrder(policy) {
|
|
213
224
|
const names = policy.roles.map((binding) => binding.name);
|
|
214
225
|
const seen = new Set(names);
|
|
@@ -219,9 +230,9 @@ function declarationOrder(policy) {
|
|
|
219
230
|
return names;
|
|
220
231
|
}
|
|
221
232
|
/**
|
|
222
|
-
* Each role's depth in the `assigns` graph: a role nobody else assigns is 0,
|
|
223
|
-
*
|
|
224
|
-
*
|
|
233
|
+
* Each role's depth in the `assigns` graph: a role nobody else assigns is 0, a
|
|
234
|
+
* role another assigns sits one below its deepest assigner. Cycles stop after
|
|
235
|
+
* one pass per role.
|
|
225
236
|
*/
|
|
226
237
|
function assignDepths(policy) {
|
|
227
238
|
const names = declarationOrder(policy);
|
|
@@ -262,7 +273,10 @@ function audiencesOf(policy, names) {
|
|
|
262
273
|
}
|
|
263
274
|
return out;
|
|
264
275
|
}
|
|
265
|
-
/**
|
|
276
|
+
/**
|
|
277
|
+
* Whether `membership` is the instance itself or one of its ancestors named in
|
|
278
|
+
* `within`.
|
|
279
|
+
*/
|
|
266
280
|
//#endregion
|
|
267
281
|
//#region src/core/held-roles.ts
|
|
268
282
|
/**
|
|
@@ -293,7 +307,10 @@ function roleLeaf(policy, name) {
|
|
|
293
307
|
}
|
|
294
308
|
//#endregion
|
|
295
309
|
//#region src/core/snapshot-grants.ts
|
|
296
|
-
/**
|
|
310
|
+
/**
|
|
311
|
+
* A grant on a relation with a `period` is decided on the server, where the
|
|
312
|
+
* clock is.
|
|
313
|
+
*/
|
|
297
314
|
function periodBound(policy, grant) {
|
|
298
315
|
const relations = policy.resources.get(grant.permission.resource)?.relations;
|
|
299
316
|
return flattenGrantee(grant.to).some((item) => {
|
|
@@ -330,8 +347,8 @@ function graphAware(grant, where) {
|
|
|
330
347
|
}));
|
|
331
348
|
}
|
|
332
349
|
/**
|
|
333
|
-
* `where()` keeps a grant that is server-only because it reads the graph:
|
|
334
|
-
*
|
|
350
|
+
* `where()` keeps a grant that is server-only because it reads the graph: its
|
|
351
|
+
* `related` nodes compile to subqueries given relation mappings.
|
|
335
352
|
*/
|
|
336
353
|
function whereGrant(grant) {
|
|
337
354
|
return grant.graph === true ? freezeDeep({
|
|
@@ -340,8 +357,8 @@ function whereGrant(grant) {
|
|
|
340
357
|
}) : grant;
|
|
341
358
|
}
|
|
342
359
|
/**
|
|
343
|
-
* Every grant the subject may reach, once per membership that holds all of
|
|
344
|
-
*
|
|
360
|
+
* Every grant the subject may reach, once per membership that holds all of its
|
|
361
|
+
* scoped roles, so a client can check that membership's tenant, team or
|
|
345
362
|
* resource. A scoped role held only globally reaches nothing.
|
|
346
363
|
*/
|
|
347
364
|
function collectSnapshotGrants(policy, subject, customRoles, now = nowSeconds$1(), customGrants = customGrantsFor(policy, customRoles), mode = "held") {
|
|
@@ -407,24 +424,26 @@ function assignableCandidates(policy) {
|
|
|
407
424
|
return rankRoles(policy, [...new Set(names)]).map((name) => roleLeaf(policy, name));
|
|
408
425
|
}
|
|
409
426
|
/**
|
|
410
|
-
* The levels a held allow of a permission covers: its own `level`, every
|
|
411
|
-
*
|
|
412
|
-
*
|
|
427
|
+
* The levels a held allow of a permission covers: its own `level`, every level
|
|
428
|
+
* when it has no row condition, or the levels whose condition equals its
|
|
429
|
+
* condition; with `orderedLevels`, also every narrower level.
|
|
413
430
|
*/
|
|
414
431
|
function heldLevels(policy, grant, names) {
|
|
415
|
-
|
|
432
|
+
const resource = grant.permission.resource;
|
|
433
|
+
if (grant.level !== void 0) return coveredLevels(policy, resource, [grant.level]);
|
|
416
434
|
if (grant.where === void 0) return names;
|
|
417
435
|
const held = canonicalJson(grant.where);
|
|
418
|
-
return names.filter((name) => {
|
|
419
|
-
const condition = levelCondition(policy,
|
|
436
|
+
return coveredLevels(policy, resource, names.filter((name) => {
|
|
437
|
+
const condition = levelCondition(policy, resource, name);
|
|
420
438
|
return condition !== void 0 && canonicalJson(condition) === held;
|
|
421
|
-
});
|
|
439
|
+
}));
|
|
422
440
|
}
|
|
423
441
|
/**
|
|
424
442
|
* What the subject may hand out in `tenant`: declared assignable roles and the
|
|
425
|
-
* tenant custom-role ceiling, narrowed by `allowed`
|
|
426
|
-
* then intersected with the permissions the
|
|
427
|
-
* role or a granted permission with
|
|
443
|
+
* tenant custom-role ceiling, narrowed by `allowed`
|
|
444
|
+
* (`CustomRoleSource.assignable`), then intersected with the permissions the
|
|
445
|
+
* subject holds there. Holding a role or a granted permission with
|
|
446
|
+
* `meta.manageRoles` lifts the intersection.
|
|
428
447
|
*/
|
|
429
448
|
function assignableIn(policy, subject, customRoles, customGrants, tenant, allowed, now = nowSeconds$1(), global = false) {
|
|
430
449
|
const principal = subject.principal;
|
|
@@ -547,7 +566,10 @@ function assignableCustomRoles(policy, customRoles, tenant, declared, mayHandOut
|
|
|
547
566
|
}
|
|
548
567
|
//#endregion
|
|
549
568
|
//#region src/core/instance-snapshot.ts
|
|
550
|
-
/**
|
|
569
|
+
/**
|
|
570
|
+
* The one path from a resolved subject to a `Snapshot`; pure apart from the
|
|
571
|
+
* default clock.
|
|
572
|
+
*/
|
|
551
573
|
function snapshotOf(policy, subject, options) {
|
|
552
574
|
const now = options.now ?? nowSeconds$1();
|
|
553
575
|
const customGrants = options.customGrants ?? customGrantsFor(policy, options.customRoles);
|
|
@@ -582,7 +604,10 @@ function snapshotOf(policy, subject, options) {
|
|
|
582
604
|
}
|
|
583
605
|
}));
|
|
584
606
|
}
|
|
585
|
-
/**
|
|
607
|
+
/**
|
|
608
|
+
* The policy's scopes as snapshots and `permdock cloud push` carry them, with
|
|
609
|
+
* the resources each partitions.
|
|
610
|
+
*/
|
|
586
611
|
function snapshotScopes(policy) {
|
|
587
612
|
if (policy.scopes.length === 0) return;
|
|
588
613
|
const resources = [...policy.resources.values()];
|
|
@@ -603,4 +628,4 @@ function snapshotScopes(policy) {
|
|
|
603
628
|
});
|
|
604
629
|
}
|
|
605
630
|
//#endregion
|
|
606
|
-
export {
|
|
631
|
+
export { claimsFirst as _, heldLevels as a, isExternallyManaged as b, heldRoleNames as c, audiencesOf as d, bindingOf as f, asMembershipSource as g, usesAssigns as h, assignableIn as i, roleLeaf as l, roleMeta as m, snapshotScopes as n, collectSnapshotGrants as o, rankRoles as p, assignableCandidates as r, whereGrant as s, snapshotOf as t, applyRoleKinds as u, composeMemberships as v, countHolders as y };
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
const ISO_INSTANT = /^(\d{4}-\d{2}-\d{2})(?:[T ](\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?)(Z|[+-]\d{2}(?::?\d{2})?)?)?$/u;
|
|
3
3
|
/**
|
|
4
4
|
* Milliseconds since the epoch for an ISO 8601 date or date-time, or
|
|
5
|
-
* `undefined`. A date-time without a zone and a bare date are UTC, the same
|
|
6
|
-
*
|
|
5
|
+
* `undefined`. A date-time without a zone and a bare date are UTC, the same in
|
|
6
|
+
* memory, in the ORM compilers and in generated SQL.
|
|
7
7
|
*/
|
|
8
8
|
function isoInstant(value) {
|
|
9
9
|
const match = ISO_INSTANT.exec(value);
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
//#region src/core/internals.ts
|
|
2
2
|
const INTERNALS = Symbol.for("permdock.internals");
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Attaches `internals` to `instance` as a non-enumerable member; call before
|
|
5
|
+
* freezing.
|
|
6
|
+
*/
|
|
4
7
|
function attachInternals(instance, internals) {
|
|
5
8
|
Object.defineProperty(instance, INTERNALS, { value: internals });
|
|
6
9
|
}
|
|
7
10
|
/**
|
|
8
|
-
* The internals of a server instance, or `undefined` for an instance built
|
|
9
|
-
*
|
|
11
|
+
* The internals of a server instance, or `undefined` for an instance built from
|
|
12
|
+
* a snapshot or one that is not PermDock's. A feature function treats
|
|
10
13
|
* `undefined` as a check it cannot answer and denies with `unsupported`.
|
|
11
14
|
*/
|
|
12
15
|
function internalsOf(permdock) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as isForbiddenKey } from "./paths-
|
|
2
|
+
import { n as isForbiddenKey } from "./paths-CUvURzHp.js";
|
|
3
3
|
//#region src/core/json-schema.ts
|
|
4
4
|
function issue(issues, path, message) {
|
|
5
5
|
issues.push({
|
|
@@ -64,7 +64,10 @@ function resolveRef(root, ref) {
|
|
|
64
64
|
if (target === void 0) throw new TypeError(`Unsupported or unknown $ref ${ref}`);
|
|
65
65
|
return target;
|
|
66
66
|
}
|
|
67
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* Validates a `copyJson` result against `node`, reading `$ref` targets from
|
|
69
|
+
* `root`.
|
|
70
|
+
*/
|
|
68
71
|
function checkSchema(node, value, path, issues, root = node) {
|
|
69
72
|
if (node.$ref !== void 0) {
|
|
70
73
|
checkSchema(resolveRef(root, node.$ref), value, path, issues, root);
|
|
@@ -130,7 +133,10 @@ function checkSchema(node, value, path, issues, root = node) {
|
|
|
130
133
|
else if (node.additionalProperties !== void 0) checkSchema(node.additionalProperties, value[key], [...path, key], issues, root);
|
|
131
134
|
}
|
|
132
135
|
}
|
|
133
|
-
/**
|
|
136
|
+
/**
|
|
137
|
+
* The path of the first `__proto__`, `constructor` or `prototype` key in
|
|
138
|
+
* `value`, if any.
|
|
139
|
+
*/
|
|
134
140
|
function forbiddenKeyPath(value, path = []) {
|
|
135
141
|
if (value === null || typeof value !== "object") return;
|
|
136
142
|
for (const [key, child] of Object.entries(value)) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
2
|
//#region src/core/json-schema.d.ts
|
|
3
3
|
/**
|
|
4
|
-
* The JSON Schema 2020-12 keywords the package's own schemas use;
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The JSON Schema 2020-12 keywords the package's own schemas use; `checkSchema`
|
|
5
|
+
* interprets exactly these. `$ref` resolves only `#/$defs/<name>` against the
|
|
6
|
+
* root node. Annotations (`title`, `description`, `format`) are ignored, so a
|
|
7
|
+
* `format` always sits next to a `pattern` that enforces it.
|
|
8
8
|
*/
|
|
9
9
|
type JsonSchemaNode = {
|
|
10
10
|
readonly $schema?: string;
|
package/dist/jwt/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-
|
|
3
|
-
import { B as JwtAlgorithm, F as DpopProofResult, H as JwtPrincipal, I as IntrospectionPrincipal, L as JoseTokenSignerOptions, P as DiscoveryInput, R as JoseTokenVerifierOptions, U as JwtSubjectOptions, V as JwtJwks, W as MappedSubject, l as ReplayStore, z as JsonWebKeySet } from "../types-
|
|
4
|
-
import { t as memoryReplayStore } from "../replay-
|
|
1
|
+
import { Z as JwtClaims, _t as VerifiedToken, hr as Subject, ht as TokenVerifier, mt as TokenSigner, pr as Principal, pt as TokenFailureCause, rn as AuthEvent } from "../policy-types-DGIO_gxq.js";
|
|
2
|
+
import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-Di9tiUvi.js";
|
|
3
|
+
import { B as JwtAlgorithm, F as DpopProofResult, H as JwtPrincipal, I as IntrospectionPrincipal, L as JoseTokenSignerOptions, P as DiscoveryInput, R as JoseTokenVerifierOptions, U as JwtSubjectOptions, V as JwtJwks, W as MappedSubject, l as ReplayStore, z as JsonWebKeySet } from "../types-DsHGPtkR.js";
|
|
4
|
+
import { t as memoryReplayStore } from "../replay-Bs9Df2fQ.js";
|
|
5
5
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
6
6
|
//#region src/jwt/capability.d.ts
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* `on('auth')` causes: a verification failure, or one of the three capability
|
|
9
|
+
* checks.
|
|
10
|
+
*/
|
|
8
11
|
type CapabilityFailureCause = TokenFailureCause | "capability-revoked" | "capability-replayed" | "redeemer-mismatch" | "link-policy";
|
|
9
12
|
type CapabilitySubjectOptions = Omit<JoseTokenVerifierOptions, "typ" | "issuer" | "audience" | "profile"> & {
|
|
10
13
|
/** The issuer the capability was signed by (`iss`); required. */
|
|
@@ -13,20 +16,26 @@ type CapabilitySubjectOptions = Omit<JoseTokenVerifierOptions, "typ" | "issuer"
|
|
|
13
16
|
readonly audience: string | readonly string[];
|
|
14
17
|
readonly verifier?: TokenVerifier;
|
|
15
18
|
/**
|
|
16
|
-
* The link policies of the scope instances the linked resource sits in
|
|
17
|
-
*
|
|
19
|
+
* The link policies of the scope instances the linked resource sits in (its
|
|
20
|
+
* tenant, its customer); every one must hold. A throw denies.
|
|
18
21
|
*/
|
|
19
22
|
readonly linkPolicy?: (capability: Capability) => LinkPolicy | readonly LinkPolicy[] | undefined | Promise<LinkPolicy | readonly LinkPolicy[] | undefined>;
|
|
20
23
|
/** `true` when the application revoked the link id (`sub`); a throw denies. */
|
|
21
24
|
readonly revoked?: (id: string) => boolean | Promise<boolean>;
|
|
22
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Claims the `jti` of a one-time capability; a one-time capability without it
|
|
27
|
+
* is refused.
|
|
28
|
+
*/
|
|
23
29
|
readonly replay?: ReplayStore;
|
|
24
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* The request's own verified subject, checked against the capability's
|
|
32
|
+
* `redeemer`.
|
|
33
|
+
*/
|
|
25
34
|
readonly viewer?: Subject;
|
|
26
35
|
/**
|
|
27
36
|
* The incoming request. A capability with `cnf` resolves only when the
|
|
28
|
-
* request carries a DPoP proof (RFC 9449) signed by the bound key;
|
|
29
|
-
*
|
|
37
|
+
* request carries a DPoP proof (RFC 9449) signed by the bound key; without
|
|
38
|
+
* one it is refused.
|
|
30
39
|
*/
|
|
31
40
|
readonly request?: Request;
|
|
32
41
|
readonly onAuth?: (event: AuthEvent) => void;
|
|
@@ -34,8 +43,8 @@ type CapabilitySubjectOptions = Omit<JoseTokenVerifierOptions, "typ" | "issuer"
|
|
|
34
43
|
};
|
|
35
44
|
/**
|
|
36
45
|
* Resolves a `vnd.permdock.capability+jwt` into the `link` subject it acts as.
|
|
37
|
-
* Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim,
|
|
38
|
-
*
|
|
46
|
+
* Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim, a
|
|
47
|
+
* revoked link, a replayed one-time token, a redeemer the viewer does not
|
|
39
48
|
* satisfy, a `cnf` without a matching DPoP proof, a throwing store) is the
|
|
40
49
|
* anonymous subject, never a throw.
|
|
41
50
|
*/
|
|
@@ -52,13 +61,19 @@ type CiOidcSubjectOptions = Omit<JoseTokenVerifierOptions, "typ" | "issuer" | "a
|
|
|
52
61
|
* from OpenID discovery unless `jwks` is set.
|
|
53
62
|
*/
|
|
54
63
|
readonly issuer?: string;
|
|
55
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* Validates the verified claims; a failure or a Promise is the anonymous
|
|
66
|
+
* subject.
|
|
67
|
+
*/
|
|
56
68
|
readonly schema?: StandardSchemaV1;
|
|
57
69
|
readonly verifier?: TokenVerifier;
|
|
58
70
|
readonly onAuth?: (event: AuthEvent) => void;
|
|
59
71
|
readonly requestId?: string;
|
|
60
72
|
};
|
|
61
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* A CI job: never a user. `ref` is a full ref (`refs/heads/main`,
|
|
75
|
+
* `refs/tags/v1`).
|
|
76
|
+
*/
|
|
62
77
|
type CiOidcPrincipal = Principal & {
|
|
63
78
|
readonly kind: "workload";
|
|
64
79
|
readonly issuer: string;
|
|
@@ -77,18 +92,27 @@ export declare function subjectFromCiOidc(token: string | undefined | null, opti
|
|
|
77
92
|
//#endregion
|
|
78
93
|
//#region src/jwt/dpop.d.ts
|
|
79
94
|
type DpopProofOptions = {
|
|
80
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* Rejects a proof whose `jti` this key already used within the 60-second
|
|
97
|
+
* window.
|
|
98
|
+
*/
|
|
81
99
|
readonly replay?: ReplayStore;
|
|
82
100
|
};
|
|
83
101
|
export declare function verifyDpopProof(request: Request, claims: JwtClaims, accessToken?: string, options?: DpopProofOptions): Promise<DpopProofResult>;
|
|
84
102
|
//#endregion
|
|
85
103
|
//#region src/jwt/id-token.d.ts
|
|
86
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* `TokenFailureCause` plus `nonce-mismatch`; a `TokenVerifier` never returns
|
|
106
|
+
* it.
|
|
107
|
+
*/
|
|
87
108
|
type IdTokenFailureCause = TokenFailureCause | "nonce-mismatch";
|
|
88
109
|
type VerifyIdTokenOptions = {
|
|
89
110
|
/** The OpenID Provider's issuer; `iss` must equal it. */
|
|
90
111
|
readonly issuer: string;
|
|
91
|
-
/**
|
|
112
|
+
/**
|
|
113
|
+
* The relying party's `client_id`; `aud` must contain it and `azp`, when
|
|
114
|
+
* present, must equal it.
|
|
115
|
+
*/
|
|
92
116
|
readonly clientId: string;
|
|
93
117
|
/** The `nonce` sent in the authentication request; the token's must equal it. */
|
|
94
118
|
readonly nonce?: string;
|
|
@@ -118,9 +142,9 @@ type VerifyIdTokenResult = {
|
|
|
118
142
|
};
|
|
119
143
|
/**
|
|
120
144
|
* Verifies an OpenID Connect ID token for a relying party (Core section
|
|
121
|
-
* 3.1.3.7): signature, `iss`, `aud`, `exp`, `iat`, `typ` `JWT` or absent,
|
|
122
|
-
*
|
|
123
|
-
* `
|
|
145
|
+
* 3.1.3.7): signature, `iss`, `aud`, `exp`, `iat`, `typ` `JWT` or absent, `azp`
|
|
146
|
+
* and, when `nonce` is given, `nonce`. It does not check `at_hash`, `c_hash`,
|
|
147
|
+
* `auth_time` or `acr`. Never throws.
|
|
124
148
|
*/
|
|
125
149
|
export declare function verifyIdToken(token: string, options: VerifyIdTokenOptions): Promise<VerifyIdTokenResult>;
|
|
126
150
|
//#endregion
|
|
@@ -135,13 +159,19 @@ export declare function subjectFromJwt(token: string | undefined | null, options
|
|
|
135
159
|
export declare function jwtSubjectResolver(options: JwtSubjectOptions): (token: string | undefined | null, request?: Request) => Promise<MappedSubject>;
|
|
136
160
|
//#endregion
|
|
137
161
|
//#region src/jwt/subject-token.d.ts
|
|
138
|
-
/**
|
|
162
|
+
/**
|
|
163
|
+
* `TokenFailureCause` plus the two checks `verifySubjectToken` adds; a
|
|
164
|
+
* `TokenVerifier` never returns them.
|
|
165
|
+
*/
|
|
139
166
|
type SubjectTokenFailureCause = TokenFailureCause | "replayed" | "lifetime-exceeded";
|
|
140
167
|
type VerifySubjectTokenOptions = {
|
|
141
168
|
/** Tried in order; the first that accepts the token wins. */
|
|
142
169
|
readonly verifiers: readonly TokenVerifier[];
|
|
143
170
|
readonly audience: string | readonly string[];
|
|
144
|
-
/**
|
|
171
|
+
/**
|
|
172
|
+
* Records each `jti` once; `claim` when the store has it, else `seen` and
|
|
173
|
+
* `remember`.
|
|
174
|
+
*/
|
|
145
175
|
readonly replay: ReplayStore;
|
|
146
176
|
/** The largest `exp - iat`, in seconds; default 300. */
|
|
147
177
|
readonly maxLifetime?: number;
|
|
@@ -163,10 +193,10 @@ type VerifySubjectTokenResult = {
|
|
|
163
193
|
};
|
|
164
194
|
/**
|
|
165
195
|
* Verifies a subject token: an RFC 9068 `at+jwt` naming one subject for one
|
|
166
|
-
* request, such as the `PermDock-Subject` header. The first of `verifiers`
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
196
|
+
* request, such as the `PermDock-Subject` header. The first of `verifiers` that
|
|
197
|
+
* accepts it wins. The token must carry `sub`, `jti`, `iat` and `exp`, live at
|
|
198
|
+
* most `maxLifetime` seconds, and present its `jti` once. A replay store that
|
|
199
|
+
* throws refuses the token as `replayed`. Never throws.
|
|
170
200
|
*/
|
|
171
201
|
export declare function verifySubjectToken(token: string, options: VerifySubjectTokenOptions): Promise<VerifySubjectTokenResult>;
|
|
172
202
|
//#endregion
|
package/dist/jwt/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "../freeze-
|
|
3
|
-
import { o as epochSeconds, p as nowSeconds } from "../time-
|
|
4
|
-
import { n as sha256, t as bytesToBase64Url } from "../sha256-
|
|
2
|
+
import { n as freezeDeep } from "../freeze-jjan0lCv.js";
|
|
3
|
+
import { o as epochSeconds, p as nowSeconds } from "../time-nR1JesoH.js";
|
|
4
|
+
import { n as sha256, t as bytesToBase64Url } from "../sha256-C-4WXKIu.js";
|
|
5
5
|
import { t as anonymousSubject } from "../subject-BGoM5o8B.js";
|
|
6
|
-
import { i as linkPolicyViolation, r as capabilitySubject, s as redeemerAllows, t as capabilityFromClaims } from "../capability-
|
|
7
|
-
import { a as verifierOptions, i as issuerFromDiscovery, n as assertSubjectConfig, o as decodeHeader, r as fail, s as normalizeTyp, t as joseTokenVerifier } from "../verifier-
|
|
6
|
+
import { i as linkPolicyViolation, r as capabilitySubject, s as redeemerAllows, t as capabilityFromClaims } from "../capability-BqX94r07.js";
|
|
7
|
+
import { a as verifierOptions, i as issuerFromDiscovery, n as assertSubjectConfig, o as decodeHeader, r as fail, s as normalizeTyp, t as joseTokenVerifier } from "../verifier-DUV6pLqZ.js";
|
|
8
8
|
import { t as loadJose } from "../load-jose-DZ4dnjri.js";
|
|
9
|
-
import { i as validateCustomClaims, n as idTokenMismatch, r as mapClaimsToSubject, t as acceptMismatch } from "../map-claims-
|
|
10
|
-
import { t as memoryReplayStore } from "../replay-
|
|
9
|
+
import { i as validateCustomClaims, n as idTokenMismatch, r as mapClaimsToSubject, t as acceptMismatch } from "../map-claims-C-nv08_n.js";
|
|
10
|
+
import { t as memoryReplayStore } from "../replay-BU09ad4L.js";
|
|
11
11
|
//#region src/jwt/dpop.ts
|
|
12
12
|
const DPOP_WINDOW_SECONDS = 60;
|
|
13
13
|
const PROOF_ALGS = /* @__PURE__ */ new Set([
|
|
@@ -147,8 +147,8 @@ async function stores(options, capability, issuedAt, once) {
|
|
|
147
147
|
}
|
|
148
148
|
/**
|
|
149
149
|
* Resolves a `vnd.permdock.capability+jwt` into the `link` subject it acts as.
|
|
150
|
-
* Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim,
|
|
151
|
-
*
|
|
150
|
+
* Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim, a
|
|
151
|
+
* revoked link, a replayed one-time token, a redeemer the viewer does not
|
|
152
152
|
* satisfy, a `cnf` without a matching DPoP proof, a throwing store) is the
|
|
153
153
|
* anonymous subject, never a throw.
|
|
154
154
|
*/
|
|
@@ -321,9 +321,9 @@ async function subjectFromCiOidc(token, options) {
|
|
|
321
321
|
//#region src/jwt/id-token.ts
|
|
322
322
|
/**
|
|
323
323
|
* Verifies an OpenID Connect ID token for a relying party (Core section
|
|
324
|
-
* 3.1.3.7): signature, `iss`, `aud`, `exp`, `iat`, `typ` `JWT` or absent,
|
|
325
|
-
*
|
|
326
|
-
* `
|
|
324
|
+
* 3.1.3.7): signature, `iss`, `aud`, `exp`, `iat`, `typ` `JWT` or absent, `azp`
|
|
325
|
+
* and, when `nonce` is given, `nonce`. It does not check `at_hash`, `c_hash`,
|
|
326
|
+
* `auth_time` or `acr`. Never throws.
|
|
327
327
|
*/
|
|
328
328
|
async function verifyIdToken(token, options) {
|
|
329
329
|
const verifier = options.verifier ?? joseTokenVerifier(compact({
|
|
@@ -552,10 +552,10 @@ function mtlsThumbprint(claims) {
|
|
|
552
552
|
}
|
|
553
553
|
/**
|
|
554
554
|
* The sender constraint to enforce. Without a configured `sender`, a token
|
|
555
|
-
* whose `cnf` binds it to a key or a certificate is held to that binding,
|
|
556
|
-
*
|
|
557
|
-
*
|
|
558
|
-
*
|
|
555
|
+
* whose `cnf` binds it to a key or a certificate is held to that binding, never
|
|
556
|
+
* accepted as a bearer token (RFC 9449 section 7.1, RFC 8705 section 3). An
|
|
557
|
+
* explicit `sender: "none"` is the opt-out for a gateway that verified the
|
|
558
|
+
* binding upstream.
|
|
559
559
|
*/
|
|
560
560
|
function senderFor(options, cnf) {
|
|
561
561
|
if (options.sender !== void 0) return options.sender;
|
|
@@ -670,7 +670,10 @@ async function resolveSubject(token, options, request) {
|
|
|
670
670
|
//#endregion
|
|
671
671
|
//#region src/jwt/subject-token.ts
|
|
672
672
|
const DEFAULT_MAX_LIFETIME = 300;
|
|
673
|
-
/**
|
|
673
|
+
/**
|
|
674
|
+
* Causes a verifier for another issuer answers; a different cause names the
|
|
675
|
+
* token's real fault.
|
|
676
|
+
*/
|
|
674
677
|
const OTHER_ISSUER = /* @__PURE__ */ new Set(["wrong-issuer", "unknown-kid"]);
|
|
675
678
|
async function firstAccepted(token, options) {
|
|
676
679
|
const causes = [];
|
|
@@ -703,10 +706,10 @@ async function claimOnce(replay, key, expiresAt) {
|
|
|
703
706
|
}
|
|
704
707
|
/**
|
|
705
708
|
* Verifies a subject token: an RFC 9068 `at+jwt` naming one subject for one
|
|
706
|
-
* request, such as the `PermDock-Subject` header. The first of `verifiers`
|
|
707
|
-
*
|
|
708
|
-
*
|
|
709
|
-
*
|
|
709
|
+
* request, such as the `PermDock-Subject` header. The first of `verifiers` that
|
|
710
|
+
* accepts it wins. The token must carry `sub`, `jti`, `iat` and `exp`, live at
|
|
711
|
+
* most `maxLifetime` seconds, and present its `jti` once. A replay store that
|
|
712
|
+
* throws refuses the token as `replayed`. Never throws.
|
|
710
713
|
*/
|
|
711
714
|
async function verifySubjectToken(token, options) {
|
|
712
715
|
const verified = await firstAccepted(token, options);
|