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,8 +1,8 @@
|
|
|
1
1
|
import { n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
3
|
-
import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-
|
|
4
|
-
import { r as parseAppData, t as assertAppData } from "./app-data-
|
|
5
|
-
import { f as normaliseRelation, h as restrictedStopsOf, i as assertIncludes, n as RESOURCE_NAME, r as assertGraphTargets, t as LEVEL_NAME } from "./resource-relations-
|
|
2
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-CUvURzHp.js";
|
|
4
|
+
import { r as parseAppData, t as assertAppData } from "./app-data-UNNm07jV.js";
|
|
5
|
+
import { f as normaliseRelation, h as restrictedStopsOf, i as assertIncludes, n as RESOURCE_NAME, r as assertGraphTargets, t as LEVEL_NAME } from "./resource-relations-8-pCScBO.js";
|
|
6
6
|
//#region src/core/brands.ts
|
|
7
7
|
const RESOURCE_BRAND = Symbol.for("permdock.resource");
|
|
8
8
|
const TREE_REGISTRY = Symbol.for("permdock.registry");
|
|
@@ -91,7 +91,10 @@ function formerKeys(permission) {
|
|
|
91
91
|
const value = Reflect.get(permission, LEAF_FORMER);
|
|
92
92
|
return isReadonlyArray(value) ? value.filter((item) => typeof item === "string") : [];
|
|
93
93
|
}
|
|
94
|
-
/**
|
|
94
|
+
/**
|
|
95
|
+
* The OAuth scope strings `permission` used to have: each former key with `.`
|
|
96
|
+
* as `:`.
|
|
97
|
+
*/
|
|
95
98
|
function formerScopes(permission) {
|
|
96
99
|
return formerKeys(permission).map(keyToScope);
|
|
97
100
|
}
|
|
@@ -183,6 +186,9 @@ function materialiseResource(init, path, registry, leaves, build) {
|
|
|
183
186
|
levels[levelName] = freezeDeep({ ...condition });
|
|
184
187
|
}
|
|
185
188
|
if (Object.keys(levels).length > 0 && instanceSet.size === 0) throw new Error(`PermDock: resource '${name}' declares levels but no instance actions`);
|
|
189
|
+
const ordered = init.options.orderedLevels;
|
|
190
|
+
if (ordered !== void 0 && ordered !== true) throw new Error(`PermDock: orderedLevels on '${name}' must be true when set`);
|
|
191
|
+
if (ordered === true && Object.keys(levels).length < 2) throw new Error(`PermDock: resource '${name}' sets orderedLevels with fewer than two levels`);
|
|
186
192
|
const meta = resourceMetaFor(name, init.options.meta, build.x?.resource);
|
|
187
193
|
const resourceNode = Object.freeze({
|
|
188
194
|
...meta === void 0 ? {} : { meta },
|
|
@@ -199,7 +205,8 @@ function materialiseResource(init, path, registry, leaves, build) {
|
|
|
199
205
|
disclosure,
|
|
200
206
|
instanceActions: instanceSet,
|
|
201
207
|
collectionActions: collectionSet,
|
|
202
|
-
levels: Object.freeze(levels)
|
|
208
|
+
levels: Object.freeze(levels),
|
|
209
|
+
...ordered === true ? { orderedLevels: true } : {}
|
|
203
210
|
});
|
|
204
211
|
assertIncludes(resourceNode);
|
|
205
212
|
registry.set(name, resourceNode);
|
|
@@ -211,7 +218,10 @@ function materialiseResource(init, path, registry, leaves, build) {
|
|
|
211
218
|
});
|
|
212
219
|
return freezeDeep(node);
|
|
213
220
|
}
|
|
214
|
-
/**
|
|
221
|
+
/**
|
|
222
|
+
* The resource a `definePermissions` resource node was built from, read from
|
|
223
|
+
* the node itself.
|
|
224
|
+
*/
|
|
215
225
|
function resourceOfNode(node) {
|
|
216
226
|
if (!Object.hasOwn(node, NODE_RESOURCE)) return;
|
|
217
227
|
const value = Reflect.get(node, NODE_RESOURCE);
|
|
@@ -261,7 +271,10 @@ function getResource(tree, name) {
|
|
|
261
271
|
return getRegistry(tree).get(name);
|
|
262
272
|
}
|
|
263
273
|
const RENAMED_KEY = /^\S+$/u;
|
|
264
|
-
/**
|
|
274
|
+
/**
|
|
275
|
+
* Current key to its former keys, from the `renamed` option; targets are
|
|
276
|
+
* checked once leaves exist.
|
|
277
|
+
*/
|
|
265
278
|
function formerByKey(renamed) {
|
|
266
279
|
const former = /* @__PURE__ */ new Map();
|
|
267
280
|
if (renamed === void 0) return former;
|
|
@@ -274,8 +287,8 @@ function formerByKey(renamed) {
|
|
|
274
287
|
return former;
|
|
275
288
|
}
|
|
276
289
|
/**
|
|
277
|
-
* Every current key is unique, every former key names exactly one leaf, and
|
|
278
|
-
*
|
|
290
|
+
* Every current key is unique, every former key names exactly one leaf, and no
|
|
291
|
+
* former key is also a current key, so a string resolves to one leaf.
|
|
279
292
|
*/
|
|
280
293
|
function assertKeys(leaves, former) {
|
|
281
294
|
const current = /* @__PURE__ */ new Set();
|
|
@@ -11,7 +11,10 @@ type AppData = Readonly<Record<string, MetaValue>>;
|
|
|
11
11
|
* its output is the type PermDock gives the `x` field it checks.
|
|
12
12
|
*/
|
|
13
13
|
type AppDataSchema<X = AppData> = StandardSchemaV1<unknown, X>;
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* A leaf whose `meta.x` is typed by a schema; intersected so it stays
|
|
16
|
+
* assignable to the untyped leaf.
|
|
17
|
+
*/
|
|
15
18
|
type WithX<L, X> = [X] extends [never] ? L : L & {
|
|
16
19
|
readonly meta: {
|
|
17
20
|
readonly x?: Readonly<X>;
|
|
@@ -22,9 +25,26 @@ type WithX<L, X> = [X] extends [never] ? L : L & {
|
|
|
22
25
|
declare const RESOURCE_BRAND: unique symbol;
|
|
23
26
|
/**
|
|
24
27
|
* Phantom key carrying a tree's resource `x` type for `getResource`. Exported
|
|
25
|
-
* as a type only, so a consumer's declaration emit can name it; it has no
|
|
28
|
+
* as a type only, so a consumer's declaration emit can name it; it has no
|
|
29
|
+
* value.
|
|
26
30
|
*/
|
|
27
31
|
declare const RESOURCE_X: unique symbol;
|
|
32
|
+
/**
|
|
33
|
+
* Phantom key carrying the literal `name` a `resource(…, { name })` was given,
|
|
34
|
+
* so its leaves type `resource` by that name rather than the path segment. Type
|
|
35
|
+
* only; it has no value.
|
|
36
|
+
*/
|
|
37
|
+
declare const RESOURCE_NAME: unique symbol;
|
|
38
|
+
/**
|
|
39
|
+
* Phantom key carrying a policy's `scopes` input type for `ScopeNameOf`. Type
|
|
40
|
+
* only; it has no value.
|
|
41
|
+
*/
|
|
42
|
+
declare const POLICY_SCOPES: unique symbol;
|
|
43
|
+
/**
|
|
44
|
+
* Phantom key carrying a permission's row type for `RowOf`. Type only; a leaf
|
|
45
|
+
* never has it at run time, so leaves stay plain JSON.
|
|
46
|
+
*/
|
|
47
|
+
declare const PERMISSION_ROW: unique symbol;
|
|
28
48
|
//#endregion
|
|
29
49
|
//#region src/core/permission-types.d.ts
|
|
30
50
|
/** `definePermissions` options. */
|
|
@@ -37,24 +57,33 @@ type PermissionsOptions<PX = never, RX = never> = {
|
|
|
37
57
|
*/
|
|
38
58
|
readonly renamed?: Readonly<Record<string, string>>;
|
|
39
59
|
/**
|
|
40
|
-
* Standard Schemas for app data. `permission` checks every action's
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
60
|
+
* Standard Schemas for app data. `permission` checks every action's `meta.x`
|
|
61
|
+
* and types it on the leaves; `resource` checks every resource's `meta.x` and
|
|
62
|
+
* types it on `getResource`. Both validate synchronously at definition time
|
|
63
|
+
* and throw on invalid data.
|
|
44
64
|
*/
|
|
45
65
|
readonly x?: {
|
|
46
66
|
readonly permission?: AppDataSchema<PX>;
|
|
47
67
|
readonly resource?: AppDataSchema<RX>;
|
|
48
68
|
};
|
|
49
69
|
};
|
|
50
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* A resource's metadata. PermDock carries it to the catalog and never reads
|
|
72
|
+
* `x`.
|
|
73
|
+
*/
|
|
51
74
|
type ResourceMeta<X = AppData> = {
|
|
52
75
|
readonly title?: string;
|
|
53
76
|
readonly description?: string;
|
|
54
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* Data the application owns. Plain JSON, typed by `definePermissions(…, { x:
|
|
79
|
+
* { resource } })`.
|
|
80
|
+
*/
|
|
55
81
|
readonly x?: X;
|
|
56
82
|
};
|
|
57
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* A tree whose resources carry `meta.x` of type `X`, read through
|
|
85
|
+
* `getResource`.
|
|
86
|
+
*/
|
|
58
87
|
type ResourceXTree<X> = {
|
|
59
88
|
readonly [RESOURCE_X]?: X;
|
|
60
89
|
};
|
|
@@ -63,7 +92,10 @@ type ActionMeta = {
|
|
|
63
92
|
readonly description?: string;
|
|
64
93
|
readonly tags?: readonly string[];
|
|
65
94
|
readonly readOnly?: boolean;
|
|
66
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* The action may destroy or overwrite data; only meaningful when not
|
|
97
|
+
* `readOnly`.
|
|
98
|
+
*/
|
|
67
99
|
readonly destructive?: boolean;
|
|
68
100
|
/** Repeating the action with the same input has no further effect. */
|
|
69
101
|
readonly idempotent?: boolean;
|
|
@@ -72,12 +104,15 @@ type ActionMeta = {
|
|
|
72
104
|
* assign the whole custom-role ceiling, not only what they hold themselves.
|
|
73
105
|
*/
|
|
74
106
|
readonly manageRoles?: boolean;
|
|
75
|
-
/**
|
|
107
|
+
/**
|
|
108
|
+
* Set by a generator (`permdock openapi import`) to the operation an action
|
|
109
|
+
* was inferred from.
|
|
110
|
+
*/
|
|
76
111
|
readonly inferredFrom?: string;
|
|
77
112
|
/**
|
|
78
113
|
* Data the application owns, such as a risk level or an undo window. Plain
|
|
79
|
-
* JSON; PermDock carries it on the leaf, the catalog and snapshots and
|
|
80
|
-
*
|
|
114
|
+
* JSON; PermDock carries it on the leaf, the catalog and snapshots and never
|
|
115
|
+
* reads it. `definePermissions(…, { x: { permission } })` types it.
|
|
81
116
|
*/
|
|
82
117
|
readonly x?: AppData;
|
|
83
118
|
};
|
|
@@ -89,7 +124,17 @@ type Permission<K extends string = string, T = unknown, Kind extends PermissionK
|
|
|
89
124
|
readonly action: string;
|
|
90
125
|
readonly meta: ActionMeta;
|
|
91
126
|
readonly kind: Kind;
|
|
92
|
-
|
|
127
|
+
/**
|
|
128
|
+
* The resource row type. Method syntax keeps it bivariant: a typed leaf is
|
|
129
|
+
* still a `Permission`, and an untyped one still takes a typed closure.
|
|
130
|
+
*/
|
|
131
|
+
[PERMISSION_ROW]?(row: T): void;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* The row type of a permission's resource; `unknown` for an untyped
|
|
135
|
+
* `Permission`.
|
|
136
|
+
*/
|
|
137
|
+
type RowOf<P> = P extends Permission<string, infer T> ? T : unknown;
|
|
93
138
|
type ResourceParent = {
|
|
94
139
|
readonly field: string;
|
|
95
140
|
readonly resource: string;
|
|
@@ -101,15 +146,21 @@ type RelationIncludes = {
|
|
|
101
146
|
/** The row's `field` holds the principal id (or, with `memberOf`, a scope id). */
|
|
102
147
|
type FieldRelation = RelationIncludes & {
|
|
103
148
|
readonly field: string;
|
|
104
|
-
/**
|
|
149
|
+
/**
|
|
150
|
+
* A declared scope name (or the `tenant` / `team` alias): the field holds
|
|
151
|
+
* that scope's id.
|
|
152
|
+
*/
|
|
105
153
|
readonly memberOf?: string;
|
|
106
154
|
};
|
|
107
|
-
/**
|
|
155
|
+
/**
|
|
156
|
+
* Literal values an edge row's columns must hold, so one table backs several
|
|
157
|
+
* relations.
|
|
158
|
+
*/
|
|
108
159
|
type EdgeMatch = Readonly<Record<string, string | number | boolean>>;
|
|
109
160
|
/**
|
|
110
|
-
* One group resource of an edge: the relation whoever the row names must
|
|
111
|
-
*
|
|
112
|
-
*
|
|
161
|
+
* One group resource of an edge: the relation whoever the row names must hold
|
|
162
|
+
* on the group, and, when the group's id has its own typed column, that column
|
|
163
|
+
* in place of the edge's `subject`.
|
|
113
164
|
*/
|
|
114
165
|
type EdgeGroup = string | {
|
|
115
166
|
readonly relation: string;
|
|
@@ -117,12 +168,12 @@ type EdgeGroup = string | {
|
|
|
117
168
|
};
|
|
118
169
|
/**
|
|
119
170
|
* Edge rows that name a group instead of a principal: `column` holds the
|
|
120
|
-
* resource name, `subject` the group's id, and the row holds for whoever
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
171
|
+
* resource name, `subject` the group's id, and the row holds for whoever holds
|
|
172
|
+
* `resources[<name>]` on that group. A null `column` (or `direct`) names a
|
|
173
|
+
* principal; any other value matches nothing. A group with its own `subject`
|
|
174
|
+
* column reads the group's id from it; without `column`, a row names that group
|
|
175
|
+
* when the column is not null, and a principal when the edge's `subject` is not
|
|
176
|
+
* null.
|
|
126
177
|
*/
|
|
127
178
|
type EdgeGroups = {
|
|
128
179
|
/** Required unless every group names its own `subject` column. */
|
|
@@ -131,7 +182,10 @@ type EdgeGroups = {
|
|
|
131
182
|
/** The `column` value of a row naming a principal, besides `null`. */
|
|
132
183
|
readonly direct?: string;
|
|
133
184
|
};
|
|
134
|
-
/**
|
|
185
|
+
/**
|
|
186
|
+
* One row per holder in an edge table: `object` holds the resource id,
|
|
187
|
+
* `subject` the principal id.
|
|
188
|
+
*/
|
|
135
189
|
type EdgeRelation = RelationIncludes & {
|
|
136
190
|
readonly edge: string;
|
|
137
191
|
/** Default `<resource>_id`. */
|
|
@@ -143,10 +197,16 @@ type EdgeRelation = RelationIncludes & {
|
|
|
143
197
|
readonly match?: EdgeMatch;
|
|
144
198
|
readonly groups?: EdgeGroups;
|
|
145
199
|
};
|
|
146
|
-
/**
|
|
200
|
+
/**
|
|
201
|
+
* On a principal resource: the row's `principal` column holds the principal who
|
|
202
|
+
* holds the relation over it.
|
|
203
|
+
*/
|
|
147
204
|
type PrincipalRelation = RelationIncludes & {
|
|
148
205
|
readonly principal: string;
|
|
149
|
-
/**
|
|
206
|
+
/**
|
|
207
|
+
* Timestamp columns bounding when the relation holds; `null` leaves that side
|
|
208
|
+
* open.
|
|
209
|
+
*/
|
|
150
210
|
readonly period?: {
|
|
151
211
|
readonly startsAt?: string;
|
|
152
212
|
readonly expiresAt?: string;
|
|
@@ -158,7 +218,10 @@ type ComputedRelation = {
|
|
|
158
218
|
};
|
|
159
219
|
type ResourceRelation = FieldRelation | EdgeRelation | PrincipalRelation | ComputedRelation;
|
|
160
220
|
type ResourceRelationInput = string | ResourceRelation;
|
|
161
|
-
/**
|
|
221
|
+
/**
|
|
222
|
+
* A to-one link from a row to another resource's instance, walked by `through:
|
|
223
|
+
* [<link>]`.
|
|
224
|
+
*/
|
|
162
225
|
type ResourceLink = {
|
|
163
226
|
readonly field: string;
|
|
164
227
|
readonly resource: string;
|
|
@@ -170,8 +233,8 @@ type ResourceRestricted = {
|
|
|
170
233
|
type ActionList = readonly string[] | Record<string, ActionMeta>;
|
|
171
234
|
type ResourceOptions<A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined> = {
|
|
172
235
|
/**
|
|
173
|
-
* The resource name leaves, tables, relations and AuthZEN types use; the
|
|
174
|
-
*
|
|
236
|
+
* The resource name leaves, tables, relations and AuthZEN types use; the last
|
|
237
|
+
* path segment when absent. Names are unique across a tree.
|
|
175
238
|
*/
|
|
176
239
|
readonly name?: string;
|
|
177
240
|
readonly id?: string;
|
|
@@ -182,7 +245,8 @@ type ResourceOptions<A extends ActionList | undefined = ActionList | undefined,
|
|
|
182
245
|
readonly relations?: Readonly<Record<string, ResourceRelationInput>>;
|
|
183
246
|
/**
|
|
184
247
|
* The row field that changes whenever the row does (`updatedAt`, a revision
|
|
185
|
-
* counter). An `approval: { staleOn: 'resource-change' }` binds to its
|
|
248
|
+
* counter). An `approval: { staleOn: 'resource-change' }` binds to its
|
|
249
|
+
* value.
|
|
186
250
|
*/
|
|
187
251
|
readonly version?: string;
|
|
188
252
|
/**
|
|
@@ -198,19 +262,32 @@ type ResourceOptions<A extends ActionList | undefined = ActionList | undefined,
|
|
|
198
262
|
/**
|
|
199
263
|
* Named grant levels a custom role may pick per permission, each a row
|
|
200
264
|
* condition (`where` shorthand or a `Condition`), such as `own`, `team` and
|
|
201
|
-
* `all`. A level narrows the ceiling grant it applies to and never widens
|
|
202
|
-
* it
|
|
265
|
+
* `all`. A level narrows the ceiling grant it applies to and never widens it;
|
|
266
|
+
* it reaches only instance actions. Names match `^[a-z][a-z0-9_]*$`.
|
|
203
267
|
*/
|
|
204
268
|
readonly levels?: Readonly<Record<string, ResourceLevel>>;
|
|
205
|
-
/**
|
|
269
|
+
/**
|
|
270
|
+
* `true`: `levels` run from narrowest to widest in declaration order, and a
|
|
271
|
+
* holder of a level may hand out every level declared before it. Evaluation
|
|
272
|
+
* is unchanged: each level still applies only its own condition.
|
|
273
|
+
*/
|
|
274
|
+
readonly orderedLevels?: true;
|
|
275
|
+
/**
|
|
276
|
+
* Display text and app data for the resource; carried to the catalog, never
|
|
277
|
+
* read in evaluation.
|
|
278
|
+
*/
|
|
206
279
|
readonly meta?: ResourceMeta;
|
|
207
280
|
};
|
|
208
|
-
/**
|
|
281
|
+
/**
|
|
282
|
+
* A level's row condition: `where` shorthand or a normalised `Condition`,
|
|
283
|
+
* checked by `definePolicy`.
|
|
284
|
+
*/
|
|
209
285
|
type ResourceLevel = Readonly<Record<string, unknown>>;
|
|
210
|
-
type ResourceInit<T = unknown, A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined> = {
|
|
286
|
+
type ResourceInit<T = unknown, A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined, N extends string = string> = {
|
|
211
287
|
readonly [RESOURCE_BRAND]: true;
|
|
212
288
|
readonly schema: StandardSchemaV1<unknown, T> | undefined;
|
|
213
289
|
readonly options: ResourceOptions<A, C>;
|
|
290
|
+
readonly [RESOURCE_NAME]?: N;
|
|
214
291
|
};
|
|
215
292
|
type ResourceNode<T = unknown> = {
|
|
216
293
|
readonly name: string;
|
|
@@ -226,8 +303,13 @@ type ResourceNode<T = unknown> = {
|
|
|
226
303
|
readonly disclosure: "hide" | "reveal";
|
|
227
304
|
readonly instanceActions: ReadonlySet<string>;
|
|
228
305
|
readonly collectionActions: ReadonlySet<string>;
|
|
229
|
-
/**
|
|
306
|
+
/**
|
|
307
|
+
* Declared level names to their raw condition; `definePolicy` normalises
|
|
308
|
+
* them.
|
|
309
|
+
*/
|
|
230
310
|
readonly levels?: Readonly<Record<string, ResourceLevel>>;
|
|
311
|
+
/** Set when the resource declares `orderedLevels: true`. */
|
|
312
|
+
readonly orderedLevels?: true;
|
|
231
313
|
/** The resource's `meta`, when it declares one. */
|
|
232
314
|
readonly meta?: ResourceMeta;
|
|
233
315
|
};
|
|
@@ -235,8 +317,12 @@ type PermissionTree = {
|
|
|
235
317
|
readonly [key: string]: PermissionTree | Permission;
|
|
236
318
|
};
|
|
237
319
|
type ActionNames<A extends ActionList | undefined> = A extends readonly string[] ? A[number] : A extends Record<string, ActionMeta> ? keyof A & string : never;
|
|
238
|
-
type
|
|
239
|
-
type
|
|
320
|
+
type LastSegment<Path extends string> = Path extends `${string}.${infer Rest}` ? LastSegment<Rest> : Path;
|
|
321
|
+
type LeavesFrom<Prefix extends string, Names extends string, T, Kind extends PermissionKind, X = never, R extends string = string> = [Names] extends [never] ? object : { readonly [K in Names]: WithX<Permission<Prefix extends "" ? K : `${Prefix}.${K}`, T, Kind> & {
|
|
322
|
+
readonly resource: R;
|
|
323
|
+
readonly action: K;
|
|
324
|
+
}, X>; };
|
|
325
|
+
type InferResourceLeaves<R extends ResourceInit, Prefix extends string, X = never> = R extends ResourceInit<infer T, infer A, infer C, infer N> ? LeavesFrom<Prefix, ActionNames<A>, T, "instance", X, [N] extends [never] ? LastSegment<Prefix> : N> & LeavesFrom<Prefix, ActionNames<C>, T, "collection", X, [N] extends [never] ? LastSegment<Prefix> : N> : object;
|
|
240
326
|
type InferPermissionTree<Input, Prefix extends string = "", X = never> = Input extends ResourceInit ? InferResourceLeaves<Input, Prefix, X> : Input extends Record<string, unknown> ? { readonly [K in keyof Input & string]: InferPermissionTree<Input[K], Prefix extends "" ? K : `${Prefix}.${K}`, X>; } : never;
|
|
241
327
|
/**
|
|
242
328
|
* The tree `definePermissions(input, options)` returns, nameable for an
|
|
@@ -244,4 +330,4 @@ type InferPermissionTree<Input, Prefix extends string = "", X = never> = Input e
|
|
|
244
330
|
*/
|
|
245
331
|
type PermissionsOf<Input, PX = never, RX = never> = InferPermissionTree<Input, "", PX> & ResourceXTree<RX>;
|
|
246
332
|
//#endregion
|
|
247
|
-
export {
|
|
333
|
+
export { RESOURCE_NAME as A, ResourceRelation as C, RowOf as D, ResourceXTree as E, WithX as F, AppData as M, AppDataSchema as N, PERMISSION_ROW as O, MetaValue as P, ResourceParent as S, ResourceRestricted as T, ResourceLevel as _, EdgeGroups as a, ResourceNode as b, FieldRelation as c, PermissionKind as d, PermissionTree as f, ResourceInit as g, PrincipalRelation as h, EdgeGroup as i, RESOURCE_X as j, POLICY_SCOPES as k, InferPermissionTree as l, PermissionsOptions as m, ActionMeta as n, EdgeMatch as o, PermissionsOf as p, ComputedRelation as r, EdgeRelation as s, ActionList as t, Permission as u, ResourceLink as v, ResourceRelationInput as w, ResourceOptions as x, ResourceMeta as y };
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { g as ResourceInit, l as InferPermissionTree } from "./permission-types-
|
|
2
|
-
import { r as Role, t as Plan } from "./vocabulary-
|
|
1
|
+
import { g as ResourceInit, l as InferPermissionTree } from "./permission-types-CAY-GU7e.js";
|
|
2
|
+
import { r as Role, t as Plan } from "./vocabulary-DEJ5j4mR.js";
|
|
3
3
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
4
|
//#region src/testing/saas/permissions.d.ts
|
|
5
5
|
declare const SaasProjectSchema: StandardSchemaV1<SaasProject>;
|
|
6
6
|
declare const SaasDocSchema: StandardSchemaV1<SaasDoc>;
|
|
7
7
|
declare const SaasFolderSchema: StandardSchemaV1<SaasFolder>;
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* A folder in an org's tree; `restricted` keeps grants held on its ancestors
|
|
10
|
+
* out.
|
|
11
|
+
*/
|
|
9
12
|
type SaasFolder = {
|
|
10
13
|
readonly id: string;
|
|
11
14
|
readonly orgId: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as freezeDeep } from "./freeze-
|
|
2
|
-
import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-
|
|
3
|
-
import { r as assertGraphTargets } from "./resource-relations-
|
|
1
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
2
|
+
import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-B8tYxPIt.js";
|
|
3
|
+
import { r as assertGraphTargets } from "./resource-relations-8-pCScBO.js";
|
|
4
4
|
//#region src/core/operation-risks.ts
|
|
5
5
|
/** Every `meta.risk` level, lowest first. */
|
|
6
6
|
const OPERATION_RISKS = Object.freeze([
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { c as crud } from "./src-
|
|
2
|
-
import { v as resource } from "./permission-registry-
|
|
3
|
-
import { f as definePlans, p as defineRoles } from "./grantee-
|
|
4
|
-
import { t as definePermissions } from "./permissions-
|
|
1
|
+
import { c as crud } from "./src-C_pi2Rnh.js";
|
|
2
|
+
import { v as resource } from "./permission-registry-B8tYxPIt.js";
|
|
3
|
+
import { f as definePlans, p as defineRoles } from "./grantee-Dke-9rd1.js";
|
|
4
|
+
import { t as definePermissions } from "./permissions-CVXmRILq.js";
|
|
5
5
|
//#region src/testing/saas/schema.ts
|
|
6
6
|
function accepts(kind, value) {
|
|
7
7
|
switch (kind) {
|
|
@@ -126,7 +126,10 @@ const saasRoles = defineRoles({
|
|
|
126
126
|
on: "team",
|
|
127
127
|
assignable: true
|
|
128
128
|
},
|
|
129
|
-
/**
|
|
129
|
+
/**
|
|
130
|
+
* Resource-scoped; `role(..., { on: saasPermissions.project })` in the
|
|
131
|
+
* policy.
|
|
132
|
+
*/
|
|
130
133
|
collaborator: { assignable: true }
|
|
131
134
|
});
|
|
132
135
|
const saasPlans = definePlans({
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { n as CliError } from "./errors-Vpu6rKHl.js";
|
|
2
|
+
import { i as requirePeer } from "./peer-Q0fuZ6hx.js";
|
|
3
|
+
//#region src/cli/pg.ts
|
|
4
|
+
const CONNECT_TIMEOUT_MS = 1e4;
|
|
5
|
+
const STATEMENT_TIMEOUT_MS = 6e4;
|
|
6
|
+
function loadPg(command, cwd) {
|
|
7
|
+
return requirePeer(() => import("pg"), "pg", command, cwd);
|
|
8
|
+
}
|
|
9
|
+
function options(db) {
|
|
10
|
+
return {
|
|
11
|
+
connectionString: db,
|
|
12
|
+
connectionTimeoutMillis: CONNECT_TIMEOUT_MS,
|
|
13
|
+
statement_timeout: STATEMENT_TIMEOUT_MS
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function unreachable(command, cause) {
|
|
17
|
+
return new CliError("unavailable", `PermDock CLI: ${command.replace(/^permdock /u, "")} could not connect`, {
|
|
18
|
+
cause,
|
|
19
|
+
code: "database_unreachable"
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The default `connect` of a command: one connection, failing with a message
|
|
24
|
+
* that names `command`.
|
|
25
|
+
*/
|
|
26
|
+
function pgConnector(command, cwd = process.cwd()) {
|
|
27
|
+
return (db) => connectPg(db, command, cwd);
|
|
28
|
+
}
|
|
29
|
+
/** One connection, for commands that run a transaction. */
|
|
30
|
+
async function connectPg(db, command, cwd) {
|
|
31
|
+
const client = new (await (loadPg(command, cwd))).Client(options(db));
|
|
32
|
+
try {
|
|
33
|
+
await client.connect();
|
|
34
|
+
} catch (cause) {
|
|
35
|
+
throw unreachable(command, cause);
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
query: (sql, values) => client.query(sql, values),
|
|
39
|
+
end: () => client.end()
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** A small pool, for independent catalog reads that can run in parallel. */
|
|
43
|
+
async function connectPgPool(db, command, cwd = process.cwd()) {
|
|
44
|
+
const pool = new (await (loadPg(command, cwd))).Pool({
|
|
45
|
+
...options(db),
|
|
46
|
+
max: 4
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
(await pool.connect()).release();
|
|
50
|
+
} catch (cause) {
|
|
51
|
+
await pool.end();
|
|
52
|
+
throw unreachable(command, cause);
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
query: (sql, values) => pool.query(sql, values),
|
|
56
|
+
end: () => pool.end()
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { pgConnector as n, connectPgPool as t };
|
|
@@ -5,7 +5,10 @@ const DRAFT_PINS = {
|
|
|
5
5
|
overlay: "1.2-dev@edd4adea"
|
|
6
6
|
};
|
|
7
7
|
const PROFILE_NAMES = { fapi2: "fapi-20-security-profile" };
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* PermDock's published `supportedParametersSchema` per profile, stable across
|
|
10
|
+
* pins.
|
|
11
|
+
*/
|
|
9
12
|
const PROFILE_PARAMETERS = { fapi2: "https://permdock.com/schemas/security-profiles/fapi2.json" };
|
|
10
13
|
const GNAP_RESERVED = "scheme.type 'gnap' is reserved and emits nothing. See https://permdock.com/docs/standards/watch-list#gnap";
|
|
11
14
|
//#endregion
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
function base64url(bytes) {
|
|
3
3
|
let binary = "";
|
|
4
4
|
for (const byte of bytes) binary += String.fromCodePoint(byte);
|
|
5
|
-
return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(
|
|
5
|
+
return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/[=]+$/u, "");
|
|
6
6
|
}
|
|
7
7
|
/** `length` random bytes as base64url, from Web Crypto. */
|
|
8
8
|
function randomToken(length) {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { T as Policy,
|
|
2
|
-
import { c as saasPlans, l as saasRoles, s as saasPermissions } from "./permissions-
|
|
1
|
+
import { T as Policy, hr as Subject, pr as Principal } from "./policy-types-DGIO_gxq.js";
|
|
2
|
+
import { c as saasPlans, l as saasRoles, s as saasPermissions } from "./permissions-Bx6UI8n1.js";
|
|
3
3
|
//#region src/testing/saas/policy.d.ts
|
|
4
4
|
/** Daily API-key quota per subject; the bucket should be per tenant too. */
|
|
5
5
|
declare const SAAS_API_KEY_LIMIT = 5;
|
|
6
6
|
/**
|
|
7
7
|
* The shared multi-tenant SaaS policy: four tenant roles, a team role, a
|
|
8
8
|
* resource-scoped role, plan-gated features, a closure deny, a quota, an
|
|
9
|
-
* approval and a folder tree shared through edges. Row conditions and
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* approval and a folder tree shared through edges. Row conditions and relations
|
|
10
|
+
* are portable; the closure is not, and the folder grants need a
|
|
11
|
+
* `RelationSource` (`saasRelations()`).
|
|
12
12
|
*/
|
|
13
13
|
type SaasVocabulary = {
|
|
14
14
|
readonly permissions: typeof saasPermissions;
|