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/authzen/index.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
|
|
2
2
|
import { r as ownGet } from "../paths-DXSHAMIa.js";
|
|
3
|
-
import { o as statusProblem } from "../problem-details-cn5X30gZ.js";
|
|
4
|
-
import { a as getResource, c as listPermissions } from "../permission-registry-
|
|
3
|
+
import { a as problemType, o as statusProblem } from "../problem-details-cn5X30gZ.js";
|
|
4
|
+
import { a as getResource, c as listPermissions } from "../permission-registry-DpPtSKNZ.js";
|
|
5
5
|
import { t as fromWireDelegation } from "../wire-delegation-Cv3W2eaM.js";
|
|
6
6
|
import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
|
|
7
|
-
import { n as readBodyText } from "../body-text-QcXok_SI.js";
|
|
7
|
+
import { n as readBodyText, t as MAX_BODY_BYTES } from "../body-text-QcXok_SI.js";
|
|
8
8
|
import { r as hasCredentials } from "../http-BBoKefeS.js";
|
|
9
|
-
import { a as methodNotAllowed, c as problemResponse,
|
|
10
|
-
import { t as
|
|
11
|
-
import { n as
|
|
12
|
-
import { _ as wireResourceId, a as evaluationReasons, c as unknownSemanticProblem, g as permissionLookup, h as itemResourceData, i as evaluateBatch, l as withRequestId, n as applyApprovalResume, r as authzenMetadata, s as evaluationsSemantic, t as EVALUATIONS_SEMANTICS } from "../evaluations-DZ2CbV5k.js";
|
|
9
|
+
import { a as methodNotAllowed, c as problemResponse, u as unauthenticatedProblem } from "../problem-CTviyH5L.js";
|
|
10
|
+
import { n as resolveOrNull, t as buildInstance } from "../build-instance-DxE7czo9.js";
|
|
11
|
+
import { a as evaluationReasons, c as withRequestId, g as wireResourceId, h as permissionLookup, i as evaluateBatch, m as itemResourceData, n as applyApprovalResume, r as authzenMetadata, s as evaluationsSemantic, t as EVALUATIONS_SEMANTICS } from "../evaluations-DReoiVBw.js";
|
|
13
12
|
//#region src/authzen/map.ts
|
|
14
13
|
const UNKNOWN = {
|
|
15
14
|
outcome: "denied",
|
|
@@ -123,18 +122,30 @@ function mergeEvaluationItem(shared, item) {
|
|
|
123
122
|
context: item["context"] ?? shared.context
|
|
124
123
|
});
|
|
125
124
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
125
|
+
//#endregion
|
|
126
|
+
//#region src/authzen/page.ts
|
|
127
|
+
/** The largest page a search answers; a larger `page.limit` is capped to it. */
|
|
128
|
+
const AUTHZEN_MAX_PAGE = 200;
|
|
129
|
+
const DEFAULT_PAGE = 50;
|
|
130
|
+
/**
|
|
131
|
+
* The page a search body asks for. The token is `page.token`, else
|
|
132
|
+
* `page.next_token`, read as a decimal offset; anything else starts at 0. The
|
|
133
|
+
* size is `page.limit`, else `page.size`, capped at 200 and 50 by default.
|
|
134
|
+
*/
|
|
135
|
+
function readAuthzenPage(body) {
|
|
136
|
+
const page = isRecord(body) && isRecord(body["page"]) ? body["page"] : void 0;
|
|
137
|
+
const raw = typeof page?.["token"] === "string" ? page["token"] : typeof page?.["next_token"] === "string" ? page["next_token"] : "0";
|
|
129
138
|
const parsed = Math.trunc(Number(raw));
|
|
130
|
-
const sizeRaw = page["limit"] ?? page["size"];
|
|
131
|
-
const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) :
|
|
139
|
+
const sizeRaw = page?.["limit"] ?? page?.["size"];
|
|
140
|
+
const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) : DEFAULT_PAGE;
|
|
132
141
|
return {
|
|
133
142
|
offset: Number.isFinite(parsed) && parsed > 0 ? parsed : 0,
|
|
134
143
|
size
|
|
135
144
|
};
|
|
136
145
|
}
|
|
137
|
-
|
|
146
|
+
/** One page of `items` with the AuthZEN `page` object. */
|
|
147
|
+
function authzenPage(items, request) {
|
|
148
|
+
const { offset, size } = request;
|
|
138
149
|
const slice = items.slice(offset, offset + size);
|
|
139
150
|
const next = offset + slice.length;
|
|
140
151
|
return {
|
|
@@ -146,43 +157,259 @@ function paged(items, offset, size) {
|
|
|
146
157
|
}
|
|
147
158
|
};
|
|
148
159
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
160
|
+
/** The answer to a search the PDP cannot run: no results and no next page. */
|
|
161
|
+
function emptyAuthzenPage() {
|
|
162
|
+
return authzenPage([], {
|
|
163
|
+
offset: 0,
|
|
164
|
+
size: 1
|
|
165
|
+
});
|
|
153
166
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
167
|
+
//#endregion
|
|
168
|
+
//#region src/authzen/parse.ts
|
|
169
|
+
/** AuthZEN 1.0 sections 5, 6.1 and 10.1.1. */
|
|
170
|
+
const REQUIRED = {
|
|
171
|
+
evaluation: {
|
|
172
|
+
subject: "type-id",
|
|
173
|
+
action: true,
|
|
174
|
+
resource: "type-id"
|
|
175
|
+
},
|
|
176
|
+
evaluations: {
|
|
177
|
+
subject: "type-id",
|
|
178
|
+
action: true,
|
|
179
|
+
resource: "type-id"
|
|
180
|
+
},
|
|
181
|
+
"search/action": {
|
|
182
|
+
subject: "type-id",
|
|
183
|
+
resource: "type-id"
|
|
184
|
+
},
|
|
185
|
+
"search/resource": {
|
|
186
|
+
subject: "type-id",
|
|
187
|
+
action: true,
|
|
188
|
+
resource: "type"
|
|
189
|
+
},
|
|
190
|
+
"search/subject": {
|
|
191
|
+
subject: "type",
|
|
192
|
+
action: true,
|
|
193
|
+
resource: "type-id"
|
|
162
194
|
}
|
|
195
|
+
};
|
|
196
|
+
function invalid(detail) {
|
|
197
|
+
return {
|
|
198
|
+
ok: false,
|
|
199
|
+
problem: compact({
|
|
200
|
+
type: problemType("validation"),
|
|
201
|
+
title: "Invalid request",
|
|
202
|
+
status: 400,
|
|
203
|
+
detail
|
|
204
|
+
})
|
|
205
|
+
};
|
|
163
206
|
}
|
|
164
|
-
/**
|
|
165
|
-
|
|
166
|
-
* fields (AuthZEN 1.0 sections 5, 6.1 and 10.1.1), or `undefined`.
|
|
167
|
-
*/
|
|
168
|
-
function missingProblem(body, required) {
|
|
207
|
+
/** The first missing entity or field, checked subject, resource, then action. */
|
|
208
|
+
function missing(body, required) {
|
|
169
209
|
for (const name of ["subject", "resource"]) {
|
|
170
210
|
const needs = required[name];
|
|
171
211
|
if (needs === void 0) continue;
|
|
172
212
|
const entity = body[name];
|
|
173
|
-
if (!isRecord(entity) || typeof entity["type"] !== "string") return
|
|
174
|
-
if (needs === "type-id" && typeof entity["id"] !== "string") return
|
|
213
|
+
if (!isRecord(entity) || typeof entity["type"] !== "string") return invalid(`${name}.type is required`);
|
|
214
|
+
if (needs === "type-id" && typeof entity["id"] !== "string") return invalid(`${name}.id is required`);
|
|
175
215
|
}
|
|
176
216
|
if (required.action === true) {
|
|
177
217
|
const action = body["action"];
|
|
178
|
-
if (!isRecord(action) || typeof action["name"] !== "string") return
|
|
218
|
+
if (!isRecord(action) || typeof action["name"] !== "string") return invalid("action.name is required");
|
|
179
219
|
}
|
|
180
220
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
221
|
+
function evaluations(body, maxEvaluations) {
|
|
222
|
+
const items = body["evaluations"] ?? [];
|
|
223
|
+
if (!Array.isArray(items)) return invalid("evaluations must be an array");
|
|
224
|
+
if (items.length === 0) return missing(body, REQUIRED.evaluations) ?? {
|
|
225
|
+
ok: true,
|
|
226
|
+
request: {
|
|
227
|
+
kind: "evaluation",
|
|
228
|
+
item: body
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
if (items.length > maxEvaluations) return {
|
|
232
|
+
ok: false,
|
|
233
|
+
problem: statusProblem(413, `evaluations batch exceeds ${String(maxEvaluations)}`)
|
|
234
|
+
};
|
|
235
|
+
const semantic = evaluationsSemantic(body);
|
|
236
|
+
if (semantic === void 0) return invalid(`options.evaluations_semantic must be one of ${EVALUATIONS_SEMANTICS.join(", ")}`);
|
|
237
|
+
const shared = compact({
|
|
238
|
+
subject: isRecord(body["subject"]) ? body["subject"] : void 0,
|
|
239
|
+
action: isRecord(body["action"]) ? body["action"] : void 0,
|
|
240
|
+
resource: isRecord(body["resource"]) ? body["resource"] : void 0,
|
|
241
|
+
context: body["context"]
|
|
242
|
+
});
|
|
243
|
+
return {
|
|
244
|
+
ok: true,
|
|
245
|
+
request: {
|
|
246
|
+
kind: "evaluations",
|
|
247
|
+
semantic,
|
|
248
|
+
items: items.map((item) => mergeEvaluationItem(shared, item))
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Checks a parsed AuthZEN body the way `permdock/authzen` answers it: the body
|
|
254
|
+
* is an object, then each required entity and field in a fixed order, then
|
|
255
|
+
* the `evaluations` array, batch size and semantic. A failure is the 400 (or
|
|
256
|
+
* 413) Problem Details the handler sends, with the same `detail`.
|
|
257
|
+
*/
|
|
258
|
+
function parseAuthzenRequest(kind, body, options = {}) {
|
|
259
|
+
return parseAny(kind, body, options);
|
|
260
|
+
}
|
|
261
|
+
function parseAny(kind, body, options) {
|
|
262
|
+
if (!isRecord(body)) return invalid(`${kind} body must be an object`);
|
|
263
|
+
switch (kind) {
|
|
264
|
+
case "evaluation": return missing(body, REQUIRED.evaluation) ?? {
|
|
265
|
+
ok: true,
|
|
266
|
+
request: {
|
|
267
|
+
kind,
|
|
268
|
+
item: body
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
case "evaluations": return evaluations(body, options.maxEvaluations ?? 256);
|
|
272
|
+
case "search/action":
|
|
273
|
+
case "search/resource":
|
|
274
|
+
case "search/subject": return missing(body, REQUIRED[kind]) ?? {
|
|
275
|
+
ok: true,
|
|
276
|
+
request: {
|
|
277
|
+
kind,
|
|
278
|
+
item: body,
|
|
279
|
+
page: readAuthzenPage(body)
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
default: return kind;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Reads `request` as an AuthZEN body: `Content-Type: application/json`, at
|
|
287
|
+
* most 1 MiB (a 413 above it), valid JSON, then `parseAuthzenRequest`.
|
|
288
|
+
*/
|
|
289
|
+
async function readAuthzenRequest(kind, request, options = {}) {
|
|
290
|
+
if (request.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() !== "application/json") return invalid("AuthZEN requests must use Content-Type: application/json");
|
|
291
|
+
const read = await readBodyText(request);
|
|
292
|
+
if (!read.ok) return read.cause === "too-large" ? {
|
|
293
|
+
ok: false,
|
|
294
|
+
problem: statusProblem(413, `request body exceeds ${String(MAX_BODY_BYTES)} bytes`)
|
|
295
|
+
} : invalid("AuthZEN body was not valid JSON");
|
|
296
|
+
let body;
|
|
297
|
+
try {
|
|
298
|
+
body = JSON.parse(read.text);
|
|
299
|
+
} catch {
|
|
300
|
+
return invalid("AuthZEN body was not valid JSON");
|
|
301
|
+
}
|
|
302
|
+
return parseAuthzenRequest(kind, body, options);
|
|
303
|
+
}
|
|
304
|
+
//#endregion
|
|
305
|
+
//#region src/authzen/search.ts
|
|
306
|
+
/** The one `decide` call every AuthZEN evaluation and search makes. */
|
|
307
|
+
function decideAuthzen(permdock, permission, data, trusted) {
|
|
308
|
+
const decide = permdock.decide;
|
|
309
|
+
return decide(permission, data, trusted ? {
|
|
310
|
+
call: "endpoint",
|
|
311
|
+
adapter: "authzen",
|
|
312
|
+
trusted: true
|
|
313
|
+
} : {
|
|
314
|
+
call: "endpoint",
|
|
315
|
+
adapter: "authzen",
|
|
316
|
+
trusted: false,
|
|
317
|
+
boundary: "decision-endpoint"
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
/** Every permission of resource type `type`, in catalog order. */
|
|
321
|
+
function permissionsOfType(tree, type) {
|
|
322
|
+
return listPermissions(tree).filter((leaf) => leaf.resource === type);
|
|
323
|
+
}
|
|
324
|
+
/** The distinct actions of the granted `leaves`, in catalog order. */
|
|
325
|
+
async function grantedActions(leaves, decide) {
|
|
326
|
+
const decisions = await Promise.all(leaves.map(async (leaf) => ({
|
|
327
|
+
leaf,
|
|
328
|
+
decision: await decide(leaf)
|
|
329
|
+
})));
|
|
330
|
+
const names = [];
|
|
331
|
+
for (const { leaf, decision } of decisions) if (decision.outcome === "granted" && !names.includes(leaf.action)) names.push(leaf.action);
|
|
332
|
+
return names.map((name) => ({ name }));
|
|
333
|
+
}
|
|
334
|
+
/** The granted ids among `records`; any subject type but `user` matches none. */
|
|
335
|
+
async function grantedSubjects(type, records, decide) {
|
|
336
|
+
if (typeof type === "string" && type !== "user") return [];
|
|
337
|
+
return (await Promise.all(records.map(async (record) => {
|
|
338
|
+
const properties = {};
|
|
339
|
+
for (const [key, value] of Object.entries(record)) if (key !== "id") properties[key] = value;
|
|
340
|
+
return {
|
|
341
|
+
id: record.id,
|
|
342
|
+
decision: await decide({
|
|
343
|
+
type: "user",
|
|
344
|
+
id: record.id,
|
|
345
|
+
properties
|
|
346
|
+
})
|
|
347
|
+
};
|
|
348
|
+
}))).flatMap(({ id, decision }) => decision.outcome === "granted" ? [{
|
|
349
|
+
type: "user",
|
|
350
|
+
id
|
|
351
|
+
}] : []);
|
|
352
|
+
}
|
|
353
|
+
function scopeOf(options) {
|
|
354
|
+
return {
|
|
355
|
+
tenant: options.tenant,
|
|
356
|
+
actor: options.actor,
|
|
357
|
+
delegation: options.delegation
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* The AuthZEN `search/action` answer for `user` on `resource`: every
|
|
362
|
+
* permission of `resource.type` in the policy is decided, and the distinct
|
|
363
|
+
* actions of the granted ones are returned in catalog order. Paging is the
|
|
364
|
+
* caller's (`authzenPage`).
|
|
365
|
+
*/
|
|
366
|
+
async function searchActions(policy, user, resource, options = {}) {
|
|
367
|
+
const { permdock } = await buildInstance({
|
|
368
|
+
policy,
|
|
369
|
+
user,
|
|
370
|
+
sources: options,
|
|
371
|
+
scope: scopeOf(options)
|
|
372
|
+
});
|
|
373
|
+
const trusted = "data" in options;
|
|
374
|
+
const data = trusted ? options.data : resourceData({ resource });
|
|
375
|
+
return grantedActions(permissionsOfType(policy.permissions, resource.type), (leaf) => decideAuthzen(permdock, leaf, data, trusted));
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* The AuthZEN `search/subject` answer: the candidates `lister` returns for
|
|
379
|
+
* `request`, each decided as itself, filtered to those granted `action` on
|
|
380
|
+
* `resource`. An unknown action, a subject type other than `user`, or a
|
|
381
|
+
* lister that throws answers none.
|
|
382
|
+
*/
|
|
383
|
+
async function searchSubjects(policy, lister, request, options = {}) {
|
|
384
|
+
const permission = permissionOf(permissionLookup(policy.permissions), request);
|
|
385
|
+
if (permission === void 0) return [];
|
|
386
|
+
let records;
|
|
387
|
+
try {
|
|
388
|
+
records = await lister.list(compact({
|
|
389
|
+
type: request.subject.type,
|
|
390
|
+
action: request.action,
|
|
391
|
+
resource: request.resource,
|
|
392
|
+
context: request.context
|
|
393
|
+
}));
|
|
394
|
+
} catch {
|
|
395
|
+
return [];
|
|
396
|
+
}
|
|
397
|
+
const data = resourceData(request);
|
|
398
|
+
return grantedSubjects(request.subject.type, records, async (subject) => {
|
|
399
|
+
const { permdock } = await buildInstance({
|
|
400
|
+
policy,
|
|
401
|
+
user: userFromEntity(subject),
|
|
402
|
+
sources: options,
|
|
403
|
+
scope: scopeOf(options)
|
|
404
|
+
});
|
|
405
|
+
return decideAuthzen(permdock, permission, data, false);
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
//#endregion
|
|
409
|
+
//#region src/authzen/create.ts
|
|
410
|
+
function notFound(detail) {
|
|
411
|
+
return problemResponse(statusProblem(404, detail));
|
|
412
|
+
}
|
|
186
413
|
const WELL_KNOWN = "/.well-known/authzen-configuration";
|
|
187
414
|
/** The name an item's action gives, for the reasons of an unknown permission. */
|
|
188
415
|
function actionName(item) {
|
|
@@ -249,73 +476,41 @@ const createPermDock = (policy, options) => {
|
|
|
249
476
|
if (resolved === void 0) return UNAVAILABLE;
|
|
250
477
|
const { data, trusted } = resolved;
|
|
251
478
|
const permdock = await instantiate(pep, item);
|
|
252
|
-
|
|
253
|
-
const decision = decide(permission, data, trusted ? {
|
|
254
|
-
call: "endpoint",
|
|
255
|
-
adapter: "authzen",
|
|
256
|
-
trusted: true
|
|
257
|
-
} : {
|
|
258
|
-
call: "endpoint",
|
|
259
|
-
adapter: "authzen",
|
|
260
|
-
trusted: false,
|
|
261
|
-
boundary: "decision-endpoint"
|
|
262
|
-
});
|
|
263
|
-
return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, resourceIdOf(item)), "authzen");
|
|
479
|
+
return applyApprovalResume(decideAuthzen(permdock, permission, data, trusted), permission, permdock, options.store, request, resourceRef(permission, data, resourceIdOf(item)), "authzen");
|
|
264
480
|
}
|
|
265
481
|
async function rowOf(request, pep, item) {
|
|
266
482
|
return evaluationRow(await decideItem(request, pep, item), permissionOf(lookup, item)?.key ?? actionName(item));
|
|
267
483
|
}
|
|
484
|
+
function read(kind, request) {
|
|
485
|
+
return readAuthzenRequest(kind, request, { maxEvaluations });
|
|
486
|
+
}
|
|
268
487
|
async function evaluation(request, pep) {
|
|
269
|
-
const
|
|
270
|
-
if (
|
|
271
|
-
|
|
272
|
-
const missing = missingProblem(body, EVALUATION);
|
|
273
|
-
if (missing !== void 0) return missing;
|
|
274
|
-
return Response.json(await rowOf(request, pep, body));
|
|
488
|
+
const parsed = await read("evaluation", request);
|
|
489
|
+
if (!parsed.ok) return problemResponse(parsed.problem);
|
|
490
|
+
return Response.json(await rowOf(request, pep, parsed.request.item));
|
|
275
491
|
}
|
|
276
492
|
async function evaluations(request, pep) {
|
|
277
|
-
const
|
|
278
|
-
if (
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
if (semantic === void 0) return unknownSemanticProblem();
|
|
286
|
-
const shared = compact({
|
|
287
|
-
subject: isRecord(body["subject"]) ? body["subject"] : void 0,
|
|
288
|
-
action: isRecord(body["action"]) ? body["action"] : void 0,
|
|
289
|
-
resource: isRecord(body["resource"]) ? body["resource"] : void 0,
|
|
290
|
-
context: body["context"]
|
|
291
|
-
});
|
|
292
|
-
return Response.json({ evaluations: await evaluateBatch(items, semantic, (item) => rowOf(request, pep, mergeEvaluationItem(shared, item))) });
|
|
493
|
+
const parsed = await read("evaluations", request);
|
|
494
|
+
if (!parsed.ok) return problemResponse(parsed.problem);
|
|
495
|
+
const body = parsed.request;
|
|
496
|
+
switch (body.kind) {
|
|
497
|
+
case "evaluation": return Response.json(await rowOf(request, pep, body.item));
|
|
498
|
+
case "evaluations": return Response.json({ evaluations: await evaluateBatch(body.items, body.semantic, (item) => rowOf(request, pep, item)) });
|
|
499
|
+
default: return body;
|
|
500
|
+
}
|
|
293
501
|
}
|
|
294
502
|
async function searchAction(request, pep) {
|
|
295
|
-
const
|
|
296
|
-
if (
|
|
297
|
-
|
|
298
|
-
const
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
|
|
305
|
-
const leaves = listPermissions(policy.permissions).filter((leaf) => type === void 0 || leaf.resource === type);
|
|
306
|
-
const decisions = await Promise.all(leaves.map(async (leaf) => ({
|
|
307
|
-
leaf,
|
|
308
|
-
decision: await decideItem(request, pep, compact({
|
|
309
|
-
subject: item.subject,
|
|
310
|
-
context: item.context,
|
|
311
|
-
resource: item.resource,
|
|
312
|
-
action: { name: leaf.key }
|
|
313
|
-
}))
|
|
503
|
+
const parsed = await read("search/action", request);
|
|
504
|
+
if (!parsed.ok) return problemResponse(parsed.problem);
|
|
505
|
+
const { item, page } = parsed.request;
|
|
506
|
+
const type = typeof item.resource?.type === "string" ? item.resource.type : "";
|
|
507
|
+
const actions = await grantedActions(permissionsOfType(policy.permissions, type), (leaf) => decideItem(request, pep, compact({
|
|
508
|
+
subject: item.subject,
|
|
509
|
+
context: item.context,
|
|
510
|
+
resource: item.resource,
|
|
511
|
+
action: { name: leaf.key }
|
|
314
512
|
})));
|
|
315
|
-
|
|
316
|
-
for (const { leaf, decision } of decisions) if (decision.outcome === "granted" && !names.includes(leaf.action)) names.push(leaf.action);
|
|
317
|
-
const { offset, size } = pageOf(body);
|
|
318
|
-
return Response.json(paged(names.map((name) => ({ name })), offset, size));
|
|
513
|
+
return Response.json(authzenPage(actions, page));
|
|
319
514
|
}
|
|
320
515
|
async function listRows(type, where) {
|
|
321
516
|
const list = options.resources?.[type]?.list;
|
|
@@ -327,19 +522,12 @@ const createPermDock = (policy, options) => {
|
|
|
327
522
|
}
|
|
328
523
|
}
|
|
329
524
|
async function searchResource(request, pep) {
|
|
330
|
-
const
|
|
331
|
-
if (
|
|
332
|
-
|
|
333
|
-
const missingResource = missingProblem(body, {
|
|
334
|
-
subject: "type-id",
|
|
335
|
-
action: true,
|
|
336
|
-
resource: "type"
|
|
337
|
-
});
|
|
338
|
-
if (missingResource !== void 0) return missingResource;
|
|
339
|
-
const item = body;
|
|
525
|
+
const parsed = await read("search/resource", request);
|
|
526
|
+
if (!parsed.ok) return problemResponse(parsed.problem);
|
|
527
|
+
const { item, page } = parsed.request;
|
|
340
528
|
const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
|
|
341
529
|
const permission = permissionOf(lookup, item);
|
|
342
|
-
if (type === void 0 || permission === void 0) return Response.json(
|
|
530
|
+
if (type === void 0 || permission === void 0) return Response.json(emptyAuthzenPage());
|
|
343
531
|
const rows = await listRows(type, isRecord(item.resource?.properties) ? item.resource.properties : void 0);
|
|
344
532
|
const permdock = await instantiate(pep, item);
|
|
345
533
|
let permitted = [];
|
|
@@ -353,51 +541,32 @@ const createPermDock = (policy, options) => {
|
|
|
353
541
|
id: String(id)
|
|
354
542
|
}] : [];
|
|
355
543
|
});
|
|
356
|
-
|
|
357
|
-
return Response.json(paged(entities, offset, size));
|
|
544
|
+
return Response.json(authzenPage(entities, page));
|
|
358
545
|
}
|
|
359
546
|
async function searchSubject(request, pep) {
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
if (!
|
|
364
|
-
const
|
|
365
|
-
subject: "type",
|
|
366
|
-
action: true,
|
|
367
|
-
resource: "type-id"
|
|
368
|
-
});
|
|
369
|
-
if (missingSubject !== void 0) return missingSubject;
|
|
547
|
+
const lister = options.subjects;
|
|
548
|
+
if (lister?.list === void 0) return notFound("search/subject is not configured");
|
|
549
|
+
const parsed = await read("search/subject", request);
|
|
550
|
+
if (!parsed.ok) return problemResponse(parsed.problem);
|
|
551
|
+
const { item, page } = parsed.request;
|
|
370
552
|
let records;
|
|
371
553
|
try {
|
|
372
|
-
records = await
|
|
554
|
+
records = await lister.list(compact({
|
|
555
|
+
type: typeof item.subject?.type === "string" ? item.subject.type : "",
|
|
556
|
+
action: item.action ?? {},
|
|
557
|
+
resource: item.resource ?? {},
|
|
558
|
+
context: item.context
|
|
559
|
+
}));
|
|
373
560
|
} catch {
|
|
374
|
-
return Response.json(
|
|
561
|
+
return Response.json(emptyAuthzenPage());
|
|
375
562
|
}
|
|
376
|
-
const
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
id: record.id,
|
|
384
|
-
decision: await decideItem(request, pep, compact({
|
|
385
|
-
action: item.action,
|
|
386
|
-
resource: item.resource,
|
|
387
|
-
context: item.context,
|
|
388
|
-
subject: {
|
|
389
|
-
type: "user",
|
|
390
|
-
id: record.id,
|
|
391
|
-
properties
|
|
392
|
-
}
|
|
393
|
-
}))
|
|
394
|
-
};
|
|
395
|
-
}))).flatMap(({ id, decision }) => decision.outcome === "granted" ? [{
|
|
396
|
-
type: "user",
|
|
397
|
-
id
|
|
398
|
-
}] : []);
|
|
399
|
-
const { offset, size } = pageOf(body);
|
|
400
|
-
return Response.json(paged(matches, offset, size));
|
|
563
|
+
const matches = await grantedSubjects(item.subject?.type, records, (subject) => decideItem(request, pep, compact({
|
|
564
|
+
action: item.action,
|
|
565
|
+
resource: item.resource,
|
|
566
|
+
context: item.context,
|
|
567
|
+
subject
|
|
568
|
+
})));
|
|
569
|
+
return Response.json(authzenPage(matches, page));
|
|
401
570
|
}
|
|
402
571
|
function discovery(request, pathname) {
|
|
403
572
|
const pdp = `${new URL(request.url).origin}${pathname.slice(pathname.indexOf(WELL_KNOWN) + 34).replace(/\/+$/u, "")}`;
|
|
@@ -452,4 +621,4 @@ const createPermDock = (policy, options) => {
|
|
|
452
621
|
return { permdockHandler: () => handler };
|
|
453
622
|
};
|
|
454
623
|
//#endregion
|
|
455
|
-
export { EVALUATIONS_SEMANTICS, createPermDock, evaluateBatch, evaluationsSemantic, mergeEvaluationItem };
|
|
624
|
+
export { AUTHZEN_MAX_PAGE, EVALUATIONS_SEMANTICS, authzenPage, createPermDock, emptyAuthzenPage, evaluateBatch, evaluationsSemantic, mergeEvaluationItem, parseAuthzenRequest, readAuthzenPage, readAuthzenRequest, searchActions, searchSubjects };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Lt as InstanceHandle,
|
|
2
|
-
import {
|
|
3
|
-
import { t as Operation } from "./operations-
|
|
1
|
+
import { Lt as InstanceHandle, Rn as Denial, Rt as Instant } from "./policy-types-B-F-qAZk.js";
|
|
2
|
+
import { u as Permission } from "./permission-types-DhNEmoRG.js";
|
|
3
|
+
import { t as Operation } from "./operations-BNLes61x.js";
|
|
4
4
|
//#region src/core/automation.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* Who an automation runs as. `publisher`: the person who published it, with
|
|
@@ -3,7 +3,7 @@ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
|
3
3
|
import { a as ownRecord } from "./paths-DXSHAMIa.js";
|
|
4
4
|
import { a as isId, r as idList } from "./expiry-D4_YKRKD.js";
|
|
5
5
|
import { n as internalsOf } from "./internals-Dk8A8fX3.js";
|
|
6
|
-
import { n as findPermission } from "./permission-registry-
|
|
6
|
+
import { n as findPermission } from "./permission-registry-DpPtSKNZ.js";
|
|
7
7
|
import { l as isRfc3339, m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
8
8
|
//#region src/core/automation.ts
|
|
9
9
|
const MAX_NAME = 256;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/cloud/base-url.ts
|
|
2
|
+
/**
|
|
3
|
+
* The one base URL of PermDock Cloud. The platform issuer is this URL; its
|
|
4
|
+
* OAuth routes, `/.well-known/oauth-authorization-server` and `/openapi.json`
|
|
5
|
+
* sit at the root, unversioned, and the data routes under `/v1`.
|
|
6
|
+
*/
|
|
7
|
+
const CLOUD_BASE_URL = "https://permdock.com/api";
|
|
8
|
+
//#endregion
|
|
9
|
+
export { CLOUD_BASE_URL as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { N as RoleBinding, W as CustomRoleSource,
|
|
2
|
-
import {
|
|
1
|
+
import { N as RoleBinding, W as CustomRoleSource, lr as Subject, q as DecisionSink, sr as Principal } from "../policy-types-B-F-qAZk.js";
|
|
2
|
+
import { f as PermissionTree } from "../permission-types-DhNEmoRG.js";
|
|
3
3
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
4
|
//#region src/better-auth/types.d.ts
|
|
5
5
|
type BetterAuthPrincipal = Principal & {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as isReadonlyArray, r as isRecord, t as compact } from "../compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
|
|
3
|
-
import { n as role, r as allow } from "../role-builder-
|
|
4
|
-
import { c as listPermissions } from "../permission-registry-
|
|
3
|
+
import { n as role, r as allow } from "../role-builder-C1VJzvcr.js";
|
|
4
|
+
import { c as listPermissions } from "../permission-registry-DpPtSKNZ.js";
|
|
5
5
|
import { r as validateRecord } from "../thenable-yD7SabqG.js";
|
|
6
6
|
import { t as anonymousSubject } from "../subject-BGoM5o8B.js";
|
|
7
7
|
import { d as membershipEvent } from "../sink-BEZSlMS_.js";
|