permdock 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/dist/a2a/index.d.ts +7 -7
- package/dist/a2a/index.js +8 -8
- package/dist/action-result-BcudBQOF.d.ts +19 -0
- package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
- package/dist/{adoption-scan-D-feE7BE.js → adoption-scan-Ch07MdxN.js} +5 -5
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +19 -13
- package/dist/ai-sdk/index.js +6 -6
- package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
- package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
- package/dist/{approval-prompt-K0faOLFp.d.ts → approval-prompt-3BqWczTt.d.ts} +13 -11
- package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
- package/dist/approvals/index.d.ts +4 -4
- package/dist/approvals/index.js +6 -6
- package/dist/{approvals-CMRfsbBh.js → approvals-DnIBTuXE.js} +66 -42
- package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
- package/dist/{arazzo-ClrF3PVb.js → arazzo-BpS7LnV0.js} +2 -2
- package/dist/{arazzo-rdeJ8n1J.js → arazzo-CmQaGPkM.js} +6 -6
- package/dist/{args-CC3OwyHW.js → args-0FrVs5EH.js} +14 -7
- package/dist/astro/index.d.ts +30 -12
- package/dist/astro/index.js +2 -2
- package/dist/{audience-BrMs8c4o.js → audience-DTjR8xet.js} +8 -8
- package/dist/{auth-CscUX8Sy.js → auth--yPyZNgr.js} +19 -7
- package/dist/authzen/index.d.ts +34 -28
- package/dist/authzen/index.js +23 -20
- package/dist/{automation-DOtAFWdy.d.ts → automation-C6Jg75xq.d.ts} +42 -32
- package/dist/{automation-ySsxp_Yp.js → automation-x3KEUusw.js} +22 -21
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +13 -7
- package/dist/better-supabase/index.d.ts +357 -227
- package/dist/better-supabase/index.js +219 -140
- package/dist/{bind-D1nO6fiC.js → bind-BNQA9JK9.js} +26 -10
- package/dist/{bind-JDuvxjuW.d.ts → bind-YYjvfpB9.d.ts} +32 -12
- package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
- package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
- package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
- package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
- package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
- package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
- package/dist/{build-instance-DxE7czo9.js → build-instance-BWXqwQYU.js} +3 -3
- package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-D4UC9TTW.d.ts → capability-Di9tiUvi.d.ts} +41 -29
- package/dist/{casbin-BHijLuHY.js → casbin-B7_yS-oo.js} +2 -2
- package/dist/{casbin-BW9pS47J.js → casbin-bHyIxTNQ.js} +16 -8
- package/dist/{casl-CmJlgziS.js → casl-C4OINZHI.js} +2 -2
- package/dist/{casl-UbI8v-Wq.js → casl-CHHoCldP.js} +19 -10
- package/dist/catalog/index.d.ts +51 -30
- package/dist/catalog/index.js +18 -15
- package/dist/{catalog-D69WhFii.js → catalog-CGlSwU6j.js} +20 -19
- package/dist/catalog-D3oS2GH3.js +1 -0
- package/dist/{catalog-BaMQfQ6Y.js → catalog-amPDr0JQ.js} +3 -3
- package/dist/{catalog-doc-CV9s6B1S.js → catalog-doc-DjMKzJp9.js} +28 -14
- package/dist/{catalog-fingerprint-C144oW4M.js → catalog-fingerprint-e6aCWosn.js} +18 -14
- package/dist/catalog-operations-DeHTrJSV.js +60 -0
- package/dist/{challenge-nGWma08S.js → challenge-DImNcR7B.js} +48 -27
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +13 -10
- package/dist/chat-sdk/index.d.ts +44 -26
- package/dist/chat-sdk/index.js +17 -17
- package/dist/{checks-BC_0mPIq.js → checks-CGkP3Z7A.js} +4 -1
- package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
- package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
- package/dist/claude-agent/index.d.ts +6 -6
- package/dist/claude-agent/index.js +6 -3
- package/dist/clerk/index.d.ts +11 -7
- package/dist/clerk/index.js +6 -6
- package/dist/cli/bin.js +4 -4
- package/dist/cli/index.d.ts +82 -7
- package/dist/cli/index.js +6 -6
- package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
- package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
- package/dist/cloud/index.d.ts +84 -52
- package/dist/cloud/index.js +53 -39
- package/dist/{cloud-CO8pYtwr.js → cloud-3kWfjnYy.js} +4 -5
- package/dist/{codemod-BP6n8N9L.js → codemod-Bv5i-Mzo.js} +523 -201
- package/dist/{codemod-i4N2BhDc.js → codemod-D9Aiii1r.js} +3 -4
- package/dist/{collect-DNm3oKOk.js → collect-B80GYEot.js} +4 -5
- package/dist/collect-D-eroIfV.js +1 -0
- package/dist/{collect-BaWeMjwV.js → collect-WCl8cJQV.js} +26 -63
- package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
- package/dist/compile/index.d.ts +2 -2
- package/dist/compile/index.js +1 -1
- package/dist/{compile-COM2VKuN.d.ts → compile-BEklRUYo.d.ts} +36 -12
- package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BNdVf7X2.js → completion-_bc0OUQ-.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-DGZzMV1B.js → config-D5XrLWpk.js} +2 -2
- package/dist/{config-report-Cm7UITNA.js → config-report-BmWIskD7.js} +9 -6
- package/dist/config-shape-ykV0Vm2n.js +134 -0
- package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
- package/dist/{connector-schema-_VCSsdtD.js → connector-schema-CYLQNMYq.js} +3 -2
- package/dist/{context--uM9V3Ui.js → context-BnIzxTNE.js} +4 -3
- package/dist/convex/index.d.ts +13 -7
- package/dist/convex/index.js +9 -6
- package/dist/{core-CQkE8Esr.d.ts → core-CFepFiDP.d.ts} +49 -22
- package/dist/{core-B5-w6Kw9.js → core-DzVINFbU.js} +26 -20
- package/dist/{create-Cb86Z8Im.js → create-6EwRQlig.js} +10 -7
- package/dist/{create-DJrlhEp9.js → create-BLPKnJKa.js} +35 -25
- package/dist/{create-UTnUVETj.d.ts → create-BPUopdfL.d.ts} +70 -37
- package/dist/{create-QHuuPw3q.d.ts → create-BamXmeob.d.ts} +37 -29
- package/dist/{create-B2-CQqCI.d.ts → create-DBvUsgzK.d.ts} +49 -28
- package/dist/{credential-CIM7wHwA.js → credential-CyyyvCsL.js} +41 -38
- package/dist/{credentials-BpuTwd7a.js → credentials-CdDxp7jN.js} +6 -6
- package/dist/{deciding-columns-DRo2QM6E.js → deciding-columns-NB4wcyBf.js} +2 -2
- package/dist/{delegation-C5rOdTp5.js → delegation-CDB6_keF.js} +31 -22
- package/dist/delivery/index.d.ts +4 -4
- package/dist/delivery/index.js +5 -5
- package/dist/{delivery-rwOKLWRm.js → delivery-BupfvJIV.js} +34 -22
- package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
- package/dist/denied-text-DHldhVUv.d.ts +22 -0
- package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
- package/dist/{describe-O0SwYIK8.d.ts → describe-BbFPBSms.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-Btr1c1Ow.js → diff-BwR1JdP2.js} +2 -2
- package/dist/{diff-DzT-xD13.js → diff-CQegtBAo.js} +22 -13
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BU1szn63.js → doctor-ClRVAtXQ.js} +287 -135
- package/dist/{doctor-BoK_y0KO.js → doctor-LPMYjSqO.js} +4 -4
- package/dist/drizzle/index.d.ts +33 -19
- package/dist/drizzle/index.js +17 -9
- package/dist/elysia/index.d.ts +17 -11
- package/dist/elysia/index.js +5 -5
- package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
- package/dist/{errors-B_Qg9D3e.d.ts → errors-BIM4MFsJ.d.ts} +22 -6
- package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
- package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
- package/dist/{evaluate-B_oqFbWC.js → evaluate-BAmf_AQd.js} +153 -82
- package/dist/{evaluations-BCddEOfO.d.ts → evaluations-DOWuBpWv.d.ts} +11 -5
- package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
- package/dist/eve/index.d.ts +9 -6
- package/dist/eve/index.js +4 -4
- package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
- package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
- package/dist/express/index.d.ts +9 -6
- package/dist/express/index.js +9 -6
- package/dist/fastify/index.d.ts +16 -10
- package/dist/fastify/index.js +8 -5
- package/dist/{fetch-adapter-CuhyYwC1.d.ts → fetch-adapter-BIbBAtPZ.d.ts} +9 -6
- package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-dPTgJVHd.js} +14 -11
- package/dist/fields-D0vUI6dq.js +498 -0
- package/dist/{files-acUbNwWt.js → files-B3AA05f1.js} +8 -5
- package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
- package/dist/{fixtures-BTMW6zgU.js → fixtures-A1_sp_tR.js} +15 -6
- package/dist/{flags-aaeRAdiD.js → flags-DXjoTVbS.js} +2 -2
- package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
- package/dist/{from-snapshot-Bz469dIh.js → from-snapshot-DCakWRsr.js} +18 -15
- package/dist/gen-BFfzZSLH.js +58 -0
- package/dist/gen-BtfFWGbz.js +827 -0
- package/dist/{generate-3FNO5P5Q.js → generate-CRVV5V7l.js} +14 -8
- package/dist/generate-CezbCaTI.js +275 -0
- package/dist/{grantee-BrRANrpT.js → grantee-Dke-9rd1.js} +4 -4
- package/dist/{grantee-conditions-C6P1Tvol.js → grantee-conditions-BrYPe-w0.js} +12 -12
- package/dist/{grantee-match-0RtHWQDx.js → grantee-match-7RZZvoT_.js} +12 -6
- package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
- package/dist/h3/index.d.ts +10 -7
- package/dist/h3/index.js +3 -3
- package/dist/headers-B9jQxjtW.d.ts +10 -0
- package/dist/{helpers-DY3vXuGs.js → helpers-DJicaG6f.js} +40 -28
- package/dist/hono/index.d.ts +16 -10
- package/dist/hono/index.js +5 -5
- package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -21
- package/dist/{hosted-BmjzxQhp.d.ts → hosted-DVxlLZMe.d.ts} +33 -21
- package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
- package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
- package/dist/{http-Ca3Sr5x1.js → http-DOL33cO0.js} +11 -8
- package/dist/{import-DB2EG_iy.js → import-ACkOrv6g.js} +6 -6
- package/dist/{import-Bz0GefWg.js → import-CST57XLp.js} +64 -51
- package/dist/{index-CMiPH2Tv.d.ts → index-BinlXeU-.d.ts} +64 -37
- package/dist/{index-BSfRl0hZ.d.ts → index-CV-7DWeD.d.ts} +64 -52
- package/dist/{index-BE8y3moU.d.ts → index-DJwEgYzA.d.ts} +127 -82
- package/dist/{index-DH9DUDEM.d.ts → index-Dj2qF9VC.d.ts} +54 -30
- package/dist/{index-BTkwrK7v.d.ts → index-vYjMrXyK.d.ts} +336 -173
- package/dist/{index-DLwcuCN_.d.ts → index-ymept53A.d.ts} +51 -30
- package/dist/index.d.ts +22 -22
- package/dist/index.js +34 -34
- package/dist/{init-B-4t1NzC.js → init-BjuFDYT1.js} +10 -10
- package/dist/{init-5TXNji88.js → init-txYTuW9u.js} +5 -5
- package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-CoHn-0e8.d.ts} +4 -4
- package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot-DuWf1cT3.js} +86 -61
- package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
- package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
- package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
- package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
- package/dist/jwt/index.d.ts +57 -27
- package/dist/jwt/index.js +24 -21
- package/dist/{kernel-DVExUwkp.js → kernel-qv4cr9w8.js} +32 -23
- package/dist/kysely/index.d.ts +49 -33
- package/dist/kysely/index.js +9 -7
- package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
- package/dist/{load-DxroEzH1.js → load-DjSU5KXO.js} +6 -6
- package/dist/load-Dm0pSYH3.js +1 -0
- package/dist/{login-ClSJh5t5.js → login-CfImTJGb.js} +4 -4
- package/dist/{login-WC9HPJpU.js → login-CgfCTO3F.js} +16 -9
- package/dist/{manifest-Dv6q4i5s.js → manifest-B2QPh19C.js} +49 -38
- package/dist/{manifest-BVhExYhw.d.ts → manifest-CzzWtnAb.d.ts} +126 -31
- package/dist/{manifest-schema-Cv492Qev.js → manifest-schema-2r37XRhD.js} +44 -3
- package/dist/{manifest-B79YuF2T.js → manifest-wg8WkkpD.js} +6 -6
- package/dist/{map-claims-etGIS_Dv.js → map-claims-C-nv08_n.js} +16 -9
- package/dist/{map-error-BQGyDm_M.js → map-error-pasIGqMT.js} +7 -7
- package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
- package/dist/mcp/index.d.ts +114 -61
- package/dist/mcp/index.js +70 -40
- package/dist/{migrate-Dodel0IJ.js → migrate-B7oP_sQU.js} +35 -17
- package/dist/module-values-BJTBdo6y.js +107 -0
- package/dist/nest/index.d.ts +23 -13
- package/dist/nest/index.js +18 -11
- package/dist/next/client.d.ts +5 -2
- package/dist/next/client.js +1 -1
- package/dist/next/index.d.ts +79 -26
- package/dist/next/index.js +121 -10
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +4 -3
- package/dist/node/index.d.ts +5 -5
- package/dist/node/index.js +3 -3
- package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
- package/dist/openai/index.d.ts +13 -7
- package/dist/openai/index.js +3 -3
- package/dist/openapi/index.d.ts +51 -30
- package/dist/openapi/index.js +2 -2
- package/dist/{openapi-ztVaux6j.js → openapi-BGeuunWC.js} +23 -14
- package/dist/{openapi-DMocl1bh.js → openapi-BIpw3Mb7.js} +4 -5
- package/dist/{openapi-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
- package/dist/{operation-findings-kRcEp8lE.js → operation-findings-CXtFzlKJ.js} +3 -3
- package/dist/{operations-BNLes61x.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
- package/dist/orpc/index.d.ts +68 -14
- package/dist/orpc/index.js +62 -13
- package/dist/otel/index.d.ts +7 -4
- package/dist/otel/index.js +8 -5
- package/dist/{output-DgSDLrta.js → output-DV5dwOTs.js} +9 -5
- package/dist/output-files-BHOIlrfD.js +1 -0
- package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/ownership-DA5YdYTm.js +1059 -0
- package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
- package/dist/parse-local-manifest-CCmbhnxP.d.ts +10 -0
- package/dist/{parse-local-manifest-T1Q8X3A2.js → parse-local-manifest-DEiCF4ah.js} +19 -7
- package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
- package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
- package/dist/pdp/index.d.ts +9 -6
- package/dist/pdp/index.js +20 -13
- package/dist/{peer-DOzzMfZL.js → peer-C9LvBCcb.js} +1 -1
- package/dist/{peer-12Q5I_RH.js → peer-Q0fuZ6hx.js} +9 -3
- package/dist/{permdock-BfWEeMqk.js → permdock-BvjivVb9.js} +200 -140
- package/dist/{permdock-Dco6dyCK.d.ts → permdock-CprAPN3w.d.ts} +260 -129
- package/dist/{permission-registry-DpPtSKNZ.js → permission-registry-B8tYxPIt.js} +23 -10
- package/dist/{permission-types-DhNEmoRG.d.ts → permission-types-CAY-GU7e.d.ts} +127 -41
- package/dist/{permissions-CoqCOfJ3.d.ts → permissions-Bx6UI8n1.d.ts} +6 -3
- package/dist/{permissions-CyH2MV_B.js → permissions-CVXmRILq.js} +3 -3
- package/dist/{permissions-DArULThq.js → permissions-CYcHj_w7.js} +8 -5
- package/dist/pg-DQTqRrou.js +60 -0
- package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
- package/dist/{pkce-5h8NgMQJ.js → pkce-CnmmYqUZ.js} +1 -1
- package/dist/{policy-B7dg_yzu.d.ts → policy-BycVKnXv.d.ts} +5 -5
- package/dist/{policy-DaJy4nK4.js → policy-CLQ8__GF.js} +43 -23
- package/dist/{policy-from-catalog-DFWYkNdu.js → policy-from-catalog-CU3An8uP.js} +28 -25
- package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
- package/dist/{policy-types-B-F-qAZk.d.ts → policy-types-DGIO_gxq.d.ts} +782 -357
- package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
- package/dist/{postgrest-r5faDIzD.js → postgrest-5Dr3W64L.js} +84 -86
- package/dist/{postgrest-CYacM_u7.d.ts → postgrest-D5nUGm-c.d.ts} +55 -35
- package/dist/powersync-B701tvhE.js +1 -0
- package/dist/{powersync-13odBwiM.js → powersync-Bg8u-JcR.js} +3 -3
- package/dist/{powersync-53ryOZip.js → powersync-CJrT1DSc.js} +127 -69
- package/dist/preset/index.d.ts +38 -28
- package/dist/preset/index.js +1 -1
- package/dist/{preset-CHTbd-DQ.js → preset-BjLzeFpp.js} +56 -32
- package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
- package/dist/prisma/index.d.ts +69 -41
- package/dist/prisma/index.js +21 -17
- package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
- package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
- package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
- package/dist/{prompt-DwtVemER.js → prompt-BYc6drYW.js} +4 -1
- package/dist/protected-action-D8x73IGm.d.ts +58 -0
- package/dist/protected-action-DUYqb-Ma.js +80 -0
- package/dist/{protected-DXE3cQYg.js → protected-action-QEA8arRB.js} +48 -14
- package/dist/{provider-BQsTYYy0.js → provider-C55OGXJ7.js} +5 -4
- package/dist/{provider-Csk-THAn.d.ts → provider-DfLeek9O.d.ts} +1 -1
- package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/{pull-CN5OLxrF.js → pull-2nJr0qg_.js} +12 -11
- package/dist/pull-C3EEGzSw.js +1 -0
- package/dist/{push-tVdG8dUL.js → push-Bn-lMEmI.js} +19 -13
- package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-CDuOL2de.js} +10 -7
- package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-CryQheKq.d.ts} +12 -6
- package/dist/react/index.d.ts +9 -8
- package/dist/react/index.js +7 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +94 -55
- package/dist/react-native/index.js +200 -61
- package/dist/{refs-CNJBiTFo.js → refs-C8BKxc_e.js} +2 -2
- package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
- package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
- package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
- package/dist/{replay-DCDD_ZfL.d.ts → replay-Bs9Df2fQ.d.ts} +1 -1
- package/dist/{request-context-BykKLmyE.js → request-context-Duzdf0cd.js} +8 -8
- package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
- package/dist/resend/index.d.ts +34 -28
- package/dist/resend/index.js +29 -29
- package/dist/resolve-names-ConCSj1y.js +201 -0
- package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
- package/dist/{retire-Wj6dkyDE.js → retire-B2xffQgY.js} +15 -6
- package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
- package/dist/{rls-Ck_PocSp.js → rls-Ba9wN0SP.js} +13 -6
- package/dist/{rls-CxBZb4rZ.js → rls-Cx0dtsB7.js} +310 -128
- package/dist/{role-builder-C1VJzvcr.js → role-builder-BK2-T6oD.js} +41 -20
- package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
- package/dist/{rpc-Bk1bE-ch.js → rpc-vHIwyXCp.js} +8 -5
- package/dist/run-Ck22anC2.js +1 -0
- package/dist/{run-uLD2aWuO.js → run-PbRlXTfh.js} +26 -23
- package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-B2o2Kxz8.d.ts} +29 -14
- package/dist/{run-ticket-B5d_63Ma.js → run-ticket-Dv7aF7Dk.js} +9 -9
- package/dist/{runtime-Vif3_-zf.js → runtime-BGnrOkVH.js} +5 -2
- package/dist/{saas-Az_Kz-4D.js → saas-DK4V-3Is.js} +42 -29
- package/dist/{scan-DSljDE1Y.js → scan-CRTj6fke.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-gIcCx7zM.js → schema-BTsE1WRT.js} +8 -4
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +2 -2
- package/dist/{scim-C7JYhySg.js → scim-D8YupzX1.js} +2 -2
- package/dist/{scim-YNieBO1U.js → scim-jJBJ7g1Z.js} +33 -15
- package/dist/{scopes-BHsc-wp-.js → scopes-0Up_UA2t.js} +41 -23
- package/dist/server/index.d.ts +11 -11
- package/dist/server/index.js +12 -12
- package/dist/{server-Bnga6I50.js → server-3cVlTLde.js} +31 -31
- package/dist/{server-types-C4gZUEZy.d.ts → server-types-CyRN0-Cd.d.ts} +88 -46
- package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
- package/dist/{shared-fMKOv8hP.js → shared-Afctg7B0.js} +65 -32
- package/dist/{shared-C8LjUdVU.js → shared-l0oGGetg.js} +9 -6
- package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
- package/dist/{sink-Cp_Eot9W.d.ts → sink-B5zoUW_O.d.ts} +44 -20
- package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
- package/dist/{skills-g_3BS9NC.js → skills-C9uKfSF5.js} +3 -3
- package/dist/{skills-Dcjw9_1C.js → skills-CQQcuGBi.js} +12 -8
- package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BjAWkchD.d.ts} +21 -12
- package/dist/{snapshot-cache-DT2Kx1F8.js → snapshot-cache-Bx_4xC_6.js} +14 -11
- package/dist/solid/index.d.ts +55 -16
- package/dist/solid/index.js +46 -12
- package/dist/solid-start/index.d.ts +30 -12
- package/dist/solid-start/index.js +3 -3
- package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
- package/dist/{sources-DEEuGb8S.d.ts → sources-CWG32C0G.d.ts} +126 -53
- package/dist/{sql-B96movIM.js → sql-0WjxIp9g.js} +28 -7
- package/dist/{sql-CDEPCA0g.d.ts → sql-B80DFdpG.d.ts} +2 -2
- package/dist/{src-DLFrtrrC.js → src-C_pi2Rnh.js} +292 -101
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +47 -35
- package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
- package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-DOYEuOLx.d.ts} +7 -7
- package/dist/{store-DSP9oGvh.js → store-RNFvaJJv.js} +32 -26
- package/dist/{store-options-B_poyYvg.js → store-options-Dil3lraY.js} +105 -15
- package/dist/stores-DZJvxFIZ.d.ts +59 -0
- package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-2Vwhl7Er.d.ts → stream-9y9qw51m.d.ts} +4 -3
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{style-Ds1gNm77.js → style-DblOtSga.js} +1 -1
- package/dist/{style-Cqo7-73x.js → style-Ds11Hmk4.js} +2 -1
- package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
- package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
- package/dist/supabase/index.d.ts +48 -38
- package/dist/supabase/index.js +5 -5
- package/dist/supabase/middleware.d.ts +19 -13
- package/dist/supabase/middleware.js +7 -7
- package/dist/{supabase--0aJdLEd.js → supabase-DnMMg5Fn.js} +79 -35
- package/dist/{supabase-Bqp7iIY2.js → supabase-SBs3MYUE.js} +3 -3
- package/dist/supabase-hook-C0FyEACZ.js +1 -0
- package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-CrgU06WH.js} +175 -196
- package/dist/{supautils-MESd81bF.js → supautils-ByezN3b8.js} +385 -219
- package/dist/{support-session-Cna49-3f.js → support-session-BsmPCbz8.js} +21 -21
- package/dist/svelte/PermissionBoundary.svelte +2 -6
- package/dist/svelte/Protected.svelte +2 -8
- package/dist/svelte/index.d.ts +9 -8
- package/dist/svelte/index.js +10 -9
- package/dist/svelte/runtime.d.ts +4 -4
- package/dist/svelte/runtime.js +4 -4
- package/dist/svelte/source.d.ts +9 -8
- package/dist/svelte/source.js +6 -5
- package/dist/sveltekit/index.d.ts +30 -12
- package/dist/sveltekit/index.js +2 -2
- package/dist/{ownership-Z2LpxsGa.js → tables-BqrxBCir.js} +641 -1104
- package/dist/tanstack-start/index.d.ts +22 -10
- package/dist/tanstack-start/index.js +2 -2
- package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
- package/dist/{tenancy-CmeBQ6Nv.js → tenancy-5d1zVBvK.js} +25 -19
- package/dist/terminal/index.d.ts +23 -14
- package/dist/terminal/index.js +17 -20
- package/dist/testing/core.d.ts +1 -1
- package/dist/testing/core.js +1 -1
- package/dist/testing/fixtures/index.d.ts +8 -5
- package/dist/testing/fixtures/index.js +78 -17
- package/dist/testing/index.d.ts +225 -141
- package/dist/testing/index.js +352 -234
- package/dist/testing/saas/index.d.ts +43 -27
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -1
- package/dist/{text-diff-DhITNCnD.js → text-diff-BtfSmdUo.js} +2 -2
- package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
- package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
- package/dist/{token-2qYDvXz2.js → token-DC9EQiet.js} +14 -12
- package/dist/{tool-refusal-reAhIzdl.js → tool-refusal-Qpjs_W6M.js} +5 -2
- package/dist/trpc/index.d.ts +11 -8
- package/dist/trpc/index.js +15 -9
- package/dist/type-helpers-c7Xo_2Cu.d.ts +50 -0
- package/dist/{types-CfiKC5aN.d.ts → types-B2efzoSX.d.ts} +14 -11
- package/dist/{types-CIeZcG8v.d.ts → types-B6ExllNo.d.ts} +2 -2
- package/dist/{types-DBHftjgS.d.ts → types-BB-zWDcR.d.ts} +45 -33
- package/dist/{types-BfVmNJO5.d.ts → types-BMVDHvI0.d.ts} +128 -50
- package/dist/{types-DXmwu78Z.d.ts → types-CEinc15V.d.ts} +31 -14
- package/dist/{types-g7Oy6Zg4.d.ts → types-CN0LsqbK.d.ts} +47 -24
- package/dist/{types-CeIscIKp.d.ts → types-CWBsAwqn.d.ts} +23 -12
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-BWZybqs9.d.ts → types-CzOeVvcC.d.ts} +384 -203
- package/dist/{types-DC44-hqb.d.ts → types-DLvhVm1r.d.ts} +59 -32
- package/dist/{types-D3A19w4A.d.ts → types-DlelvQk4.d.ts} +22 -13
- package/dist/{types-cTos-H7p.d.ts → types-DsHGPtkR.d.ts} +68 -32
- package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-CQVEQawv.d.ts → types-rCRV4Ge-.d.ts} +24 -14
- package/dist/types-tQB2CEnY.d.ts +262 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-0hjZPIRX.js +1 -0
- package/dist/{usage-Bybmck7f.js → usage-B9EtHWLa.js} +50 -26
- package/dist/{usage-CDaLXCfL.js → usage-CBzgwfIs.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-CQpoquwj.d.ts → validation-error-uvp-kyfO.d.ts} +5 -2
- package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
- package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
- package/dist/{verify-pe8rL_Qw.js → verify-DlUcTDBz.js} +148 -487
- package/dist/version-DMQ0dnN5.js +48 -0
- package/dist/version-DizhmD72.js +1 -0
- package/dist/{views-BB8E9dTP.js → views-CD8wuL4Z.js} +19 -6
- package/dist/{vocabulary-Bg3eeT2H.d.ts → vocabulary-DEJ5j4mR.d.ts} +7 -4
- package/dist/vue/index.d.ts +71 -22
- package/dist/vue/index.js +50 -13
- package/dist/{waiter-DwEyouan.d.ts → waiter-CqUKX6CY.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-C-4VmFlL.js → watch-BFDKqmUa.js} +8 -8
- package/dist/watch-ClLuO2TL.js +1 -0
- package/dist/webmcp/index.d.ts +11 -11
- package/dist/webmcp/index.js +8 -5
- package/dist/{where-scope-wq2coopv.js → where-scope-DlCdCM_8.js} +24 -18
- package/dist/{who-can-BwNsI_Js.js → who-can-BoDJm0Nc.js} +23 -20
- package/dist/workflow/index.d.ts +3 -3
- package/dist/workflow/index.js +13 -13
- package/dist/workflow-sdk/index.d.ts +19 -13
- package/dist/workflow-sdk/index.js +6 -6
- package/dist/{wrap-CiSc_KCq.js → wrap-B2wziJI_.js} +4 -4
- package/dist/{wrap-B6R0cMRL.d.ts → wrap-DxXB54Wu.d.ts} +8 -5
- package/package.json +8 -8
- package/schemas/catalog-v1.json +3 -0
- package/schemas/supabase-manifest-v1.json +33 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
- package/skills/permdock-data/references/queries-and-rls.md +2 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -2
- package/skills/permdock-wire/references/adapters.md +16 -23
- package/dist/catalog-BCCjSAdH.js +0 -1
- package/dist/collect-k_Dulxr5.js +0 -1
- package/dist/config-CoQHDrDi.js +0 -166
- package/dist/denied-text-D4qkEtFz.d.ts +0 -19
- package/dist/fields-ClcQLrVc.js +0 -238
- package/dist/generate-CNU1pIOo.js +0 -171
- package/dist/headers-BIjfMaoC.js +0 -8
- package/dist/headers-CIbDTUTK.d.ts +0 -7
- package/dist/load-DrMHXzgN.js +0 -1
- package/dist/output-files-DPAY7-GX.js +0 -1
- package/dist/package-root-Dk_ETdkp.js +0 -31
- package/dist/parse-local-manifest-e4mdwAKd.d.ts +0 -10
- package/dist/policies-B2lZIurj.js +0 -295
- package/dist/powersync-CExtTLyA.js +0 -1
- package/dist/problem-details-Tcfmj3bV.d.ts +0 -7
- package/dist/protected-BwZYL1X_.d.ts +0 -39
- package/dist/pull-Cty6Ovyu.js +0 -1
- package/dist/run-Bz7DXGEv.js +0 -1
- package/dist/stores-BAZwSYZA.d.ts +0 -31
- package/dist/supabase-hook-DJxC4PoP.js +0 -1
- package/dist/types-CKV71kKh.d.ts +0 -172
- package/dist/usage-y-kBNdqs.js +0 -1
- package/dist/version-CEbQ5UeM.js +0 -18
- package/dist/version-DXkYUISx.js +0 -1
- package/dist/watch-Bd9mx3rd.js +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { f as PermissionTree, u as Permission } from "../permission-types-
|
|
3
|
-
import { a as PermDock, h as
|
|
4
|
-
import { c as AccessReviewStore } from "../types-
|
|
5
|
-
import { i as SupabaseRpcCaller } from "../postgrest-
|
|
6
|
-
import { a as CatalogDocument } from "../types-
|
|
7
|
-
import {
|
|
8
|
-
import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-
|
|
1
|
+
import { Cn as ApproverInput, Ot as ApiKeyPrincipal, St as SupportSession, T as Policy, U as CredentialVerifier, Wt as Instant, hr as Subject, pr as Principal, rn as AuthEvent } from "../policy-types-DGIO_gxq.js";
|
|
2
|
+
import { f as PermissionTree, u as Permission } from "../permission-types-CAY-GU7e.js";
|
|
3
|
+
import { _ as PrincipalSource, a as PermDock, h as PrincipalIdentity, o as PermDockOptions } from "../permdock-CprAPN3w.js";
|
|
4
|
+
import { c as AccessReviewStore } from "../types-B2efzoSX.js";
|
|
5
|
+
import { i as SupabaseRpcCaller } from "../postgrest-D5nUGm-c.js";
|
|
6
|
+
import { a as CatalogDocument } from "../types-ZzRGoViD.js";
|
|
7
|
+
import { d as SupabasePrincipal, g as SupabaseSessionLike, v as SupabaseSubjectOptions } from "../types-BMVDHvI0.js";
|
|
8
|
+
import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-Di9tiUvi.js";
|
|
9
9
|
import { AuthorizationProvider } from "better-supabase/config";
|
|
10
10
|
import { AuthSession, AuthorizationHooks, Authorizer, SupportAuthorize, SupportAuthorizeInput } from "better-supabase/server";
|
|
11
11
|
import { EntitlementClaimOptions } from "better-supabase/blocks/entitlements";
|
|
@@ -18,32 +18,38 @@ import { AuthorizeHookOptions, ProtectWebHandlerOptions } from "better-supabase/
|
|
|
18
18
|
//#region src/better-supabase/access-reviews.d.ts
|
|
19
19
|
type AccessReviewApplierOptions = {
|
|
20
20
|
/**
|
|
21
|
-
* A supabase-js client that may call the organizations and invitations
|
|
22
|
-
*
|
|
23
|
-
*
|
|
21
|
+
* A supabase-js client that may call the organizations and invitations block
|
|
22
|
+
* functions. Pass the reviewer's client so the block's own permission and
|
|
23
|
+
* role-ceiling checks run as the reviewer.
|
|
24
24
|
*/
|
|
25
25
|
readonly client: SupabaseRpcCaller;
|
|
26
26
|
readonly reviews: AccessReviewStore;
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Decides whether a fallback role or an invitation's role grants the reviewed
|
|
29
|
+
* permission.
|
|
30
|
+
*/
|
|
28
31
|
readonly policy: Policy;
|
|
29
32
|
/**
|
|
30
|
-
* The role a revoked member moves to with `update_member_role`: one role,
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
33
|
+
* The role a revoked member moves to with `update_member_role`: one role, or
|
|
34
|
+
* a map from the roles in the item's `via` to their fallback. A fallback that
|
|
35
|
+
* still grants the permission, or none, removes the member with
|
|
36
|
+
* `remove_member` instead.
|
|
34
37
|
*/
|
|
35
38
|
readonly demoteTo?: string | Readonly<Record<string, string>>;
|
|
36
39
|
/**
|
|
37
|
-
* The member's email, for revoking the tenant's open invitations to it
|
|
38
|
-
*
|
|
40
|
+
* The member's email, for revoking the tenant's open invitations to it whose
|
|
41
|
+
* role grants the permission. Without it invitations are left alone.
|
|
39
42
|
*/
|
|
40
43
|
readonly email?: (userId: string) => string | null | undefined | Promise<string | null | undefined>;
|
|
41
44
|
/**
|
|
42
|
-
* An instance for the member in the review's tenant, read after the
|
|
43
|
-
*
|
|
45
|
+
* An instance for the member in the review's tenant, read after the change.
|
|
46
|
+
* An item it still grants is not marked applied.
|
|
44
47
|
*/
|
|
45
48
|
readonly permdockFor?: (principalId: string, tenant: string) => PermDock | Promise<PermDock>;
|
|
46
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* The schema of the block functions; better-supabase's default is
|
|
51
|
+
* `better_supabase`.
|
|
52
|
+
*/
|
|
47
53
|
readonly schema?: string;
|
|
48
54
|
/** The scope review tenants are; defaults to the policy's first scope. */
|
|
49
55
|
readonly scope?: string;
|
|
@@ -56,66 +62,32 @@ type AccessReviewApplyFailure = {
|
|
|
56
62
|
type AccessReviewApplyResult = {
|
|
57
63
|
/** Items marked applied, including those whose member was already gone. */
|
|
58
64
|
readonly applied: readonly string[];
|
|
59
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Items left unapplied, with the error the block function or the re-check
|
|
67
|
+
* gave.
|
|
68
|
+
*/
|
|
60
69
|
readonly failed: readonly AccessReviewApplyFailure[];
|
|
61
70
|
};
|
|
62
71
|
/**
|
|
63
72
|
* Applies the revoked items of an access review to better-supabase's
|
|
64
|
-
* organizations and invitations blocks, then marks each one applied. A
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* unknown review.
|
|
73
|
+
* organizations and invitations blocks, then marks each one applied. A revoked
|
|
74
|
+
* member moves to the `demoteTo` role when the policy says that role lacks the
|
|
75
|
+
* permission, and is removed otherwise. With `email`, the tenant's open
|
|
76
|
+
* invitations to the member whose role grants the permission are revoked too. A
|
|
77
|
+
* member who is no longer in the organization counts as applied. Any other
|
|
78
|
+
* error leaves the item unapplied in `failed`, and one item's failure never
|
|
79
|
+
* stops the others. Throws `review-not-found` for an unknown review.
|
|
72
80
|
*/
|
|
73
81
|
export declare function accessReviewApplier(options: AccessReviewApplierOptions): (reviewId: string) => Promise<AccessReviewApplyResult>;
|
|
74
82
|
//#endregion
|
|
75
83
|
//#region src/better-supabase/approvers.d.ts
|
|
76
84
|
/**
|
|
77
|
-
* Who may approve each better-supabase request kind: `'ai-tool'` (a tool
|
|
78
|
-
*
|
|
79
|
-
*
|
|
85
|
+
* Who may approve each better-supabase request kind: `'ai-tool'` (a tool call),
|
|
86
|
+
* `'support-session'`, or `'<subject type>.<action>'` from the approvals
|
|
87
|
+
* block.
|
|
80
88
|
*/
|
|
81
89
|
type ProviderApprovers = Readonly<Record<string, ApproverInput>>;
|
|
82
90
|
//#endregion
|
|
83
|
-
//#region src/better-supabase/subscribers.d.ts
|
|
84
|
-
/** The fields of better-supabase's `OutboxEvent` the policy reads. */
|
|
85
|
-
type SubscriberPolicyEvent = {
|
|
86
|
-
readonly type: string;
|
|
87
|
-
readonly tenant: string | null;
|
|
88
|
-
readonly actorId: string | null;
|
|
89
|
-
readonly payload: unknown;
|
|
90
|
-
};
|
|
91
|
-
type SubscriberPolicyOptions<E extends SubscriberPolicyEvent = SubscriberPolicyEvent> = {
|
|
92
|
-
readonly policy: Policy;
|
|
93
|
-
/** Loads the sender and every subscriber's principal. */
|
|
94
|
-
readonly principals: PrincipalSource;
|
|
95
|
-
/**
|
|
96
|
-
* The permission a subscriber needs for each event type: an exact type,
|
|
97
|
-
* `prefix.*` or `*`, with the exact type first and then the longest
|
|
98
|
-
* pattern. A type with no entry reaches no one.
|
|
99
|
-
*/
|
|
100
|
-
readonly events: Readonly<Record<string, Permission>>;
|
|
101
|
-
/** The row the permission is decided on. Defaults to `event.payload`, validated against the resource schema. */
|
|
102
|
-
readonly row?: (event: E) => unknown;
|
|
103
|
-
/** The principal the fan-out runs as in the event's tenant. Defaults to `event.actorId`. */
|
|
104
|
-
readonly sender?: (event: E) => string | null | undefined;
|
|
105
|
-
/** Sources for the sender's and subscribers' instances. */
|
|
106
|
-
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt" | "principals">;
|
|
107
|
-
};
|
|
108
|
-
/**
|
|
109
|
-
* The per-subscriber check for better-supabase's webhooks-out, outbox and
|
|
110
|
-
* realtime fan-out: the subscribers whose `principal` `decideFor` grants
|
|
111
|
-
* the event type's permission on its row, in the event's tenant, as the
|
|
112
|
-
* sender. An unmapped type, an event without a tenant or sender, a sender
|
|
113
|
-
* outside the tenant and a throw reach no one.
|
|
114
|
-
*/
|
|
115
|
-
export declare function subscriberPolicy<E extends SubscriberPolicyEvent = SubscriberPolicyEvent>(options: SubscriberPolicyOptions<E>): <S extends {
|
|
116
|
-
readonly principal: string;
|
|
117
|
-
}>(event: E, subscribers: readonly S[]) => Promise<S[]>;
|
|
118
|
-
//#endregion
|
|
119
91
|
//#region src/better-supabase/api-keys.d.ts
|
|
120
92
|
/** The roles a tenant key holds in its tenant: a list, or one per key. */
|
|
121
93
|
type ServiceRoles<K> = readonly string[] | ((key: K) => readonly string[]);
|
|
@@ -123,8 +95,8 @@ type ApiKeyVerifierOptions = {
|
|
|
123
95
|
/** `createApiKeys()` over a service transport. */
|
|
124
96
|
readonly keys: Pick<ApiKeys, "verify">;
|
|
125
97
|
/**
|
|
126
|
-
* `permdock.manifest.json`, whose `rls.apiKeys.serviceRoles` is the
|
|
127
|
-
*
|
|
98
|
+
* `permdock.manifest.json`, whose `rls.apiKeys.serviceRoles` is the default
|
|
99
|
+
* for `serviceRoles`.
|
|
128
100
|
*/
|
|
129
101
|
readonly manifest?: unknown;
|
|
130
102
|
/**
|
|
@@ -133,95 +105,167 @@ type ApiKeyVerifierOptions = {
|
|
|
133
105
|
* `null`.
|
|
134
106
|
*/
|
|
135
107
|
readonly serviceRoles?: ServiceRoles<ApiKey>;
|
|
136
|
-
/**
|
|
108
|
+
/**
|
|
109
|
+
* The permissions `*` stands for. Without it, a key with `*` verifies to
|
|
110
|
+
* `null`.
|
|
111
|
+
*/
|
|
137
112
|
readonly allPermissions?: readonly Permission[];
|
|
138
113
|
};
|
|
139
114
|
/**
|
|
140
|
-
* better-supabase's API keys as a `CredentialVerifier`, for
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
115
|
+
* better-supabase's API keys as a `CredentialVerifier`, for `subjectFromApiKey`
|
|
116
|
+
* from `permdock/server`, which reads PermDock's `pdk_<id>_<secret>` format:
|
|
117
|
+
* create the keys with `prefix: "pdk"`. The credential id is the key's
|
|
118
|
+
* `publicId`, the id in the token. A personal key is a `user` credential acting
|
|
119
|
+
* as its user (inside its tenant when the key is limited to one), a tenant key
|
|
120
|
+
* a `service` credential holding `serviceRoles` in its tenant, and the key's
|
|
121
|
+
* scopes are the credential's permissions. better-supabase records the use when
|
|
122
|
+
* it verifies, so there is no `touch`. A rotated key in its grace period
|
|
123
|
+
* verifies, and its credential expires when the grace period ends. An invalid,
|
|
124
|
+
* revoked, expired or rate-limited key, and a failed lookup, are `null`.
|
|
125
|
+
* `permdock/server` exports a different `apiKeyVerifier`, over the
|
|
126
|
+
* application's own key records.
|
|
152
127
|
*/
|
|
153
128
|
export declare function apiKeyVerifier(options: ApiKeyVerifierOptions): CredentialVerifier;
|
|
154
129
|
/**
|
|
155
|
-
* The `claim` and `tenantClaim` options of better-supabase's
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
130
|
+
* The `claim` and `tenantClaim` options of better-supabase's `apiKeyClaims()`,
|
|
131
|
+
* from the manifest's `rls.apiKeys`, so a key's token carries the scopes
|
|
132
|
+
* ceiling, tenant and roles the `rls generate` helpers read. Throws when the
|
|
133
|
+
* manifest has no `rls.apiKeys`.
|
|
159
134
|
*/
|
|
160
135
|
export declare function apiKeyClaimOptions(manifest: unknown): Pick<ApiKeyClaimsOptions, "claim" | "tenantClaim">;
|
|
161
136
|
//#endregion
|
|
162
137
|
//#region src/better-supabase/subject.d.ts
|
|
163
|
-
/**
|
|
138
|
+
/**
|
|
139
|
+
* An `AuthSession` of kind `apiKey`, from better-supabase's api-keys
|
|
140
|
+
* middleware.
|
|
141
|
+
*/
|
|
164
142
|
type ApiKeySession = Extract<AuthSession, {
|
|
165
143
|
readonly kind: "apiKey";
|
|
166
144
|
}>;
|
|
167
145
|
type ApiKeySessionOptions = {
|
|
168
|
-
/**
|
|
146
|
+
/**
|
|
147
|
+
* The definitions: the key's scopes become the subject's delegation, and `*`
|
|
148
|
+
* stands for all of them.
|
|
149
|
+
*/
|
|
169
150
|
readonly permissions: PermissionTree;
|
|
170
|
-
/**
|
|
151
|
+
/**
|
|
152
|
+
* `permdock.manifest.json`, whose `rls.apiKeys.serviceRoles` is the default
|
|
153
|
+
* for `serviceRoles`.
|
|
154
|
+
*/
|
|
171
155
|
readonly manifest?: unknown;
|
|
172
|
-
/**
|
|
156
|
+
/**
|
|
157
|
+
* The roles a tenant key holds in its tenant. Without it or a manifest with
|
|
158
|
+
* `rls.apiKeys`, a tenant key is anonymous.
|
|
159
|
+
*/
|
|
173
160
|
readonly serviceRoles?: ServiceRoles<ApiKeySession>;
|
|
174
161
|
};
|
|
175
162
|
/** The claim, and the short code better-supabase writes for each feature key. */
|
|
176
163
|
type FeatureClaim = EntitlementClaimOptions;
|
|
177
164
|
type BetterSupabaseSubjectOptions = Omit<SupabaseSubjectOptions, "claims"> & {
|
|
178
|
-
/**
|
|
165
|
+
/**
|
|
166
|
+
* Where the token carries roles, the active tenant and memberships; plans
|
|
167
|
+
* come from `plans`.
|
|
168
|
+
*/
|
|
179
169
|
readonly claims?: Omit<NonNullable<SupabaseSubjectOptions["claims"]>, "plans">;
|
|
180
170
|
/** How `kind: 'apiKey'` sessions map. Without it they are anonymous. */
|
|
181
171
|
readonly apiKeys?: ApiKeySessionOptions;
|
|
182
172
|
/**
|
|
183
|
-
* The claim `principal.plans` reads: its name (default `features`), or
|
|
184
|
-
*
|
|
185
|
-
* writes short codes with, so `plans` holds the feature keys. A code
|
|
186
|
-
*
|
|
173
|
+
* The claim `principal.plans` reads: its name (default `features`), or `{
|
|
174
|
+
* claim, keys }` with the same `entitlements.claim.keys` better-supabase
|
|
175
|
+
* writes short codes with, so `plans` holds the feature keys. A code without
|
|
176
|
+
* a key is dropped.
|
|
187
177
|
*/
|
|
188
178
|
readonly plans?: string | FeatureClaim;
|
|
189
179
|
};
|
|
190
180
|
/**
|
|
191
181
|
* `subjectFromSupabaseSession` for better-supabase's `AuthSession`, reading
|
|
192
182
|
* `memberships` for the memberships and the entitlements module's `features`
|
|
193
|
-
* claim for `principal.plans` (`plans` names another claim). With `apiKeys`,
|
|
194
|
-
*
|
|
183
|
+
* claim for `principal.plans` (`plans` names another claim). With `apiKeys`, a
|
|
184
|
+
* verified `apiKey` session is the key's credential subject: a personal key
|
|
195
185
|
* acts as its user within the key's scopes, a tenant key as a `service`
|
|
196
186
|
* principal holding `serviceRoles`. Without `apiKeys`, and for `anon`,
|
|
197
187
|
* `service` and `invalid` sessions, the subject is anonymous.
|
|
198
188
|
*/
|
|
199
189
|
export declare function subjectFromBetterSupabase(session: SupabaseSessionLike | ApiKeySession | null | undefined, options?: BetterSupabaseSubjectOptions): Subject<SupabasePrincipal> | Subject<ApiKeyPrincipal> | Subject;
|
|
200
190
|
//#endregion
|
|
191
|
+
//#region src/better-supabase/subscribers.d.ts
|
|
192
|
+
/** The fields of better-supabase's `OutboxEvent` the policy reads. */
|
|
193
|
+
type SubscriberPolicyEvent = {
|
|
194
|
+
readonly type: string;
|
|
195
|
+
readonly tenant: string | null;
|
|
196
|
+
readonly actorId: string | null;
|
|
197
|
+
readonly payload: unknown;
|
|
198
|
+
};
|
|
199
|
+
type SubscriberPolicyOptions<E extends SubscriberPolicyEvent = SubscriberPolicyEvent> = {
|
|
200
|
+
readonly policy: Policy;
|
|
201
|
+
/** Loads the sender and every subscriber's principal. */
|
|
202
|
+
readonly principals: PrincipalSource;
|
|
203
|
+
/**
|
|
204
|
+
* The permission a subscriber needs for each event type: an exact type,
|
|
205
|
+
* `prefix.*` or `*`, with the exact type first and then the longest pattern.
|
|
206
|
+
* A type with no entry reaches no one.
|
|
207
|
+
*/
|
|
208
|
+
readonly events: Readonly<Record<string, Permission>>;
|
|
209
|
+
/**
|
|
210
|
+
* The row the permission is decided on. Defaults to `event.payload`,
|
|
211
|
+
* validated against the resource schema.
|
|
212
|
+
*/
|
|
213
|
+
readonly row?: (event: E) => unknown;
|
|
214
|
+
/**
|
|
215
|
+
* The principal the fan-out runs as in the event's tenant. Defaults to
|
|
216
|
+
* `event.actorId`.
|
|
217
|
+
*/
|
|
218
|
+
readonly sender?: (event: E) => string | null | undefined;
|
|
219
|
+
/** Sources for the sender's and subscribers' instances. */
|
|
220
|
+
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt" | "principals">;
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* The per-subscriber check for better-supabase's webhooks-out, outbox and
|
|
224
|
+
* realtime fan-out: the subscribers whose `principal` `decideFor` grants the
|
|
225
|
+
* event type's permission on its row, in the event's tenant, as the sender. An
|
|
226
|
+
* unmapped type, an event without a tenant or sender, a sender outside the
|
|
227
|
+
* tenant and a throw reach no one.
|
|
228
|
+
*/
|
|
229
|
+
export declare function subscriberPolicy<E extends SubscriberPolicyEvent = SubscriberPolicyEvent>(options: SubscriberPolicyOptions<E>): <S extends {
|
|
230
|
+
readonly principal: string;
|
|
231
|
+
}>(event: E, subscribers: readonly S[]) => Promise<S[]>;
|
|
232
|
+
//#endregion
|
|
201
233
|
//#region src/better-supabase/support.d.ts
|
|
202
|
-
/**
|
|
234
|
+
/**
|
|
235
|
+
* A start `decideSupportSession` holds for approval: the session it would start
|
|
236
|
+
* and the token an approval binds to.
|
|
237
|
+
*/
|
|
203
238
|
type PendingSupportSession = {
|
|
204
239
|
readonly token: string;
|
|
205
240
|
readonly session: SupportSession;
|
|
206
241
|
};
|
|
207
242
|
type SupportPolicyOptions = {
|
|
208
243
|
readonly policy: Policy;
|
|
209
|
-
/**
|
|
244
|
+
/**
|
|
245
|
+
* How the admin's verified claims map to a subject; the defaults of
|
|
246
|
+
* `subjectFromBetterSupabase`.
|
|
247
|
+
*/
|
|
210
248
|
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
211
|
-
/**
|
|
249
|
+
/**
|
|
250
|
+
* Sources and sinks for the admin's instance; `settings` also supplies the
|
|
251
|
+
* tenant's `supportSessions` rules.
|
|
252
|
+
*/
|
|
212
253
|
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt">;
|
|
213
254
|
/**
|
|
214
|
-
* The session's permissions when a start asks for `readOnly: false`.
|
|
215
|
-
*
|
|
216
|
-
*
|
|
255
|
+
* The session's permissions when a start asks for `readOnly: false`. Without
|
|
256
|
+
* it such a start is refused; a read-only start gets every `readOnlyHint`
|
|
257
|
+
* permission the admin can use.
|
|
217
258
|
*/
|
|
218
259
|
readonly writable?: readonly Permission[];
|
|
219
|
-
/**
|
|
260
|
+
/**
|
|
261
|
+
* Approval by someone other than the admin is required unless this is
|
|
262
|
+
* `false`.
|
|
263
|
+
*/
|
|
220
264
|
readonly approval?: boolean;
|
|
221
265
|
/**
|
|
222
|
-
* The approval the application recorded for `pending.token`, or
|
|
223
|
-
*
|
|
224
|
-
*
|
|
266
|
+
* The approval the application recorded for `pending.token`, or `undefined`
|
|
267
|
+
* while none exists. `approvedBy` is the approver's principal id and never
|
|
268
|
+
* the admin's.
|
|
225
269
|
*/
|
|
226
270
|
readonly approved?: (input: SupportAuthorizeInput, pending: PendingSupportSession) => {
|
|
227
271
|
readonly approvedBy: string;
|
|
@@ -234,8 +278,8 @@ type SupportPolicyOptions = {
|
|
|
234
278
|
* verified claims become a PermDock subject, and the start is decided with
|
|
235
279
|
* `permdock.decideSupportSession` in the requested tenant. `true` only for
|
|
236
280
|
* `granted`: an `approval-required` start passes once `approved` returns a
|
|
237
|
-
* distinct approver for its token. `readOnly: false` needs `writable`. A
|
|
238
|
-
*
|
|
281
|
+
* distinct approver for its token. `readOnly: false` needs `writable`. A throw
|
|
282
|
+
* is `false`.
|
|
239
283
|
*/
|
|
240
284
|
export declare function supportPolicy(options: SupportPolicyOptions): SupportAuthorize;
|
|
241
285
|
//#endregion
|
|
@@ -251,30 +295,42 @@ type AuthorizationHooksOptions = {
|
|
|
251
295
|
readonly claims: (userId: string, options: {
|
|
252
296
|
readonly tenant?: string;
|
|
253
297
|
}) => Maybe$1<Claims>;
|
|
254
|
-
/**
|
|
298
|
+
/**
|
|
299
|
+
* How the claims map to a subject; the defaults of
|
|
300
|
+
* `subjectFromBetterSupabase`.
|
|
301
|
+
*/
|
|
255
302
|
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
256
303
|
/** Sources for every instance the hooks build. */
|
|
257
304
|
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt">;
|
|
258
305
|
/**
|
|
259
|
-
* The claims an organization-owned automation runs as in `tenant`, such
|
|
260
|
-
*
|
|
261
|
-
*
|
|
306
|
+
* The claims an organization-owned automation runs as in `tenant`, such as
|
|
307
|
+
* its default service principal's. Without it such an automation runs as no
|
|
308
|
+
* one.
|
|
262
309
|
*/
|
|
263
310
|
readonly service?: (tenant: string | null) => Maybe$1<Claims>;
|
|
264
|
-
/**
|
|
311
|
+
/**
|
|
312
|
+
* The `principalSource` for `identities` and `delivery`; without it neither
|
|
313
|
+
* hook is set.
|
|
314
|
+
*/
|
|
265
315
|
readonly principals?: PrincipalSource;
|
|
266
|
-
/**
|
|
316
|
+
/**
|
|
317
|
+
* The permission each event type needs, for `delivery` (`subscriberPolicy`'s
|
|
318
|
+
* `events`).
|
|
319
|
+
*/
|
|
267
320
|
readonly events?: Readonly<Record<string, Permission>>;
|
|
268
321
|
/** The row a delivery check decides on; defaults to `event.payload`. */
|
|
269
322
|
readonly row?: (event: SubscriberPolicyEvent) => unknown;
|
|
270
|
-
/**
|
|
323
|
+
/**
|
|
324
|
+
* Who may approve each request kind, as for `authorizationProvider`; sets
|
|
325
|
+
* `approverOf`.
|
|
326
|
+
*/
|
|
271
327
|
readonly approvers?: ProviderApprovers;
|
|
272
328
|
/** `supportPolicy`'s options without `policy`; sets `support.authorize`. */
|
|
273
329
|
readonly support?: Omit<SupportPolicyOptions, "policy">;
|
|
274
330
|
/**
|
|
275
|
-
* The user and tenant a run ticket stands for, looked up in the app's
|
|
276
|
-
*
|
|
277
|
-
*
|
|
331
|
+
* The user and tenant a run ticket stands for, looked up in the app's store;
|
|
332
|
+
* `null` refuses the ticket. Sets `tickets.subject`, which loads the user's
|
|
333
|
+
* current claims, so a suspended user's ticket runs as no one.
|
|
278
334
|
*/
|
|
279
335
|
readonly tickets?: (ticket: string) => Maybe$1<{
|
|
280
336
|
readonly userId: string;
|
|
@@ -282,91 +338,110 @@ type AuthorizationHooksOptions = {
|
|
|
282
338
|
}>;
|
|
283
339
|
};
|
|
284
340
|
/**
|
|
285
|
-
* better-supabase's `AuthorizationHooks` (`createServer(betterSupabase,
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
* `
|
|
291
|
-
*
|
|
292
|
-
*
|
|
293
|
-
*
|
|
341
|
+
* better-supabase's `AuthorizationHooks` (`createServer(betterSupabase, {
|
|
342
|
+
* authorization })`), decided by `policy`. Every hook builds the principal's
|
|
343
|
+
* instance from the claims `claims` loads now, never from the request, and
|
|
344
|
+
* fails closed: a throw, an unknown key and `approval-required` refuse.
|
|
345
|
+
* `automation` and `delegation` are always set; `identities`, `delivery`,
|
|
346
|
+
* `approverOf`, `support` and `tickets` only with the options they read.
|
|
347
|
+
* `delegation.permissions` maps each scope to the keys whose `.scope` it is,
|
|
348
|
+
* was renamed from, or that a policy `oauthScopes` entry covers, and reads no
|
|
349
|
+
* `authorization_details`.
|
|
294
350
|
*/
|
|
295
351
|
export declare function authorizationHooks(options: AuthorizationHooksOptions): AuthorizationHooks;
|
|
296
352
|
//#endregion
|
|
297
353
|
//#region src/better-supabase/provider.d.ts
|
|
298
354
|
type AuthorizationProviderOptions = {
|
|
299
|
-
/**
|
|
355
|
+
/**
|
|
356
|
+
* `permdock.manifest.json`, parsed or as JSON text, from `permdock supabase
|
|
357
|
+
* inspect --out`.
|
|
358
|
+
*/
|
|
300
359
|
readonly manifest: unknown;
|
|
301
360
|
/**
|
|
302
|
-
* `permissions.catalog.json` from `permdock catalog`. Without it the
|
|
303
|
-
*
|
|
304
|
-
*
|
|
361
|
+
* `permissions.catalog.json` from `permdock catalog`. Without it the provider
|
|
362
|
+
* lists no permissions, so better-supabase refuses every key in a bucket,
|
|
363
|
+
* topic or module check.
|
|
305
364
|
*/
|
|
306
365
|
readonly catalog?: unknown;
|
|
307
366
|
/** The scope tenants are; defaults to the manifest's one root scope. */
|
|
308
367
|
readonly scope?: string;
|
|
309
368
|
/**
|
|
310
|
-
* The permission that lets a user decide a tool call waiting for
|
|
311
|
-
*
|
|
312
|
-
*
|
|
369
|
+
* The permission that lets a user decide a tool call waiting for approval:
|
|
370
|
+
* the `'ai-tool'` entry of `approvers` (`holder(approver)`) unless
|
|
371
|
+
* `approvers` names one. The requester is never their own approver.
|
|
313
372
|
*/
|
|
314
373
|
readonly approver?: Permission;
|
|
315
374
|
/**
|
|
316
375
|
* Who may approve each request kind, for better-supabase's `isApprover`:
|
|
317
|
-
* `'ai-tool'`, `'support-session'` or the approvals block's
|
|
318
|
-
*
|
|
319
|
-
*
|
|
320
|
-
*
|
|
321
|
-
*
|
|
376
|
+
* `'ai-tool'`, `'support-session'` or the approvals block's `'<subject
|
|
377
|
+
* type>.<action>'`, each mapped to `user()`, `holder()` or `anyOf()`
|
|
378
|
+
* approvers. A kind it does not name has no provider approver, which for tool
|
|
379
|
+
* calls and support sessions means nobody but the service role. Needs
|
|
380
|
+
* `permdock_is_approver` from `rls.approvals`.
|
|
322
381
|
*/
|
|
323
382
|
readonly approvers?: ProviderApprovers;
|
|
324
383
|
};
|
|
325
384
|
/**
|
|
326
385
|
* better-supabase's `authorization` config value, built from PermDock's
|
|
327
386
|
* manifest and catalog: the scopes, the `rls generate` helpers as SQL
|
|
328
|
-
* templates, the membership tables, suspension rows, the token hook and
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
*
|
|
332
|
-
* `approvers` and `permdock_is_approver`, and otherwise `canApprove` only
|
|
333
|
-
*
|
|
387
|
+
* templates, the membership tables, suspension rows, the token hook and every
|
|
388
|
+
* catalog key with `sqlComplete` set from its `rowConditions`. A `_for`
|
|
389
|
+
* template and `permissionsFor` are set only when the manifest lists their
|
|
390
|
+
* helper, which `rls.mode: 'database'` writes; `isApprover` only with
|
|
391
|
+
* `approvers` and `permdock_is_approver`, and otherwise `canApprove` only with
|
|
392
|
+
* `approver`. `holdersOf` (`permitted_<tenant scope>_users`) and
|
|
334
393
|
* `actorMayWrite` (`permdock_actor_may_write()`) are set when the manifest
|
|
335
|
-
* lists their helper
|
|
336
|
-
*
|
|
394
|
+
* lists their helper, and so is `teamIdsOf` (`member_<scope>_ids_of({user})`)
|
|
395
|
+
* for a scope named `team` or `teams`. Throws when the manifest or catalog is
|
|
396
|
+
* invalid, or when the tenant scope is ambiguous.
|
|
337
397
|
*/
|
|
338
398
|
export declare function authorizationProvider(options: AuthorizationProviderOptions): AuthorizationProvider;
|
|
339
399
|
//#endregion
|
|
340
400
|
//#region src/better-supabase/authorizer.d.ts
|
|
341
|
-
/**
|
|
401
|
+
/**
|
|
402
|
+
* The table operations better-supabase's `permissions: true` resolves through
|
|
403
|
+
* `forOperation`.
|
|
404
|
+
*/
|
|
342
405
|
type AuthorizerOperation = "list" | "get" | "create" | "update" | "delete";
|
|
343
406
|
type AuthorizerOptions = {
|
|
344
407
|
readonly policy: Policy;
|
|
345
|
-
/**
|
|
408
|
+
/**
|
|
409
|
+
* How the verified claims map to a subject; the defaults of
|
|
410
|
+
* `subjectFromBetterSupabase`.
|
|
411
|
+
*/
|
|
346
412
|
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
347
413
|
/**
|
|
348
|
-
* The permission of each table operation, so a resource with
|
|
349
|
-
*
|
|
414
|
+
* The permission of each table operation, so a resource with `permissions:
|
|
415
|
+
* true` is checked. Without it such a resource is refused.
|
|
350
416
|
*/
|
|
351
417
|
readonly operations?: Readonly<Record<string, Partial<Record<AuthorizerOperation, Permission>>>>;
|
|
352
|
-
/**
|
|
418
|
+
/**
|
|
419
|
+
* Sources and sinks for each instance. The subject, actor and tenant always
|
|
420
|
+
* come from the verified request.
|
|
421
|
+
*/
|
|
353
422
|
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt">;
|
|
354
423
|
};
|
|
355
424
|
/**
|
|
356
425
|
* better-supabase's `authorizer` for PermDock: every resource, action, route
|
|
357
|
-
* guard and MCP tool that declares a `permission` is decided with `decide`.
|
|
358
|
-
*
|
|
359
|
-
*
|
|
360
|
-
*
|
|
361
|
-
*
|
|
426
|
+
* guard and MCP tool that declares a `permission` is decided with `decide`. The
|
|
427
|
+
* subject is mapped from the verified claims with `subjectFromBetterSupabase`;
|
|
428
|
+
* the request's `context.tenant` selects the active tenant only among the
|
|
429
|
+
* memberships the claims hold. A caller without claims is anonymous, and a
|
|
430
|
+
* throw denies.
|
|
362
431
|
*/
|
|
363
432
|
export declare function authorizer(options: AuthorizerOptions): Authorizer<Permission>;
|
|
364
433
|
//#endregion
|
|
365
434
|
//#region src/better-supabase/policies.d.ts
|
|
366
435
|
type AccessScope = {
|
|
367
|
-
/**
|
|
436
|
+
/**
|
|
437
|
+
* A scope in the policy's scopes (or the manifest's `rls.scopes`), or
|
|
438
|
+
* `platform` for permissions granted globally.
|
|
439
|
+
*/
|
|
368
440
|
readonly scope: string;
|
|
369
|
-
/**
|
|
441
|
+
/**
|
|
442
|
+
* 1-based path or topic segment holding the scope id; better-supabase's
|
|
443
|
+
* default is the `{organizationId}` segment.
|
|
444
|
+
*/
|
|
370
445
|
readonly segment?: number;
|
|
371
446
|
};
|
|
372
447
|
/**
|
|
@@ -375,16 +450,28 @@ type AccessScope = {
|
|
|
375
450
|
* the scopes a permission is granted at come from the definitions.
|
|
376
451
|
*/
|
|
377
452
|
type AccessPolicyOptions = AccessScope & ({
|
|
378
|
-
/**
|
|
453
|
+
/**
|
|
454
|
+
* `permdock.manifest.json`, parsed or as JSON text: it names the
|
|
455
|
+
* helpers' schema and the scopes.
|
|
456
|
+
*/
|
|
379
457
|
readonly manifest: unknown;
|
|
380
|
-
/**
|
|
458
|
+
/**
|
|
459
|
+
* `permissions.catalog.json`: only keys it marks `rowConditions: false`
|
|
460
|
+
* are accepted.
|
|
461
|
+
*/
|
|
381
462
|
readonly catalog: unknown;
|
|
382
463
|
readonly policy?: undefined;
|
|
383
464
|
readonly schema?: undefined;
|
|
384
465
|
} | {
|
|
385
|
-
/**
|
|
466
|
+
/**
|
|
467
|
+
* The `definePolicy` result: only keys with no row condition in it are
|
|
468
|
+
* accepted.
|
|
469
|
+
*/
|
|
386
470
|
readonly policy: Policy;
|
|
387
|
-
/**
|
|
471
|
+
/**
|
|
472
|
+
* The schema `rls generate` put the helpers in (`rls.schema`). Default
|
|
473
|
+
* `permdock`.
|
|
474
|
+
*/
|
|
388
475
|
readonly schema?: string;
|
|
389
476
|
readonly manifest?: undefined;
|
|
390
477
|
readonly catalog?: undefined;
|
|
@@ -404,11 +491,10 @@ type TopicAccess = {
|
|
|
404
491
|
readonly send?: Permission;
|
|
405
492
|
};
|
|
406
493
|
/**
|
|
407
|
-
* A better-supabase bucket `policy` that checks PermDock permissions with
|
|
408
|
-
*
|
|
409
|
-
*
|
|
410
|
-
*
|
|
411
|
-
* `scope`, throws.
|
|
494
|
+
* A better-supabase bucket `policy` that checks PermDock permissions with the
|
|
495
|
+
* `rls generate` helpers at `scope`. The helpers check role and scope only, so
|
|
496
|
+
* a permission with row conditions (`rowConditions: true` in the catalog, or a
|
|
497
|
+
* conditioned grant in `policy`), or one not granted at `scope`, throws.
|
|
412
498
|
*/
|
|
413
499
|
export declare function bucketPolicy(access: BucketAccess, options: AccessPolicyOptions): AccessBucketPolicy;
|
|
414
500
|
/** As {@link bucketPolicy}, for a better-supabase Realtime topic. */
|
|
@@ -418,7 +504,10 @@ export declare function topicPolicy(access: TopicAccess, options: AccessPolicyOp
|
|
|
418
504
|
type CredentialGuardOptions = {
|
|
419
505
|
/** The request's PermDock instance. */
|
|
420
506
|
readonly permdock: () => PermDock | Promise<PermDock>;
|
|
421
|
-
/**
|
|
507
|
+
/**
|
|
508
|
+
* The permission that resolves a token or connects an account; decided on the
|
|
509
|
+
* ref.
|
|
510
|
+
*/
|
|
422
511
|
readonly use: Permission;
|
|
423
512
|
/** The permission that revokes a stored credential; defaults to `use`. */
|
|
424
513
|
readonly revoke?: Permission;
|
|
@@ -426,10 +515,10 @@ type CredentialGuardOptions = {
|
|
|
426
515
|
/**
|
|
427
516
|
* `provider` with every `getToken`, `startAuthorization`,
|
|
428
517
|
* `completeAuthorization` and `revoke` decided by PermDock first, on the
|
|
429
|
-
* `CredentialRef` as the row. Anything but `granted` is a `forbidden`
|
|
430
|
-
*
|
|
431
|
-
*
|
|
432
|
-
*
|
|
518
|
+
* `CredentialRef` as the row. Anything but `granted` is a `forbidden` error
|
|
519
|
+
* with hint `PERMDOCK_DENIED`, and a failed check is one too. `capabilities`
|
|
520
|
+
* and `verifyInbound` (a third party's request, with no user) pass through.
|
|
521
|
+
* Build it per request, with that request's PermDock.
|
|
433
522
|
*/
|
|
434
523
|
export declare function credentialGuard(provider: CredentialProvider, options: CredentialGuardOptions): CredentialProvider;
|
|
435
524
|
//#endregion
|
|
@@ -442,9 +531,9 @@ type ToolPolicyOptions<C> = {
|
|
|
442
531
|
/** The request's PermDock instance, from the hook's context. */
|
|
443
532
|
readonly permdock: (ctx: C) => PermDock | Promise<PermDock>;
|
|
444
533
|
/**
|
|
445
|
-
* The row an instance permission is decided on, from the validated
|
|
446
|
-
*
|
|
447
|
-
*
|
|
534
|
+
* The row an instance permission is decided on, from the validated arguments.
|
|
535
|
+
* Without it the call is decided without a row, which an instance permission
|
|
536
|
+
* with a row condition denies.
|
|
448
537
|
*/
|
|
449
538
|
readonly data?: (ctx: C, tool: McpToolRef, args: unknown) => unknown;
|
|
450
539
|
};
|
|
@@ -454,15 +543,18 @@ type ToolPolicy<C> = {
|
|
|
454
543
|
};
|
|
455
544
|
/**
|
|
456
545
|
* The `authorize` and `visible` hooks of better-supabase's `createMcp`, for
|
|
457
|
-
* tools whose `meta` is a PermDock permission. A tool without a permission
|
|
458
|
-
*
|
|
459
|
-
* approval-required call is refused, because `createMcp`
|
|
460
|
-
*
|
|
546
|
+
* tools whose `meta` is a PermDock permission. A tool without a permission is
|
|
547
|
+
* hidden and refused. `authorize` grants only a `granted` decision: an
|
|
548
|
+
* approval-required call is refused, because `createMcp` has no approval flow.
|
|
549
|
+
* A throw anywhere refuses.
|
|
461
550
|
*/
|
|
462
551
|
export declare function toolPolicy<C>(options: ToolPolicyOptions<C>): ToolPolicy<C>;
|
|
463
552
|
//#endregion
|
|
464
553
|
//#region src/better-supabase/memberships.d.ts
|
|
465
|
-
/**
|
|
554
|
+
/**
|
|
555
|
+
* A row of the better-supabase `memberships` table (organizations block), as
|
|
556
|
+
* `select user_id, organization_id, role, disabled_at` returns it.
|
|
557
|
+
*/
|
|
466
558
|
type BetterSupabaseMembershipRow = {
|
|
467
559
|
readonly user_id: string;
|
|
468
560
|
readonly organization_id: string;
|
|
@@ -470,7 +562,10 @@ type BetterSupabaseMembershipRow = {
|
|
|
470
562
|
readonly disabled_at?: string | null;
|
|
471
563
|
};
|
|
472
564
|
type PrincipalFromMembershipsOptions = {
|
|
473
|
-
/**
|
|
565
|
+
/**
|
|
566
|
+
* The policy scope an `organization_id` is an instance of; defaults to
|
|
567
|
+
* `tenant`, the first declared scope.
|
|
568
|
+
*/
|
|
474
569
|
readonly scope?: string;
|
|
475
570
|
/**
|
|
476
571
|
* The organization the request acts in, the principal's active tenant. A
|
|
@@ -481,16 +576,16 @@ type PrincipalFromMembershipsOptions = {
|
|
|
481
576
|
};
|
|
482
577
|
/**
|
|
483
578
|
* The principal `userId` is in the better-supabase organizations block: one
|
|
484
|
-
* membership per organization, keyed on `organization_id`, holding the role
|
|
485
|
-
*
|
|
486
|
-
*
|
|
579
|
+
* membership per organization, keyed on `organization_id`, holding the role of
|
|
580
|
+
* each of the user's rows. Rows of another user, disabled rows and malformed
|
|
581
|
+
* rows are dropped, so a user with none holds no membership.
|
|
487
582
|
*/
|
|
488
583
|
export declare function principalFromMemberships(userId: string, rows: readonly BetterSupabaseMembershipRow[], options?: PrincipalFromMembershipsOptions): Principal;
|
|
489
584
|
//#endregion
|
|
490
585
|
//#region src/better-supabase/principals.d.ts
|
|
491
586
|
/**
|
|
492
|
-
* Where an identity link points: an app user, whose claims `principal`
|
|
493
|
-
*
|
|
587
|
+
* Where an identity link points: an app user, whose claims `principal` loads,
|
|
588
|
+
* or a contact the app stores itself, which must be `kind: 'contact'`.
|
|
494
589
|
*/
|
|
495
590
|
type BetterSupabaseIdentityLink = {
|
|
496
591
|
readonly user: string;
|
|
@@ -501,34 +596,43 @@ type Maybe<T> = T | null | undefined | Promise<T | null | undefined>;
|
|
|
501
596
|
type PrincipalSourceOptions = {
|
|
502
597
|
/**
|
|
503
598
|
* The claims better-supabase mints for `userId` now, or `null` for a user
|
|
504
|
-
* deleted, suspended or unknown. `sqlSupportStore(…).claims`, which runs
|
|
505
|
-
*
|
|
599
|
+
* deleted, suspended or unknown. `sqlSupportStore(…).claims`, which runs the
|
|
600
|
+
* custom access token hook, fills it.
|
|
506
601
|
*/
|
|
507
602
|
readonly claims: (userId: string, options: {
|
|
508
603
|
readonly tenant?: string;
|
|
509
604
|
}) => Maybe<Readonly<Record<string, unknown>>>;
|
|
510
605
|
/**
|
|
511
|
-
* The identity link for an email address or chat user. Only links the
|
|
512
|
-
*
|
|
513
|
-
*
|
|
606
|
+
* The identity link for an email address or chat user. Only links the app
|
|
607
|
+
* created through a signed-in link flow or a verified address count. Without
|
|
608
|
+
* it the source has no `principalByIdentity`.
|
|
514
609
|
*/
|
|
515
610
|
readonly identities?: (identity: PrincipalIdentity) => Maybe<BetterSupabaseIdentityLink>;
|
|
516
|
-
/**
|
|
611
|
+
/**
|
|
612
|
+
* How the claims map to a principal; the defaults of
|
|
613
|
+
* `subjectFromBetterSupabase`.
|
|
614
|
+
*/
|
|
517
615
|
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
518
616
|
};
|
|
519
617
|
/**
|
|
520
618
|
* A `PrincipalSource` over better-supabase: `principal(id)` maps the claims
|
|
521
619
|
* `claims` loads with `subjectFromBetterSupabase`, and `principalByIdentity`
|
|
522
|
-
* follows `identities` to a user or a contact. Claims for another user, a
|
|
523
|
-
*
|
|
620
|
+
* follows `identities` to a user or a contact. Claims for another user, a link
|
|
621
|
+
* to a non-contact principal and a missing link are `null`.
|
|
524
622
|
*/
|
|
525
623
|
export declare function principalSource(options: PrincipalSourceOptions): PrincipalSource;
|
|
526
624
|
//#endregion
|
|
527
625
|
//#region src/better-supabase/role-order.d.ts
|
|
528
626
|
type RoleOrderOptions = {
|
|
529
|
-
/**
|
|
627
|
+
/**
|
|
628
|
+
* Keep only roles declared `on` this scope, such as the scope SSO assigns
|
|
629
|
+
* memberships in.
|
|
630
|
+
*/
|
|
530
631
|
readonly scope?: string;
|
|
531
|
-
/**
|
|
632
|
+
/**
|
|
633
|
+
* The owner role, left out because better-supabase's `roleOrder` must not
|
|
634
|
+
* list it.
|
|
635
|
+
*/
|
|
532
636
|
readonly owner?: string;
|
|
533
637
|
};
|
|
534
638
|
/**
|
|
@@ -540,12 +644,23 @@ type RoleOrderOptions = {
|
|
|
540
644
|
export declare function roleOrderFromCatalog(catalog: CatalogDocument, options?: RoleOrderOptions): readonly string[];
|
|
541
645
|
//#endregion
|
|
542
646
|
//#region src/better-supabase/share-links.d.ts
|
|
543
|
-
/**
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
647
|
+
/**
|
|
648
|
+
* The fields of better-supabase's `ResolvedShareLink` a link subject is built
|
|
649
|
+
* from: `subject` from better-supabase 0.14, `subjectType` and `subjectId`
|
|
650
|
+
* before it.
|
|
651
|
+
*/
|
|
652
|
+
type ShareLinkRow = ShareLinkRowFields & ({
|
|
653
|
+
readonly subject: {
|
|
654
|
+
readonly type: string;
|
|
655
|
+
readonly id: string;
|
|
656
|
+
};
|
|
657
|
+
} | {
|
|
547
658
|
readonly subjectType: string;
|
|
548
659
|
readonly subjectId: string;
|
|
660
|
+
});
|
|
661
|
+
type ShareLinkRowFields = {
|
|
662
|
+
readonly id: string;
|
|
663
|
+
readonly organizationId: string;
|
|
549
664
|
readonly role: string;
|
|
550
665
|
/** Set on a link pinned to one version, which `subjectFromShareLink` refuses. */
|
|
551
666
|
readonly versionId?: string;
|
|
@@ -553,7 +668,7 @@ type ShareLinkRow = {
|
|
|
553
668
|
};
|
|
554
669
|
/** better-supabase's `ShareLinks`, or anything with its `resolve`. */
|
|
555
670
|
type ShareLinkResolver = {
|
|
556
|
-
resolve(token: string)
|
|
671
|
+
resolve: (token: string) => PromiseLike<{
|
|
557
672
|
readonly ok: true;
|
|
558
673
|
readonly data: ShareLinkRow | null;
|
|
559
674
|
} | {
|
|
@@ -562,21 +677,33 @@ type ShareLinkResolver = {
|
|
|
562
677
|
};
|
|
563
678
|
/** How links on one better-supabase subject type map to PermDock. */
|
|
564
679
|
type ShareLinkTarget = {
|
|
565
|
-
/**
|
|
680
|
+
/**
|
|
681
|
+
* The resource the subject type's rows are; RLS matches it against
|
|
682
|
+
* `capability.on.resource`.
|
|
683
|
+
*/
|
|
566
684
|
readonly resource: Permission | PermissionTree;
|
|
567
|
-
/**
|
|
685
|
+
/**
|
|
686
|
+
* PermDock roles for each share-link role (`{ view: ['guest'] }`). A role
|
|
687
|
+
* with no entry is refused.
|
|
688
|
+
*/
|
|
568
689
|
readonly roles: Readonly<Record<string, readonly string[]>>;
|
|
569
690
|
};
|
|
570
691
|
type ShareLinkSubjectOptions = {
|
|
571
692
|
readonly shareLinks: ShareLinkResolver;
|
|
572
|
-
/**
|
|
693
|
+
/**
|
|
694
|
+
* One entry per subject type a guest page serves, keyed by better-supabase's
|
|
695
|
+
* `subjectType`.
|
|
696
|
+
*/
|
|
573
697
|
readonly links: Readonly<Record<string, ShareLinkTarget>>;
|
|
574
|
-
/**
|
|
698
|
+
/**
|
|
699
|
+
* Lifetime of the subject in seconds, capped by the link's own expiry.
|
|
700
|
+
* Default 300, at most 3600.
|
|
701
|
+
*/
|
|
575
702
|
readonly ttl?: number;
|
|
576
703
|
/**
|
|
577
|
-
* The link policies of the link's organization (`row.organizationId`);
|
|
578
|
-
*
|
|
579
|
-
*
|
|
704
|
+
* The link policies of the link's organization (`row.organizationId`); every
|
|
705
|
+
* one must hold, and a throw denies. A row carries no creation time, so a
|
|
706
|
+
* `maxLifetime` rule refuses every share link.
|
|
580
707
|
*/
|
|
581
708
|
readonly linkPolicy?: (capability: Capability, row: ShareLinkRow) => LinkPolicy | readonly LinkPolicy[] | undefined | Promise<LinkPolicy | readonly LinkPolicy[] | undefined>;
|
|
582
709
|
readonly onAuth?: (event: AuthEvent) => void;
|
|
@@ -584,33 +711,36 @@ type ShareLinkSubjectOptions = {
|
|
|
584
711
|
readonly now?: Instant;
|
|
585
712
|
};
|
|
586
713
|
/**
|
|
587
|
-
* Resolves a better-supabase share-link token into the `link` subject it
|
|
588
|
-
*
|
|
589
|
-
*
|
|
590
|
-
*
|
|
591
|
-
*
|
|
592
|
-
*
|
|
593
|
-
*
|
|
714
|
+
* Resolves a better-supabase share-link token into the `link` subject it acts
|
|
715
|
+
* as, for `exchangeCapability` and `--capabilities` RLS. The row is read on
|
|
716
|
+
* every call, so a revoked or expired link stops resolving at once. An unknown
|
|
717
|
+
* token, subject type or role, a malformed row, a broken link policy, a
|
|
718
|
+
* `resolve` error and a throw are the anonymous subject. So is a link pinned to
|
|
719
|
+
* a version: a capability grants the subject's current rows, so a pinned link
|
|
720
|
+
* reads through `versions.getShared(token)` instead.
|
|
594
721
|
*/
|
|
595
722
|
export declare function subjectFromShareLink(token: string | undefined | null, options: ShareLinkSubjectOptions): Promise<Subject<CapabilityPrincipal>>;
|
|
596
723
|
//#endregion
|
|
597
724
|
//#region src/better-supabase/workflow.d.ts
|
|
598
|
-
/**
|
|
725
|
+
/**
|
|
726
|
+
* Where `handlerCan` gets the request's instance, such as `permdock/server`'s
|
|
727
|
+
* `createPermDock` result.
|
|
728
|
+
*/
|
|
599
729
|
type HandlerPermDockSource = {
|
|
600
730
|
readonly getPermDock: (request: Request) => PermDock | Promise<PermDock>;
|
|
601
731
|
};
|
|
602
732
|
/**
|
|
603
733
|
* The `can` option of better-supabase's `authorizeHook`, for the caller's
|
|
604
|
-
* `permdock`: `true` only when the caller is a member of the hook's tenant
|
|
605
|
-
*
|
|
606
|
-
*
|
|
734
|
+
* `permdock`: `true` only when the caller is a member of the hook's tenant and
|
|
735
|
+
* `decide` grants the permission its `hookMetadata` names there. An unknown
|
|
736
|
+
* key, `approval-required` and a throw are `false`.
|
|
607
737
|
*/
|
|
608
738
|
export declare function hookCan(permdock: PermDock): NonNullable<AuthorizeHookOptions["can"]>;
|
|
609
739
|
/**
|
|
610
|
-
* The `can` option of better-supabase's `protectWebHandler`: `undefined`
|
|
611
|
-
*
|
|
612
|
-
*
|
|
613
|
-
*
|
|
740
|
+
* The `can` option of better-supabase's `protectWebHandler`: `undefined` (401)
|
|
741
|
+
* when the request has no signed-in principal or `getPermDock` throws,
|
|
742
|
+
* otherwise whether `decide` grants the permission in the request's active
|
|
743
|
+
* tenant. An unknown key and `approval-required` are `false` (403).
|
|
614
744
|
*/
|
|
615
745
|
export declare function handlerCan(source: HandlerPermDockSource): ProtectWebHandlerOptions["can"];
|
|
616
746
|
//#endregion
|