permdock 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -3
- package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
- package/dist/a2a/index.d.ts +7 -7
- package/dist/a2a/index.js +9 -9
- package/dist/action-result-CL-QCITA.d.ts +19 -0
- package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
- package/dist/{adoption-scan-DCYe60Pi.js → adoption-scan-BLs67P1l.js} +5 -5
- package/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +31 -10
- package/dist/ai-sdk/index.js +22 -12
- package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
- package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
- package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
- package/dist/{approval-prompt-DvSSPQJX.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
- package/dist/approvals/index.d.ts +5 -5
- package/dist/approvals/index.js +7 -7
- package/dist/{approvals-p1PGoVjb.js → approvals-DnIBTuXE.js} +128 -78
- package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
- package/dist/{arazzo-41WuzHou.js → arazzo-3RhGfkAK.js} +2 -2
- package/dist/{arazzo-CaUVBn7D.js → arazzo-B5-ulWif.js} +6 -6
- package/dist/{args-IIolxxKA.js → args-0FrVs5EH.js} +125 -8
- package/dist/astro/index.d.ts +30 -12
- package/dist/astro/index.js +2 -2
- package/dist/{audience-DabClFLQ.js → audience-BAkBDMqn.js} +8 -8
- package/dist/{auth-DRLEizbL.js → auth--yPyZNgr.js} +21 -10
- package/dist/authzen/index.d.ts +171 -25
- package/dist/authzen/index.js +321 -149
- package/dist/{automation-BNM3TtDo.d.ts → automation-DqEoWHBc.d.ts} +42 -32
- package/dist/{automation-DVjOckjV.js → automation-x3KEUusw.js} +22 -21
- package/dist/base-url-BQbddZO5.js +9 -0
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +13 -7
- package/dist/better-supabase/index.d.ts +392 -220
- package/dist/better-supabase/index.js +293 -152
- package/dist/{bind-DOyrv6zi.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
- package/dist/{bind-CAvgUuKs.js → bind-D_sZSVA3.js} +22 -10
- package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
- package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
- package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
- package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
- package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
- package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
- package/dist/{build-instance-Bu_eDqYw.js → build-instance-CNWaYJyr.js} +3 -3
- package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
- package/dist/{capability-N1K9IpqS.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-Drg-1YhL.d.ts → capability-ChuiONQU.d.ts} +41 -29
- package/dist/{casbin-Dyu2gnUD.js → casbin-H0rKxBx2.js} +16 -8
- package/dist/{casbin-Cr7RLtA3.js → casbin-cbSbhT_k.js} +2 -2
- package/dist/{casl-64gpT-8x.js → casl-C4OINZHI.js} +2 -2
- package/dist/{casl-DjEDhTCP.js → casl-CHHoCldP.js} +19 -10
- package/dist/catalog/index.d.ts +104 -23
- package/dist/catalog/index.js +117 -8
- package/dist/{catalog-HD2gf5mY.js → catalog-BFpz2EmT.js} +57 -26
- package/dist/{catalog-DZVbrF-z.js → catalog-DCspHDc8.js} +3 -3
- package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-DjMKzJp9.js} +53 -16
- package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-e6aCWosn.js} +19 -15
- package/dist/catalog-mRQQQhNK.js +1 -0
- package/dist/catalog-operations-Dadrl7Z-.js +60 -0
- package/dist/{create-CQWIpUG-.js → challenge-DImNcR7B.js} +157 -39
- 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-CGkP3Z7A.js +40 -0
- 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 +186 -38
- package/dist/cloud/index.js +293 -31
- package/dist/{cloud-ytQ3uviA.js → cloud-BFlGMaak.js} +5 -6
- package/dist/{codemod-5mpSpnUY.js → codemod-DLQ9Zpo4.js} +3 -4
- package/dist/{codemod-ua2hHy7w.js → codemod-DWSN2erG.js} +523 -201
- package/dist/collect-B5BL3klN.js +1 -0
- package/dist/{collect-mLTY4nwb.js → collect-B7ZFAJU3.js} +36 -64
- package/dist/{collect-Ci6akVwH.js → collect-Bzv3le0A.js} +6 -6
- 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-1bsAezL0.d.ts → compile-BFzysW3o.d.ts} +36 -12
- package/dist/{compile-CMqMx_IN.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BTFrHZhX.js → completion-saoYiRFO.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-Bj2Ixq3d.js → config-DBeXXmBF.js} +2 -2
- package/dist/{config-report-DSpsLpCE.js → config-report-BipSWA6V.js} +9 -6
- package/dist/config-shape-ykV0Vm2n.js +134 -0
- package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
- package/dist/connector-schema-CYLQNMYq.js +434 -0
- package/dist/{context-B_u3_bDJ.js → context-BnIzxTNE.js} +4 -3
- package/dist/convex/index.d.ts +13 -7
- package/dist/convex/index.js +9 -6
- package/dist/core-H-mbhpZc.js +341 -0
- package/dist/core-hWIARPDz.d.ts +206 -0
- package/dist/{create-CBMmFie-.d.ts → create-BSNrVuxh.d.ts} +87 -34
- package/dist/{create-B30OMUOJ.d.ts → create-BVq1lNQE.d.ts} +49 -28
- package/dist/{create-D_NmPOdH.d.ts → create-CM1FciYG.d.ts} +37 -29
- package/dist/{create-CGm28gyI.js → create-Cq4Uox0f.js} +13 -9
- package/dist/{create-DCF2SvoT.js → create-_noSrY1T.js} +15 -21
- package/dist/{credential-BcoiejpY.js → credential-CyyyvCsL.js} +42 -39
- package/dist/{credentials-DPyHmYz5.js → credentials-CdDxp7jN.js} +6 -6
- package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-NB4wcyBf.js} +13 -2
- package/dist/{delegation-j6-rc37o.js → delegation-CDB6_keF.js} +31 -22
- package/dist/delivery/index.d.ts +5 -5
- package/dist/delivery/index.js +6 -5
- package/dist/{delivery-DCAgNyCn.js → delivery-BupfvJIV.js} +81 -20
- package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
- package/dist/denied-text-CHNlVInN.d.ts +22 -0
- package/dist/{describe-BybMRY7A.js → describe-Bb4hGK5d.js} +6 -5
- package/dist/{describe-B5qgDvEW.d.ts → describe-ByS9LgHK.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-CmuSD3vc.js → diff-CN8IYhC_.js} +2 -2
- package/dist/{diff-3jbx6Rm4.js → diff-iZWV65nC.js} +23 -14
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BdZw53-k.js → doctor-CHD1M9R5.js} +485 -141
- package/dist/{doctor-3ZqNHX_G.js → doctor-D3wo-yuz.js} +4 -4
- package/dist/drizzle/index.d.ts +33 -19
- package/dist/drizzle/index.js +17 -9
- package/dist/elysia/index.d.ts +17 -11
- package/dist/elysia/index.js +5 -5
- package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
- package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
- package/dist/{errors-CWTY6uih.js → errors-Vpu6rKHl.js} +14 -10
- package/dist/{errors-DH5QEGXh.d.ts → errors-zi_4T-rx.d.ts} +22 -6
- package/dist/{evaluate-CNClBvcj.js → evaluate-Dd8Ta0Ie.js} +185 -80
- package/dist/{evaluations-beAooV0n.js → evaluations-IBceAeKT.js} +41 -20
- package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-z8dQFDaN.d.ts} +12 -6
- 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-Dw0MTS3D.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
- package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-JL43jD3E.js} +14 -11
- package/dist/fields-D0vUI6dq.js +498 -0
- package/dist/{files-C5ZI27eV.js → files-B3AA05f1.js} +21 -5
- package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
- package/dist/{fixtures-B7XrLeY7.js → fixtures-A1_sp_tR.js} +15 -6
- package/dist/{flags-C3DktBDY.js → flags-DXjoTVbS.js} +2 -2
- package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
- package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-DCakWRsr.js} +26 -16
- package/dist/gen-B5kvbAoZ.js +58 -0
- package/dist/gen-DWCYcMQM.js +827 -0
- package/dist/generate-CRVV5V7l.js +165 -0
- package/dist/generate-CezbCaTI.js +275 -0
- package/dist/{grantee-hxrUsbpM.js → grantee-Dke-9rd1.js} +4 -4
- package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-BrYPe-w0.js} +12 -12
- package/dist/{grantee-match-DbENBHLB.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-CBYVMjwh.js → helpers-DJicaG6f.js} +40 -28
- package/dist/hono/index.d.ts +16 -10
- package/dist/hono/index.js +5 -5
- package/dist/{hosted-BPk51-kX.d.ts → hosted-Cmtxogd0.d.ts} +44 -20
- package/dist/{hosted-B46-5LYE.js → hosted-D0IzESu_.js} +68 -25
- package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
- package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
- package/dist/{http-DXJ37RDA.js → http-DOL33cO0.js} +11 -8
- package/dist/{import-wyqXUyjm.js → import-CST57XLp.js} +64 -51
- package/dist/{import-CNV7I2Dw.js → import-_YqhhwvX.js} +6 -6
- package/dist/{index-B8YjkEZ4.d.ts → index-B8s204GL.d.ts} +64 -52
- package/dist/{index-Ch8LpNDp.d.ts → index-BT5-1VsX.d.ts} +64 -25
- package/dist/{index-DuWxc5dt.d.ts → index-BW_0MZOS.d.ts} +388 -149
- package/dist/index-BhxEUY9J.d.ts +233 -0
- package/dist/index-Bv5iXPqU.d.ts +210 -0
- package/dist/{index-C-6Letxg.d.ts → index-_9UiQIkt.d.ts} +164 -77
- package/dist/index.d.ts +22 -21
- package/dist/index.js +35 -33
- package/dist/{init-GG6Jh8HD.js → init-Dz_PsHdv.js} +5 -5
- package/dist/{init-DeMYsnYJ.js → init-cE3A8aXq.js} +10 -10
- package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
- package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot--JWiTrvO.js} +81 -56
- 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 +125 -17
- package/dist/jwt/index.js +157 -16
- package/dist/{kernel-D0NVb1cK.js → kernel-C-fYydV2.js} +151 -16
- 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-DFS_ry0W.js → load-DjSU5KXO.js} +6 -6
- package/dist/load-Dm0pSYH3.js +1 -0
- package/dist/{login-Dfe5RlYk.js → login-D-8tMqzo.js} +4 -4
- package/dist/{login-imhuwvn3.js → login-DplQ0s84.js} +18 -15
- package/dist/{manifest-dvL2XEe1.js → manifest-Cgiq5oqc.js} +67 -37
- package/dist/{manifest-mx5ghSFM.d.ts → manifest-CzzWtnAb.d.ts} +144 -28
- package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-2r37XRhD.js} +80 -9
- package/dist/{manifest-C8IzW3Do.js → manifest-wg8WkkpD.js} +11 -7
- package/dist/{map-claims-D3oRmTk0.js → map-claims-BNWCJtmP.js} +27 -18
- package/dist/{map-error-Dr70oA_3.js → map-error-pasIGqMT.js} +7 -7
- package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
- package/dist/mcp/index.d.ts +154 -47
- package/dist/mcp/index.js +200 -41
- package/dist/{migrate-CIq4-E9F.js → migrate-B7oP_sQU.js} +102 -31
- package/dist/module-values-BJTBdo6y.js +107 -0
- package/dist/nest/index.d.ts +23 -13
- package/dist/nest/index.js +18 -11
- package/dist/next/client.d.ts +5 -2
- package/dist/next/client.js +1 -1
- package/dist/next/index.d.ts +72 -26
- package/dist/next/index.js +110 -6
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +4 -3
- package/dist/node/index.d.ts +5 -5
- package/dist/node/index.js +3 -3
- package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
- package/dist/openai/index.d.ts +13 -7
- package/dist/openai/index.js +3 -3
- package/dist/openapi/index.d.ts +61 -30
- package/dist/openapi/index.js +2 -2
- package/dist/{openapi-B7HZ0f-r.js → openapi-BOsx0xn9.js} +34 -24
- package/dist/{openapi-C4dDTVEd.js → openapi-CBZUhA3l.js} +4 -5
- package/dist/{openapi-DD1SV-5-.js → openapi-VeHHU2l9.js} +23 -14
- package/dist/{operation-findings-DgATDpvh.js → operation-findings-CXtFzlKJ.js} +3 -3
- package/dist/{operations-X0VM7F3m.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
- package/dist/orpc/index.d.ts +68 -14
- package/dist/orpc/index.js +62 -13
- package/dist/otel/index.d.ts +7 -4
- package/dist/otel/index.js +8 -5
- package/dist/output-files-BHOIlrfD.js +1 -0
- package/dist/{output-files-DhRBBE4n.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/{output-1im__-08.js → output-tkju6U7R.js} +15 -7
- package/dist/ownership-B4L59T9u.js +1054 -0
- package/dist/parse-1_ZheTW5.js +151 -0
- package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
- package/dist/parse-local-manifest-DEiCF4ah.js +69 -0
- 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 +23 -12
- package/dist/{peer-CRvC7Hg1.js → peer-C9LvBCcb.js} +1 -1
- package/dist/peer-Q0fuZ6hx.js +982 -0
- package/dist/{permdock-SV8ZINYT.d.ts → permdock-B6Sf4T_S.d.ts} +270 -117
- package/dist/{permdock-BrAscV28.js → permdock-L-_I_3zP.js} +226 -74
- package/dist/{permission-registry-Br4jSNVi.js → permission-registry-B8tYxPIt.js} +24 -11
- package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-CAY-GU7e.d.ts} +130 -104
- package/dist/{permissions-u_KHg-sN.d.ts → permissions-Bx6UI8n1.d.ts} +6 -2
- package/dist/{permissions-B-wCP5ZC.js → permissions-CVXmRILq.js} +3 -3
- package/dist/{permissions-BPxlwVhN.js → permissions-mDcTWoBs.js} +8 -5
- package/dist/pg-DQTqRrou.js +60 -0
- package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
- package/dist/pkce-CnmmYqUZ.js +21 -0
- package/dist/{policy-77FSAq_V.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
- package/dist/{policy-DbM5YYtV.js → policy-CLQ8__GF.js} +49 -20
- package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-CJgOm6aq.js} +28 -25
- package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
- package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-CCiDRZBH.d.ts} +802 -334
- package/dist/postgres-store-DcyrPS-r.js +1028 -0
- package/dist/{postgrest-DAjUkF9w.js → postgrest-D4nuPXIQ.js} +88 -36
- package/dist/{postgrest-CEgRbefE.d.ts → postgrest-DicQyqm-.d.ts} +60 -30
- package/dist/powersync-DHNQX06W.js +1117 -0
- package/dist/{powersync-DISt6SUe.js → powersync-DXqGuq9A.js} +3 -3
- package/dist/powersync-Djf-zCpB.js +1 -0
- package/dist/preset/index.d.ts +38 -28
- package/dist/preset/index.js +1 -1
- package/dist/{preset-DZdU0tne.js → preset-BjLzeFpp.js} +58 -34
- 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-BYc6drYW.js +938 -0
- package/dist/protected-action-BE7N_Luo.d.ts +58 -0
- package/dist/protected-action-DUYqb-Ma.js +80 -0
- package/dist/{protected-BlF0F6wL.js → protected-action-QEA8arRB.js} +48 -14
- package/dist/{provider-B1al-AZz.js → provider-C55OGXJ7.js} +5 -4
- package/dist/{provider-DILL9oPK.d.ts → provider-DXfq5c2d.d.ts} +1 -1
- package/dist/{provider-store-DM6DNcta.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/pull-B65ndFNZ.js +1 -0
- package/dist/{pull-jEwbf80J.js → pull-CwpGaQSi.js} +12 -11
- package/dist/{push-BD4f15co.js → push-DgssgzkK.js} +62 -16
- package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
- package/dist/{pushed-policy-CqtxkV4G.js → pushed-policy-ITwYKvvH.js} +10 -7
- package/dist/react/index.d.ts +9 -8
- package/dist/react/index.js +7 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +104 -51
- package/dist/react-native/index.js +394 -67
- package/dist/{refs-K6eWUJ0H.js → refs-C8BKxc_e.js} +17 -3
- 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-Bkm-Ne4l.d.ts → replay-DNftIb_R.d.ts} +1 -1
- package/dist/{request-context-C81Pip9n.js → request-context-C25ilqiJ.js} +8 -8
- package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
- package/dist/resend/index.d.ts +34 -28
- package/dist/resend/index.js +29 -29
- package/dist/resolve-names-CF7xXLSG.js +201 -0
- package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
- package/dist/{retire-CALjIQ7e.js → retire-B2xffQgY.js} +15 -6
- package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
- package/dist/{rls-DTvYd-lI.js → rls-CNEH2_BG.js} +743 -624
- package/dist/{rls-BAqP4q66.js → rls-Ca8Jz9b5.js} +41 -10
- package/dist/{role-builder-uWQZ4v84.js → role-builder-BK2-T6oD.js} +41 -20
- package/dist/rolldown-runtime-C3I60J0A.js +4 -0
- package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
- package/dist/{rpc-VSl5ylaQ.js → rpc-fNqAIqQk.js} +8 -5
- package/dist/{run-CUKuz0A8.js → run-Bz26OTfO.js} +26 -23
- package/dist/run-D-JE8QWb.js +1 -0
- package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-DbWI9f99.d.ts} +33 -13
- package/dist/{run-ticket-sxFI6LAk.js → run-ticket-Dv7aF7Dk.js} +29 -8
- package/dist/{runtime-D3VTAiCA.js → runtime-BGnrOkVH.js} +5 -2
- package/dist/{saas-BCXRuXca.js → saas-iWnUdwCt.js} +42 -29
- package/dist/{scan-qvOe0hS3.js → scan-DCj1KQfn.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-yLuBWWsh.js → schema-Dst9I9Gs.js} +9 -5
- package/dist/scim/index.d.ts +3 -2
- package/dist/scim/index.js +3 -1
- package/dist/scim-D8YupzX1.js +44 -0
- package/dist/{scim-ClHtpyV3.js → scim-jJBJ7g1Z.js} +35 -551
- package/dist/{scopes-CUPSjo9q.js → scopes-0Up_UA2t.js} +42 -24
- package/dist/server/index.d.ts +12 -12
- package/dist/server/index.js +13 -13
- package/dist/{server-C3WXAHZj.js → server-3cVlTLde.js} +31 -31
- package/dist/{server-types-CKQiCnON.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
- package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
- package/dist/{shared-BAK8t4Uo.js → shared-Afctg7B0.js} +100 -61
- package/dist/{shared-DvvFzYXe.js → shared-l0oGGetg.js} +9 -6
- package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
- package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
- package/dist/{sink-4-eQIRWf.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
- package/dist/{skills-B6lVdD_W.js → skills-Bjj7BNEQ.js} +16 -12
- package/dist/{skills-CTYwkl44.js → skills-OuoMR49L.js} +3 -3
- package/dist/{snapshot-B7DkYg6g.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
- package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-Bx_4xC_6.js} +14 -11
- package/dist/solid/index.d.ts +55 -15
- 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-B1Os_YUu.d.ts +312 -0
- package/dist/{sources-vs5dGOsS.js → sources-CMAM-2A3.js} +156 -51
- package/dist/sources-qoIJQrJv.js +11 -0
- package/dist/{sql-B5T1IL83.js → sql-0WjxIp9g.js} +32 -7
- package/dist/sql-B80DFdpG.d.ts +10 -0
- package/dist/{src-Cu2m75uo.js → src-DZ0l9UAg.js} +305 -123
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +665 -224
- package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
- package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
- package/dist/{store-BDutJkDL.js → store-RNFvaJJv.js} +43 -29
- package/dist/{store-options-u0ycEe8s.js → store-options-Dil3lraY.js} +105 -15
- package/dist/stores-C0Kta5Ft.d.ts +59 -0
- package/dist/{stores-CGhM8BN_.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{stream-CeCMJmBB.d.ts → stream-ltuLdtTG.d.ts} +4 -3
- package/dist/{style-DiKWnAvn.js → style-DblOtSga.js} +1 -1
- package/dist/{style-Uao76wO7.js → style-Ds11Hmk4.js} +3 -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 -37
- package/dist/supabase/index.js +6 -6
- package/dist/supabase/middleware.d.ts +19 -13
- package/dist/supabase/middleware.js +7 -7
- package/dist/{supabase-x5JtR2tc.js → supabase-BL1qJzzY.js} +82 -36
- package/dist/{supabase-By_frk3U.js → supabase-D39cuGPt.js} +3 -3
- package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-B-yXnzUl.js} +1206 -286
- package/dist/supabase-hook-H-MtE9Wd.js +1 -0
- package/dist/supautils-BU-pAEpf.js +808 -0
- package/dist/{support-session-C6xJQYut.js → support-session-BsmPCbz8.js} +22 -22
- 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-DqaJNJPn.js → tables-DeMNEy6V.js} +1025 -1085
- 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-DN2QAx9z.js → tenancy-5d1zVBvK.js} +36 -21
- package/dist/terminal/index.d.ts +23 -14
- package/dist/terminal/index.js +17 -20
- package/dist/testing/core.d.ts +2 -0
- package/dist/testing/core.js +1 -0
- package/dist/testing/fixtures/index.d.ts +15 -0
- package/dist/testing/fixtures/index.js +831 -0
- package/dist/testing/index.d.ts +235 -285
- package/dist/testing/index.js +502 -927
- 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-BtfSmdUo.js +444 -0
- package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
- package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
- package/dist/{token-BLZcjQgt.js → token-DC9EQiet.js} +15 -13
- package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-Qpjs_W6M.js} +5 -2
- package/dist/trpc/index.d.ts +11 -8
- package/dist/trpc/index.js +15 -9
- package/dist/type-helpers-BIPIDa6a.d.ts +50 -0
- package/dist/{types-8RnwUAvE.d.ts → types-AMJ5qoU_.d.ts} +49 -30
- package/dist/{types-C_IiEs64.d.ts → types-B2mlGuhW.d.ts} +14 -11
- package/dist/{types-_WhUP7ud.d.ts → types-B4uqKDnp.d.ts} +25 -12
- package/dist/{types-CX7AvRqP.d.ts → types-BJk0BKRX.d.ts} +24 -14
- package/dist/types-B_d_g7T3.d.ts +262 -0
- package/dist/{types-BdtSDbBO.d.ts → types-B_tiYvk8.d.ts} +59 -32
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-Dfv0aTER.d.ts → types-DC1Loeh3.d.ts} +449 -168
- package/dist/{types-lUlG3TVd.d.ts → types-DHKPcqzr.d.ts} +2 -2
- package/dist/{types-C791HFu9.d.ts → types-DjuMBNF9.d.ts} +68 -32
- package/dist/{types-C863OQiR.d.ts → types-HzqOtvsJ.d.ts} +23 -12
- package/dist/{types-Druu9wLM.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-BzzaHxt3.d.ts → types-ah9NlU6j.d.ts} +137 -48
- package/dist/{types-CVZSNocA.d.ts → types-djVzLlIV.d.ts} +31 -14
- package/dist/{types-BtHtcKMr.d.ts → types-yUuPR5Hy.d.ts} +47 -24
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CYeXek0p.js +1 -0
- package/dist/{usage-SveTRTyr.js → usage-CxEzS4ey.js} +50 -26
- package/dist/{usage-CRVl9V3t.js → usage-ab0PdusX.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-DHUrAkku.d.ts → validation-error-YGg2mXyH.d.ts} +5 -2
- package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
- package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
- package/dist/{verify-BaAKx7t6.js → verify-DZeqoWu5.js} +417 -489
- package/dist/version-DMQ0dnN5.js +48 -0
- package/dist/version-DizhmD72.js +1 -0
- package/dist/{views-DTIIO-oQ.js → views-CD8wuL4Z.js} +19 -6
- package/dist/vocabulary-DEJ5j4mR.d.ts +70 -0
- package/dist/vue/index.d.ts +71 -21
- package/dist/vue/index.js +50 -13
- package/dist/{waiter-B986w1oK.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-vea54PRw.js → watch-Cx_WciLE.js} +8 -8
- package/dist/watch-DB42U1ib.js +1 -0
- package/dist/webmcp/index.d.ts +11 -11
- package/dist/webmcp/index.js +8 -5
- package/dist/{where-scope-C9vfEphl.js → where-scope-DlCdCM_8.js} +56 -30
- package/dist/{who-can-DWBAcaCQ.js → who-can-rI7dCR9Q.js} +23 -20
- package/dist/workflow/index.d.ts +3 -3
- package/dist/workflow/index.js +13 -13
- package/dist/workflow-sdk/index.d.ts +19 -13
- package/dist/workflow-sdk/index.js +6 -6
- package/dist/{wrap-gX61EtpB.js → wrap-B2wziJI_.js} +11 -5
- package/dist/{wrap-C5jC6sKI.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
- package/package.json +25 -14
- package/schemas/catalog-v1.json +3 -0
- package/schemas/cli-result-v1.json +1 -0
- package/schemas/cloud-api-v1.json +152 -7
- package/schemas/connector-v1.json +8 -0
- package/schemas/supabase-claims-v1.json +5 -0
- package/schemas/supabase-manifest-v1.json +308 -75
- package/skills/permdock/SKILL.md +1 -0
- package/skills/permdock-agents/references/runtimes.md +3 -1
- package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
- package/skills/permdock-data/references/queries-and-rls.md +6 -2
- package/skills/permdock-tenancy/SKILL.md +1 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -1
- package/skills/permdock-wire/references/adapters.md +28 -22
- package/skills/permdock-wire/references/policy-options.md +1 -0
- package/dist/catalog-BoWglDPI.js +0 -1
- package/dist/collect-D7eQDffE.js +0 -1
- package/dist/config-bs_kZeYq.js +0 -162
- package/dist/denied-text-CiFQNuMV.d.ts +0 -19
- package/dist/fields-OYG_JR78.js +0 -203
- package/dist/generate-CNU1pIOo.js +0 -171
- package/dist/headers-BIjfMaoC.js +0 -8
- package/dist/headers-CIbDTUTK.d.ts +0 -7
- package/dist/index-Cp_ilKi1.d.ts +0 -91
- package/dist/index-CueFnxQc.d.ts +0 -110
- package/dist/load-BxEtwlBS.js +0 -1
- package/dist/output-files-B3IZJksC.js +0 -1
- package/dist/package-root-Dk_ETdkp.js +0 -31
- package/dist/parse-Cxq0WxrA.js +0 -53
- package/dist/parse-local-manifest-5ODwqu8b.d.ts +0 -10
- package/dist/parse-local-manifest-CVSs6J9I.js +0 -34
- package/dist/peer-C8swJ2GH.js +0 -50
- package/dist/policies-DP2nqRoF.js +0 -295
- package/dist/powersync-BkWWCS1K.js +0 -538
- package/dist/powersync-MMJ2mI2q.js +0 -1
- package/dist/problem-details-B45V5d2b.d.ts +0 -7
- package/dist/prompt-DfZLJLIn.js +0 -32
- package/dist/protected-RFGpakN9.d.ts +0 -38
- package/dist/pull-CvpINcMK.js +0 -1
- package/dist/run-DDwUaJDU.js +0 -1
- package/dist/sources-Xc4zkszI.d.ts +0 -190
- package/dist/stores-BUGNbJTt.d.ts +0 -30
- package/dist/supabase-hook-CCw5m35C.js +0 -1
- package/dist/supautils-B6HYL9eL.js +0 -91
- package/dist/text-diff-BQcUapOb.js +0 -15
- package/dist/types-B3_ooZgZ.d.ts +0 -172
- package/dist/usage-CZpSQP6L.js +0 -1
- package/dist/version-CEbQ5UeM.js +0 -18
- package/dist/version-DXkYUISx.js +0 -1
- package/dist/watch--ovlPOc0.js +0 -1
package/dist/jwt/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { Y as JwtClaims,
|
|
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 { Y as JwtClaims, Zt as AuthEvent, dt as TokenVerifier, lr as Subject, lt as TokenFailureCause, pt as VerifiedToken, sr as Principal, ut as TokenSigner } from "../policy-types-CCiDRZBH.js";
|
|
2
|
+
import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-ChuiONQU.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-DjuMBNF9.js";
|
|
4
|
+
import { t as memoryReplayStore } from "../replay-DNftIb_R.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,11 +92,62 @@ 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
|
|
103
|
+
//#region src/jwt/id-token.d.ts
|
|
104
|
+
/**
|
|
105
|
+
* `TokenFailureCause` plus `nonce-mismatch`; a `TokenVerifier` never returns
|
|
106
|
+
* it.
|
|
107
|
+
*/
|
|
108
|
+
type IdTokenFailureCause = TokenFailureCause | "nonce-mismatch";
|
|
109
|
+
type VerifyIdTokenOptions = {
|
|
110
|
+
/** The OpenID Provider's issuer; `iss` must equal it. */
|
|
111
|
+
readonly issuer: string;
|
|
112
|
+
/**
|
|
113
|
+
* The relying party's `client_id`; `aud` must contain it and `azp`, when
|
|
114
|
+
* present, must equal it.
|
|
115
|
+
*/
|
|
116
|
+
readonly clientId: string;
|
|
117
|
+
/** The `nonce` sent in the authentication request; the token's must equal it. */
|
|
118
|
+
readonly nonce?: string;
|
|
119
|
+
readonly clockTolerance?: number;
|
|
120
|
+
} & ({
|
|
121
|
+
/** A verifier the caller keeps, so its JWKS cache outlives one call. */
|
|
122
|
+
readonly verifier: TokenVerifier;
|
|
123
|
+
readonly jwks?: never;
|
|
124
|
+
readonly algorithms?: never;
|
|
125
|
+
} | {
|
|
126
|
+
readonly jwks: JsonWebKeySet;
|
|
127
|
+
readonly algorithms?: readonly JwtAlgorithm[];
|
|
128
|
+
readonly verifier?: never;
|
|
129
|
+
});
|
|
130
|
+
type IdTokenClaims = JwtClaims & {
|
|
131
|
+
readonly iss: string;
|
|
132
|
+
readonly sub: string;
|
|
133
|
+
readonly iat: number;
|
|
134
|
+
};
|
|
135
|
+
type VerifyIdTokenResult = {
|
|
136
|
+
readonly ok: true;
|
|
137
|
+
readonly claims: IdTokenClaims;
|
|
138
|
+
readonly header: VerifiedToken["header"];
|
|
139
|
+
} | {
|
|
140
|
+
readonly ok: false;
|
|
141
|
+
readonly cause: IdTokenFailureCause;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Verifies an OpenID Connect ID token for a relying party (Core section
|
|
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.
|
|
148
|
+
*/
|
|
149
|
+
export declare function verifyIdToken(token: string, options: VerifyIdTokenOptions): Promise<VerifyIdTokenResult>;
|
|
150
|
+
//#endregion
|
|
85
151
|
//#region src/jwt/introspection.d.ts
|
|
86
152
|
export declare function subjectFromIntrospection(response: unknown, options?: JwtSubjectOptions): Subject<IntrospectionPrincipal>;
|
|
87
153
|
//#endregion
|
|
@@ -92,7 +158,49 @@ export declare function joseTokenSigner(options: JoseTokenSignerOptions): TokenS
|
|
|
92
158
|
export declare function subjectFromJwt(token: string | undefined | null, options: JwtSubjectOptions, request?: Request): Promise<Subject<JwtPrincipal>>;
|
|
93
159
|
export declare function jwtSubjectResolver(options: JwtSubjectOptions): (token: string | undefined | null, request?: Request) => Promise<MappedSubject>;
|
|
94
160
|
//#endregion
|
|
161
|
+
//#region src/jwt/subject-token.d.ts
|
|
162
|
+
/**
|
|
163
|
+
* `TokenFailureCause` plus the two checks `verifySubjectToken` adds; a
|
|
164
|
+
* `TokenVerifier` never returns them.
|
|
165
|
+
*/
|
|
166
|
+
type SubjectTokenFailureCause = TokenFailureCause | "replayed" | "lifetime-exceeded";
|
|
167
|
+
type VerifySubjectTokenOptions = {
|
|
168
|
+
/** Tried in order; the first that accepts the token wins. */
|
|
169
|
+
readonly verifiers: readonly TokenVerifier[];
|
|
170
|
+
readonly audience: string | readonly string[];
|
|
171
|
+
/**
|
|
172
|
+
* Records each `jti` once; `claim` when the store has it, else `seen` and
|
|
173
|
+
* `remember`.
|
|
174
|
+
*/
|
|
175
|
+
readonly replay: ReplayStore;
|
|
176
|
+
/** The largest `exp - iat`, in seconds; default 300. */
|
|
177
|
+
readonly maxLifetime?: number;
|
|
178
|
+
readonly clockTolerance?: number;
|
|
179
|
+
};
|
|
180
|
+
type SubjectTokenClaims = JwtClaims & {
|
|
181
|
+
readonly sub: string;
|
|
182
|
+
readonly jti: string;
|
|
183
|
+
readonly iat: number;
|
|
184
|
+
readonly exp: number;
|
|
185
|
+
};
|
|
186
|
+
type VerifySubjectTokenResult = {
|
|
187
|
+
readonly ok: true;
|
|
188
|
+
readonly claims: SubjectTokenClaims;
|
|
189
|
+
readonly header: VerifiedToken["header"];
|
|
190
|
+
} | {
|
|
191
|
+
readonly ok: false;
|
|
192
|
+
readonly cause: SubjectTokenFailureCause;
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* Verifies a subject token: an RFC 9068 `at+jwt` naming one subject for one
|
|
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.
|
|
200
|
+
*/
|
|
201
|
+
export declare function verifySubjectToken(token: string, options: VerifySubjectTokenOptions): Promise<VerifySubjectTokenResult>;
|
|
202
|
+
//#endregion
|
|
95
203
|
//#region src/jwt/verifier.d.ts
|
|
96
204
|
export declare function joseTokenVerifier(options: JoseTokenVerifierOptions): TokenVerifier;
|
|
97
205
|
//#endregion
|
|
98
|
-
export { type CapabilityFailureCause, type CapabilitySubjectOptions, type CiOidcPrincipal, type CiOidcProvider, type CiOidcSubjectOptions, type DiscoveryInput, type DpopProofOptions, type DpopProofResult, type IntrospectionPrincipal, type JoseTokenSignerOptions, type JoseTokenVerifierOptions, type JsonWebKeySet, type JwtAlgorithm, type JwtJwks, type JwtPrincipal, type JwtSubjectOptions, type ReplayStore, memoryReplayStore };
|
|
206
|
+
export { type CapabilityFailureCause, type CapabilitySubjectOptions, type CiOidcPrincipal, type CiOidcProvider, type CiOidcSubjectOptions, type DiscoveryInput, type DpopProofOptions, type DpopProofResult, type IdTokenClaims, type IdTokenFailureCause, type IntrospectionPrincipal, type JoseTokenSignerOptions, type JoseTokenVerifierOptions, type JsonWebKeySet, type JwtAlgorithm, type JwtJwks, type JwtPrincipal, type JwtSubjectOptions, type ReplayStore, type SubjectTokenClaims, type SubjectTokenFailureCause, type VerifyIdTokenOptions, type VerifyIdTokenResult, type VerifySubjectTokenOptions, type VerifySubjectTokenResult, memoryReplayStore };
|
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 { n as
|
|
10
|
-
import { t as memoryReplayStore } from "../replay-
|
|
9
|
+
import { i as validateCustomClaims, n as idTokenMismatch, r as mapClaimsToSubject, t as acceptMismatch } from "../map-claims-BNWCJtmP.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([
|
|
@@ -124,7 +124,7 @@ function emit(options, reason, cause, token) {
|
|
|
124
124
|
requestId: options.requestId
|
|
125
125
|
}));
|
|
126
126
|
}
|
|
127
|
-
async function claimOnce(replay, key, expiresAt) {
|
|
127
|
+
async function claimOnce$1(replay, key, expiresAt) {
|
|
128
128
|
if (replay.claim !== void 0) return replay.claim(key, expiresAt);
|
|
129
129
|
if (await replay.seen(key)) return false;
|
|
130
130
|
await replay.remember(key, expiresAt);
|
|
@@ -136,7 +136,7 @@ async function stores(options, capability, issuedAt, once) {
|
|
|
136
136
|
if (policy !== void 0 && linkPolicyViolation(capability, policy, issuedAt) !== void 0) return "link-policy";
|
|
137
137
|
if (options.revoked !== void 0 && await options.revoked(capability.id)) return "capability-revoked";
|
|
138
138
|
const replay = options.replay;
|
|
139
|
-
if (once !== void 0 && (replay === void 0 || !await claimOnce(replay, once.key, once.expiresAt))) return "capability-replayed";
|
|
139
|
+
if (once !== void 0 && (replay === void 0 || !await claimOnce$1(replay, once.key, once.expiresAt))) return "capability-replayed";
|
|
140
140
|
return { ok: true };
|
|
141
141
|
} catch {
|
|
142
142
|
return {
|
|
@@ -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
|
*/
|
|
@@ -318,6 +318,66 @@ async function subjectFromCiOidc(token, options) {
|
|
|
318
318
|
});
|
|
319
319
|
}
|
|
320
320
|
//#endregion
|
|
321
|
+
//#region src/jwt/id-token.ts
|
|
322
|
+
/**
|
|
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, `azp`
|
|
325
|
+
* and, when `nonce` is given, `nonce`. It does not check `at_hash`, `c_hash`,
|
|
326
|
+
* `auth_time` or `acr`. Never throws.
|
|
327
|
+
*/
|
|
328
|
+
async function verifyIdToken(token, options) {
|
|
329
|
+
const verifier = options.verifier ?? joseTokenVerifier(compact({
|
|
330
|
+
jwks: options.jwks,
|
|
331
|
+
issuer: options.issuer,
|
|
332
|
+
algorithms: options.algorithms
|
|
333
|
+
}));
|
|
334
|
+
let verified;
|
|
335
|
+
try {
|
|
336
|
+
verified = await verifier.verify(token, compact({
|
|
337
|
+
issuer: options.issuer,
|
|
338
|
+
audience: options.clientId,
|
|
339
|
+
clockTolerance: options.clockTolerance
|
|
340
|
+
}));
|
|
341
|
+
} catch {
|
|
342
|
+
return {
|
|
343
|
+
ok: false,
|
|
344
|
+
cause: "invalid-signature"
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
if (!verified.ok) return {
|
|
348
|
+
ok: false,
|
|
349
|
+
cause: verified.cause
|
|
350
|
+
};
|
|
351
|
+
const { claims, header } = verified;
|
|
352
|
+
if (idTokenMismatch(claims, header.typ, options.clientId)) return {
|
|
353
|
+
ok: false,
|
|
354
|
+
cause: "wrong-token-type"
|
|
355
|
+
};
|
|
356
|
+
const { iss, sub, iat } = claims;
|
|
357
|
+
if (iss !== options.issuer) return {
|
|
358
|
+
ok: false,
|
|
359
|
+
cause: "wrong-issuer"
|
|
360
|
+
};
|
|
361
|
+
if (typeof sub !== "string" || sub === "" || typeof iat !== "number") return {
|
|
362
|
+
ok: false,
|
|
363
|
+
cause: "malformed"
|
|
364
|
+
};
|
|
365
|
+
if (options.nonce !== void 0 && claims["nonce"] !== options.nonce) return {
|
|
366
|
+
ok: false,
|
|
367
|
+
cause: "nonce-mismatch"
|
|
368
|
+
};
|
|
369
|
+
return {
|
|
370
|
+
ok: true,
|
|
371
|
+
claims: {
|
|
372
|
+
...claims,
|
|
373
|
+
iss,
|
|
374
|
+
sub,
|
|
375
|
+
iat
|
|
376
|
+
},
|
|
377
|
+
header
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
//#endregion
|
|
321
381
|
//#region src/jwt/introspection.ts
|
|
322
382
|
function emitAuth$1(options, cause) {
|
|
323
383
|
if (options.onAuth === void 0) return;
|
|
@@ -492,10 +552,10 @@ function mtlsThumbprint(claims) {
|
|
|
492
552
|
}
|
|
493
553
|
/**
|
|
494
554
|
* The sender constraint to enforce. Without a configured `sender`, a token
|
|
495
|
-
* whose `cnf` binds it to a key or a certificate is held to that binding,
|
|
496
|
-
*
|
|
497
|
-
*
|
|
498
|
-
*
|
|
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.
|
|
499
559
|
*/
|
|
500
560
|
function senderFor(options, cnf) {
|
|
501
561
|
if (options.sender !== void 0) return options.sender;
|
|
@@ -608,4 +668,85 @@ async function resolveSubject(token, options, request) {
|
|
|
608
668
|
return extraMemberships(options, mapped.subject, mapped.subject.principal.tenant);
|
|
609
669
|
}
|
|
610
670
|
//#endregion
|
|
611
|
-
|
|
671
|
+
//#region src/jwt/subject-token.ts
|
|
672
|
+
const DEFAULT_MAX_LIFETIME = 300;
|
|
673
|
+
/**
|
|
674
|
+
* Causes a verifier for another issuer answers; a different cause names the
|
|
675
|
+
* token's real fault.
|
|
676
|
+
*/
|
|
677
|
+
const OTHER_ISSUER = /* @__PURE__ */ new Set(["wrong-issuer", "unknown-kid"]);
|
|
678
|
+
async function firstAccepted(token, options) {
|
|
679
|
+
const causes = [];
|
|
680
|
+
for (const verifier of options.verifiers) {
|
|
681
|
+
let verified;
|
|
682
|
+
try {
|
|
683
|
+
verified = await verifier.verify(token, {
|
|
684
|
+
typ: "at+jwt",
|
|
685
|
+
audience: options.audience,
|
|
686
|
+
...options.clockTolerance === void 0 ? {} : { clockTolerance: options.clockTolerance }
|
|
687
|
+
});
|
|
688
|
+
} catch {
|
|
689
|
+
causes.push("invalid-signature");
|
|
690
|
+
continue;
|
|
691
|
+
}
|
|
692
|
+
if (verified.ok) return verified;
|
|
693
|
+
causes.push(verified.cause);
|
|
694
|
+
}
|
|
695
|
+
return { cause: causes.find((cause) => !OTHER_ISSUER.has(cause)) ?? causes[0] ?? "invalid-signature" };
|
|
696
|
+
}
|
|
697
|
+
async function claimOnce(replay, key, expiresAt) {
|
|
698
|
+
try {
|
|
699
|
+
if (replay.claim !== void 0) return await replay.claim(key, expiresAt);
|
|
700
|
+
if (await replay.seen(key)) return false;
|
|
701
|
+
await replay.remember(key, expiresAt);
|
|
702
|
+
return true;
|
|
703
|
+
} catch {
|
|
704
|
+
return false;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Verifies a subject token: an RFC 9068 `at+jwt` naming one subject for one
|
|
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.
|
|
713
|
+
*/
|
|
714
|
+
async function verifySubjectToken(token, options) {
|
|
715
|
+
const verified = await firstAccepted(token, options);
|
|
716
|
+
if (!("ok" in verified)) return {
|
|
717
|
+
ok: false,
|
|
718
|
+
cause: verified.cause
|
|
719
|
+
};
|
|
720
|
+
if (normalizeTyp(verified.header.typ)?.toLowerCase() !== "at+jwt") return {
|
|
721
|
+
ok: false,
|
|
722
|
+
cause: "wrong-token-type"
|
|
723
|
+
};
|
|
724
|
+
const { claims } = verified;
|
|
725
|
+
const { sub, jti, iat, exp } = claims;
|
|
726
|
+
if (typeof sub !== "string" || sub === "" || typeof jti !== "string" || jti === "" || typeof iat !== "number" || typeof exp !== "number") return {
|
|
727
|
+
ok: false,
|
|
728
|
+
cause: "malformed"
|
|
729
|
+
};
|
|
730
|
+
if (exp - iat > (options.maxLifetime ?? DEFAULT_MAX_LIFETIME)) return {
|
|
731
|
+
ok: false,
|
|
732
|
+
cause: "lifetime-exceeded"
|
|
733
|
+
};
|
|
734
|
+
const key = `subject-token\n${claims.iss ?? ""}\n${jti}`;
|
|
735
|
+
if (!await claimOnce(options.replay, key, exp + (options.clockTolerance ?? 0))) return {
|
|
736
|
+
ok: false,
|
|
737
|
+
cause: "replayed"
|
|
738
|
+
};
|
|
739
|
+
return {
|
|
740
|
+
ok: true,
|
|
741
|
+
claims: {
|
|
742
|
+
...claims,
|
|
743
|
+
sub,
|
|
744
|
+
jti,
|
|
745
|
+
iat,
|
|
746
|
+
exp
|
|
747
|
+
},
|
|
748
|
+
header: verified.header
|
|
749
|
+
};
|
|
750
|
+
}
|
|
751
|
+
//#endregion
|
|
752
|
+
export { joseTokenSigner, joseTokenVerifier, jwtSubjectResolver, memoryReplayStore, subjectFromCapability, subjectFromCiOidc, subjectFromIntrospection, subjectFromJwt, verifyDpopProof, verifyIdToken, verifySubjectToken };
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { i as stepUpOf } from "./problem-details-CLDgX1KV.js";
|
|
3
|
+
import { n as describe } from "./describe-Bb4hGK5d.js";
|
|
4
|
+
import { a as deniedMessage } from "./errors-B6R_lg2a.js";
|
|
5
|
+
import { t as actorMayCallTool } from "./delegation-CDB6_keF.js";
|
|
6
|
+
import { c as nowSeconds, r as isMembershipExpired } from "./tenancy-5d1zVBvK.js";
|
|
7
|
+
import { k as activate } from "./evaluate-Dd8Ta0Ie.js";
|
|
5
8
|
import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
|
|
6
|
-
import {
|
|
7
|
-
import { l as
|
|
8
|
-
import {
|
|
9
|
-
import { n as
|
|
10
|
-
import { n as
|
|
9
|
+
import { n as delegationAllows } from "./where-scope-DlCdCM_8.js";
|
|
10
|
+
import { l as withApp } from "./permdock-L-_I_3zP.js";
|
|
11
|
+
import { l as storedApprovalToken, s as resumeDecision } from "./helpers-DJicaG6f.js";
|
|
12
|
+
import { n as resolveOrNull } from "./build-instance-CNWaYJyr.js";
|
|
13
|
+
import { n as tenantScope, t as actorFrom } from "./adapter-context-CIQpQxbE.js";
|
|
14
|
+
import { n as requestContext, t as buildReportingInstance } from "./request-context-C25ilqiJ.js";
|
|
11
15
|
//#region src/agent/denied-text.ts
|
|
12
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* The hook's text, or `event.text` when there is no hook or it throws or
|
|
18
|
+
* returns no string.
|
|
19
|
+
*/
|
|
13
20
|
function refusalText(hook, event, report) {
|
|
14
21
|
if (hook === void 0) return event.text;
|
|
15
22
|
try {
|
|
@@ -35,8 +42,134 @@ function thrownReason(toolName) {
|
|
|
35
42
|
return `Denied: ${toolName} failed closed.`;
|
|
36
43
|
}
|
|
37
44
|
//#endregion
|
|
45
|
+
//#region src/agent/step-up.ts
|
|
46
|
+
/** Denials neither a fresh sign-in nor an activation can lift. */
|
|
47
|
+
const FINAL = /* @__PURE__ */ new Set([
|
|
48
|
+
"deny",
|
|
49
|
+
"validation",
|
|
50
|
+
"anonymous",
|
|
51
|
+
"not-delegated",
|
|
52
|
+
"no-delegation",
|
|
53
|
+
"agent-tool-not-delegated",
|
|
54
|
+
"approval",
|
|
55
|
+
"stale-approval"
|
|
56
|
+
]);
|
|
57
|
+
/** Activation denials the activation flow itself asks the user to fix. */
|
|
58
|
+
const ACTIVATION_ASKS = /* @__PURE__ */ new Set(["reason-required", "insufficient-user-authentication"]);
|
|
59
|
+
function elevated(membership, role) {
|
|
60
|
+
return compact({
|
|
61
|
+
scope: membership.scope,
|
|
62
|
+
id: membership.id,
|
|
63
|
+
within: membership.within,
|
|
64
|
+
roles: [role],
|
|
65
|
+
via: "elevated"
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function activationFor(permdock, permission, data) {
|
|
69
|
+
const held = permdock.subject.principal?.memberships ?? [];
|
|
70
|
+
const now = nowSeconds();
|
|
71
|
+
for (const membership of held) {
|
|
72
|
+
const { scope, id } = membership;
|
|
73
|
+
if (scope === void 0 || id === void 0 || isMembershipExpired(membership, now)) continue;
|
|
74
|
+
for (const role of membership.eligible ?? []) {
|
|
75
|
+
const offered = activate(permdock, compact({
|
|
76
|
+
role,
|
|
77
|
+
scope,
|
|
78
|
+
id,
|
|
79
|
+
within: membership.within
|
|
80
|
+
}));
|
|
81
|
+
if (offered.outcome === "denied" && !offered.denials.every((denial) => ACTIVATION_ASKS.has(denial.reason))) continue;
|
|
82
|
+
const [decision] = permdock.simulate({ memberships: [...held, elevated({
|
|
83
|
+
...membership,
|
|
84
|
+
scope,
|
|
85
|
+
id
|
|
86
|
+
}, role)] }).simulate([[permission, data]]);
|
|
87
|
+
if (decision !== void 0 && decision.outcome !== "denied") return compact({
|
|
88
|
+
kind: "activation",
|
|
89
|
+
role,
|
|
90
|
+
scope,
|
|
91
|
+
id,
|
|
92
|
+
within: membership.within
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The step-up that could lift `decision`, or `undefined`. A denial with
|
|
99
|
+
* `insufficient-user-authentication` asks for a fresh sign-in when the
|
|
100
|
+
* delegation and the actor still cover the permission; any other denial asks
|
|
101
|
+
* for the first eligible role whose activation the simulated decision grants. A
|
|
102
|
+
* matched deny, a validation failure, an anonymous subject, a delegation that
|
|
103
|
+
* does not cover the call, an undelegated tool and a failed approval resume
|
|
104
|
+
* never step up.
|
|
105
|
+
*/
|
|
106
|
+
function stepUpFor(permdock, permission, data, decision) {
|
|
107
|
+
if (decision.outcome !== "denied" || decision.denials.length === 0 || decision.denials.some((denial) => FINAL.has(denial.reason))) return;
|
|
108
|
+
try {
|
|
109
|
+
if (decision.denials.some((denial) => denial.reason === "insufficient-user-authentication")) return delegationAllows(permdock, permission) ? {
|
|
110
|
+
kind: "authentication",
|
|
111
|
+
...stepUpOf(decision)
|
|
112
|
+
} : void 0;
|
|
113
|
+
return activationFor(permdock, permission, data);
|
|
114
|
+
} catch {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The subject's instance with every eligible role activated, for a tool listing
|
|
120
|
+
* that keeps tools an activation would open. `undefined` when the subject is
|
|
121
|
+
* eligible for nothing.
|
|
122
|
+
*/
|
|
123
|
+
function eligiblePreview(permdock) {
|
|
124
|
+
const held = permdock.subject.principal?.memberships ?? [];
|
|
125
|
+
const now = nowSeconds();
|
|
126
|
+
const activations = held.flatMap((membership) => {
|
|
127
|
+
const { scope, id } = membership;
|
|
128
|
+
return scope === void 0 || id === void 0 || isMembershipExpired(membership, now) ? [] : (membership.eligible ?? []).map((role) => elevated({
|
|
129
|
+
...membership,
|
|
130
|
+
scope,
|
|
131
|
+
id
|
|
132
|
+
}, role));
|
|
133
|
+
});
|
|
134
|
+
if (activations.length === 0) return;
|
|
135
|
+
try {
|
|
136
|
+
return permdock.simulate({ memberships: [...held, ...activations] });
|
|
137
|
+
} catch {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* The URL the user signs in again at, with the RFC 9470 `acr_values` and
|
|
143
|
+
* `max_age` added.
|
|
144
|
+
*/
|
|
145
|
+
function signInUrl(at, stepUp) {
|
|
146
|
+
let url;
|
|
147
|
+
try {
|
|
148
|
+
url = new URL(at);
|
|
149
|
+
} catch {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (stepUp.acrValues !== void 0 && stepUp.acrValues.length > 0) url.searchParams.set("acr_values", stepUp.acrValues.join(" "));
|
|
153
|
+
if (stepUp.maxAge !== void 0) url.searchParams.set("max_age", String(stepUp.maxAge));
|
|
154
|
+
return url.href;
|
|
155
|
+
}
|
|
156
|
+
/** The sentence the user reads on the step-up prompt. */
|
|
157
|
+
function stepUpText(stepUp, permission, at) {
|
|
158
|
+
switch (stepUp.kind) {
|
|
159
|
+
case "authentication": {
|
|
160
|
+
const url = at === void 0 ? void 0 : signInUrl(at, stepUp);
|
|
161
|
+
return url === void 0 ? `Sign in again to use ${permission.key}.` : `Sign in again to use ${permission.key}: ${url}`;
|
|
162
|
+
}
|
|
163
|
+
case "activation": return `Activate the ${stepUp.role} role on ${stepUp.scope} ${stepUp.id} to use ${permission.key}.`;
|
|
164
|
+
default: return stepUp;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//#endregion
|
|
38
168
|
//#region src/agent/kernel.ts
|
|
39
|
-
/**
|
|
169
|
+
/**
|
|
170
|
+
* The resume token an agent run carries under the namespaced `permdockApproval`
|
|
171
|
+
* key.
|
|
172
|
+
*/
|
|
40
173
|
function approvalTokenOf(context) {
|
|
41
174
|
if (context === null || typeof context !== "object") return;
|
|
42
175
|
const token = context.permdockApproval;
|
|
@@ -210,12 +343,13 @@ function createAgentKernel(policy, given) {
|
|
|
210
343
|
token: decision.token,
|
|
211
344
|
summary: modelReason(decision, binding.permission, permdock.subject.principal?.id)
|
|
212
345
|
};
|
|
213
|
-
return {
|
|
346
|
+
return compact({
|
|
214
347
|
outcome: "denied",
|
|
215
348
|
decision,
|
|
216
349
|
permission: binding.permission,
|
|
217
|
-
reason: modelReason(decision, binding.permission, permdock.subject.principal?.id)
|
|
218
|
-
|
|
350
|
+
reason: modelReason(decision, binding.permission, permdock.subject.principal?.id),
|
|
351
|
+
stepUp: options.stepUp === true ? stepUpFor(permdock, binding.permission, data, decision) : void 0
|
|
352
|
+
});
|
|
219
353
|
};
|
|
220
354
|
const evaluate = async (binding, toolName, args, context, decideOptions = {}) => {
|
|
221
355
|
const checked = await check(binding, args, context, {
|
|
@@ -265,10 +399,11 @@ function createAgentKernel(policy, given) {
|
|
|
265
399
|
}, void 0));
|
|
266
400
|
return evaluate(binding, toolName, args, context, decideOptions);
|
|
267
401
|
};
|
|
268
|
-
const allowedToolNames = async (context) => {
|
|
402
|
+
const allowedToolNames = async (context, listOptions = {}) => {
|
|
269
403
|
const permdock = await instance(context);
|
|
404
|
+
const preview = listOptions.eligible === true ? eligiblePreview(permdock) : void 0;
|
|
270
405
|
const allowed = /* @__PURE__ */ new Set();
|
|
271
|
-
for (const [name, binding] of Object.entries(tools)) if (actorMayCallTool(permdock.subject.actor, name) && permdock.mayUse(binding.permission)) allowed.add(name);
|
|
406
|
+
for (const [name, binding] of Object.entries(tools)) if (actorMayCallTool(permdock.subject.actor, name) && (permdock.mayUse(binding.permission) || preview?.mayUse(binding.permission) === true)) allowed.add(name);
|
|
272
407
|
return allowed;
|
|
273
408
|
};
|
|
274
409
|
return {
|
|
@@ -282,4 +417,4 @@ function createAgentKernel(policy, given) {
|
|
|
282
417
|
};
|
|
283
418
|
}
|
|
284
419
|
//#endregion
|
|
285
|
-
export { createAgentKernel as n,
|
|
420
|
+
export { refusalText as i, createAgentKernel as n, stepUpText as r, approvalTokenOf as t };
|