permdock 0.5.0 → 0.7.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 -0
- package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
- package/dist/a2a/index.d.ts +5 -5
- package/dist/a2a/index.js +4 -4
- package/dist/{adoption-scan-B4R5fnMU.js → adoption-scan-D-feE7BE.js} +1 -1
- package/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +21 -6
- package/dist/ai-sdk/index.js +19 -9
- package/dist/{approval-prompt-Djo_PyZc.d.ts → approval-prompt-K0faOLFp.d.ts} +2 -2
- package/dist/approvals/index.d.ts +4 -4
- package/dist/approvals/index.js +4 -4
- package/dist/{approvals-DJ6Yd5z1.js → approvals-CMRfsbBh.js} +74 -48
- package/dist/{arazzo-B6lebmiQ.js → arazzo-ClrF3PVb.js} +2 -2
- package/dist/{arazzo-BWhNF-k0.js → arazzo-rdeJ8n1J.js} +4 -4
- package/dist/{args-IIolxxKA.js → args-CC3OwyHW.js} +112 -2
- package/dist/astro/index.d.ts +6 -6
- package/dist/astro/index.js +2 -2
- package/dist/{audience-Dg8XsRaO.js → audience-BrMs8c4o.js} +1 -1
- package/dist/{auth-DRLEizbL.js → auth-CscUX8Sy.js} +3 -4
- package/dist/authzen/index.d.ts +162 -22
- package/dist/authzen/index.js +315 -146
- package/dist/{automation-BMZPIVUM.d.ts → automation-DOtAFWdy.d.ts} +3 -3
- package/dist/{automation-DVjOckjV.js → automation-ySsxp_Yp.js} +1 -1
- package/dist/base-url-BQbddZO5.js +9 -0
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +2 -2
- package/dist/better-supabase/index.d.ts +50 -8
- package/dist/better-supabase/index.js +94 -32
- package/dist/{bind-CZzhx-Vj.js → bind-D1nO6fiC.js} +5 -5
- package/dist/{bind--9EFVYWF.d.ts → bind-JDuvxjuW.d.ts} +7 -7
- package/dist/{build-instance-BMnAudHn.js → build-instance-DxE7czo9.js} +1 -1
- package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
- package/dist/{capability-BSslw1QV.d.ts → capability-D4UC9TTW.d.ts} +2 -2
- package/dist/{capability-N1K9IpqS.js → capability-L7NnfhiE.js} +1 -1
- package/dist/{casbin-Cr7RLtA3.js → casbin-BHijLuHY.js} +2 -2
- package/dist/{casbin-Dyu2gnUD.js → casbin-BW9pS47J.js} +1 -1
- package/dist/{casl-64gpT-8x.js → casl-CmJlgziS.js} +2 -2
- package/dist/{casl-DjEDhTCP.js → casl-UbI8v-Wq.js} +1 -1
- package/dist/catalog/index.d.ts +70 -10
- package/dist/catalog/index.js +112 -6
- package/dist/catalog-BCCjSAdH.js +1 -0
- package/dist/{catalog-R_A__RsH.js → catalog-BaMQfQ6Y.js} +3 -3
- package/dist/{catalog-BECMPrwc.js → catalog-D69WhFii.js} +43 -13
- package/dist/{catalog-doc-C9wjsfNY.js → catalog-doc-CV9s6B1S.js} +28 -5
- package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-C144oW4M.js} +1 -1
- package/dist/{create-BWRSXgOF.js → challenge-nGWma08S.js} +122 -25
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +2 -2
- package/dist/chat-sdk/index.d.ts +3 -3
- package/dist/checks-BC_0mPIq.js +37 -0
- package/dist/claude-agent/index.d.ts +3 -3
- package/dist/claude-agent/index.js +2 -2
- package/dist/clerk/index.d.ts +3 -3
- package/dist/clerk/index.js +1 -1
- package/dist/cli/bin.js +2 -2
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +3 -3
- package/dist/cloud/index.d.ts +127 -11
- package/dist/cloud/index.js +251 -3
- package/dist/{cloud-CIoHNevm.js → cloud-CO8pYtwr.js} +5 -5
- package/dist/{codemod-Cxvvc70T.js → codemod-BP6n8N9L.js} +3 -3
- package/dist/{codemod-Bmj9dWMH.js → codemod-i4N2BhDc.js} +3 -3
- package/dist/{collect-CrZJJnEF.js → collect-BaWeMjwV.js} +17 -8
- package/dist/{collect-DloHbDVa.js → collect-DNm3oKOk.js} +6 -5
- package/dist/collect-k_Dulxr5.js +1 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -1
- package/dist/{compile-CMqMx_IN.js → compile-BAEO5bOk.js} +2 -2
- package/dist/{compile-Ckm2HqBZ.d.ts → compile-COM2VKuN.d.ts} +3 -3
- package/dist/{completion-BqhRBJD8.js → completion-BNdVf7X2.js} +3 -3
- package/dist/{config-bs_kZeYq.js → config-CoQHDrDi.js} +7 -3
- package/dist/{config-B46rm9sc.js → config-DGZzMV1B.js} +2 -2
- package/dist/{config-report-DUgj62Ai.js → config-report-Cm7UITNA.js} +3 -3
- package/dist/connector-schema-_VCSsdtD.js +433 -0
- package/dist/{context-bbFHR-0D.js → context--uM9V3Ui.js} +2 -2
- package/dist/convex/index.d.ts +5 -5
- package/dist/convex/index.js +2 -2
- package/dist/core-B5-w6Kw9.js +335 -0
- package/dist/core-CQkE8Esr.d.ts +179 -0
- package/dist/{create-0VZ7Pdiu.d.ts → create-B2-CQqCI.d.ts} +5 -5
- package/dist/{create-C3b4B5eF.js → create-Cb86Z8Im.js} +9 -8
- package/dist/{create-DnrmLnLW.js → create-DJrlhEp9.js} +5 -5
- package/dist/{create-BFfm17UA.d.ts → create-QHuuPw3q.d.ts} +7 -7
- package/dist/{create-BDS7wc3y.d.ts → create-UTnUVETj.d.ts} +30 -10
- package/dist/{credential-DM2um3ha.js → credential-CIM7wHwA.js} +4 -4
- package/dist/{credentials-DPyHmYz5.js → credentials-BpuTwd7a.js} +1 -1
- package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-DRo2QM6E.js} +13 -2
- package/dist/{delegation-DaXVdDhM.js → delegation-C5rOdTp5.js} +5 -5
- package/dist/delivery/index.d.ts +5 -5
- package/dist/delivery/index.js +4 -3
- package/dist/{delivery-DCAgNyCn.js → delivery-rwOKLWRm.js} +51 -2
- package/dist/{denied-text-D8jDHgsl.d.ts → denied-text-D4qkEtFz.d.ts} +2 -2
- package/dist/{describe-BybMRY7A.js → describe-DZlnEtLy.js} +1 -0
- package/dist/{describe-BZUsixiL.d.ts → describe-O0SwYIK8.d.ts} +2 -2
- package/dist/{diff-CxZo9pTq.js → diff-Btr1c1Ow.js} +2 -2
- package/dist/{diff-DCePiN6M.js → diff-DzT-xD13.js} +10 -10
- package/dist/{doctor-DFjUxf2f.js → doctor-BU1szn63.js} +241 -49
- package/dist/{doctor-CxiwSfqH.js → doctor-BoK_y0KO.js} +4 -4
- package/dist/drizzle/index.d.ts +3 -3
- package/dist/drizzle/index.js +1 -1
- package/dist/elysia/index.d.ts +5 -5
- package/dist/elysia/index.js +3 -3
- package/dist/{errors-C2PXIv4c.d.ts → errors-B_Qg9D3e.d.ts} +2 -2
- package/dist/{errors-CWTY6uih.js → errors-DpP_U6Bf.js} +1 -0
- package/dist/{evaluate-_R8QkWaf.js → evaluate-B_oqFbWC.js} +130 -34
- package/dist/{evaluations-16UqqQ6W.d.ts → evaluations-BCddEOfO.d.ts} +4 -4
- package/dist/{evaluations-DZ2CbV5k.js → evaluations-DReoiVBw.js} +4 -4
- package/dist/eve/index.d.ts +5 -5
- package/dist/eve/index.js +3 -3
- package/dist/express/index.d.ts +5 -5
- package/dist/express/index.js +3 -3
- package/dist/fastify/index.d.ts +5 -5
- package/dist/fastify/index.js +3 -3
- package/dist/{fetch-adapter-qKJBuRqy.d.ts → fetch-adapter-CuhyYwC1.d.ts} +4 -4
- package/dist/{fetch-adapter-g0ypLkID.js → fetch-adapter-De-u6vhJ.js} +3 -3
- package/dist/{fields-D9tPVUUS.js → fields-ClcQLrVc.js} +48 -13
- package/dist/{files-C5ZI27eV.js → files-acUbNwWt.js} +15 -2
- package/dist/{fixtures-B7XrLeY7.js → fixtures-BTMW6zgU.js} +2 -2
- package/dist/{flags-C3DktBDY.js → flags-aaeRAdiD.js} +2 -2
- package/dist/{from-snapshot-D2lZt4Dd.js → from-snapshot-Bz469dIh.js} +17 -10
- package/dist/generate-3FNO5P5Q.js +159 -0
- package/dist/{grantee-Cn1HyUsI.js → grantee-BrRANrpT.js} +14 -4
- package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-C6P1Tvol.js} +1 -1
- package/dist/{grantee-match-DHArqY82.js → grantee-match-0RtHWQDx.js} +3 -3
- package/dist/h3/index.d.ts +4 -4
- package/dist/h3/index.js +3 -3
- package/dist/{helpers-DTcZOzhF.js → helpers-DY3vXuGs.js} +3 -3
- package/dist/hono/index.d.ts +5 -5
- package/dist/hono/index.js +3 -3
- package/dist/{hosted-DBDX0M-P.d.ts → hosted-BmjzxQhp.d.ts} +14 -2
- package/dist/{hosted-BZIAYvon.js → hosted-XBgU6RGT.js} +34 -12
- package/dist/{http-DXJ37RDA.js → http-Ca3Sr5x1.js} +1 -1
- package/dist/{import-DMmOG27O.js → import-Bz0GefWg.js} +5 -5
- package/dist/{import-CNV7I2Dw.js → import-DB2EG_iy.js} +3 -3
- package/dist/{index-CxGUswIC.d.ts → index-BE8y3moU.d.ts} +50 -8
- package/dist/{index-Chrs5fQ-.d.ts → index-BSfRl0hZ.d.ts} +6 -6
- package/dist/{index-DOVf7RJv.d.ts → index-BTkwrK7v.d.ts} +155 -17
- package/dist/index-CMiPH2Tv.d.ts +206 -0
- package/dist/{index-SGdIQyzc.d.ts → index-DH9DUDEM.d.ts} +18 -3
- package/dist/{index-BcHcPyIo.d.ts → index-DLwcuCN_.d.ts} +86 -7
- package/dist/index.d.ts +18 -17
- package/dist/index.js +27 -25
- package/dist/{init-GG6Jh8HD.js → init-5TXNji88.js} +5 -5
- package/dist/{init-DeMYsnYJ.js → init-B-4t1NzC.js} +4 -4
- package/dist/{instance-options-Omfd793B.d.ts → instance-options-CU0YQCLH.d.ts} +1 -1
- package/dist/{instance-snapshot-Cxq4ygFc.js → instance-snapshot-CjcwnEiV.js} +20 -14
- package/dist/jwt/index.d.ts +83 -5
- package/dist/jwt/index.js +143 -5
- package/dist/{kernel-5JatXyND.js → kernel-DVExUwkp.js} +138 -12
- package/dist/kysely/index.d.ts +3 -3
- package/dist/kysely/index.js +1 -1
- package/dist/load-DrMHXzgN.js +1 -0
- package/dist/{load-DFS_ry0W.js → load-DxroEzH1.js} +2 -2
- package/dist/{login-Dfe5RlYk.js → login-ClSJh5t5.js} +4 -4
- package/dist/{login-imhuwvn3.js → login-WC9HPJpU.js} +6 -10
- package/dist/{manifest-C8IzW3Do.js → manifest-B79YuF2T.js} +6 -2
- package/dist/{manifest-mx5ghSFM.d.ts → manifest-BVhExYhw.d.ts} +23 -2
- package/dist/{manifest-CtKR3GXL.js → manifest-Dv6q4i5s.js} +54 -35
- package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-Cv492Qev.js} +37 -7
- package/dist/{map-claims-D3oRmTk0.js → map-claims-etGIS_Dv.js} +14 -11
- package/dist/{map-error-TCAdw-eW.js → map-error-BQGyDm_M.js} +1 -1
- package/dist/mcp/index.d.ts +64 -10
- package/dist/mcp/index.js +151 -22
- package/dist/{migrate-BShP7Vf4.js → migrate-Dodel0IJ.js} +77 -24
- package/dist/nest/index.d.ts +5 -5
- package/dist/nest/index.js +3 -3
- package/dist/next/index.d.ts +9 -9
- package/dist/next/index.js +5 -5
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +5 -5
- package/dist/node/index.js +2 -2
- package/dist/openai/index.d.ts +5 -5
- package/dist/openai/index.js +3 -3
- package/dist/openapi/index.d.ts +14 -4
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-ahr8rHu3.js → openapi-DMocl1bh.js} +4 -4
- package/dist/{openapi-B7HZ0f-r.js → openapi-Ddb4628T.js} +2 -7
- package/dist/{openapi-DTaEmTSW.js → openapi-ztVaux6j.js} +8 -8
- package/dist/{operation-findings-DgATDpvh.js → operation-findings-kRcEp8lE.js} +1 -1
- package/dist/{operations-CxybZErY.d.ts → operations-BNLes61x.d.ts} +1 -1
- package/dist/orpc/index.d.ts +6 -6
- package/dist/orpc/index.js +4 -4
- package/dist/otel/index.d.ts +3 -3
- package/dist/otel/index.js +1 -1
- package/dist/{output-Dyw8fyPF.js → output-DgSDLrta.js} +7 -3
- package/dist/{output-files-DhRBBE4n.js → output-files-CCMdcFWb.js} +2 -2
- package/dist/output-files-DPAY7-GX.js +1 -0
- package/dist/{ownership-BatFgAA4.js → ownership-Z2LpxsGa.js} +1349 -883
- package/dist/parse-Ddhz2xf4.js +148 -0
- package/dist/{parse-local-manifest-CVSs6J9I.js → parse-local-manifest-T1Q8X3A2.js} +24 -1
- package/dist/{parse-local-manifest-DgqtruPn.d.ts → parse-local-manifest-e4mdwAKd.d.ts} +1 -1
- package/dist/pdp/index.d.ts +3 -3
- package/dist/pdp/index.js +7 -3
- package/dist/peer-12Q5I_RH.js +976 -0
- package/dist/{peer-CRvC7Hg1.js → peer-DOzzMfZL.js} +1 -1
- package/dist/{permdock-B9JxkBwC.js → permdock-BfWEeMqk.js} +177 -49
- package/dist/{permdock-D7eeLJER.d.ts → permdock-Dco6dyCK.d.ts} +34 -5
- package/dist/{permission-registry-Br4jSNVi.js → permission-registry-DpPtSKNZ.js} +1 -1
- package/dist/{vocabulary-D6lPdb4Z.d.ts → permission-types-DhNEmoRG.d.ts} +4 -62
- package/dist/{permissions-oEWfl-kl.d.ts → permissions-CoqCOfJ3.d.ts} +2 -1
- package/dist/{permissions-B-wCP5ZC.js → permissions-CyH2MV_B.js} +1 -1
- package/dist/{permissions-CZKiUfFM.js → permissions-DArULThq.js} +4 -4
- package/dist/pkce-5h8NgMQJ.js +21 -0
- package/dist/{policies-CO1oOymN.js → policies-B2lZIurj.js} +3 -3
- package/dist/{policy-Czo4n3Hs.d.ts → policy-B7dg_yzu.d.ts} +2 -2
- package/dist/{policy-DLZJ5gAp.js → policy-DaJy4nK4.js} +17 -8
- package/dist/{policy-from-catalog-DzhEc3Y9.js → policy-from-catalog-DFWYkNdu.js} +9 -9
- package/dist/{policy-types-DzwivBgR.d.ts → policy-types-B-F-qAZk.d.ts} +109 -5
- package/dist/postgres-store-BL9M_CA1.js +1001 -0
- package/dist/{postgrest-NUqZT-RB.d.ts → postgrest-CYacM_u7.d.ts} +12 -1
- package/dist/{postgrest-CW0IqC-U.js → postgrest-r5faDIzD.js} +47 -5
- package/dist/{powersync-BHfuehf3.js → powersync-13odBwiM.js} +3 -3
- package/dist/powersync-53ryOZip.js +1059 -0
- package/dist/powersync-CExtTLyA.js +1 -0
- package/dist/preset/index.js +1 -1
- package/dist/{preset-DZdU0tne.js → preset-CHTbd-DQ.js} +2 -2
- package/dist/prisma/index.d.ts +2 -2
- package/dist/prisma/index.js +1 -1
- package/dist/{problem-details-DXlt-vks.d.ts → problem-details-Tcfmj3bV.d.ts} +1 -1
- package/dist/prompt-DwtVemER.js +935 -0
- package/dist/{protected-DEPHc2xV.d.ts → protected-BwZYL1X_.d.ts} +6 -5
- package/dist/{protected-DfjY5mLA.js → protected-DXE3cQYg.js} +2 -2
- package/dist/{provider-CC-u3bYP.js → provider-BQsTYYy0.js} +2 -2
- package/dist/{provider-DMVt6yYn.d.ts → provider-Csk-THAn.d.ts} +1 -1
- package/dist/{provider-store-B5Yrkhzr.js → provider-store-IgqQipCO.js} +2 -2
- package/dist/{pull-BgIfno6w.js → pull-CN5OLxrF.js} +7 -7
- package/dist/pull-Cty6Ovyu.js +1 -0
- package/dist/{push-CmFVBOeI.js → push-tVdG8dUL.js} +54 -14
- package/dist/{pushed-policy-BImMTTIM.d.ts → pushed-policy-BbcY9r_4.d.ts} +1 -1
- package/dist/{pushed-policy-DobP7AHI.js → pushed-policy-CmYeSQqq.js} +1 -1
- package/dist/react/index.d.ts +6 -6
- package/dist/react/index.js +3 -3
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +25 -11
- package/dist/react-native/index.js +214 -24
- package/dist/{refs-K6eWUJ0H.js → refs-CNJBiTFo.js} +15 -1
- package/dist/{replay-D7iKcLFe.d.ts → replay-DCDD_ZfL.d.ts} +1 -1
- package/dist/{request-context-BTRTG7OT.js → request-context-BykKLmyE.js} +2 -2
- package/dist/resend/index.d.ts +4 -4
- package/dist/{retire-CALjIQ7e.js → retire-Wj6dkyDE.js} +2 -2
- package/dist/{rls-BA8an5Ap.js → rls-Ck_PocSp.js} +32 -8
- package/dist/{rls-j6t43t7n.js → rls-CxBZb4rZ.js} +478 -534
- package/dist/{role-builder-CXbis5-X.js → role-builder-C1VJzvcr.js} +3 -3
- package/dist/rolldown-runtime-C3I60J0A.js +4 -0
- package/dist/{rpc-aPyNi6tA.js → rpc-Bk1bE-ch.js} +1 -1
- package/dist/run-Bz7DXGEv.js +1 -0
- package/dist/{run-ticket-sxFI6LAk.js → run-ticket-B5d_63Ma.js} +22 -1
- package/dist/{run-ticket-BjhTOi6u.d.ts → run-ticket-BpNi7BCi.d.ts} +8 -3
- package/dist/{run-DOfMtc9V.js → run-uLD2aWuO.js} +7 -7
- package/dist/{runtime-D3VTAiCA.js → runtime-Vif3_-zf.js} +1 -1
- package/dist/{saas-FO-Q8oj0.js → saas-Az_Kz-4D.js} +7 -7
- package/dist/{scan-BOI5tJ-6.js → scan-DSljDE1Y.js} +1 -1
- package/dist/{schema-yLuBWWsh.js → schema-gIcCx7zM.js} +1 -1
- package/dist/scim/index.d.ts +3 -2
- package/dist/scim/index.js +3 -1
- package/dist/scim-C7JYhySg.js +44 -0
- package/dist/{scim-ClHtpyV3.js → scim-YNieBO1U.js} +3 -537
- package/dist/{scopes-CUPSjo9q.js → scopes-BHsc-wp-.js} +1 -1
- package/dist/server/index.d.ts +11 -11
- package/dist/server/index.js +7 -7
- package/dist/{server-DqCT4CgZ.js → server-Bnga6I50.js} +3 -3
- package/dist/{server-types-BLd4MnBX.d.ts → server-types-C4gZUEZy.d.ts} +9 -9
- package/dist/{shared-DvvFzYXe.js → shared-C8LjUdVU.js} +1 -1
- package/dist/{shared-CD11nBbC.js → shared-fMKOv8hP.js} +46 -39
- package/dist/{sink-Bj_lDUDq.d.ts → sink-Cp_Eot9W.d.ts} +4 -4
- package/dist/{skills-B6lVdD_W.js → skills-Dcjw9_1C.js} +5 -5
- package/dist/{skills-CTYwkl44.js → skills-g_3BS9NC.js} +3 -3
- package/dist/{snapshot-CXUWfsNy.js → snapshot-CbGmYiJx.js} +4 -4
- package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-DT2Kx1F8.js} +1 -1
- package/dist/{snapshot-cache-DqK9eDmM.d.ts → snapshot-cache-Pahd3IYJ.d.ts} +1 -1
- package/dist/solid/index.d.ts +6 -5
- package/dist/solid/index.js +4 -4
- package/dist/solid-start/index.d.ts +6 -6
- package/dist/solid-start/index.js +3 -3
- package/dist/{sources-vs5dGOsS.js → sources-B-zYB4GS.js} +111 -25
- package/dist/{sources-BV9j0DeZ.d.ts → sources-DEEuGb8S.d.ts} +63 -14
- package/dist/sources-qoIJQrJv.js +11 -0
- package/dist/{sql-B5T1IL83.js → sql-B96movIM.js} +5 -1
- package/dist/sql-CDEPCA0g.d.ts +10 -0
- package/dist/{src-DLfUWFAI.js → src-DLFrtrrC.js} +154 -53
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +640 -211
- package/dist/{standard-webhooks-6lg8v_is.d.ts → standard-webhooks-B_qRg0ws.d.ts} +2 -2
- package/dist/{store-4u_hxjWa.js → store-DSP9oGvh.js} +15 -7
- package/dist/{store-options-BqEakYRa.js → store-options-B_poyYvg.js} +6 -6
- package/dist/{stores-ClZUgeoP.d.ts → stores-BAZwSYZA.d.ts} +6 -5
- package/dist/{stores-BbsD4fAR.js → stores-BqEuHC05.js} +2 -2
- package/dist/{stream-7-xmnf3U.d.ts → stream-2Vwhl7Er.d.ts} +2 -2
- package/dist/{style-Uao76wO7.js → style-Cqo7-73x.js} +1 -0
- package/dist/{style-DiKWnAvn.js → style-Ds1gNm77.js} +1 -1
- package/dist/supabase/index.d.ts +8 -7
- package/dist/supabase/index.js +5 -5
- package/dist/supabase/middleware.d.ts +6 -6
- package/dist/supabase/middleware.js +6 -6
- package/dist/{supabase-Dxlp8A94.js → supabase--0aJdLEd.js} +9 -7
- package/dist/{supabase-9pqI57pW.js → supabase-Bqp7iIY2.js} +3 -3
- package/dist/supabase-hook-DJxC4PoP.js +1 -0
- package/dist/{supabase-hook-DdDQhMlw.js → supabase-hook-Dg0SrQWR.js} +1069 -123
- package/dist/supautils-MESd81bF.js +689 -0
- package/dist/{support-session-C6xJQYut.js → support-session-Cna49-3f.js} +2 -2
- package/dist/svelte/index.d.ts +5 -5
- package/dist/svelte/index.js +5 -5
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +5 -5
- package/dist/svelte/source.js +2 -2
- package/dist/sveltekit/index.d.ts +6 -6
- package/dist/sveltekit/index.js +2 -2
- package/dist/tanstack-start/index.d.ts +6 -6
- package/dist/tanstack-start/index.js +2 -2
- package/dist/{tenancy-DN2QAx9z.js → tenancy-CmeBQ6Nv.js} +12 -3
- package/dist/terminal/index.d.ts +6 -6
- package/dist/terminal/index.js +3 -3
- package/dist/testing/core.d.ts +2 -0
- package/dist/testing/core.js +1 -0
- package/dist/testing/fixtures/index.d.ts +12 -0
- package/dist/testing/fixtures/index.js +770 -0
- package/dist/testing/index.d.ts +41 -174
- package/dist/testing/index.js +241 -731
- package/dist/testing/saas/index.d.ts +5 -5
- 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 +444 -0
- package/dist/{token-BLZcjQgt.js → token-2qYDvXz2.js} +1 -1
- package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-reAhIzdl.js} +1 -1
- package/dist/trpc/index.d.ts +6 -6
- package/dist/trpc/index.js +3 -3
- package/dist/{types-5Ut_pbKy.d.ts → types-BWZybqs9.d.ts} +112 -8
- package/dist/{types-CZTnPFzM.d.ts → types-BXMYB7BY.d.ts} +2 -2
- package/dist/{types-CdlxsYQh.d.ts → types-BfVmNJO5.d.ts} +14 -3
- package/dist/{types-BqAKcRNW.d.ts → types-CIeZcG8v.d.ts} +2 -2
- package/dist/{types-BNORmDM8.d.ts → types-CKV71kKh.d.ts} +4 -4
- package/dist/{types-tIgIeIKJ.d.ts → types-CQVEQawv.d.ts} +4 -4
- package/dist/{types-BjV-fqcA.d.ts → types-CeIscIKp.d.ts} +4 -4
- package/dist/{types-_sHy8BQf.d.ts → types-CfiKC5aN.d.ts} +1 -1
- package/dist/{types-ClZaWzfb.d.ts → types-D3A19w4A.d.ts} +8 -4
- package/dist/{types-C8-KNsFf.d.ts → types-DBHftjgS.d.ts} +15 -8
- package/dist/{types-CCpc2Dcv.d.ts → types-DC44-hqb.d.ts} +2 -2
- package/dist/{types-fbZ7JEXr.d.ts → types-DXmwu78Z.d.ts} +4 -4
- package/dist/{types-DiQjupG2.d.ts → types-cTos-H7p.d.ts} +2 -2
- package/dist/{types-DX0LaKTb.d.ts → types-g7Oy6Zg4.d.ts} +3 -3
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/{usage-T5mXq98v.js → usage-Bybmck7f.js} +7 -7
- package/dist/{usage-DHtE8j4E.js → usage-CDaLXCfL.js} +2 -2
- package/dist/usage-y-kBNdqs.js +1 -0
- package/dist/{validation-error-Bg5Tpluk.d.ts → validation-error-CQpoquwj.d.ts} +1 -1
- package/dist/{verify-DbCL9bnB.js → verify-pe8rL_Qw.js} +350 -83
- package/dist/{views-DTIIO-oQ.js → views-BB8E9dTP.js} +1 -1
- package/dist/vocabulary-Bg3eeT2H.d.ts +67 -0
- package/dist/vue/index.d.ts +6 -5
- package/dist/vue/index.js +4 -4
- package/dist/{waiter-CKy4MQSY.d.ts → waiter-DwEyouan.d.ts} +2 -2
- package/dist/watch-Bd9mx3rd.js +1 -0
- package/dist/{watch-CszoTJMq.js → watch-C-4VmFlL.js} +3 -3
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +2 -2
- package/dist/{where-scope-Dv-WTP-w.js → where-scope-wq2coopv.js} +41 -21
- package/dist/{who-can-D0QoYbEb.js → who-can-BwNsI_Js.js} +6 -6
- package/dist/workflow/index.d.ts +3 -3
- package/dist/workflow/index.js +5 -5
- package/dist/workflow-sdk/index.d.ts +5 -5
- package/dist/{wrap-Bd1Tejur.d.ts → wrap-B6R0cMRL.d.ts} +2 -2
- package/dist/{wrap-gX61EtpB.js → wrap-CiSc_KCq.js} +8 -2
- package/package.json +22 -11
- 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 +276 -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-data/references/queries-and-rls.md +5 -2
- package/skills/permdock-tenancy/SKILL.md +1 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -0
- package/skills/permdock-wire/references/adapters.md +14 -0
- package/skills/permdock-wire/references/policy-options.md +1 -0
- package/dist/catalog-DjhMYYCq.js +0 -1
- package/dist/collect-FlXJlhus.js +0 -1
- package/dist/index-D8EovfsP.d.ts +0 -91
- package/dist/load-BxEtwlBS.js +0 -1
- package/dist/output-files-B3IZJksC.js +0 -1
- package/dist/parse-Cxq0WxrA.js +0 -53
- package/dist/peer-C8swJ2GH.js +0 -50
- package/dist/powersync-CbzkqL_M.js +0 -1
- package/dist/powersync-bYUDLOAO.js +0 -538
- package/dist/prompt-DfZLJLIn.js +0 -32
- package/dist/pull-ByOks_Tg.js +0 -1
- package/dist/run-CNsApDpd.js +0 -1
- package/dist/supabase-hook-CXcGpHqq.js +0 -1
- package/dist/supautils-B6HYL9eL.js +0 -91
- package/dist/text-diff-BQcUapOb.js +0 -15
- package/dist/usage-CHOtwL19.js +0 -1
- package/dist/watch-Cb-NcaUw.js +0 -1
package/dist/jwt/index.js
CHANGED
|
@@ -3,10 +3,10 @@ import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
|
|
|
3
3
|
import { o as epochSeconds, p as nowSeconds } from "../time-DkWjdL98.js";
|
|
4
4
|
import { n as sha256, t as bytesToBase64Url } from "../sha256-D9ihqmvd.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-
|
|
6
|
+
import { i as linkPolicyViolation, r as capabilitySubject, s as redeemerAllows, t as capabilityFromClaims } from "../capability-L7NnfhiE.js";
|
|
7
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-DHuh-okk.js";
|
|
8
8
|
import { t as loadJose } from "../load-jose-DZ4dnjri.js";
|
|
9
|
-
import { n as
|
|
9
|
+
import { i as validateCustomClaims, n as idTokenMismatch, r as mapClaimsToSubject, t as acceptMismatch } from "../map-claims-etGIS_Dv.js";
|
|
10
10
|
import { t as memoryReplayStore } from "../replay-Du1tJjG7.js";
|
|
11
11
|
//#region src/jwt/dpop.ts
|
|
12
12
|
const DPOP_WINDOW_SECONDS = 60;
|
|
@@ -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 {
|
|
@@ -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,
|
|
325
|
+
* `azp` and, when `nonce` is given, `nonce`. It does not check `at_hash`,
|
|
326
|
+
* `c_hash`, `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;
|
|
@@ -608,4 +668,82 @@ 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
|
+
/** Causes a verifier for another issuer answers; a different cause names the token's real fault. */
|
|
674
|
+
const OTHER_ISSUER = /* @__PURE__ */ new Set(["wrong-issuer", "unknown-kid"]);
|
|
675
|
+
async function firstAccepted(token, options) {
|
|
676
|
+
const causes = [];
|
|
677
|
+
for (const verifier of options.verifiers) {
|
|
678
|
+
let verified;
|
|
679
|
+
try {
|
|
680
|
+
verified = await verifier.verify(token, {
|
|
681
|
+
typ: "at+jwt",
|
|
682
|
+
audience: options.audience,
|
|
683
|
+
...options.clockTolerance === void 0 ? {} : { clockTolerance: options.clockTolerance }
|
|
684
|
+
});
|
|
685
|
+
} catch {
|
|
686
|
+
causes.push("invalid-signature");
|
|
687
|
+
continue;
|
|
688
|
+
}
|
|
689
|
+
if (verified.ok) return verified;
|
|
690
|
+
causes.push(verified.cause);
|
|
691
|
+
}
|
|
692
|
+
return { cause: causes.find((cause) => !OTHER_ISSUER.has(cause)) ?? causes[0] ?? "invalid-signature" };
|
|
693
|
+
}
|
|
694
|
+
async function claimOnce(replay, key, expiresAt) {
|
|
695
|
+
try {
|
|
696
|
+
if (replay.claim !== void 0) return await replay.claim(key, expiresAt);
|
|
697
|
+
if (await replay.seen(key)) return false;
|
|
698
|
+
await replay.remember(key, expiresAt);
|
|
699
|
+
return true;
|
|
700
|
+
} catch {
|
|
701
|
+
return false;
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
/**
|
|
705
|
+
* 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
|
+
* that accepts it wins. The token must carry `sub`, `jti`, `iat` and `exp`,
|
|
708
|
+
* live at most `maxLifetime` seconds, and present its `jti` once. A replay
|
|
709
|
+
* store that throws refuses the token as `replayed`. Never throws.
|
|
710
|
+
*/
|
|
711
|
+
async function verifySubjectToken(token, options) {
|
|
712
|
+
const verified = await firstAccepted(token, options);
|
|
713
|
+
if (!("ok" in verified)) return {
|
|
714
|
+
ok: false,
|
|
715
|
+
cause: verified.cause
|
|
716
|
+
};
|
|
717
|
+
if (normalizeTyp(verified.header.typ)?.toLowerCase() !== "at+jwt") return {
|
|
718
|
+
ok: false,
|
|
719
|
+
cause: "wrong-token-type"
|
|
720
|
+
};
|
|
721
|
+
const { claims } = verified;
|
|
722
|
+
const { sub, jti, iat, exp } = claims;
|
|
723
|
+
if (typeof sub !== "string" || sub === "" || typeof jti !== "string" || jti === "" || typeof iat !== "number" || typeof exp !== "number") return {
|
|
724
|
+
ok: false,
|
|
725
|
+
cause: "malformed"
|
|
726
|
+
};
|
|
727
|
+
if (exp - iat > (options.maxLifetime ?? DEFAULT_MAX_LIFETIME)) return {
|
|
728
|
+
ok: false,
|
|
729
|
+
cause: "lifetime-exceeded"
|
|
730
|
+
};
|
|
731
|
+
const key = `subject-token\n${claims.iss ?? ""}\n${jti}`;
|
|
732
|
+
if (!await claimOnce(options.replay, key, exp + (options.clockTolerance ?? 0))) return {
|
|
733
|
+
ok: false,
|
|
734
|
+
cause: "replayed"
|
|
735
|
+
};
|
|
736
|
+
return {
|
|
737
|
+
ok: true,
|
|
738
|
+
claims: {
|
|
739
|
+
...claims,
|
|
740
|
+
sub,
|
|
741
|
+
jti,
|
|
742
|
+
iat,
|
|
743
|
+
exp
|
|
744
|
+
},
|
|
745
|
+
header: verified.header
|
|
746
|
+
};
|
|
747
|
+
}
|
|
748
|
+
//#endregion
|
|
749
|
+
export { joseTokenSigner, joseTokenVerifier, jwtSubjectResolver, memoryReplayStore, subjectFromCapability, subjectFromCiOidc, subjectFromIntrospection, subjectFromJwt, verifyDpopProof, verifyIdToken, verifySubjectToken };
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import {
|
|
2
|
+
import { i as stepUpOf } from "./problem-details-cn5X30gZ.js";
|
|
3
|
+
import { t as describe } from "./describe-DZlnEtLy.js";
|
|
3
4
|
import { a as deniedMessage } from "./errors-BKy0EfhN.js";
|
|
4
|
-
import { t as actorMayCallTool } from "./delegation-
|
|
5
|
+
import { t as actorMayCallTool } from "./delegation-C5rOdTp5.js";
|
|
6
|
+
import { c as nowSeconds, r as isMembershipExpired } from "./tenancy-CmeBQ6Nv.js";
|
|
7
|
+
import { k as activate } from "./evaluate-B_oqFbWC.js";
|
|
5
8
|
import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
|
|
6
|
-
import {
|
|
7
|
-
import { l as
|
|
8
|
-
import {
|
|
9
|
+
import { n as delegationAllows } from "./where-scope-wq2coopv.js";
|
|
10
|
+
import { l as withApp } from "./permdock-BfWEeMqk.js";
|
|
11
|
+
import { l as storedApprovalToken, s as resumeDecision } from "./helpers-DY3vXuGs.js";
|
|
12
|
+
import { n as resolveOrNull } from "./build-instance-DxE7czo9.js";
|
|
9
13
|
import { n as tenantScope, t as actorFrom } from "./adapter-context-CRhqyzCk.js";
|
|
10
|
-
import { n as requestContext, t as buildReportingInstance } from "./request-context-
|
|
14
|
+
import { n as requestContext, t as buildReportingInstance } from "./request-context-BykKLmyE.js";
|
|
11
15
|
//#region src/agent/denied-text.ts
|
|
12
16
|
/** The hook's text, or `event.text` when there is no hook or it throws or returns no string. */
|
|
13
17
|
function refusalText(hook, event, report) {
|
|
@@ -35,6 +39,126 @@ function thrownReason(toolName) {
|
|
|
35
39
|
return `Denied: ${toolName} failed closed.`;
|
|
36
40
|
}
|
|
37
41
|
//#endregion
|
|
42
|
+
//#region src/agent/step-up.ts
|
|
43
|
+
/** Denials neither a fresh sign-in nor an activation can lift. */
|
|
44
|
+
const FINAL = /* @__PURE__ */ new Set([
|
|
45
|
+
"deny",
|
|
46
|
+
"validation",
|
|
47
|
+
"anonymous",
|
|
48
|
+
"not-delegated",
|
|
49
|
+
"no-delegation",
|
|
50
|
+
"agent-tool-not-delegated",
|
|
51
|
+
"approval",
|
|
52
|
+
"stale-approval"
|
|
53
|
+
]);
|
|
54
|
+
/** Activation denials the activation flow itself asks the user to fix. */
|
|
55
|
+
const ACTIVATION_ASKS = /* @__PURE__ */ new Set(["reason-required", "insufficient-user-authentication"]);
|
|
56
|
+
function elevated(membership, role) {
|
|
57
|
+
return compact({
|
|
58
|
+
scope: membership.scope,
|
|
59
|
+
id: membership.id,
|
|
60
|
+
within: membership.within,
|
|
61
|
+
roles: [role],
|
|
62
|
+
via: "elevated"
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function activationFor(permdock, permission, data) {
|
|
66
|
+
const held = permdock.subject.principal?.memberships ?? [];
|
|
67
|
+
const now = nowSeconds();
|
|
68
|
+
for (const membership of held) {
|
|
69
|
+
const { scope, id } = membership;
|
|
70
|
+
if (scope === void 0 || id === void 0 || isMembershipExpired(membership, now)) continue;
|
|
71
|
+
for (const role of membership.eligible ?? []) {
|
|
72
|
+
const offered = activate(permdock, compact({
|
|
73
|
+
role,
|
|
74
|
+
scope,
|
|
75
|
+
id,
|
|
76
|
+
within: membership.within
|
|
77
|
+
}));
|
|
78
|
+
if (offered.outcome === "denied" && !offered.denials.every((denial) => ACTIVATION_ASKS.has(denial.reason))) continue;
|
|
79
|
+
const [decision] = permdock.simulate({ memberships: [...held, elevated({
|
|
80
|
+
...membership,
|
|
81
|
+
scope,
|
|
82
|
+
id
|
|
83
|
+
}, role)] }).simulate([[permission, data]]);
|
|
84
|
+
if (decision !== void 0 && decision.outcome !== "denied") return compact({
|
|
85
|
+
kind: "activation",
|
|
86
|
+
role,
|
|
87
|
+
scope,
|
|
88
|
+
id,
|
|
89
|
+
within: membership.within
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The step-up that could lift `decision`, or `undefined`. A denial with
|
|
96
|
+
* `insufficient-user-authentication` asks for a fresh sign-in when the
|
|
97
|
+
* delegation and the actor still cover the permission; any other
|
|
98
|
+
* denial asks for the first eligible role whose activation the simulated
|
|
99
|
+
* decision grants. A matched deny, a validation failure, an anonymous
|
|
100
|
+
* subject, a delegation that does not cover the call, an undelegated tool
|
|
101
|
+
* and a failed approval resume never step up.
|
|
102
|
+
*/
|
|
103
|
+
function stepUpFor(permdock, permission, data, decision) {
|
|
104
|
+
if (decision.outcome !== "denied" || decision.denials.length === 0 || decision.denials.some((denial) => FINAL.has(denial.reason))) return;
|
|
105
|
+
try {
|
|
106
|
+
if (decision.denials.some((denial) => denial.reason === "insufficient-user-authentication")) return delegationAllows(permdock, permission) ? {
|
|
107
|
+
kind: "authentication",
|
|
108
|
+
...stepUpOf(decision)
|
|
109
|
+
} : void 0;
|
|
110
|
+
return activationFor(permdock, permission, data);
|
|
111
|
+
} catch {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The subject's instance with every eligible role activated, for a tool
|
|
117
|
+
* listing that keeps tools an activation would open. `undefined` when the
|
|
118
|
+
* subject is eligible for nothing.
|
|
119
|
+
*/
|
|
120
|
+
function eligiblePreview(permdock) {
|
|
121
|
+
const held = permdock.subject.principal?.memberships ?? [];
|
|
122
|
+
const now = nowSeconds();
|
|
123
|
+
const activations = held.flatMap((membership) => {
|
|
124
|
+
const { scope, id } = membership;
|
|
125
|
+
return scope === void 0 || id === void 0 || isMembershipExpired(membership, now) ? [] : (membership.eligible ?? []).map((role) => elevated({
|
|
126
|
+
...membership,
|
|
127
|
+
scope,
|
|
128
|
+
id
|
|
129
|
+
}, role));
|
|
130
|
+
});
|
|
131
|
+
if (activations.length === 0) return;
|
|
132
|
+
try {
|
|
133
|
+
return permdock.simulate({ memberships: [...held, ...activations] });
|
|
134
|
+
} catch {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** The URL the user signs in again at, with the RFC 9470 `acr_values` and `max_age` added. */
|
|
139
|
+
function signInUrl(at, stepUp) {
|
|
140
|
+
let url;
|
|
141
|
+
try {
|
|
142
|
+
url = new URL(at);
|
|
143
|
+
} catch {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (stepUp.acrValues !== void 0 && stepUp.acrValues.length > 0) url.searchParams.set("acr_values", stepUp.acrValues.join(" "));
|
|
147
|
+
if (stepUp.maxAge !== void 0) url.searchParams.set("max_age", String(stepUp.maxAge));
|
|
148
|
+
return url.href;
|
|
149
|
+
}
|
|
150
|
+
/** The sentence the user reads on the step-up prompt. */
|
|
151
|
+
function stepUpText(stepUp, permission, at) {
|
|
152
|
+
switch (stepUp.kind) {
|
|
153
|
+
case "authentication": {
|
|
154
|
+
const url = at === void 0 ? void 0 : signInUrl(at, stepUp);
|
|
155
|
+
return url === void 0 ? `Sign in again to use ${permission.key}.` : `Sign in again to use ${permission.key}: ${url}`;
|
|
156
|
+
}
|
|
157
|
+
case "activation": return `Activate the ${stepUp.role} role on ${stepUp.scope} ${stepUp.id} to use ${permission.key}.`;
|
|
158
|
+
default: return stepUp;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//#endregion
|
|
38
162
|
//#region src/agent/kernel.ts
|
|
39
163
|
/** The resume token an agent run carries under the namespaced `permdockApproval` key. */
|
|
40
164
|
function approvalTokenOf(context) {
|
|
@@ -210,12 +334,13 @@ function createAgentKernel(policy, given) {
|
|
|
210
334
|
token: decision.token,
|
|
211
335
|
summary: modelReason(decision, binding.permission, permdock.subject.principal?.id)
|
|
212
336
|
};
|
|
213
|
-
return {
|
|
337
|
+
return compact({
|
|
214
338
|
outcome: "denied",
|
|
215
339
|
decision,
|
|
216
340
|
permission: binding.permission,
|
|
217
|
-
reason: modelReason(decision, binding.permission, permdock.subject.principal?.id)
|
|
218
|
-
|
|
341
|
+
reason: modelReason(decision, binding.permission, permdock.subject.principal?.id),
|
|
342
|
+
stepUp: options.stepUp === true ? stepUpFor(permdock, binding.permission, data, decision) : void 0
|
|
343
|
+
});
|
|
219
344
|
};
|
|
220
345
|
const evaluate = async (binding, toolName, args, context, decideOptions = {}) => {
|
|
221
346
|
const checked = await check(binding, args, context, {
|
|
@@ -265,10 +390,11 @@ function createAgentKernel(policy, given) {
|
|
|
265
390
|
}, void 0));
|
|
266
391
|
return evaluate(binding, toolName, args, context, decideOptions);
|
|
267
392
|
};
|
|
268
|
-
const allowedToolNames = async (context) => {
|
|
393
|
+
const allowedToolNames = async (context, listOptions = {}) => {
|
|
269
394
|
const permdock = await instance(context);
|
|
395
|
+
const preview = listOptions.eligible === true ? eligiblePreview(permdock) : void 0;
|
|
270
396
|
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);
|
|
397
|
+
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
398
|
return allowed;
|
|
273
399
|
};
|
|
274
400
|
return {
|
|
@@ -282,4 +408,4 @@ function createAgentKernel(policy, given) {
|
|
|
282
408
|
};
|
|
283
409
|
}
|
|
284
410
|
//#endregion
|
|
285
|
-
export { createAgentKernel as n,
|
|
411
|
+
export { refusalText as i, createAgentKernel as n, stepUpText as r, approvalTokenOf as t };
|
package/dist/kysely/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Rt as Instant,
|
|
2
|
-
import {
|
|
1
|
+
import { Rt as Instant, lr as Subject, mr as Condition } from "../policy-types-B-F-qAZk.js";
|
|
2
|
+
import { u as WhereResult } from "../permdock-Dco6dyCK.js";
|
|
3
3
|
import { r as RelationsMapping } from "../graph-sql-B-dsAT6j.js";
|
|
4
|
-
import { s as MembershipsMapping } from "../compile-
|
|
4
|
+
import { s as MembershipsMapping } from "../compile-COM2VKuN.js";
|
|
5
5
|
import { n as WithSubjectOptions, t as RowCheck } from "../row-check-Dt35czLy.js";
|
|
6
6
|
//#region src/kysely/types.d.ts
|
|
7
7
|
type KyselySelectQuery = {
|
package/dist/kysely/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
2
|
import { t as assertSafeKey } from "../paths-DXSHAMIa.js";
|
|
3
|
-
import { n as escapeLike, t as compileWhere } from "../compile-
|
|
3
|
+
import { n as escapeLike, t as compileWhere } from "../compile-BAEO5bOk.js";
|
|
4
4
|
import { a as rowCheckFrom, i as templateOf, r as subjectStatements, s as loadPeer, t as statementTemplate } from "../subject-settings-CkEwrw3W.js";
|
|
5
5
|
//#region src/kysely/to-where.ts
|
|
6
6
|
function ident(name) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { a as loadModule, s as pickNamed } from "./load-DxroEzH1.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as listPermissions } from "./permission-registry-
|
|
2
|
-
import { a as describeError, n as CliError } from "./errors-
|
|
1
|
+
import { c as listPermissions } from "./permission-registry-DpPtSKNZ.js";
|
|
2
|
+
import { a as describeError, n as CliError } from "./errors-DpP_U6Bf.js";
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
4
|
import { pathToFileURL } from "node:url";
|
|
5
5
|
import { createJiti } from "jiti";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as defineLeaf } from "./command-L8EstFNm.js";
|
|
2
|
-
import { c as given } from "./flags-
|
|
2
|
+
import { c as given } from "./flags-aaeRAdiD.js";
|
|
3
3
|
//#region src/cli/commands/login.ts
|
|
4
4
|
const urlFlag = { url: {
|
|
5
5
|
type: "string",
|
|
@@ -27,7 +27,7 @@ const login = defineLeaf({
|
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
async run(ctx, { flags }) {
|
|
30
|
-
const { runLogin } = await import("./login-
|
|
30
|
+
const { runLogin } = await import("./login-WC9HPJpU.js");
|
|
31
31
|
return runLogin({
|
|
32
32
|
cwd: ctx.cwd,
|
|
33
33
|
url: given(flags.url),
|
|
@@ -43,7 +43,7 @@ const login = defineLeaf({
|
|
|
43
43
|
const logout = defineLeaf({
|
|
44
44
|
flags: { ...urlFlag },
|
|
45
45
|
async run(ctx, { flags }) {
|
|
46
|
-
const { runLogout } = await import("./login-
|
|
46
|
+
const { runLogout } = await import("./login-WC9HPJpU.js");
|
|
47
47
|
return runLogout({
|
|
48
48
|
url: given(flags.url),
|
|
49
49
|
json: ctx.json,
|
|
@@ -55,7 +55,7 @@ const logout = defineLeaf({
|
|
|
55
55
|
const whoami = defineLeaf({
|
|
56
56
|
flags: { ...urlFlag },
|
|
57
57
|
async run(ctx, { flags }) {
|
|
58
|
-
const { runWhoami } = await import("./login-
|
|
58
|
+
const { runWhoami } = await import("./login-WC9HPJpU.js");
|
|
59
59
|
return runWhoami({
|
|
60
60
|
url: given(flags.url),
|
|
61
61
|
json: ctx.json,
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import { h as secondsAt, i as dateAt, s as instantAt } from "./time-DkWjdL98.js";
|
|
2
|
-
import { n as CliError } from "./errors-
|
|
2
|
+
import { n as CliError } from "./errors-DpP_U6Bf.js";
|
|
3
3
|
import { i as postForm, r as parseToken, s as runDeviceFlow } from "./device-BARQ8eYG.js";
|
|
4
4
|
import { i as writeCredentials, n as deleteCredentials, r as readCredentials, t as credentialsPath } from "./storage-C2bWdvJH.js";
|
|
5
|
-
import { n as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { n as randomToken, t as pkce } from "./pkce-5h8NgMQJ.js";
|
|
6
|
+
import { n as httpRequest } from "./http-Ca3Sr5x1.js";
|
|
7
|
+
import { c as READ_SCOPES, d as issuerMetadata, i as credentialsInsideRepository, l as cloudUrl, n as cliRuntime, r as credentialStorage, s as CLI_CLIENT_ID, t as CREDENTIAL_SERVICE } from "./auth-CscUX8Sy.js";
|
|
8
8
|
import { spawn } from "node:child_process";
|
|
9
9
|
import { createServer } from "node:http";
|
|
10
10
|
//#region src/cli/cloud/loopback.ts
|
|
11
11
|
/** How long the loopback listener waits for the browser to come back. */
|
|
12
12
|
const LOOPBACK_TIMEOUT_MS = 3e5;
|
|
13
|
-
function base64url(bytes) {
|
|
14
|
-
return bytes.toString("base64url");
|
|
15
|
-
}
|
|
16
13
|
function listen(server) {
|
|
17
14
|
return new Promise((resolve, reject) => {
|
|
18
15
|
server.once("error", reject);
|
|
@@ -28,9 +25,8 @@ function listen(server) {
|
|
|
28
25
|
* `state` that the callback must echo.
|
|
29
26
|
*/
|
|
30
27
|
async function runLoopbackFlow(options, runtime) {
|
|
31
|
-
const verifier =
|
|
32
|
-
const
|
|
33
|
-
const state = base64url(randomBytes(16));
|
|
28
|
+
const { verifier, challenge } = await pkce();
|
|
29
|
+
const state = randomToken(16);
|
|
34
30
|
const { promise: callback, resolve: settle } = Promise.withResolvers();
|
|
35
31
|
const server = createServer((request, response) => {
|
|
36
32
|
const url = new URL(request.url ?? "/", "http://127.0.0.1");
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
2
2
|
import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
|
|
3
3
|
import { n as copyJson, t as checkSchema } from "./json-schema-B-vAwlde.js";
|
|
4
|
-
import { t as supabaseManifestSchema } from "./manifest-schema-
|
|
4
|
+
import { t as supabaseManifestSchema } from "./manifest-schema-Cv492Qev.js";
|
|
5
5
|
//#region src/supabase/manifest.ts
|
|
6
|
+
/** Whether the manifest describes a token hook. */
|
|
7
|
+
function hasTokenHook(manifest) {
|
|
8
|
+
return "hook" in manifest;
|
|
9
|
+
}
|
|
6
10
|
/**
|
|
7
11
|
* Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
|
|
8
12
|
* validates it against `schemas/supabase-manifest-v1.json`. Returns a
|
|
@@ -39,4 +43,4 @@ function invalidManifest(issues) {
|
|
|
39
43
|
});
|
|
40
44
|
}
|
|
41
45
|
//#endregion
|
|
42
|
-
export { parseSupabaseManifest as t };
|
|
46
|
+
export { parseSupabaseManifest as n, hasTokenHook as t };
|
|
@@ -48,6 +48,12 @@ type SupabaseHookManifest = {
|
|
|
48
48
|
readonly function: "permdock_bump_authz_version_for";
|
|
49
49
|
readonly args: "p_users uuid[]";
|
|
50
50
|
};
|
|
51
|
+
/** The Management API fields that make a hosted project call the hook; `permdock supabase inspect` adds them. */
|
|
52
|
+
readonly managementApi?: {
|
|
53
|
+
readonly hook_custom_access_token_enabled: true;
|
|
54
|
+
readonly hook_custom_access_token_uri: string;
|
|
55
|
+
readonly jwt_exp: number;
|
|
56
|
+
};
|
|
51
57
|
/** The `supabase.hook.memberships` sources, in the order the hook reads them. */
|
|
52
58
|
readonly memberships: readonly SupabaseManifestMembership[];
|
|
53
59
|
readonly rls: SupabaseManifestRls;
|
|
@@ -97,6 +103,9 @@ type SupabaseManifestThrough = {
|
|
|
97
103
|
/** A role column (with `through` when it references a roles table), or the fixed roles every row holds. */
|
|
98
104
|
type SupabaseManifestRole = SupabaseManifestValue | (SupabaseManifestColumn & {
|
|
99
105
|
readonly through: SupabaseManifestThrough;
|
|
106
|
+
}) | (SupabaseManifestColumn & {
|
|
107
|
+
/** Each column value to the role key it stands for, or `null` for no role; an unlisted value is no role. */
|
|
108
|
+
readonly map: Readonly<Record<string, string | null>>;
|
|
100
109
|
});
|
|
101
110
|
/** One `tableMembershipSource` or `junctionMembershipSource` source. */
|
|
102
111
|
type SupabaseManifestMembership = {
|
|
@@ -194,6 +203,8 @@ type SupabaseManifestRls = {
|
|
|
194
203
|
readonly assignments?: {
|
|
195
204
|
readonly tables: readonly string[];
|
|
196
205
|
};
|
|
206
|
+
/** `rls.tokenScopes`: the helpers narrow a delegated token by its `scope` claim through `permdock_token_scope_allows`. */
|
|
207
|
+
readonly tokenScopes?: boolean;
|
|
197
208
|
readonly apiKeys?: {
|
|
198
209
|
readonly claim: string;
|
|
199
210
|
readonly scopes: string;
|
|
@@ -202,12 +213,22 @@ type SupabaseManifestRls = {
|
|
|
202
213
|
readonly serviceRoles: readonly string[];
|
|
203
214
|
};
|
|
204
215
|
};
|
|
216
|
+
/**
|
|
217
|
+
* The manifest of a project in `rls.authorize: 'database'` mode without
|
|
218
|
+
* `supabase.hook`: no token hook, so no `hook`, `budget`, `claims`,
|
|
219
|
+
* `authzVersion` or hook `memberships`.
|
|
220
|
+
*/
|
|
221
|
+
type SupabaseDatabaseManifest = Omit<SupabaseHookManifest, "authzVersion" | "authzVersionBump" | "budget" | "claims" | "hook" | "managementApi" | "memberships">;
|
|
222
|
+
/** What `parseSupabaseManifest` returns: a manifest with or without the token hook. */
|
|
223
|
+
type SupabaseManifest = SupabaseDatabaseManifest | SupabaseHookManifest;
|
|
224
|
+
/** Whether the manifest describes a token hook. */
|
|
225
|
+
declare function hasTokenHook(manifest: SupabaseManifest): manifest is SupabaseHookManifest;
|
|
205
226
|
/**
|
|
206
227
|
* Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
|
|
207
228
|
* validates it against `schemas/supabase-manifest-v1.json`. Returns a
|
|
208
229
|
* deep-frozen copy built from own keys; throws `PermDockValidationError`
|
|
209
230
|
* with every issue, so a manifest of another major is refused.
|
|
210
231
|
*/
|
|
211
|
-
declare function parseSupabaseManifest(json: unknown):
|
|
232
|
+
declare function parseSupabaseManifest(json: unknown): SupabaseManifest;
|
|
212
233
|
//#endregion
|
|
213
|
-
export {
|
|
234
|
+
export { SupabaseManifestActiveRow as a, SupabaseManifestMembership as c, SupabaseManifestRole as d, SupabaseManifestThrough as f, parseSupabaseManifest as h, SupabaseManifest as i, SupabaseManifestRequires as l, hasTokenHook as m, SupabaseHookClaim as n, SupabaseManifestColumn as o, SupabaseManifestValue as p, SupabaseHookManifest as r, SupabaseManifestHelper as s, SupabaseDatabaseManifest as t, SupabaseManifestRls as u };
|