permdock 0.7.0 → 0.8.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-CL-QCITA.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-BLs67P1l.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-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
- package/dist/{approval-prompt-K0faOLFp.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
- 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-3RhGfkAK.js} +2 -2
- package/dist/{arazzo-rdeJ8n1J.js → arazzo-B5-ulWif.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-BAkBDMqn.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-DqEoWHBc.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-JDuvxjuW.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
- package/dist/{bind-D1nO6fiC.js → bind-D_sZSVA3.js} +22 -10
- 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-CNWaYJyr.js} +3 -3
- package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-D4UC9TTW.d.ts → capability-ChuiONQU.d.ts} +41 -29
- package/dist/{casbin-BW9pS47J.js → casbin-H0rKxBx2.js} +16 -8
- package/dist/{casbin-BHijLuHY.js → casbin-cbSbhT_k.js} +2 -2
- 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-BFpz2EmT.js} +20 -19
- package/dist/{catalog-BaMQfQ6Y.js → catalog-DCspHDc8.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-mRQQQhNK.js +1 -0
- package/dist/catalog-operations-Dadrl7Z-.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-BFlGMaak.js} +4 -5
- package/dist/{codemod-i4N2BhDc.js → codemod-DLQ9Zpo4.js} +3 -4
- package/dist/{codemod-BP6n8N9L.js → codemod-DWSN2erG.js} +523 -201
- package/dist/collect-B5BL3klN.js +1 -0
- package/dist/{collect-BaWeMjwV.js → collect-B7ZFAJU3.js} +26 -63
- package/dist/{collect-DNm3oKOk.js → collect-Bzv3le0A.js} +4 -5
- 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-BFzysW3o.d.ts} +36 -12
- package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BNdVf7X2.js → completion-saoYiRFO.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-DGZzMV1B.js → config-DBeXXmBF.js} +2 -2
- package/dist/{config-report-Cm7UITNA.js → config-report-BipSWA6V.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-B5-w6Kw9.js → core-H-mbhpZc.js} +26 -20
- package/dist/{core-CQkE8Esr.d.ts → core-hWIARPDz.d.ts} +49 -22
- package/dist/{create-UTnUVETj.d.ts → create-BSNrVuxh.d.ts} +70 -37
- package/dist/{create-B2-CQqCI.d.ts → create-BVq1lNQE.d.ts} +49 -28
- package/dist/{create-QHuuPw3q.d.ts → create-CM1FciYG.d.ts} +37 -29
- package/dist/{create-Cb86Z8Im.js → create-Cq4Uox0f.js} +10 -7
- package/dist/{create-DJrlhEp9.js → create-_noSrY1T.js} +15 -21
- 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-CHNlVInN.d.ts +22 -0
- package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
- package/dist/{describe-O0SwYIK8.d.ts → describe-ByS9LgHK.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-Btr1c1Ow.js → diff-CN8IYhC_.js} +2 -2
- package/dist/{diff-DzT-xD13.js → diff-iZWV65nC.js} +22 -13
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BU1szn63.js → doctor-CHD1M9R5.js} +287 -135
- package/dist/{doctor-BoK_y0KO.js → doctor-D3wo-yuz.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-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
- package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
- package/dist/{errors-B_Qg9D3e.d.ts → errors-zi_4T-rx.d.ts} +22 -6
- package/dist/{evaluate-B_oqFbWC.js → evaluate-Dd8Ta0Ie.js} +140 -78
- package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
- package/dist/{evaluations-BCddEOfO.d.ts → evaluations-z8dQFDaN.d.ts} +11 -5
- 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-C1DCvpqV.d.ts} +9 -6
- package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-JL43jD3E.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-B5kvbAoZ.js +58 -0
- package/dist/gen-DWCYcMQM.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-BmjzxQhp.d.ts → hosted-Cmtxogd0.d.ts} +33 -21
- package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -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-Bz0GefWg.js → import-CST57XLp.js} +64 -51
- package/dist/{import-DB2EG_iy.js → import-_YqhhwvX.js} +6 -6
- package/dist/{index-BSfRl0hZ.d.ts → index-B8s204GL.d.ts} +64 -52
- package/dist/{index-DH9DUDEM.d.ts → index-BT5-1VsX.d.ts} +54 -30
- package/dist/{index-BTkwrK7v.d.ts → index-BW_0MZOS.d.ts} +282 -172
- package/dist/{index-CMiPH2Tv.d.ts → index-BhxEUY9J.d.ts} +64 -37
- package/dist/{index-DLwcuCN_.d.ts → index-Bv5iXPqU.d.ts} +51 -30
- package/dist/{index-BE8y3moU.d.ts → index-_9UiQIkt.d.ts} +127 -82
- package/dist/index.d.ts +22 -22
- package/dist/index.js +33 -33
- package/dist/{init-5TXNji88.js → init-Dz_PsHdv.js} +5 -5
- package/dist/{init-B-4t1NzC.js → init-cE3A8aXq.js} +10 -10
- package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
- package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot--JWiTrvO.js} +75 -55
- 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-C-fYydV2.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-D-8tMqzo.js} +4 -4
- package/dist/{login-WC9HPJpU.js → login-DplQ0s84.js} +16 -9
- package/dist/{manifest-Dv6q4i5s.js → manifest-Cgiq5oqc.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-BNWCJtmP.js} +14 -8
- 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 +72 -26
- package/dist/next/index.js +110 -6
- 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-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
- package/dist/{openapi-DMocl1bh.js → openapi-CBZUhA3l.js} +4 -5
- package/dist/{openapi-ztVaux6j.js → openapi-VeHHU2l9.js} +23 -14
- 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-files-BHOIlrfD.js +1 -0
- package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/{output-DgSDLrta.js → output-tkju6U7R.js} +9 -5
- package/dist/ownership-B4L59T9u.js +1054 -0
- package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
- package/dist/parse-local-manifest-BQhTlLQS.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-Dco6dyCK.d.ts → permdock-B6Sf4T_S.d.ts} +253 -129
- package/dist/{permdock-BfWEeMqk.js → permdock-L-_I_3zP.js} +59 -35
- 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-mDcTWoBs.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-Ba4bDhaj.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-CJgOm6aq.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-CCiDRZBH.d.ts} +738 -349
- package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
- package/dist/{postgrest-r5faDIzD.js → postgrest-D4nuPXIQ.js} +52 -33
- package/dist/{postgrest-CYacM_u7.d.ts → postgrest-DicQyqm-.d.ts} +54 -35
- package/dist/{powersync-53ryOZip.js → powersync-DHNQX06W.js} +127 -69
- package/dist/{powersync-13odBwiM.js → powersync-DXqGuq9A.js} +3 -3
- package/dist/powersync-Djf-zCpB.js +1 -0
- 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-BE7N_Luo.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-DXfq5c2d.d.ts} +1 -1
- package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/pull-B65ndFNZ.js +1 -0
- package/dist/{pull-CN5OLxrF.js → pull-CwpGaQSi.js} +12 -11
- package/dist/{push-tVdG8dUL.js → push-DgssgzkK.js} +19 -13
- package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
- package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-ITwYKvvH.js} +10 -7
- 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-DNftIb_R.d.ts} +1 -1
- package/dist/{request-context-BykKLmyE.js → request-context-C25ilqiJ.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-CF7xXLSG.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-CxBZb4rZ.js → rls-CNEH2_BG.js} +299 -124
- package/dist/{rls-Ck_PocSp.js → rls-Ca8Jz9b5.js} +13 -6
- 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-fNqAIqQk.js} +8 -5
- package/dist/{run-uLD2aWuO.js → run-Bz26OTfO.js} +26 -23
- package/dist/run-D-JE8QWb.js +1 -0
- package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-DbWI9f99.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-iWnUdwCt.js} +42 -29
- package/dist/{scan-DSljDE1Y.js → scan-DCj1KQfn.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-gIcCx7zM.js → schema-Dst9I9Gs.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-CIlpSA2G.d.ts} +81 -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-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
- package/dist/{sink-Cp_Eot9W.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
- package/dist/{skills-Dcjw9_1C.js → skills-Bjj7BNEQ.js} +12 -8
- package/dist/{skills-g_3BS9NC.js → skills-OuoMR49L.js} +3 -3
- package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BAXZ0KOp.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-DEEuGb8S.d.ts → sources-B1Os_YUu.d.ts} +126 -53
- package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
- 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-DZ0l9UAg.js} +190 -100
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +47 -35
- package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
- package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
- 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-C0Kta5Ft.d.ts +59 -0
- package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{stream-2Vwhl7Er.d.ts → stream-ltuLdtTG.d.ts} +4 -3
- 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-BL1qJzzY.js} +79 -35
- package/dist/{supabase-Bqp7iIY2.js → supabase-D39cuGPt.js} +3 -3
- package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-B-yXnzUl.js} +175 -196
- package/dist/supabase-hook-H-MtE9Wd.js +1 -0
- package/dist/{supautils-MESd81bF.js → supautils-BU-pAEpf.js} +166 -47
- 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-DeMNEy6V.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 +224 -141
- package/dist/testing/index.js +299 -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-BIPIDa6a.d.ts +50 -0
- package/dist/{types-DBHftjgS.d.ts → types-AMJ5qoU_.d.ts} +45 -33
- package/dist/{types-CfiKC5aN.d.ts → types-B2mlGuhW.d.ts} +14 -11
- package/dist/{types-D3A19w4A.d.ts → types-B4uqKDnp.d.ts} +22 -13
- package/dist/{types-CQVEQawv.d.ts → types-BJk0BKRX.d.ts} +24 -14
- package/dist/types-B_d_g7T3.d.ts +262 -0
- package/dist/{types-DC44-hqb.d.ts → types-B_tiYvk8.d.ts} +59 -32
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-BWZybqs9.d.ts → types-DC1Loeh3.d.ts} +381 -202
- package/dist/{types-CIeZcG8v.d.ts → types-DHKPcqzr.d.ts} +2 -2
- package/dist/{types-cTos-H7p.d.ts → types-DjuMBNF9.d.ts} +68 -32
- package/dist/{types-CeIscIKp.d.ts → types-HzqOtvsJ.d.ts} +23 -12
- package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-BfVmNJO5.d.ts → types-ah9NlU6j.d.ts} +128 -50
- package/dist/{types-DXmwu78Z.d.ts → types-djVzLlIV.d.ts} +31 -14
- package/dist/{types-g7Oy6Zg4.d.ts → types-yUuPR5Hy.d.ts} +47 -24
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CYeXek0p.js +1 -0
- package/dist/{usage-Bybmck7f.js → usage-CxEzS4ey.js} +50 -26
- package/dist/{usage-CDaLXCfL.js → usage-ab0PdusX.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-CQpoquwj.d.ts → validation-error-YGg2mXyH.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-DZeqoWu5.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-Bu9zAlE0.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-C-4VmFlL.js → watch-Cx_WciLE.js} +8 -8
- package/dist/watch-DB42U1ib.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-rI7dCR9Q.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-DlJE3gS_.d.ts} +8 -5
- package/package.json +7 -7
- 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 +14 -22
- 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
|
@@ -178,9 +178,9 @@ const FRAMEWORKS = [
|
|
|
178
178
|
}
|
|
179
179
|
];
|
|
180
180
|
/**
|
|
181
|
-
* Agent runtimes and UI recipes. The preset code keeps one bitset per
|
|
182
|
-
*
|
|
183
|
-
*
|
|
181
|
+
* Agent runtimes and UI recipes. The preset code keeps one bitset per `kind`,
|
|
182
|
+
* each in this list's order, so a new entry goes after the last one of its
|
|
183
|
+
* kind.
|
|
184
184
|
*/
|
|
185
185
|
const INTEGRATIONS = [
|
|
186
186
|
{
|
|
@@ -250,10 +250,9 @@ function requiredBy(choices, picked) {
|
|
|
250
250
|
return choices.filter((choice) => picked.includes(choice.id)).flatMap((choice) => choice.requires ?? []);
|
|
251
251
|
}
|
|
252
252
|
/**
|
|
253
|
-
* The preset `input` describes, with every feature its archetype,
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
* no-op.
|
|
253
|
+
* The preset `input` describes, with every feature its archetype, integrations
|
|
254
|
+
* and other features require turned on, and lists in catalogue order. Features
|
|
255
|
+
* are only ever added, so resolving twice is a no-op.
|
|
257
256
|
*/
|
|
258
257
|
function resolvePreset(input) {
|
|
259
258
|
const integrations = INTEGRATIONS.map((item) => item.id).filter((id) => (input.integrations ?? PRESET_DEFAULTS.integrations).includes(id));
|
|
@@ -282,12 +281,12 @@ function resolvePreset(input) {
|
|
|
282
281
|
//#endregion
|
|
283
282
|
//#region src/preset/codec.ts
|
|
284
283
|
/**
|
|
285
|
-
* Preset codes: `p1` followed by base64url bytes. Version 1 packs, in
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
*
|
|
284
|
+
* Preset codes: `p1` followed by base64url bytes. Version 1 packs, in order,
|
|
285
|
+
* one byte each for the archetype, auth, backend and framework index, then a
|
|
286
|
+
* bitset per multi-select list (features, agent integrations, UI integrations,
|
|
287
|
+
* services), each as many bytes as the list needs. A list only grows at the
|
|
288
|
+
* end, so a code keeps its meaning as the catalogue grows; a new layout gets a
|
|
289
|
+
* new version prefix.
|
|
291
290
|
*/
|
|
292
291
|
const VERSION = "p1";
|
|
293
292
|
const AGENT_INTEGRATIONS = INTEGRATIONS.filter((item) => item.kind === "agent");
|
|
@@ -349,8 +348,8 @@ function encodePreset(preset) {
|
|
|
349
348
|
]);
|
|
350
349
|
}
|
|
351
350
|
/**
|
|
352
|
-
* The preset a code stands for, resolved, or `undefined` for a code that
|
|
353
|
-
*
|
|
351
|
+
* The preset a code stands for, resolved, or `undefined` for a code that is not
|
|
352
|
+
* a version this package reads or does not decode.
|
|
354
353
|
*/
|
|
355
354
|
function decodePreset(code) {
|
|
356
355
|
if (!code.startsWith(VERSION)) return;
|
|
@@ -384,7 +383,10 @@ function decodePreset(code) {
|
|
|
384
383
|
}
|
|
385
384
|
//#endregion
|
|
386
385
|
//#region src/preset/flags.ts
|
|
387
|
-
/**
|
|
386
|
+
/**
|
|
387
|
+
* One `permdock init` flag per preset key, with the catalogue it takes values
|
|
388
|
+
* from.
|
|
389
|
+
*/
|
|
388
390
|
const PRESET_FLAGS = {
|
|
389
391
|
archetype: {
|
|
390
392
|
flag: "archetype",
|
|
@@ -423,9 +425,9 @@ const PRESET_FLAGS = {
|
|
|
423
425
|
}
|
|
424
426
|
};
|
|
425
427
|
/**
|
|
426
|
-
* The `permdock init` flags that select `preset`, leaving out defaults and
|
|
427
|
-
*
|
|
428
|
-
*
|
|
428
|
+
* The `permdock init` flags that select `preset`, leaving out defaults and the
|
|
429
|
+
* features its archetype and integrations already turn on, so `permdock init
|
|
430
|
+
* <flags>` resolves to the same preset.
|
|
429
431
|
*/
|
|
430
432
|
function presetFlags(preset) {
|
|
431
433
|
const implied = resolvePreset({
|
|
@@ -867,9 +869,9 @@ function quote(value) {
|
|
|
867
869
|
return JSON.stringify(value);
|
|
868
870
|
}
|
|
869
871
|
/**
|
|
870
|
-
* An environment read in the generated code. Built from parts so this
|
|
871
|
-
*
|
|
872
|
-
*
|
|
872
|
+
* An environment read in the generated code. Built from parts so this runtime
|
|
873
|
+
* chunk carries no `process.` token, which the WinterTC check reads as a Node
|
|
874
|
+
* global; the generated file has it whole.
|
|
873
875
|
*/
|
|
874
876
|
function env(name) {
|
|
875
877
|
return ["process", `env[${quote(name)}]`].join(".");
|
|
@@ -1224,7 +1226,10 @@ function backendFiles(ctx) {
|
|
|
1224
1226
|
default: return ctx.preset.backend;
|
|
1225
1227
|
}
|
|
1226
1228
|
}
|
|
1227
|
-
/**
|
|
1229
|
+
/**
|
|
1230
|
+
* What `permdock.ts` adds for the backend: imports, statements before
|
|
1231
|
+
* `defineApp`, and its options.
|
|
1232
|
+
*/
|
|
1228
1233
|
function backendApp(ctx) {
|
|
1229
1234
|
if (ctx.preset.backend !== "supabase") return {
|
|
1230
1235
|
imports: [],
|
|
@@ -1286,7 +1291,10 @@ ${entries.join("\n")}
|
|
|
1286
1291
|
});
|
|
1287
1292
|
`;
|
|
1288
1293
|
}
|
|
1289
|
-
/**
|
|
1294
|
+
/**
|
|
1295
|
+
* What a role's grant becomes under the preset's features; the matrix and the
|
|
1296
|
+
* code read the same answer.
|
|
1297
|
+
*/
|
|
1290
1298
|
function grantShape(preset, role, grant) {
|
|
1291
1299
|
const has = (feature) => preset.features.includes(feature);
|
|
1292
1300
|
const resource = DOMAINS[preset.archetype].resources.find((item) => item.name === grant.resource);
|
|
@@ -1607,8 +1615,21 @@ export function decideReadKey(permdock: PermDock, id: string) {
|
|
|
1607
1615
|
}
|
|
1608
1616
|
function rlsOption(ctx) {
|
|
1609
1617
|
if (!ctx.has("rls")) return null;
|
|
1610
|
-
|
|
1611
|
-
|
|
1618
|
+
return ctx.preset.backend === "supabase" ? `supabaseRls({${ctx.has("tenancy") ? `\n memberships: {
|
|
1619
|
+
table: "org_members",
|
|
1620
|
+
tenant: "org_id",
|
|
1621
|
+
user: "user_id",
|
|
1622
|
+
role: "role",
|
|
1623
|
+
},\n ` : ""}})` : `{\n dialect: "guc",${ctx.has("tenancy") ? `\n memberships: {
|
|
1624
|
+
scopes: {
|
|
1625
|
+
tenant: {
|
|
1626
|
+
table: "org_members",
|
|
1627
|
+
columns: { tenant: "org_id" },
|
|
1628
|
+
user: "user_id",
|
|
1629
|
+
role: "role",
|
|
1630
|
+
},
|
|
1631
|
+
},
|
|
1632
|
+
},` : ""}\n }`;
|
|
1612
1633
|
}
|
|
1613
1634
|
function configFile(ctx) {
|
|
1614
1635
|
const rls = rlsOption(ctx);
|
|
@@ -1626,7 +1647,10 @@ ${options.join("\n")}
|
|
|
1626
1647
|
});
|
|
1627
1648
|
`);
|
|
1628
1649
|
}
|
|
1629
|
-
/**
|
|
1650
|
+
/**
|
|
1651
|
+
* The `@permdock` registry recipes for the preset's UI; native has the gate and
|
|
1652
|
+
* the upgrade prompt.
|
|
1653
|
+
*/
|
|
1630
1654
|
function recipesFor(ctx) {
|
|
1631
1655
|
const web = ["gated-button"];
|
|
1632
1656
|
if (ctx.has("approvals")) web.push("approval-request-dialog");
|
|
@@ -1675,9 +1699,9 @@ function docsFor(ctx) {
|
|
|
1675
1699
|
return [...new Set(docs)];
|
|
1676
1700
|
}
|
|
1677
1701
|
/**
|
|
1678
|
-
* The files, dependencies and recipes for `preset`. Pure: no file system
|
|
1679
|
-
*
|
|
1680
|
-
*
|
|
1702
|
+
* The files, dependencies and recipes for `preset`. Pure: no file system and no
|
|
1703
|
+
* network, so the same function runs in the CLI, in a registry route and in the
|
|
1704
|
+
* browser preview on /create.
|
|
1681
1705
|
*/
|
|
1682
1706
|
function generatePreset(preset, options = {}) {
|
|
1683
1707
|
const ctx = {
|
|
@@ -1713,8 +1737,8 @@ const NONE = {
|
|
|
1713
1737
|
limit: false
|
|
1714
1738
|
};
|
|
1715
1739
|
/**
|
|
1716
|
-
* Who may do what under `preset`, from the same model the generated policy
|
|
1717
|
-
*
|
|
1740
|
+
* Who may do what under `preset`, from the same model the generated policy is
|
|
1741
|
+
* written from, for a page that shows the policy without running it.
|
|
1718
1742
|
*/
|
|
1719
1743
|
function presetMatrix(preset) {
|
|
1720
1744
|
const domain = DOMAINS[preset.archetype];
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { t as freezeCopy } from "./freeze-
|
|
2
|
-
import { a as ownRecord } from "./paths-
|
|
1
|
+
import { t as freezeCopy } from "./freeze-jjan0lCv.js";
|
|
2
|
+
import { a as ownRecord } from "./paths-CUvURzHp.js";
|
|
3
3
|
//#region src/core/principal-source.ts
|
|
4
4
|
function nonEmpty(value) {
|
|
5
5
|
return typeof value === "string" && value.trim() !== "";
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* A `PrincipalIdentity` in the form sources compare: an email trimmed and
|
|
9
|
-
* lower-cased with no provider or workspace, a chat identity with a
|
|
10
|
-
*
|
|
9
|
+
* lower-cased with no provider or workspace, a chat identity with a provider.
|
|
10
|
+
* Anything else, inherited fields included, is `undefined`.
|
|
11
11
|
*/
|
|
12
12
|
function normalizeIdentity(value) {
|
|
13
13
|
const record = ownRecord(value);
|
|
@@ -55,9 +55,9 @@ async function loadPrincipal(source, id, tenant) {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
58
|
-
* `source.principalByIdentity(identity)` over the normalised identity,
|
|
59
|
-
*
|
|
60
|
-
*
|
|
58
|
+
* `source.principalByIdentity(identity)` over the normalised identity, failing
|
|
59
|
+
* closed: no source or method, an invalid identity, `null`, a throw or a
|
|
60
|
+
* rejection is `null`.
|
|
61
61
|
*/
|
|
62
62
|
async function loadPrincipalByIdentity(source, identity) {
|
|
63
63
|
const normalized = normalizeIdentity(identity);
|
|
@@ -69,9 +69,9 @@ async function loadPrincipalByIdentity(source, identity) {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
|
-
* In-process principals for tests and single-replica apps. `identities`
|
|
73
|
-
*
|
|
74
|
-
*
|
|
72
|
+
* In-process principals for tests and single-replica apps. `identities` links
|
|
73
|
+
* an email or chat identity to a principal id; each answer is a fresh frozen
|
|
74
|
+
* copy. `tenant` is not a filter, as for a database source.
|
|
75
75
|
*/
|
|
76
76
|
function memoryPrincipalSource(input) {
|
|
77
77
|
const byId = /* @__PURE__ */ new Map();
|
package/dist/prisma/index.d.ts
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
import { Rt as Instant, lr as Subject, mr as Condition } from "../policy-types-
|
|
2
|
-
import {
|
|
3
|
-
import { r as RelationsMapping } from "../graph-sql-
|
|
4
|
-
import { n as
|
|
1
|
+
import { Rt as Instant, lr as Subject, mr as Condition } from "../policy-types-CCiDRZBH.js";
|
|
2
|
+
import { f as WhereResult } from "../permdock-B6Sf4T_S.js";
|
|
3
|
+
import { r as RelationsMapping } from "../graph-sql-BwFC4Qjs.js";
|
|
4
|
+
import { n as RowCheck, t as WithSubjectOptions } from "../subject-settings-vNW8qmUH.js";
|
|
5
5
|
//#region src/prisma/model-fields.d.ts
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* A model's non-nullable scalar fields and its scalar list fields, by Prisma
|
|
8
|
+
* field name.
|
|
9
|
+
*/
|
|
7
10
|
type PrismaModelFields = {
|
|
8
11
|
readonly required: readonly string[];
|
|
9
12
|
readonly lists: readonly string[];
|
|
10
13
|
};
|
|
11
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* The `datamodel` of Prisma's DMMF (`getDMMF`, or a generator's
|
|
16
|
+
* `options.dmmf.datamodel`).
|
|
17
|
+
*/
|
|
12
18
|
type PrismaDatamodel = {
|
|
13
19
|
readonly models: readonly {
|
|
14
20
|
readonly name: string;
|
|
@@ -21,8 +27,9 @@ type PrismaDatamodel = {
|
|
|
21
27
|
}[];
|
|
22
28
|
};
|
|
23
29
|
/**
|
|
24
|
-
* Reads a model's required and list fields from `schema.prisma` text or a DMMF
|
|
25
|
-
* the `model` option of `toWhere` and `toPredicate`. Relation
|
|
30
|
+
* Reads a model's required and list fields from `schema.prisma` text or a DMMF
|
|
31
|
+
* datamodel, for the `model` option of `toWhere` and `toPredicate`. Relation
|
|
32
|
+
* fields are skipped.
|
|
26
33
|
*/
|
|
27
34
|
export declare function prismaModelFields(datamodel: string | PrismaDatamodel, model: string): PrismaModelFields;
|
|
28
35
|
//#endregion
|
|
@@ -30,11 +37,17 @@ export declare function prismaModelFields(datamodel: string | PrismaDatamodel, m
|
|
|
30
37
|
type PrismaWhereOptions = {
|
|
31
38
|
readonly fields?: Readonly<Record<string, string>>;
|
|
32
39
|
readonly subject?: Subject;
|
|
33
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults
|
|
42
|
+
* to the current time.
|
|
43
|
+
*/
|
|
34
44
|
readonly now?: Instant;
|
|
35
45
|
readonly listFields?: readonly string[];
|
|
36
46
|
readonly requiredFields?: readonly string[];
|
|
37
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* Required and list fields read from the schema by `prismaModelFields`; adds
|
|
49
|
+
* to `requiredFields` and `listFields`.
|
|
50
|
+
*/
|
|
38
51
|
readonly model?: PrismaModelFields;
|
|
39
52
|
};
|
|
40
53
|
export declare function toWhere<T extends Record<string, unknown> = Record<string, unknown>>(input: Condition | WhereResult, options?: PrismaWhereOptions): T;
|
|
@@ -48,43 +61,45 @@ export declare function permdockExtension(): {
|
|
|
48
61
|
};
|
|
49
62
|
};
|
|
50
63
|
type PrismaTransactionClient = {
|
|
51
|
-
$executeRawUnsafe(query: string, ...values: unknown[])
|
|
64
|
+
$executeRawUnsafe: (query: string, ...values: unknown[]) => Promise<number>;
|
|
52
65
|
};
|
|
53
66
|
type PrismaLike<Tx> = {
|
|
54
|
-
$transaction<T>(fn: (tx: Tx) => Promise<T>)
|
|
67
|
+
$transaction: <T>(fn: (tx: Tx) => Promise<T>) => Promise<T>;
|
|
55
68
|
};
|
|
56
69
|
/**
|
|
57
|
-
* Runs `fn` in an interactive transaction whose role and claims are
|
|
58
|
-
* the generated RLS policies decide for the same
|
|
70
|
+
* Runs `fn` in an interactive transaction whose role and claims are
|
|
71
|
+
* `permdock.subject`'s, so the generated RLS policies decide for the same
|
|
72
|
+
* subject as the in-process checks.
|
|
59
73
|
*/
|
|
60
74
|
export declare function withSubject<Tx extends PrismaTransactionClient, T>(prisma: PrismaLike<Tx>, permdock: {
|
|
61
75
|
readonly subject: Subject;
|
|
62
76
|
}, fn: (tx: Tx) => Promise<T>, options?: WithSubjectOptions): Promise<T>;
|
|
63
77
|
type PrismaDelegate = {
|
|
64
|
-
findFirst(args: {
|
|
78
|
+
findFirst: (args: {
|
|
65
79
|
readonly where: Record<string, unknown>;
|
|
66
|
-
})
|
|
80
|
+
}) => Promise<unknown>;
|
|
67
81
|
};
|
|
68
82
|
/**
|
|
69
|
-
* Checks one row by its unique key, for `findUnique`, `update` and `delete`,
|
|
70
|
-
* filter: `{ found: false }` when `unique` matches nothing,
|
|
71
|
-
* filter keeps the row. One query when
|
|
83
|
+
* Checks one row by its unique key, for `findUnique`, `update` and `delete`,
|
|
84
|
+
* which take no filter: `{ found: false }` when `unique` matches nothing,
|
|
85
|
+
* otherwise whether the permission filter keeps the row. One query when
|
|
86
|
+
* granted, two otherwise.
|
|
72
87
|
*/
|
|
73
88
|
export declare function checkRow(delegate: PrismaDelegate, input: Condition | WhereResult, unique: Record<string, unknown>, options?: PrismaWhereOptions): Promise<RowCheck>;
|
|
74
89
|
//#endregion
|
|
75
90
|
//#region src/prisma/predicate.d.ts
|
|
76
91
|
/** A Prisma 8 ORM field proxy: `u.email` inside `.where((u) => ...)`. */
|
|
77
92
|
type PrismaFieldProxy = {
|
|
78
|
-
eq(value: unknown)
|
|
79
|
-
neq(value: unknown)
|
|
80
|
-
gt(value: unknown)
|
|
81
|
-
gte(value: unknown)
|
|
82
|
-
lt(value: unknown)
|
|
83
|
-
lte(value: unknown)
|
|
84
|
-
like(pattern: string)
|
|
85
|
-
in(values: readonly unknown[])
|
|
86
|
-
isNull()
|
|
87
|
-
isNotNull()
|
|
93
|
+
eq: (value: unknown) => unknown;
|
|
94
|
+
neq: (value: unknown) => unknown;
|
|
95
|
+
gt: (value: unknown) => unknown;
|
|
96
|
+
gte: (value: unknown) => unknown;
|
|
97
|
+
lt: (value: unknown) => unknown;
|
|
98
|
+
lte: (value: unknown) => unknown;
|
|
99
|
+
like: (pattern: string) => unknown;
|
|
100
|
+
in: (values: readonly unknown[]) => unknown;
|
|
101
|
+
isNull: () => unknown;
|
|
102
|
+
isNotNull: () => unknown;
|
|
88
103
|
};
|
|
89
104
|
/** `import { and, or, not } from '@prisma/orm-postgres/orm-client'`. */
|
|
90
105
|
type PrismaCombinators = {
|
|
@@ -95,12 +110,21 @@ type PrismaCombinators = {
|
|
|
95
110
|
type PrismaPredicateOptions = {
|
|
96
111
|
readonly fields?: Readonly<Record<string, string>>;
|
|
97
112
|
readonly subject?: Subject;
|
|
98
|
-
/**
|
|
113
|
+
/**
|
|
114
|
+
* The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults
|
|
115
|
+
* to the current time.
|
|
116
|
+
*/
|
|
99
117
|
readonly now?: Instant;
|
|
100
|
-
/**
|
|
118
|
+
/**
|
|
119
|
+
* Required and list fields from `prismaModelFields`; `contains` on a list
|
|
120
|
+
* field is refused.
|
|
121
|
+
*/
|
|
101
122
|
readonly model?: PrismaModelFields;
|
|
102
123
|
readonly listFields?: readonly string[];
|
|
103
|
-
/**
|
|
124
|
+
/**
|
|
125
|
+
* A non-null column (the primary key) that spells constant true and false.
|
|
126
|
+
* Default `id`.
|
|
127
|
+
*/
|
|
104
128
|
readonly key?: string;
|
|
105
129
|
/** Loaded from `@prisma/orm-postgres/orm-client` by default. */
|
|
106
130
|
readonly combinators?: PrismaCombinators;
|
|
@@ -108,16 +132,17 @@ type PrismaPredicateOptions = {
|
|
|
108
132
|
type Model = Readonly<Record<string, PrismaFieldProxy>>;
|
|
109
133
|
/**
|
|
110
134
|
* Compiles a condition into a Prisma 8 ORM predicate: pass the result to
|
|
111
|
-
* `db.orm.<ns>.<Model>.where(...)`. No grant compiles to a predicate that
|
|
135
|
+
* `db.orm.<ns>.<Model>.where(...)`. No grant compiles to a predicate that
|
|
136
|
+
* matches no row.
|
|
112
137
|
*/
|
|
113
138
|
export declare function toPredicate<M = Model>(input: Condition | WhereResult, options?: PrismaPredicateOptions): (model: M) => unknown;
|
|
114
139
|
//#endregion
|
|
115
140
|
//#region src/conditions/resolve-related.d.ts
|
|
116
141
|
type ResolveRelatedOptions = {
|
|
117
142
|
/**
|
|
118
|
-
* Runs one Postgres query with `$1`-style placeholders and returns its
|
|
119
|
-
*
|
|
120
|
-
*
|
|
143
|
+
* Runs one Postgres query with `$1`-style placeholders and returns its rows;
|
|
144
|
+
* each row's `id` is an id the filtered field may hold. With Prisma: `({ sql,
|
|
145
|
+
* values }) => prisma.$queryRawUnsafe(sql, ...values)`.
|
|
121
146
|
*/
|
|
122
147
|
readonly run: (query: {
|
|
123
148
|
readonly sql: string;
|
|
@@ -125,14 +150,17 @@ type ResolveRelatedOptions = {
|
|
|
125
150
|
}) => Promise<readonly Readonly<Record<string, unknown>>[]>;
|
|
126
151
|
/** Where the relation graph lives. */
|
|
127
152
|
readonly relations?: RelationsMapping;
|
|
128
|
-
/**
|
|
153
|
+
/**
|
|
154
|
+
* Turns an id (always text) into the field's type, e.g. `Number` for an
|
|
155
|
+
* integer key.
|
|
156
|
+
*/
|
|
129
157
|
readonly parse?: (id: string, field: string) => unknown;
|
|
130
158
|
};
|
|
131
159
|
/**
|
|
132
|
-
* `where` with every `related` node replaced by the ids it reaches, read in
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
160
|
+
* `where` with every `related` node replaced by the ids it reaches, read in one
|
|
161
|
+
* query per node, so an ORM without raw subqueries (Prisma) filters the graph
|
|
162
|
+
* with a plain `in`. The ids are read now: run the filtered query right after,
|
|
163
|
+
* in the same transaction when the graph may change in between.
|
|
136
164
|
*/
|
|
137
165
|
export declare function resolveRelated(where: WhereResult, options: ResolveRelatedOptions): Promise<WhereResult>;
|
|
138
166
|
//#endregion
|
package/dist/prisma/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "../freeze-
|
|
3
|
-
import { t as assertSafeKey } from "../paths-
|
|
4
|
-
import { n as PermDockValidationError } from "../validation-error-
|
|
5
|
-
import {
|
|
6
|
-
import { n as statementText, o as rowCheckOf, r as subjectStatements, s as loadPeer } from "../subject-settings-
|
|
2
|
+
import { n as freezeDeep } from "../freeze-jjan0lCv.js";
|
|
3
|
+
import { t as assertSafeKey } from "../paths-CUvURzHp.js";
|
|
4
|
+
import { n as PermDockValidationError } from "../validation-error-CYg2kJEw.js";
|
|
5
|
+
import { c as relatedTargetsSql, d as restrictedRowsSql, n as compileWhere, o as relatedRowGuard, r as escapeLike, u as renderGraphSql } from "../compile-EzEMB-7v.js";
|
|
6
|
+
import { n as statementText, o as rowCheckOf, r as subjectStatements, s as loadPeer } from "../subject-settings-8sH5HlII.js";
|
|
7
7
|
//#region src/prisma/to-where.ts
|
|
8
8
|
function fieldTests(options) {
|
|
9
9
|
const mapped = (field) => fieldName(field, options.fields);
|
|
@@ -139,8 +139,9 @@ function permdockExtension() {
|
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
141
|
/**
|
|
142
|
-
* Runs `fn` in an interactive transaction whose role and claims are
|
|
143
|
-
* the generated RLS policies decide for the same
|
|
142
|
+
* Runs `fn` in an interactive transaction whose role and claims are
|
|
143
|
+
* `permdock.subject`'s, so the generated RLS policies decide for the same
|
|
144
|
+
* subject as the in-process checks.
|
|
144
145
|
*/
|
|
145
146
|
function withSubject(prisma, permdock, fn, options = {}) {
|
|
146
147
|
const statements = subjectStatements(permdock, options);
|
|
@@ -150,9 +151,10 @@ function withSubject(prisma, permdock, fn, options = {}) {
|
|
|
150
151
|
});
|
|
151
152
|
}
|
|
152
153
|
/**
|
|
153
|
-
* Checks one row by its unique key, for `findUnique`, `update` and `delete`,
|
|
154
|
-
* filter: `{ found: false }` when `unique` matches nothing,
|
|
155
|
-
* filter keeps the row. One query when
|
|
154
|
+
* Checks one row by its unique key, for `findUnique`, `update` and `delete`,
|
|
155
|
+
* which take no filter: `{ found: false }` when `unique` matches nothing,
|
|
156
|
+
* otherwise whether the permission filter keeps the row. One query when
|
|
157
|
+
* granted, two otherwise.
|
|
156
158
|
*/
|
|
157
159
|
async function checkRow(delegate, input, unique, options = {}) {
|
|
158
160
|
const filter = toWhere(input, options);
|
|
@@ -233,7 +235,8 @@ function render(node, model, options, ops) {
|
|
|
233
235
|
}
|
|
234
236
|
/**
|
|
235
237
|
* Compiles a condition into a Prisma 8 ORM predicate: pass the result to
|
|
236
|
-
* `db.orm.<ns>.<Model>.where(...)`. No grant compiles to a predicate that
|
|
238
|
+
* `db.orm.<ns>.<Model>.where(...)`. No grant compiles to a predicate that
|
|
239
|
+
* matches no row.
|
|
237
240
|
*/
|
|
238
241
|
function toPredicate(input, options = {}) {
|
|
239
242
|
const compiled = compileWhere(input, compact({
|
|
@@ -292,8 +295,9 @@ function fromDatamodel(datamodel, model) {
|
|
|
292
295
|
};
|
|
293
296
|
}
|
|
294
297
|
/**
|
|
295
|
-
* Reads a model's required and list fields from `schema.prisma` text or a DMMF
|
|
296
|
-
* the `model` option of `toWhere` and `toPredicate`. Relation
|
|
298
|
+
* Reads a model's required and list fields from `schema.prisma` text or a DMMF
|
|
299
|
+
* datamodel, for the `model` option of `toWhere` and `toPredicate`. Relation
|
|
300
|
+
* fields are skipped.
|
|
297
301
|
*/
|
|
298
302
|
function prismaModelFields(datamodel, model) {
|
|
299
303
|
assertSafeKey(model, "Prisma model");
|
|
@@ -334,10 +338,10 @@ function refused(detail) {
|
|
|
334
338
|
});
|
|
335
339
|
}
|
|
336
340
|
/**
|
|
337
|
-
* `where` with every `related` node replaced by the ids it reaches, read in
|
|
338
|
-
*
|
|
339
|
-
*
|
|
340
|
-
*
|
|
341
|
+
* `where` with every `related` node replaced by the ids it reaches, read in one
|
|
342
|
+
* query per node, so an ORM without raw subqueries (Prisma) filters the graph
|
|
343
|
+
* with a plain `in`. The ids are read now: run the filtered query right after,
|
|
344
|
+
* in the same transaction when the graph may change in between.
|
|
341
345
|
*/
|
|
342
346
|
async function resolveRelated(where, options) {
|
|
343
347
|
const resources = where.resources;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
3
|
-
import { n as PermDockValidationError } from "./validation-error-
|
|
4
|
-
import { a as problemType, i as stepUpOf, n as problemDetails, o as statusProblem, t as notFoundDetails } from "./problem-details-
|
|
5
|
-
import { a as deniedMessage, i as approvalMessage } from "./errors-
|
|
6
|
-
import { a as durationOf, g as secondsOf, p as nowSeconds } from "./time-
|
|
2
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { n as PermDockValidationError } from "./validation-error-CYg2kJEw.js";
|
|
4
|
+
import { a as problemType, i as stepUpOf, n as problemDetails, o as statusProblem, t as notFoundDetails } from "./problem-details-CLDgX1KV.js";
|
|
5
|
+
import { a as deniedMessage, i as approvalMessage } from "./errors-B6R_lg2a.js";
|
|
6
|
+
import { a as durationOf, g as secondsOf, p as nowSeconds } from "./time-nR1JesoH.js";
|
|
7
7
|
//#region src/server/problem.ts
|
|
8
8
|
function quoted(value) {
|
|
9
9
|
return `"${value.replaceAll(/["\\]/gu, "")}"`;
|
|
@@ -31,7 +31,10 @@ function protectedResourceMetadataUrl(resource) {
|
|
|
31
31
|
const path = resource.pathname === "/" ? "" : resource.pathname;
|
|
32
32
|
return `${resource.origin}/.well-known/oauth-protected-resource${path}`;
|
|
33
33
|
}
|
|
34
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* The `error_description` of every `invalid_token` challenge (RFC 6750 section
|
|
36
|
+
* 3.1).
|
|
37
|
+
*/
|
|
35
38
|
const INVALID_TOKEN = "The access token is invalid";
|
|
36
39
|
function wwwAuthenticate(decision, permission, credentials = true) {
|
|
37
40
|
return challengeFor(decision, permission?.scope, credentials);
|
|
@@ -111,9 +114,9 @@ function rateLimitHeaders(decision, now) {
|
|
|
111
114
|
};
|
|
112
115
|
}
|
|
113
116
|
/**
|
|
114
|
-
* The response for a decision's Problem Details: `WWW-Authenticate` for a
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
+
* The response for a decision's Problem Details: `WWW-Authenticate` for a `401`
|
|
118
|
+
* or a missing delegation, and the rate-limit fields for a `429`. A hidden
|
|
119
|
+
* row's `404` carries neither, so it reads like a missing one.
|
|
117
120
|
*/
|
|
118
121
|
function decisionResponse(details, decision, options = {}) {
|
|
119
122
|
const headers = new Headers({
|
|
@@ -127,13 +130,15 @@ function decisionResponse(details, decision, options = {}) {
|
|
|
127
130
|
headers
|
|
128
131
|
});
|
|
129
132
|
}
|
|
130
|
-
function
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
function validationOf(decision, disclosure) {
|
|
134
|
+
const detail = decision.outcome === "denied" ? decision.denials[0]?.detail : void 0;
|
|
135
|
+
return disclosure !== "hide" && detail instanceof PermDockValidationError ? detail : void 0;
|
|
136
|
+
}
|
|
137
|
+
/** The Problem Details body `problemFromDecision` answers with. */
|
|
138
|
+
function decisionProblem(decision, permission, subject, options = {}) {
|
|
139
|
+
return validationOf(decision, options.disclosure)?.toProblemDetails() ?? refusalDetails(decision, permission, subject, options);
|
|
140
|
+
}
|
|
141
|
+
function refusalDetails(decision, permission, subject, options) {
|
|
137
142
|
const details = problemDetails(compact({
|
|
138
143
|
decision,
|
|
139
144
|
detail: decision.outcome === "approval-required" ? approvalMessage(permission.key, decision.reason, decision.token) : deniedMessage(permission.key, subject?.principal?.id, decision.denials, decision.alternatives.map((leaf) => leaf.key), subject !== void 0),
|
|
@@ -147,10 +152,19 @@ function problemFromDecision(decision, permission, subject, options = {}) {
|
|
|
147
152
|
at: options.approval.at,
|
|
148
153
|
hint: options.approval.hint
|
|
149
154
|
});
|
|
150
|
-
return
|
|
155
|
+
return approval === void 0 ? details : {
|
|
151
156
|
...details,
|
|
152
157
|
approval
|
|
153
|
-
}
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function problemFromDecision(decision, permission, subject, options = {}) {
|
|
161
|
+
if (decision.outcome === "granted") return new Response(null, { status: 204 });
|
|
162
|
+
const validation = validationOf(decision, options.disclosure);
|
|
163
|
+
if (validation !== void 0) return problemResponse(validation.toProblemDetails(), options.scope === void 0 ? permission : {
|
|
164
|
+
...permission,
|
|
165
|
+
scope: options.scope
|
|
166
|
+
}, decision);
|
|
167
|
+
return decisionResponse(refusalDetails(decision, permission, subject, options), decision, compact({
|
|
154
168
|
scope: options.scope ?? permission.scope,
|
|
155
169
|
credentials: options.credentials
|
|
156
170
|
}));
|
|
@@ -167,16 +181,22 @@ const ANONYMOUS = freezeDeep({
|
|
|
167
181
|
}],
|
|
168
182
|
alternatives: []
|
|
169
183
|
});
|
|
170
|
-
/**
|
|
184
|
+
/**
|
|
185
|
+
* The `401` for a request with no subject, with the RFC 6750 challenge its
|
|
186
|
+
* credentials call for.
|
|
187
|
+
*/
|
|
171
188
|
function unauthenticatedProblem(credentials) {
|
|
172
189
|
return decisionResponse(problemDetails({
|
|
173
190
|
decision: ANONYMOUS,
|
|
174
191
|
detail: "anonymous"
|
|
175
192
|
}), ANONYMOUS, { credentials });
|
|
176
193
|
}
|
|
177
|
-
/**
|
|
194
|
+
/**
|
|
195
|
+
* RFC 9110 section 15.5.6: a `405` lists the methods the resource supports in
|
|
196
|
+
* `Allow`.
|
|
197
|
+
*/
|
|
178
198
|
function methodNotAllowed(allow) {
|
|
179
199
|
return problemResponse(statusProblem(405, `use ${allow}`), void 0, void 0, { Allow: allow });
|
|
180
200
|
}
|
|
181
201
|
//#endregion
|
|
182
|
-
export {
|
|
202
|
+
export { decisionResponse as a, problemFromDecision as c, unauthenticatedProblem as d, validationProblem as f, decisionProblem as i, problemResponse as l, batchTooLarge as n, methodNotAllowed as o, wwwAuthenticate as p, bearerChallenge as r, notFoundProblem as s, ANONYMOUS as t, protectedResourceMetadataUrl as u };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { t as PROBLEM_BASE } from "./validation-error-
|
|
2
|
+
import { t as PROBLEM_BASE } from "./validation-error-CYg2kJEw.js";
|
|
3
3
|
import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
|
|
4
4
|
//#region src/core/problem-types.ts
|
|
5
5
|
/** The `type` URI of a PermDock problem type. */
|
|
@@ -38,7 +38,10 @@ function statusProblem(status, detail, extra = {}) {
|
|
|
38
38
|
}
|
|
39
39
|
//#endregion
|
|
40
40
|
//#region src/core/problem-details.ts
|
|
41
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* Reasons that only arise once a matching grant was found, so they reveal
|
|
43
|
+
* nothing hidden.
|
|
44
|
+
*/
|
|
42
45
|
const HOLDS_GRANT = /* @__PURE__ */ new Set([
|
|
43
46
|
"insufficient-user-authentication",
|
|
44
47
|
"limit",
|
|
@@ -48,14 +51,20 @@ function granteesOf(to) {
|
|
|
48
51
|
if (to === void 0) return [];
|
|
49
52
|
return Array.isArray(to) ? to : [to];
|
|
50
53
|
}
|
|
51
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* The plans a `not-entitled` denial asks for; empty unless every denial is
|
|
56
|
+
* `not-entitled`.
|
|
57
|
+
*/
|
|
52
58
|
function requiredPlans(decision) {
|
|
53
59
|
if (decision.outcome !== "denied" || decision.denials.length === 0 || decision.denials.some((denial) => denial.reason !== "not-entitled")) return [];
|
|
54
60
|
const plans = /* @__PURE__ */ new Set();
|
|
55
61
|
for (const denial of decision.denials) for (const item of granteesOf(denial.to)) if (item.kind === "plan") plans.add(item.plan);
|
|
56
62
|
return [...plans];
|
|
57
63
|
}
|
|
58
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* The `acr` values and the tightest `maxAge` the failing assurance grants ask
|
|
66
|
+
* for.
|
|
67
|
+
*/
|
|
59
68
|
function stepUpOf(decision) {
|
|
60
69
|
if (decision.outcome !== "denied") return {};
|
|
61
70
|
const acr = /* @__PURE__ */ new Set();
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
//#region src/cli/cloud/problem-types.ts
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* The Problem `type` of `GET /v1/projects/{id}/policy` before the first `cloud
|
|
4
|
+
* push`.
|
|
5
|
+
*/
|
|
3
6
|
const POLICY_NOT_PUBLISHED = "https://permdock.com/problems/policy-not-published";
|
|
4
7
|
//#endregion
|
|
5
8
|
export { POLICY_NOT_PUBLISHED as t };
|