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
package/dist/testing/index.d.ts
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { g as ResourceInit, l as InferPermissionTree, u as Permission } from "../permission-types-
|
|
3
|
-
import { r as Role } from "../vocabulary-
|
|
4
|
-
import { st as LegacyCheck } from "../index-
|
|
5
|
-
import {
|
|
6
|
-
import { s as PolicySource } from "../hosted-
|
|
7
|
-
import { a as ApprovalDelegationSource, m as ApprovalStore } from "../types-
|
|
8
|
-
import { a as ProblemDetails } from "../errors-
|
|
9
|
-
import { c as ModelMap, t as AgentPermDock, u as ToolMap } from "../create-
|
|
10
|
-
import { c as AccessReviewStore } from "../types-
|
|
11
|
-
import { R as IdempotencyStore } from "../index-
|
|
12
|
-
import { n as RevocationFeed } from "../revocations-
|
|
13
|
-
import { s as SupportSessionSource } from "../index-
|
|
14
|
-
import { a as AutomationSource, t as Automation } from "../automation-
|
|
15
|
-
import { c as DeliveryTransport, g as TransportMessages } from "../types-
|
|
16
|
-
import { r as SupabaseHookManifest } from "../manifest-
|
|
17
|
-
import { t as supabaseMembershipsBudget } from "../budget-
|
|
18
|
-
import { t as CloudApproverOptions } from "../types-
|
|
19
|
-
import { n as ApprovalWaiter } from "../waiter-
|
|
20
|
-
import { g as SetQueue, l as ReplayStore } from "../types-
|
|
21
|
-
import { r as SnapshotStorage } from "../types-
|
|
22
|
-
import { x as DirectoryStore } from "../index-
|
|
23
|
-
import { S as SsfStreamStore } from "../index-
|
|
24
|
-
import { S as policyMatrix, _ as DescribePolicyConfig, a as OrmParityScenario, b as PolicyMatrixCell, c as RlsFieldsOutcome, d as RlsParityOptions, f as RlsParityReport, g as testRlsParity, h as RlsQueryResult, i as OrmParityRunInput, l as RlsParityCase, m as RlsQueryFn, n as OrmParityOptions, o as testOrmParity, p as RlsParitySubject, r as OrmParityReport, s as RlsDbOutcome, t as OrmParityCase, u as RlsParityFixture, v as MatrixCell, x as PolicyMatrixReport, y as MatrixOutcome } from "../core-
|
|
25
|
-
import { a as SaasProject } from "../permissions-
|
|
26
|
-
import { n as saasPolicy } from "../policy-
|
|
1
|
+
import { G as CustomRoleSource, J as DecisionSink, T as Policy, U as CredentialVerifier, Y as EntitlementSource, Zt as Snapshot, bt as WhereCompiler, ct as SnapshotSource, dt as SubjectResolver, et as LimitStore, fr as Membership, hr as Subject, ht as TokenVerifier, mt as TokenSigner, nt as MembershipSource, ot as RelationSource, pr as Principal, q as DecisionProvider, sn as DeliveryChannel, st as SettingsSource } from "../policy-types-DGIO_gxq.js";
|
|
2
|
+
import { g as ResourceInit, l as InferPermissionTree, u as Permission } from "../permission-types-CAY-GU7e.js";
|
|
3
|
+
import { r as Role } from "../vocabulary-DEJ5j4mR.js";
|
|
4
|
+
import { Ut as VersionCache, st as LegacyCheck } from "../index-vYjMrXyK.js";
|
|
5
|
+
import { D as ApprovalPolicySource, _ as PrincipalSource, a as PermDock, b as Limits, h as PrincipalIdentity } from "../permdock-CprAPN3w.js";
|
|
6
|
+
import { s as PolicySource } from "../hosted-DVxlLZMe.js";
|
|
7
|
+
import { a as ApprovalDelegationSource, m as ApprovalStore } from "../types-DLvhVm1r.js";
|
|
8
|
+
import { a as ProblemDetails } from "../errors-BIM4MFsJ.js";
|
|
9
|
+
import { c as ModelMap, t as AgentPermDock, u as ToolMap } from "../create-BPUopdfL.js";
|
|
10
|
+
import { c as AccessReviewStore } from "../types-B2efzoSX.js";
|
|
11
|
+
import { R as IdempotencyStore } from "../index-DJwEgYzA.js";
|
|
12
|
+
import { n as RevocationFeed } from "../revocations-BaUXHM1N.js";
|
|
13
|
+
import { s as SupportSessionSource } from "../index-CV-7DWeD.js";
|
|
14
|
+
import { a as AutomationSource, t as Automation } from "../automation-C6Jg75xq.js";
|
|
15
|
+
import { c as DeliveryTransport, g as TransportMessages } from "../types-CN0LsqbK.js";
|
|
16
|
+
import { r as SupabaseHookManifest } from "../manifest-CzzWtnAb.js";
|
|
17
|
+
import { t as supabaseMembershipsBudget } from "../budget-hYsPz_yE.js";
|
|
18
|
+
import { t as CloudApproverOptions } from "../types-BB-zWDcR.js";
|
|
19
|
+
import { n as ApprovalWaiter } from "../waiter-CqUKX6CY.js";
|
|
20
|
+
import { g as SetQueue, l as ReplayStore } from "../types-DsHGPtkR.js";
|
|
21
|
+
import { r as SnapshotStorage } from "../types-CWBsAwqn.js";
|
|
22
|
+
import { x as DirectoryStore } from "../index-Dj2qF9VC.js";
|
|
23
|
+
import { S as SsfStreamStore } from "../index-BinlXeU-.js";
|
|
24
|
+
import { S as policyMatrix, _ as DescribePolicyConfig, a as OrmParityScenario, b as PolicyMatrixCell, c as RlsFieldsOutcome, d as RlsParityOptions, f as RlsParityReport, g as testRlsParity, h as RlsQueryResult, i as OrmParityRunInput, l as RlsParityCase, m as RlsQueryFn, n as OrmParityOptions, o as testOrmParity, p as RlsParitySubject, r as OrmParityReport, s as RlsDbOutcome, t as OrmParityCase, u as RlsParityFixture, v as MatrixCell, x as PolicyMatrixReport, y as MatrixOutcome } from "../core-CFepFiDP.js";
|
|
25
|
+
import { a as SaasProject } from "../permissions-Bx6UI8n1.js";
|
|
26
|
+
import { n as saasPolicy } from "../policy-BycVKnXv.js";
|
|
27
27
|
import { expectTypeOf } from "vitest";
|
|
28
28
|
//#region src/testing/describe-policy.d.ts
|
|
29
29
|
/** `policyMatrix` under Vitest: one test per cell, plus the exhaustive check. */
|
|
@@ -38,8 +38,8 @@ type ClientParityCase = {
|
|
|
38
38
|
readonly permission: Permission;
|
|
39
39
|
readonly row?: unknown;
|
|
40
40
|
/**
|
|
41
|
-
* `true` when the client may deny what the server grants, because the
|
|
42
|
-
*
|
|
41
|
+
* `true` when the client may deny what the server grants, because the outcome
|
|
42
|
+
* depends on a closure, a quota or an approval the snapshot omits.
|
|
43
43
|
*/
|
|
44
44
|
readonly stricter?: boolean;
|
|
45
45
|
};
|
|
@@ -47,8 +47,8 @@ type ClientParityOptions = {
|
|
|
47
47
|
readonly customRoles?: CustomRoleSource;
|
|
48
48
|
};
|
|
49
49
|
/**
|
|
50
|
-
* Asserts that `fromSnapshot(permdock.snapshot())` never grants what the
|
|
51
|
-
*
|
|
50
|
+
* Asserts that `fromSnapshot(permdock.snapshot())` never grants what the server
|
|
51
|
+
* denies, and matches it exactly unless a case is marked `stricter`.
|
|
52
52
|
*/
|
|
53
53
|
export declare function testClientParity(policy: Policy, cases: readonly ClientParityCase[], options?: ClientParityOptions): void;
|
|
54
54
|
//#endregion
|
|
@@ -66,9 +66,9 @@ type LegacyParityCase = {
|
|
|
66
66
|
readonly expect?: boolean;
|
|
67
67
|
};
|
|
68
68
|
/**
|
|
69
|
-
* Asserts that the policy answers each case as the application's legacy
|
|
70
|
-
*
|
|
71
|
-
*
|
|
69
|
+
* Asserts that the policy answers each case as the application's legacy check
|
|
70
|
+
* does, or as the case's `expect` says where the difference is intended. Run it
|
|
71
|
+
* before enforcing a permission with `shadowMode`.
|
|
72
72
|
*/
|
|
73
73
|
export declare function testLegacyParity(policy: Policy, legacy: LegacyCheck, cases: readonly LegacyParityCase[]): void;
|
|
74
74
|
//#endregion
|
|
@@ -76,17 +76,20 @@ export declare function testLegacyParity(policy: Policy, legacy: LegacyCheck, ca
|
|
|
76
76
|
type ClientStoreStatus = "ready" | "pending" | "stale" | "server-only";
|
|
77
77
|
/** The client surface every UI adapter hands to components. */
|
|
78
78
|
type ClientStorePermDock = PermDock & {
|
|
79
|
-
status(permission?: Permission, data?: unknown)
|
|
80
|
-
refresh(query?: {
|
|
79
|
+
status: (permission?: Permission, data?: unknown) => ClientStoreStatus;
|
|
80
|
+
refresh: (query?: {
|
|
81
81
|
readonly tenant?: string;
|
|
82
|
-
})
|
|
83
|
-
clear()
|
|
84
|
-
subscribe(listener: () => void)
|
|
82
|
+
}) => Promise<void>;
|
|
83
|
+
clear: () => void;
|
|
84
|
+
subscribe: (listener: () => void) => () => void;
|
|
85
85
|
};
|
|
86
86
|
type ClientStoreHandle = {
|
|
87
|
-
get()
|
|
88
|
-
/**
|
|
89
|
-
|
|
87
|
+
get: () => ClientStorePermDock;
|
|
88
|
+
/**
|
|
89
|
+
* Hydrate from a server-pushed snapshot (a Server Action result, a socket
|
|
90
|
+
* message).
|
|
91
|
+
*/
|
|
92
|
+
replace: (value: unknown) => void;
|
|
90
93
|
};
|
|
91
94
|
type ClientStoreFactoryOptions = {
|
|
92
95
|
readonly snapshot: Snapshot | string;
|
|
@@ -99,9 +102,9 @@ type ClientStoreFactoryOptions = {
|
|
|
99
102
|
type ClientStoreFactory = (options: ClientStoreFactoryOptions) => ClientStoreHandle;
|
|
100
103
|
/**
|
|
101
104
|
* Race and cache scenarios for a client snapshot store: tenant switches,
|
|
102
|
-
* `replace` and `refresh`, logout and a second user during a refresh, stale
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
+
* `replace` and `refresh`, logout and a second user during a refresh, stale and
|
|
106
|
+
* signed snapshots, and endpoint answers cached per tenant. Runs against the
|
|
107
|
+
* saas domain; `createStore` wraps the store an adapter ships.
|
|
105
108
|
*/
|
|
106
109
|
export declare function testClientStore(name: string, createStore: ClientStoreFactory): void;
|
|
107
110
|
//#endregion
|
|
@@ -115,6 +118,18 @@ export declare function snapshotFixture(policy: Policy, subject: unknown, option
|
|
|
115
118
|
readonly simulated?: boolean;
|
|
116
119
|
}): Promise<Snapshot>;
|
|
117
120
|
//#endregion
|
|
121
|
+
//#region src/testing/seed-rows.d.ts
|
|
122
|
+
/** Rows per table; tables are inserted in key order, so list parents first. */
|
|
123
|
+
type SeedRows = Readonly<Record<string, readonly Readonly<Record<string, unknown>>[]>>;
|
|
124
|
+
/**
|
|
125
|
+
* Inserts `factories.*` rows through the `query` function `testRlsParity`
|
|
126
|
+
* takes, one parameterised `insert` per row with the row's own keys as quoted
|
|
127
|
+
* column names. `undefined` fields are left to the column default. Run it as
|
|
128
|
+
* the table owner, before RLS applies. Resolves to the number of rows
|
|
129
|
+
* inserted.
|
|
130
|
+
*/
|
|
131
|
+
export declare function seedRows(query: RlsQueryFn, rows: SeedRows): Promise<number>;
|
|
132
|
+
//#endregion
|
|
118
133
|
//#region src/testing/http-adapter/domain.d.ts
|
|
119
134
|
/**
|
|
120
135
|
* What a mount wires into its framework. Every value is server-side: the
|
|
@@ -124,9 +139,9 @@ export declare function snapshotFixture(policy: Policy, subject: unknown, option
|
|
|
124
139
|
type HttpScenarioDomain = {
|
|
125
140
|
readonly policy: typeof saasPolicy;
|
|
126
141
|
/**
|
|
127
|
-
* The verified principal for an `Authorization` header, with the plans of
|
|
128
|
-
*
|
|
129
|
-
*
|
|
142
|
+
* The verified principal for an `Authorization` header, with the plans of the
|
|
143
|
+
* org in the first segment of `path`. The path, not a route param, so the
|
|
144
|
+
* answer is the same in a global middleware that runs before routing.
|
|
130
145
|
*/
|
|
131
146
|
readonly subject: (authorization: string | null | undefined, path: string) => Promise<Principal | null>;
|
|
132
147
|
/** `subject` as a full `Subject` whose `expiresAt` is the token's `exp`. */
|
|
@@ -203,26 +218,30 @@ type HttpMounted = {
|
|
|
203
218
|
*
|
|
204
219
|
* - `GET /:org/projects/:id`: `protect(project.read, row)`, 200 with the row
|
|
205
220
|
* - `PATCH /:org/projects/:id`: `protect(project.update, row)`, 200
|
|
206
|
-
* - `POST /:org/projects`: `protect(project.create, body, { trusted: false })`,
|
|
221
|
+
* - `POST /:org/projects`: `protect(project.create, body, { trusted: false })`,
|
|
222
|
+
* 201 with the body
|
|
207
223
|
* - `DELETE /:org/projects/:id`: `protect(project.read, row)`, then the handler
|
|
208
224
|
* calls `permdock.assert(project.delete, row)`; 204
|
|
209
225
|
* - `POST /:org/projects/:id/files`: `protect(project.update, row)`, then the
|
|
210
|
-
* framework's own multipart parser reads field `file`; 201 `{ name, size
|
|
226
|
+
* framework's own multipart parser reads field `file`; 201 `{ name, size
|
|
227
|
+
* }`
|
|
211
228
|
* - `GET /:org/analytics`: `protect(analytics.read)`, 200
|
|
212
229
|
* - `POST /:org/api-keys`: `protect(apiKey.create)`, 201
|
|
213
230
|
* - `POST /:org/api-keys/revoke-all`: `protect(apiKey.revokeAll)`, 204
|
|
214
|
-
* - `GET /:org/admin/members`: in a sub-app, router or group;
|
|
215
|
-
*
|
|
231
|
+
* - `GET /:org/admin/members`: in a sub-app, router or group;
|
|
232
|
+
* `protect(member.list)`, 200
|
|
233
|
+
* - `POST /:org/permdock/access/v1/evaluations`: the adapter's decision
|
|
234
|
+
* endpoint
|
|
216
235
|
*
|
|
217
236
|
* A global `permdock()` middleware runs before every route.
|
|
218
237
|
*
|
|
219
238
|
* With `streams: true` it also serves `GET /:org/projects/:id/events`:
|
|
220
|
-
* `protect(project.read, row)` with the subject from `domain.session`,
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
* `
|
|
224
|
-
*
|
|
225
|
-
*
|
|
239
|
+
* `protect(project.read, row)` with the subject from `domain.session`, then a
|
|
240
|
+
* connection opened for `project.read` on the row with `revocations:
|
|
241
|
+
* domain.revocations`, streaming `domain.ticks(org)` as `text/event-stream`
|
|
242
|
+
* `data:` frames of JSON rows, dropping rows the subscriber cannot
|
|
243
|
+
* `project.update`, and ending with an `event: permdock` frame carrying the
|
|
244
|
+
* Problem Details when the connection aborts.
|
|
226
245
|
*/
|
|
227
246
|
readonly fetch?: (request: Request) => Promise<Response>;
|
|
228
247
|
/** RPC adapters map a call to a procedure and its error to an HTTP status. */
|
|
@@ -233,7 +252,10 @@ type HttpScenarioName = "tenant" | "roles" | "custom-roles" | "plans" | "expired
|
|
|
233
252
|
type HttpAdapterOptions = {
|
|
234
253
|
readonly name: string;
|
|
235
254
|
readonly mount: (domain: HttpScenarioDomain) => HttpMounted | Promise<HttpMounted>;
|
|
236
|
-
/**
|
|
255
|
+
/**
|
|
256
|
+
* Scenarios the transport cannot express (multipart over RPC), each with a
|
|
257
|
+
* reason.
|
|
258
|
+
*/
|
|
237
259
|
readonly skip?: Readonly<Partial<Record<HttpScenarioName, string>>>;
|
|
238
260
|
/** The mount serves the events stream; the `stream-*` scenarios run only then. */
|
|
239
261
|
readonly streams?: boolean;
|
|
@@ -254,9 +276,9 @@ export declare const AGENT_THROWING_USER = "throws";
|
|
|
254
276
|
export declare const AGENT_THROWING_ROW = "throws";
|
|
255
277
|
type AgentToolName = "project_read" | "api_keys_revoke_all";
|
|
256
278
|
/**
|
|
257
|
-
* What a mount wires into its adapter. The subject and the tenant come from
|
|
258
|
-
*
|
|
259
|
-
*
|
|
279
|
+
* What a mount wires into its adapter. The subject and the tenant come from the
|
|
280
|
+
* server-side context the mount builds for each call, never from the tool
|
|
281
|
+
* arguments.
|
|
260
282
|
*/
|
|
261
283
|
type AgentScenarioDomain = {
|
|
262
284
|
readonly policy: typeof saasPolicy;
|
|
@@ -266,9 +288,8 @@ type AgentScenarioDomain = {
|
|
|
266
288
|
*/
|
|
267
289
|
readonly subject: (user: string | null, org: string) => Principal | null;
|
|
268
290
|
/**
|
|
269
|
-
* `project_read` loads the row named by `args.id`: `null` for an unknown
|
|
270
|
-
*
|
|
271
|
-
* approval.
|
|
291
|
+
* `project_read` loads the row named by `args.id`: `null` for an unknown id,
|
|
292
|
+
* a throw for `AGENT_THROWING_ROW`. `api_keys_revoke_all` needs approval.
|
|
272
293
|
*/
|
|
273
294
|
readonly tools: ToolMap & { readonly [K in AgentToolName]: ToolMap[K]; };
|
|
274
295
|
readonly customRoles: CustomRoleSource;
|
|
@@ -303,7 +324,10 @@ type AgentAdapterOptions = {
|
|
|
303
324
|
export declare function testAgentAdapter(options: AgentAdapterOptions): void;
|
|
304
325
|
//#endregion
|
|
305
326
|
//#region src/testing/agent-runtime.d.ts
|
|
306
|
-
/**
|
|
327
|
+
/**
|
|
328
|
+
* The server-side context of one call; the subject and tenant come from here,
|
|
329
|
+
* never from arguments.
|
|
330
|
+
*/
|
|
307
331
|
type AgentRuntimeContext = {
|
|
308
332
|
/** `null` for a call with no authenticated user. */
|
|
309
333
|
readonly user: string | null;
|
|
@@ -314,7 +338,10 @@ type AgentRuntimeModel = "standard" | "frontier";
|
|
|
314
338
|
/** What a mount wires into its `AgentPermDock`. */
|
|
315
339
|
type AgentRuntimeDomain = {
|
|
316
340
|
readonly policy: typeof saasPolicy;
|
|
317
|
-
/**
|
|
341
|
+
/**
|
|
342
|
+
* The principal for `user` with the plans of `org`, or `null`. Throws for
|
|
343
|
+
* `AGENT_THROWING_USER`.
|
|
344
|
+
*/
|
|
318
345
|
readonly subject: (user: string | null, org: string) => Principal | null;
|
|
319
346
|
/**
|
|
320
347
|
* `project_read` loads the row named by `args.id`; `project_search` has a
|
|
@@ -415,16 +442,25 @@ type TodoUser = {
|
|
|
415
442
|
readonly identity: string;
|
|
416
443
|
readonly roles: readonly ("admin" | "editor" | "viewer" | "evil_genius")[];
|
|
417
444
|
};
|
|
418
|
-
/**
|
|
445
|
+
/**
|
|
446
|
+
* The AuthZEN interop Todo directory: each user is addressable by email or by
|
|
447
|
+
* identity.
|
|
448
|
+
*/
|
|
419
449
|
export declare const authzenTodoUsers: readonly TodoUser[];
|
|
420
450
|
type AuthzenTodoDefinition = {
|
|
421
451
|
readonly user: ResourceInit<unknown, readonly ["can_read_user"], readonly []>;
|
|
422
452
|
readonly todo: ResourceInit<unknown, readonly ["can_read_todos", "can_create_todo", "can_update_todo", "can_delete_todo"], readonly []>;
|
|
423
453
|
};
|
|
424
454
|
export declare const authzenTodoPermissions: InferPermissionTree<AuthzenTodoDefinition>;
|
|
425
|
-
/**
|
|
455
|
+
/**
|
|
456
|
+
* The interop Todo rules: viewers read, editors write their own, admins delete
|
|
457
|
+
* and evil geniuses update anything.
|
|
458
|
+
*/
|
|
426
459
|
export declare const authzenTodoPolicy: Policy;
|
|
427
|
-
/**
|
|
460
|
+
/**
|
|
461
|
+
* Rows for `resources.todo.list` and records for `subjects.list` in the Todo
|
|
462
|
+
* domain.
|
|
463
|
+
*/
|
|
428
464
|
export declare const authzenTodoData: {
|
|
429
465
|
readonly todos: readonly {
|
|
430
466
|
readonly id: string;
|
|
@@ -435,24 +471,33 @@ export declare const authzenTodoData: {
|
|
|
435
471
|
}[];
|
|
436
472
|
};
|
|
437
473
|
/**
|
|
438
|
-
* PermDock's vectors over the interop Todo domain, in the interop layout:
|
|
439
|
-
*
|
|
440
|
-
*
|
|
474
|
+
* PermDock's vectors over the interop Todo domain, in the interop layout: every
|
|
475
|
+
* user against every action on their own and on Rick's todo, one batch per
|
|
476
|
+
* user, and the three searches.
|
|
441
477
|
*/
|
|
442
478
|
export declare function authzenTodoVectors(): AuthzenVectors;
|
|
443
479
|
//#endregion
|
|
444
480
|
//#region src/testing/cloud-api/platform-checks.d.ts
|
|
445
481
|
type TestCloudPlatformOptions = {
|
|
446
|
-
/**
|
|
482
|
+
/**
|
|
483
|
+
* A `PERMDOCK_CLOUD_TOKEN` for `project`: read-only, pinned to one
|
|
484
|
+
* environment.
|
|
485
|
+
*/
|
|
447
486
|
readonly token: string;
|
|
448
487
|
/** The project the token reads; defaults to the environment. */
|
|
449
488
|
readonly project?: string;
|
|
450
|
-
/**
|
|
489
|
+
/**
|
|
490
|
+
* A project with no `cloud push` yet and a login token that reads it; the
|
|
491
|
+
* `policy-not-published` check is skipped without it.
|
|
492
|
+
*/
|
|
451
493
|
readonly unpublished?: {
|
|
452
494
|
readonly project: string;
|
|
453
495
|
readonly token: string;
|
|
454
496
|
};
|
|
455
|
-
/**
|
|
497
|
+
/**
|
|
498
|
+
* A login token with `projects:read` and without `policy:read`; the
|
|
499
|
+
* `insufficient_scope` check is skipped without it.
|
|
500
|
+
*/
|
|
456
501
|
readonly projectsOnly?: string;
|
|
457
502
|
/** Registers a test MCP client with RFC 7591; skipped unless true. */
|
|
458
503
|
readonly registration?: boolean;
|
|
@@ -470,13 +515,22 @@ type CloudApiKeys = {
|
|
|
470
515
|
type TestCloudApiOptions = {
|
|
471
516
|
readonly environment?: string;
|
|
472
517
|
readonly fetch?: typeof globalThis.fetch;
|
|
473
|
-
/**
|
|
518
|
+
/**
|
|
519
|
+
* Signs the `PermDock-Approver` tokens; its issuer is a trusted issuer for
|
|
520
|
+
* `approver`.
|
|
521
|
+
*/
|
|
474
522
|
readonly approver: CloudApproverOptions;
|
|
475
|
-
/**
|
|
523
|
+
/**
|
|
524
|
+
* A fresh `PermDock-Subject` token per call; the snapshot checks are skipped
|
|
525
|
+
* without it.
|
|
526
|
+
*/
|
|
476
527
|
readonly subject?: () => string | Promise<string>;
|
|
477
528
|
/** Verifies the environment's policy documents for `testPolicySource`. */
|
|
478
529
|
readonly verifier?: TokenVerifier;
|
|
479
|
-
/**
|
|
530
|
+
/**
|
|
531
|
+
* AuthZEN vectors for the hosted ADS, with the caller's credentials as
|
|
532
|
+
* `headers`.
|
|
533
|
+
*/
|
|
480
534
|
readonly authzen?: {
|
|
481
535
|
readonly vectors: AuthzenVectors;
|
|
482
536
|
readonly headers?: Readonly<Record<string, string>>;
|
|
@@ -488,18 +542,17 @@ type TestCloudApiOptions = {
|
|
|
488
542
|
* Runs the conformance runners and the HTTP contract checks against one
|
|
489
543
|
* PermDock Cloud environment, and validates every response body against
|
|
490
544
|
* `cloud-api-v1.json`. Point it at a test environment: it creates approvals,
|
|
491
|
-
* sends decision events and deliveries to `.invalid` addresses, and pushes
|
|
492
|
-
*
|
|
545
|
+
* sends decision events and deliveries to `.invalid` addresses, and pushes the
|
|
546
|
+
* catalog the environment already holds.
|
|
493
547
|
*/
|
|
494
548
|
export declare function testCloudApi(baseUrl: string, keys: CloudApiKeys, options: TestCloudApiOptions): void;
|
|
495
549
|
//#endregion
|
|
496
550
|
//#region src/testing/conformance/approvals.d.ts
|
|
497
551
|
type ApprovalStoreOptions = {
|
|
498
552
|
/**
|
|
499
|
-
* Opens a second client over the same backing storage, as a restarted
|
|
500
|
-
*
|
|
501
|
-
*
|
|
502
|
-
* skipped).
|
|
553
|
+
* Opens a second client over the same backing storage, as a restarted process
|
|
554
|
+
* would: for a hosted store, `() => cloud(...).approvals`. Omit it for stores
|
|
555
|
+
* that do not persist (the resume-after-restart case is then skipped).
|
|
503
556
|
*/
|
|
504
557
|
readonly reopen?: () => ApprovalStore | Promise<ApprovalStore>;
|
|
505
558
|
readonly capabilities?: {
|
|
@@ -514,8 +567,8 @@ type ApprovalStoreOptions = {
|
|
|
514
567
|
export declare function testApprovalStore(store: ApprovalStore, options?: ApprovalStoreOptions): void;
|
|
515
568
|
/**
|
|
516
569
|
* Checks an `ApprovalPolicySource`: entries are plain JSON, belong to the
|
|
517
|
-
* queried tenant or to none, and every entry loads against `policy` (an
|
|
518
|
-
*
|
|
570
|
+
* queried tenant or to none, and every entry loads against `policy` (an entry
|
|
571
|
+
* that does not would deny every call).
|
|
519
572
|
*/
|
|
520
573
|
export declare function testApprovalPolicySource(source: ApprovalPolicySource, options: {
|
|
521
574
|
readonly policy: Policy;
|
|
@@ -538,19 +591,19 @@ export declare function testApprovalDelegationSource(source: ApprovalDelegationS
|
|
|
538
591
|
readonly at?: string;
|
|
539
592
|
}): void;
|
|
540
593
|
/**
|
|
541
|
-
* Checks an `IdempotencyStore`: a stored response comes back as written
|
|
542
|
-
*
|
|
543
|
-
*
|
|
594
|
+
* Checks an `IdempotencyStore`: a stored response comes back as written until
|
|
595
|
+
* it expires, keys never share an entry, and a later `set` replaces an earlier
|
|
596
|
+
* one.
|
|
544
597
|
*/
|
|
545
598
|
export declare function testIdempotencyStore(store: IdempotencyStore): void;
|
|
546
599
|
//#endregion
|
|
547
600
|
//#region src/testing/conformance/where.d.ts
|
|
548
601
|
type WhereRow = Readonly<Record<string, unknown>>;
|
|
549
602
|
/**
|
|
550
|
-
* `matches` answers whether the compiled output selects `row`, for example
|
|
551
|
-
*
|
|
552
|
-
*
|
|
553
|
-
*
|
|
603
|
+
* `matches` answers whether the compiled output selects `row`, for example by
|
|
604
|
+
* running it against a table holding only that row. With it, every case must
|
|
605
|
+
* select the rows the in-memory evaluator keeps, including rows whose fields
|
|
606
|
+
* are NULL.
|
|
554
607
|
*/
|
|
555
608
|
export declare function testWhereCompiler<TTarget>(compiler: WhereCompiler<TTarget>, options: {
|
|
556
609
|
readonly target: TTarget;
|
|
@@ -569,8 +622,8 @@ export declare function testTokenVerifier(verifier: TokenVerifier, options?: {
|
|
|
569
622
|
}): void;
|
|
570
623
|
/**
|
|
571
624
|
* `key` is a live key the verifier knows, or a function issuing one (called
|
|
572
|
-
* once). `revoke`, when given, revokes it; the runner then expects the key
|
|
573
|
-
*
|
|
625
|
+
* once). `revoke`, when given, revokes it; the runner then expects the key to
|
|
626
|
+
* stop verifying.
|
|
574
627
|
*/
|
|
575
628
|
export declare function testCredentialVerifier(verifier: CredentialVerifier, options: {
|
|
576
629
|
readonly key: string | (() => string | Promise<string>);
|
|
@@ -587,6 +640,7 @@ export declare function testSnapshotSource(source: SnapshotSource): void;
|
|
|
587
640
|
export declare function testPolicySource(source: PolicySource, options?: {
|
|
588
641
|
readonly policy?: Policy;
|
|
589
642
|
}): void;
|
|
643
|
+
export declare function testVersionCache(cache: VersionCache): void;
|
|
590
644
|
//#endregion
|
|
591
645
|
//#region src/testing/conformance/providers.d.ts
|
|
592
646
|
type DecisionProviderRunnerOptions = {
|
|
@@ -628,14 +682,17 @@ export declare function testRelationSource(source: RelationSource, options: {
|
|
|
628
682
|
/**
|
|
629
683
|
* Checks a `PrincipalSource`: `principal` answers each listed id with the
|
|
630
684
|
* expected principal or `null`, never another id; `principalByIdentity`
|
|
631
|
-
* resolves each listed identity to the expected principal id or `null`, and
|
|
632
|
-
*
|
|
685
|
+
* resolves each listed identity to the expected principal id or `null`, and an
|
|
686
|
+
* email matches trimmed and in any case.
|
|
633
687
|
*/
|
|
634
688
|
export declare function testPrincipalSource(source: PrincipalSource, options: {
|
|
635
689
|
readonly principals: readonly {
|
|
636
690
|
readonly id: string;
|
|
637
691
|
readonly tenant?: string;
|
|
638
|
-
/**
|
|
692
|
+
/**
|
|
693
|
+
* The principal `principal(id)` returns, or `null` for none; omit to
|
|
694
|
+
* check only the shape.
|
|
695
|
+
*/
|
|
639
696
|
readonly expect?: Principal | null;
|
|
640
697
|
}[];
|
|
641
698
|
readonly identities?: readonly {
|
|
@@ -647,41 +704,50 @@ export declare function testPrincipalSource(source: PrincipalSource, options: {
|
|
|
647
704
|
//#endregion
|
|
648
705
|
//#region src/testing/conformance/automations.d.ts
|
|
649
706
|
/**
|
|
650
|
-
* Checks an `AutomationSource`: `automation(id)` answers each listed id
|
|
651
|
-
*
|
|
652
|
-
*
|
|
653
|
-
*
|
|
707
|
+
* Checks an `AutomationSource`: `automation(id)` answers each listed id with a
|
|
708
|
+
* valid Automation v1 record of that id or `null`, never another id; a record
|
|
709
|
+
* held to one tenant is `null` when asked for another; an empty or unknown id
|
|
710
|
+
* is `null`.
|
|
654
711
|
*/
|
|
655
712
|
export declare function testAutomationSource(source: AutomationSource, options: {
|
|
656
713
|
readonly automations: readonly {
|
|
657
714
|
readonly id: string;
|
|
658
715
|
readonly tenant?: string;
|
|
659
|
-
/**
|
|
716
|
+
/**
|
|
717
|
+
* The record `automation(id)` returns, or `null` for none; omit to check
|
|
718
|
+
* only the shape.
|
|
719
|
+
*/
|
|
660
720
|
readonly expect?: Automation | null;
|
|
661
721
|
}[];
|
|
662
722
|
}): void;
|
|
663
723
|
/**
|
|
664
|
-
* Checks a `SupportSessionSource`: `session(id)` answers each listed id
|
|
665
|
-
*
|
|
666
|
-
*
|
|
724
|
+
* Checks a `SupportSessionSource`: `session(id)` answers each listed id with a
|
|
725
|
+
* record of that id or `null`, never another id; `ended` is a boolean when
|
|
726
|
+
* present; an empty or unknown id is `null`.
|
|
667
727
|
*/
|
|
668
728
|
export declare function testSupportSessionSource(source: SupportSessionSource, options: {
|
|
669
729
|
readonly sessions: readonly {
|
|
670
730
|
readonly id: string;
|
|
671
|
-
/**
|
|
731
|
+
/**
|
|
732
|
+
* `true` for an ended session, `false` for a live one, `null` for an
|
|
733
|
+
* unknown one.
|
|
734
|
+
*/
|
|
672
735
|
readonly ended?: boolean | null;
|
|
673
736
|
}[];
|
|
674
737
|
}): void;
|
|
675
738
|
/**
|
|
676
|
-
* Checks an `ApprovalWaiter`: a wait ends when its token is woken and not
|
|
677
|
-
*
|
|
678
|
-
*
|
|
679
|
-
* Pass `expiry: false` or `abort: false` for a waiter whose runner
|
|
680
|
-
* timer or no cancellation, `pending` when the waiter reads a store,
|
|
681
|
-
* `parked` when a wait parks asynchronously.
|
|
739
|
+
* Checks an `ApprovalWaiter`: a wait ends when its token is woken and not when
|
|
740
|
+
* another token is; waking a token nobody waits on resolves; a wait whose
|
|
741
|
+
* `expiresAt` has passed ends; an aborted `signal` rejects the wait with its
|
|
742
|
+
* reason. Pass `expiry: false` or `abort: false` for a waiter whose runner
|
|
743
|
+
* offers no timer or no cancellation, `pending` when the waiter reads a store,
|
|
744
|
+
* and `parked` when a wait parks asynchronously.
|
|
682
745
|
*/
|
|
683
746
|
export declare function testApprovalWaiter(waiter: ApprovalWaiter, options?: {
|
|
684
|
-
/**
|
|
747
|
+
/**
|
|
748
|
+
* Opens a pending approval request and returns its token; a fixed token per
|
|
749
|
+
* label when absent.
|
|
750
|
+
*/
|
|
685
751
|
readonly pending?: (label: string) => string | Promise<string>;
|
|
686
752
|
/** Resolves once `wait(token)` has parked; one macrotask when absent. */
|
|
687
753
|
readonly parked?: (token: string) => Promise<void>;
|
|
@@ -692,18 +758,24 @@ export declare function testApprovalWaiter(waiter: ApprovalWaiter, options?: {
|
|
|
692
758
|
}): void;
|
|
693
759
|
//#endregion
|
|
694
760
|
//#region src/testing/delivery-transport.d.ts
|
|
695
|
-
/**
|
|
761
|
+
/**
|
|
762
|
+
* How a provider fails on its next call: a retryable error, a final error, or a
|
|
763
|
+
* throw from its client.
|
|
764
|
+
*/
|
|
696
765
|
type DeliveryFailureKind = "retryable" | "final" | "throw";
|
|
697
766
|
type DeliveryTransportHarness<C extends DeliveryChannel> = {
|
|
698
767
|
readonly transport: DeliveryTransport<C>;
|
|
699
|
-
/**
|
|
700
|
-
|
|
768
|
+
/**
|
|
769
|
+
* What the provider accepted, one entry per delivery, with the idempotency
|
|
770
|
+
* key it received.
|
|
771
|
+
*/
|
|
772
|
+
received: () => readonly {
|
|
701
773
|
readonly idempotencyKey: string;
|
|
702
774
|
}[] | Promise<readonly {
|
|
703
775
|
readonly idempotencyKey: string;
|
|
704
776
|
}[]>;
|
|
705
777
|
/** Makes the provider's next call fail this way. */
|
|
706
|
-
fail(kind: DeliveryFailureKind)
|
|
778
|
+
fail: (kind: DeliveryFailureKind) => void;
|
|
707
779
|
};
|
|
708
780
|
type DeliveryTransportOptions<C extends DeliveryChannel> = {
|
|
709
781
|
readonly channel: C;
|
|
@@ -711,13 +783,13 @@ type DeliveryTransportOptions<C extends DeliveryChannel> = {
|
|
|
711
783
|
readonly address: string;
|
|
712
784
|
readonly message: TransportMessages[C];
|
|
713
785
|
/** A fresh harness per test. */
|
|
714
|
-
create()
|
|
786
|
+
create: () => DeliveryTransportHarness<C>;
|
|
715
787
|
};
|
|
716
788
|
/**
|
|
717
789
|
* Conformance for a `DeliveryTransport`: it sends a checked target with its
|
|
718
|
-
* idempotency key, keeps the key on a retry, refuses a target without a
|
|
719
|
-
*
|
|
720
|
-
*
|
|
790
|
+
* idempotency key, keeps the key on a retry, refuses a target without a granted
|
|
791
|
+
* decision before calling the provider, and maps provider errors to retryable
|
|
792
|
+
* or final failures without rejecting.
|
|
721
793
|
*/
|
|
722
794
|
export declare function testDeliveryTransport<C extends DeliveryChannel>(name: string, options: DeliveryTransportOptions<C>): void;
|
|
723
795
|
//#endregion
|
|
@@ -731,9 +803,15 @@ export declare function testMembershipSource(source: MembershipSource, options:
|
|
|
731
803
|
readonly kind?: string;
|
|
732
804
|
}[];
|
|
733
805
|
readonly expect?: Record<string, readonly Membership[]>;
|
|
734
|
-
/**
|
|
806
|
+
/**
|
|
807
|
+
* With the policy, every membership must name one of its scopes and carry
|
|
808
|
+
* its parent ids.
|
|
809
|
+
*/
|
|
735
810
|
readonly policy?: Policy;
|
|
736
|
-
/**
|
|
811
|
+
/**
|
|
812
|
+
* Passed to every `membershipsFor`; a source keyed by tenant answers
|
|
813
|
+
* nothing without one.
|
|
814
|
+
*/
|
|
737
815
|
readonly tenant?: string;
|
|
738
816
|
}): void;
|
|
739
817
|
export declare function testEntitlementSource(source: EntitlementSource, options: {
|
|
@@ -790,16 +868,18 @@ export declare const jwtFixtureTokens: {
|
|
|
790
868
|
//#endregion
|
|
791
869
|
//#region src/testing/supabase-fixtures.d.ts
|
|
792
870
|
/**
|
|
793
|
-
* Claim sets in the shape the Supabase custom access token hook produces (the
|
|
794
|
-
* `user_role` claim, optionally mirrored into `app_metadata`, plus
|
|
795
|
-
* multi-org apps). `tenantPlans` has scoped
|
|
796
|
-
* `
|
|
797
|
-
*
|
|
798
|
-
*
|
|
799
|
-
* `
|
|
800
|
-
*
|
|
801
|
-
* `
|
|
802
|
-
* `
|
|
871
|
+
* Claim sets in the shape the Supabase custom access token hook produces (the
|
|
872
|
+
* RBAC guide's `user_role` claim, optionally mirrored into `app_metadata`, plus
|
|
873
|
+
* a `memberships` array for multi-org apps). `tenantPlans` has scoped
|
|
874
|
+
* memberships, `tenant_id` and per-tenant plans in `features`, read with
|
|
875
|
+
* `claims: { plans: 'features' }`. `full` sets every field of the claim
|
|
876
|
+
* contract plus a `hook.claims` extra claim; `portalContact`, `oauthClient` and
|
|
877
|
+
* `actChain` cover a customer contact, a Supabase OAuth server token and an RFC
|
|
878
|
+
* 8693 chain. `supportSession`, `supportSessionReadOnly` and `impersonation`
|
|
879
|
+
* are the `act.kind` tokens of a support tool; `anonymousSignIn` is a
|
|
880
|
+
* `signInAnonymously()` token read with `anonymousSignIns: 'deny'`. Every
|
|
881
|
+
* fixture passes `supabaseClaims()` and `schemas/supabase-claims-v1.json`.
|
|
882
|
+
* Plain data: no Supabase types.
|
|
803
883
|
*/
|
|
804
884
|
type SupabaseClaimFixture = {
|
|
805
885
|
readonly claims: Readonly<Record<string, unknown>>;
|
|
@@ -842,7 +922,10 @@ type SupabaseClaimFixture = {
|
|
|
842
922
|
readonly sessionId: string;
|
|
843
923
|
readonly readOnly: boolean;
|
|
844
924
|
};
|
|
845
|
-
/**
|
|
925
|
+
/**
|
|
926
|
+
* `subject.delegation`: the `scope` claim and the `act` chain of an
|
|
927
|
+
* `oauth-client` actor.
|
|
928
|
+
*/
|
|
846
929
|
readonly delegation?: {
|
|
847
930
|
readonly scopes?: readonly string[];
|
|
848
931
|
readonly chain?: Readonly<Record<string, unknown>>;
|
|
@@ -855,7 +938,8 @@ export declare const supabaseClaimFixtures: Readonly<Record<SupabaseClaimFixture
|
|
|
855
938
|
* `supabaseClaimFixtures` as a `supabase/sdk` conformance vector file
|
|
856
939
|
* (`schema/conformance.schema.json`): each case's `input` is a verified
|
|
857
940
|
* `getClaims()` payload and the `subjectFromSupabase` options, `expected` the
|
|
858
|
-
* subject fields it maps to. `JSON.stringify` it for a port in another
|
|
941
|
+
* subject fields it maps to. `JSON.stringify` it for a port in another
|
|
942
|
+
* language.
|
|
859
943
|
*/
|
|
860
944
|
type SupabaseClaimVectors = {
|
|
861
945
|
readonly feature: "auth.session.get_claims";
|
|
@@ -872,15 +956,15 @@ export declare const supabaseClaimVectors: SupabaseClaimVectors;
|
|
|
872
956
|
/**
|
|
873
957
|
* The `permdock supabase inspect --json` manifest for a policy with one
|
|
874
958
|
* `tenant` scope, the default `supabase.hook` and a `features` claim from
|
|
875
|
-
* `public.feature_claims`. A package that reads the manifest tests its
|
|
876
|
-
*
|
|
959
|
+
* `public.feature_claims`. A package that reads the manifest tests its parser
|
|
960
|
+
* against this value.
|
|
877
961
|
*/
|
|
878
962
|
export declare const supabaseHookManifestFixture: SupabaseHookManifest;
|
|
879
963
|
//#endregion
|
|
880
964
|
//#region src/core/problem-types.d.ts
|
|
881
965
|
/**
|
|
882
|
-
* The Problem Details types PermDock defines (RFC 9457 section 4). Every
|
|
883
|
-
*
|
|
966
|
+
* The Problem Details types PermDock defines (RFC 9457 section 4). Every other
|
|
967
|
+
* status answers with `about:blank` and its RFC 9110 reason phrase.
|
|
884
968
|
*/
|
|
885
969
|
declare const PROBLEM_TYPES: readonly ["denied", "approval-required", "validation", "step-up-required", "not-entitled", "rate-limited", "limit-unavailable", "invalid-signature", "approver-not-eligible"];
|
|
886
970
|
type ProblemType = (typeof PROBLEM_TYPES)[number];
|
|
@@ -894,4 +978,4 @@ type ProblemType = (typeof PROBLEM_TYPES)[number];
|
|
|
894
978
|
*/
|
|
895
979
|
export declare const PROBLEM_EXAMPLES: Readonly<Record<ProblemType, ProblemDetails>>;
|
|
896
980
|
//#endregion
|
|
897
|
-
export { type AgentAdapterOptions, type AgentCall, type AgentMounted, type AgentOutcome, type AgentRuntimeContext, type AgentRuntimeDomain, type AgentRuntimeModel, type AgentRuntimeMounted, type AgentRuntimeOperation, type AgentRuntimeOptions, type AgentRuntimeScenarioName, type AgentScenarioDomain, type AgentScenarioName, type AgentToolName, type ApprovalStoreOptions, type AuthzenEvaluationVector, type AuthzenEvaluationsVector, type AuthzenSearchVector, type AuthzenVectors, type ClientParityCase, type ClientParityOptions, type ClientStoreFactory, type ClientStoreFactoryOptions, type ClientStoreHandle, type ClientStorePermDock, type ClientStoreStatus, type CloudApiKeys, type DecisionProviderRunnerOptions, type DeliveryFailureKind, type DeliveryTransportHarness, type DeliveryTransportOptions, type DescribePolicyConfig, type HttpAdapterOptions, type HttpCall, type HttpMounted, type HttpOp, type HttpResult, type HttpScenarioDomain, type HttpScenarioName, type LegacyParityCase, type MatrixCell, type MatrixOutcome, type OrmParityCase, type OrmParityOptions, type OrmParityReport, type OrmParityRunInput, type OrmParityScenario, type PolicyMatrixCell, type PolicyMatrixReport, type RlsDbOutcome, type RlsFieldsOutcome, type RlsParityCase, type RlsParityFixture, type RlsParityOptions, type RlsParityReport, type RlsParitySubject, type RlsQueryFn, type RlsQueryResult, type SupabaseClaimFixture, type SupabaseClaimFixtureName, type SupabaseClaimVectors, type TestAuthzenOptions, type TestCloudApiOptions, type TestCloudPlatformOptions, expectTypeOf, policyMatrix, supabaseMembershipsBudget, testOrmParity, testRlsParity };
|
|
981
|
+
export { type AgentAdapterOptions, type AgentCall, type AgentMounted, type AgentOutcome, type AgentRuntimeContext, type AgentRuntimeDomain, type AgentRuntimeModel, type AgentRuntimeMounted, type AgentRuntimeOperation, type AgentRuntimeOptions, type AgentRuntimeScenarioName, type AgentScenarioDomain, type AgentScenarioName, type AgentToolName, type ApprovalStoreOptions, type AuthzenEvaluationVector, type AuthzenEvaluationsVector, type AuthzenSearchVector, type AuthzenVectors, type ClientParityCase, type ClientParityOptions, type ClientStoreFactory, type ClientStoreFactoryOptions, type ClientStoreHandle, type ClientStorePermDock, type ClientStoreStatus, type CloudApiKeys, type DecisionProviderRunnerOptions, type DeliveryFailureKind, type DeliveryTransportHarness, type DeliveryTransportOptions, type DescribePolicyConfig, type HttpAdapterOptions, type HttpCall, type HttpMounted, type HttpOp, type HttpResult, type HttpScenarioDomain, type HttpScenarioName, type LegacyParityCase, type MatrixCell, type MatrixOutcome, type OrmParityCase, type OrmParityOptions, type OrmParityReport, type OrmParityRunInput, type OrmParityScenario, type PolicyMatrixCell, type PolicyMatrixReport, type RlsDbOutcome, type RlsFieldsOutcome, type RlsParityCase, type RlsParityFixture, type RlsParityOptions, type RlsParityReport, type RlsParitySubject, type RlsQueryFn, type RlsQueryResult, type SeedRows, type SupabaseClaimFixture, type SupabaseClaimFixtureName, type SupabaseClaimVectors, type TestAuthzenOptions, type TestCloudApiOptions, type TestCloudPlatformOptions, expectTypeOf, policyMatrix, supabaseMembershipsBudget, testOrmParity, testRlsParity };
|