permdock 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/dist/a2a/index.d.ts +7 -7
- package/dist/a2a/index.js +8 -8
- package/dist/action-result-BcudBQOF.d.ts +19 -0
- package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
- package/dist/{adoption-scan-D-feE7BE.js → adoption-scan-Ch07MdxN.js} +5 -5
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +19 -13
- package/dist/ai-sdk/index.js +6 -6
- package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
- package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
- package/dist/{approval-prompt-K0faOLFp.d.ts → approval-prompt-3BqWczTt.d.ts} +13 -11
- package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
- package/dist/approvals/index.d.ts +4 -4
- package/dist/approvals/index.js +6 -6
- package/dist/{approvals-CMRfsbBh.js → approvals-DnIBTuXE.js} +66 -42
- package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
- package/dist/{arazzo-ClrF3PVb.js → arazzo-BpS7LnV0.js} +2 -2
- package/dist/{arazzo-rdeJ8n1J.js → arazzo-CmQaGPkM.js} +6 -6
- package/dist/{args-CC3OwyHW.js → args-0FrVs5EH.js} +14 -7
- package/dist/astro/index.d.ts +30 -12
- package/dist/astro/index.js +2 -2
- package/dist/{audience-BrMs8c4o.js → audience-DTjR8xet.js} +8 -8
- package/dist/{auth-CscUX8Sy.js → auth--yPyZNgr.js} +19 -7
- package/dist/authzen/index.d.ts +34 -28
- package/dist/authzen/index.js +23 -20
- package/dist/{automation-DOtAFWdy.d.ts → automation-C6Jg75xq.d.ts} +42 -32
- package/dist/{automation-ySsxp_Yp.js → automation-x3KEUusw.js} +22 -21
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +13 -7
- package/dist/better-supabase/index.d.ts +357 -227
- package/dist/better-supabase/index.js +219 -140
- package/dist/{bind-D1nO6fiC.js → bind-BNQA9JK9.js} +26 -10
- package/dist/{bind-JDuvxjuW.d.ts → bind-YYjvfpB9.d.ts} +32 -12
- package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
- package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
- package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
- package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
- package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
- package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
- package/dist/{build-instance-DxE7czo9.js → build-instance-BWXqwQYU.js} +3 -3
- package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-D4UC9TTW.d.ts → capability-Di9tiUvi.d.ts} +41 -29
- package/dist/{casbin-BHijLuHY.js → casbin-B7_yS-oo.js} +2 -2
- package/dist/{casbin-BW9pS47J.js → casbin-bHyIxTNQ.js} +16 -8
- package/dist/{casl-CmJlgziS.js → casl-C4OINZHI.js} +2 -2
- package/dist/{casl-UbI8v-Wq.js → casl-CHHoCldP.js} +19 -10
- package/dist/catalog/index.d.ts +51 -30
- package/dist/catalog/index.js +18 -15
- package/dist/{catalog-D69WhFii.js → catalog-CGlSwU6j.js} +20 -19
- package/dist/catalog-D3oS2GH3.js +1 -0
- package/dist/{catalog-BaMQfQ6Y.js → catalog-amPDr0JQ.js} +3 -3
- package/dist/{catalog-doc-CV9s6B1S.js → catalog-doc-DjMKzJp9.js} +28 -14
- package/dist/{catalog-fingerprint-C144oW4M.js → catalog-fingerprint-e6aCWosn.js} +18 -14
- package/dist/catalog-operations-DeHTrJSV.js +60 -0
- package/dist/{challenge-nGWma08S.js → challenge-DImNcR7B.js} +48 -27
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +13 -10
- package/dist/chat-sdk/index.d.ts +44 -26
- package/dist/chat-sdk/index.js +17 -17
- package/dist/{checks-BC_0mPIq.js → checks-CGkP3Z7A.js} +4 -1
- package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
- package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
- package/dist/claude-agent/index.d.ts +6 -6
- package/dist/claude-agent/index.js +6 -3
- package/dist/clerk/index.d.ts +11 -7
- package/dist/clerk/index.js +6 -6
- package/dist/cli/bin.js +4 -4
- package/dist/cli/index.d.ts +82 -7
- package/dist/cli/index.js +6 -6
- package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
- package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
- package/dist/cloud/index.d.ts +84 -52
- package/dist/cloud/index.js +53 -39
- package/dist/{cloud-CO8pYtwr.js → cloud-3kWfjnYy.js} +4 -5
- package/dist/{codemod-BP6n8N9L.js → codemod-Bv5i-Mzo.js} +523 -201
- package/dist/{codemod-i4N2BhDc.js → codemod-D9Aiii1r.js} +3 -4
- package/dist/{collect-DNm3oKOk.js → collect-B80GYEot.js} +4 -5
- package/dist/collect-D-eroIfV.js +1 -0
- package/dist/{collect-BaWeMjwV.js → collect-WCl8cJQV.js} +26 -63
- package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
- package/dist/compile/index.d.ts +2 -2
- package/dist/compile/index.js +1 -1
- package/dist/{compile-COM2VKuN.d.ts → compile-BEklRUYo.d.ts} +36 -12
- package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BNdVf7X2.js → completion-_bc0OUQ-.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-DGZzMV1B.js → config-D5XrLWpk.js} +2 -2
- package/dist/{config-report-Cm7UITNA.js → config-report-BmWIskD7.js} +9 -6
- package/dist/config-shape-ykV0Vm2n.js +134 -0
- package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
- package/dist/{connector-schema-_VCSsdtD.js → connector-schema-CYLQNMYq.js} +3 -2
- package/dist/{context--uM9V3Ui.js → context-BnIzxTNE.js} +4 -3
- package/dist/convex/index.d.ts +13 -7
- package/dist/convex/index.js +9 -6
- package/dist/{core-CQkE8Esr.d.ts → core-CFepFiDP.d.ts} +49 -22
- package/dist/{core-B5-w6Kw9.js → core-DzVINFbU.js} +26 -20
- package/dist/{create-Cb86Z8Im.js → create-6EwRQlig.js} +10 -7
- package/dist/{create-DJrlhEp9.js → create-BLPKnJKa.js} +35 -25
- package/dist/{create-UTnUVETj.d.ts → create-BPUopdfL.d.ts} +70 -37
- package/dist/{create-QHuuPw3q.d.ts → create-BamXmeob.d.ts} +37 -29
- package/dist/{create-B2-CQqCI.d.ts → create-DBvUsgzK.d.ts} +49 -28
- package/dist/{credential-CIM7wHwA.js → credential-CyyyvCsL.js} +41 -38
- package/dist/{credentials-BpuTwd7a.js → credentials-CdDxp7jN.js} +6 -6
- package/dist/{deciding-columns-DRo2QM6E.js → deciding-columns-NB4wcyBf.js} +2 -2
- package/dist/{delegation-C5rOdTp5.js → delegation-CDB6_keF.js} +31 -22
- package/dist/delivery/index.d.ts +4 -4
- package/dist/delivery/index.js +5 -5
- package/dist/{delivery-rwOKLWRm.js → delivery-BupfvJIV.js} +34 -22
- package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
- package/dist/denied-text-DHldhVUv.d.ts +22 -0
- package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
- package/dist/{describe-O0SwYIK8.d.ts → describe-BbFPBSms.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-Btr1c1Ow.js → diff-BwR1JdP2.js} +2 -2
- package/dist/{diff-DzT-xD13.js → diff-CQegtBAo.js} +22 -13
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BU1szn63.js → doctor-ClRVAtXQ.js} +287 -135
- package/dist/{doctor-BoK_y0KO.js → doctor-LPMYjSqO.js} +4 -4
- package/dist/drizzle/index.d.ts +33 -19
- package/dist/drizzle/index.js +17 -9
- package/dist/elysia/index.d.ts +17 -11
- package/dist/elysia/index.js +5 -5
- package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
- package/dist/{errors-B_Qg9D3e.d.ts → errors-BIM4MFsJ.d.ts} +22 -6
- package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
- package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
- package/dist/{evaluate-B_oqFbWC.js → evaluate-BAmf_AQd.js} +153 -82
- package/dist/{evaluations-BCddEOfO.d.ts → evaluations-DOWuBpWv.d.ts} +11 -5
- package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
- package/dist/eve/index.d.ts +9 -6
- package/dist/eve/index.js +4 -4
- package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
- package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
- package/dist/express/index.d.ts +9 -6
- package/dist/express/index.js +9 -6
- package/dist/fastify/index.d.ts +16 -10
- package/dist/fastify/index.js +8 -5
- package/dist/{fetch-adapter-CuhyYwC1.d.ts → fetch-adapter-BIbBAtPZ.d.ts} +9 -6
- package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-dPTgJVHd.js} +14 -11
- package/dist/fields-D0vUI6dq.js +498 -0
- package/dist/{files-acUbNwWt.js → files-B3AA05f1.js} +8 -5
- package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
- package/dist/{fixtures-BTMW6zgU.js → fixtures-A1_sp_tR.js} +15 -6
- package/dist/{flags-aaeRAdiD.js → flags-DXjoTVbS.js} +2 -2
- package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
- package/dist/{from-snapshot-Bz469dIh.js → from-snapshot-DCakWRsr.js} +18 -15
- package/dist/gen-BFfzZSLH.js +58 -0
- package/dist/gen-BtfFWGbz.js +827 -0
- package/dist/{generate-3FNO5P5Q.js → generate-CRVV5V7l.js} +14 -8
- package/dist/generate-CezbCaTI.js +275 -0
- package/dist/{grantee-BrRANrpT.js → grantee-Dke-9rd1.js} +4 -4
- package/dist/{grantee-conditions-C6P1Tvol.js → grantee-conditions-BrYPe-w0.js} +12 -12
- package/dist/{grantee-match-0RtHWQDx.js → grantee-match-7RZZvoT_.js} +12 -6
- package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
- package/dist/h3/index.d.ts +10 -7
- package/dist/h3/index.js +3 -3
- package/dist/headers-B9jQxjtW.d.ts +10 -0
- package/dist/{helpers-DY3vXuGs.js → helpers-DJicaG6f.js} +40 -28
- package/dist/hono/index.d.ts +16 -10
- package/dist/hono/index.js +5 -5
- package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -21
- package/dist/{hosted-BmjzxQhp.d.ts → hosted-DVxlLZMe.d.ts} +33 -21
- package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
- package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
- package/dist/{http-Ca3Sr5x1.js → http-DOL33cO0.js} +11 -8
- package/dist/{import-DB2EG_iy.js → import-ACkOrv6g.js} +6 -6
- package/dist/{import-Bz0GefWg.js → import-CST57XLp.js} +64 -51
- package/dist/{index-CMiPH2Tv.d.ts → index-BinlXeU-.d.ts} +64 -37
- package/dist/{index-BSfRl0hZ.d.ts → index-CV-7DWeD.d.ts} +64 -52
- package/dist/{index-BE8y3moU.d.ts → index-DJwEgYzA.d.ts} +127 -82
- package/dist/{index-DH9DUDEM.d.ts → index-Dj2qF9VC.d.ts} +54 -30
- package/dist/{index-BTkwrK7v.d.ts → index-vYjMrXyK.d.ts} +336 -173
- package/dist/{index-DLwcuCN_.d.ts → index-ymept53A.d.ts} +51 -30
- package/dist/index.d.ts +22 -22
- package/dist/index.js +34 -34
- package/dist/{init-B-4t1NzC.js → init-BjuFDYT1.js} +10 -10
- package/dist/{init-5TXNji88.js → init-txYTuW9u.js} +5 -5
- package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-CoHn-0e8.d.ts} +4 -4
- package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot-DuWf1cT3.js} +86 -61
- package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
- package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
- package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
- package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
- package/dist/jwt/index.d.ts +57 -27
- package/dist/jwt/index.js +24 -21
- package/dist/{kernel-DVExUwkp.js → kernel-qv4cr9w8.js} +32 -23
- package/dist/kysely/index.d.ts +49 -33
- package/dist/kysely/index.js +9 -7
- package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
- package/dist/{load-DxroEzH1.js → load-DjSU5KXO.js} +6 -6
- package/dist/load-Dm0pSYH3.js +1 -0
- package/dist/{login-ClSJh5t5.js → login-CfImTJGb.js} +4 -4
- package/dist/{login-WC9HPJpU.js → login-CgfCTO3F.js} +16 -9
- package/dist/{manifest-Dv6q4i5s.js → manifest-B2QPh19C.js} +49 -38
- package/dist/{manifest-BVhExYhw.d.ts → manifest-CzzWtnAb.d.ts} +126 -31
- package/dist/{manifest-schema-Cv492Qev.js → manifest-schema-2r37XRhD.js} +44 -3
- package/dist/{manifest-B79YuF2T.js → manifest-wg8WkkpD.js} +6 -6
- package/dist/{map-claims-etGIS_Dv.js → map-claims-C-nv08_n.js} +16 -9
- package/dist/{map-error-BQGyDm_M.js → map-error-pasIGqMT.js} +7 -7
- package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
- package/dist/mcp/index.d.ts +114 -61
- package/dist/mcp/index.js +70 -40
- package/dist/{migrate-Dodel0IJ.js → migrate-B7oP_sQU.js} +35 -17
- package/dist/module-values-BJTBdo6y.js +107 -0
- package/dist/nest/index.d.ts +23 -13
- package/dist/nest/index.js +18 -11
- package/dist/next/client.d.ts +5 -2
- package/dist/next/client.js +1 -1
- package/dist/next/index.d.ts +79 -26
- package/dist/next/index.js +121 -10
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +4 -3
- package/dist/node/index.d.ts +5 -5
- package/dist/node/index.js +3 -3
- package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
- package/dist/openai/index.d.ts +13 -7
- package/dist/openai/index.js +3 -3
- package/dist/openapi/index.d.ts +51 -30
- package/dist/openapi/index.js +2 -2
- package/dist/{openapi-ztVaux6j.js → openapi-BGeuunWC.js} +23 -14
- package/dist/{openapi-DMocl1bh.js → openapi-BIpw3Mb7.js} +4 -5
- package/dist/{openapi-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
- package/dist/{operation-findings-kRcEp8lE.js → operation-findings-CXtFzlKJ.js} +3 -3
- package/dist/{operations-BNLes61x.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
- package/dist/orpc/index.d.ts +68 -14
- package/dist/orpc/index.js +62 -13
- package/dist/otel/index.d.ts +7 -4
- package/dist/otel/index.js +8 -5
- package/dist/{output-DgSDLrta.js → output-DV5dwOTs.js} +9 -5
- package/dist/output-files-BHOIlrfD.js +1 -0
- package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/ownership-DA5YdYTm.js +1059 -0
- package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
- package/dist/parse-local-manifest-CCmbhnxP.d.ts +10 -0
- package/dist/{parse-local-manifest-T1Q8X3A2.js → parse-local-manifest-DEiCF4ah.js} +19 -7
- package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
- package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
- package/dist/pdp/index.d.ts +9 -6
- package/dist/pdp/index.js +20 -13
- package/dist/{peer-DOzzMfZL.js → peer-C9LvBCcb.js} +1 -1
- package/dist/{peer-12Q5I_RH.js → peer-Q0fuZ6hx.js} +9 -3
- package/dist/{permdock-BfWEeMqk.js → permdock-BvjivVb9.js} +200 -140
- package/dist/{permdock-Dco6dyCK.d.ts → permdock-CprAPN3w.d.ts} +260 -129
- package/dist/{permission-registry-DpPtSKNZ.js → permission-registry-B8tYxPIt.js} +23 -10
- package/dist/{permission-types-DhNEmoRG.d.ts → permission-types-CAY-GU7e.d.ts} +127 -41
- package/dist/{permissions-CoqCOfJ3.d.ts → permissions-Bx6UI8n1.d.ts} +6 -3
- package/dist/{permissions-CyH2MV_B.js → permissions-CVXmRILq.js} +3 -3
- package/dist/{permissions-DArULThq.js → permissions-CYcHj_w7.js} +8 -5
- package/dist/pg-DQTqRrou.js +60 -0
- package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
- package/dist/{pkce-5h8NgMQJ.js → pkce-CnmmYqUZ.js} +1 -1
- package/dist/{policy-B7dg_yzu.d.ts → policy-BycVKnXv.d.ts} +5 -5
- package/dist/{policy-DaJy4nK4.js → policy-CLQ8__GF.js} +43 -23
- package/dist/{policy-from-catalog-DFWYkNdu.js → policy-from-catalog-CU3An8uP.js} +28 -25
- package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
- package/dist/{policy-types-B-F-qAZk.d.ts → policy-types-DGIO_gxq.d.ts} +782 -357
- package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
- package/dist/{postgrest-r5faDIzD.js → postgrest-5Dr3W64L.js} +84 -86
- package/dist/{postgrest-CYacM_u7.d.ts → postgrest-D5nUGm-c.d.ts} +55 -35
- package/dist/powersync-B701tvhE.js +1 -0
- package/dist/{powersync-13odBwiM.js → powersync-Bg8u-JcR.js} +3 -3
- package/dist/{powersync-53ryOZip.js → powersync-CJrT1DSc.js} +127 -69
- package/dist/preset/index.d.ts +38 -28
- package/dist/preset/index.js +1 -1
- package/dist/{preset-CHTbd-DQ.js → preset-BjLzeFpp.js} +56 -32
- package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
- package/dist/prisma/index.d.ts +69 -41
- package/dist/prisma/index.js +21 -17
- package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
- package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
- package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
- package/dist/{prompt-DwtVemER.js → prompt-BYc6drYW.js} +4 -1
- package/dist/protected-action-D8x73IGm.d.ts +58 -0
- package/dist/protected-action-DUYqb-Ma.js +80 -0
- package/dist/{protected-DXE3cQYg.js → protected-action-QEA8arRB.js} +48 -14
- package/dist/{provider-BQsTYYy0.js → provider-C55OGXJ7.js} +5 -4
- package/dist/{provider-Csk-THAn.d.ts → provider-DfLeek9O.d.ts} +1 -1
- package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/{pull-CN5OLxrF.js → pull-2nJr0qg_.js} +12 -11
- package/dist/pull-C3EEGzSw.js +1 -0
- package/dist/{push-tVdG8dUL.js → push-Bn-lMEmI.js} +19 -13
- package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-CDuOL2de.js} +10 -7
- package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-CryQheKq.d.ts} +12 -6
- package/dist/react/index.d.ts +9 -8
- package/dist/react/index.js +7 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +94 -55
- package/dist/react-native/index.js +200 -61
- package/dist/{refs-CNJBiTFo.js → refs-C8BKxc_e.js} +2 -2
- package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
- package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
- package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
- package/dist/{replay-DCDD_ZfL.d.ts → replay-Bs9Df2fQ.d.ts} +1 -1
- package/dist/{request-context-BykKLmyE.js → request-context-Duzdf0cd.js} +8 -8
- package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
- package/dist/resend/index.d.ts +34 -28
- package/dist/resend/index.js +29 -29
- package/dist/resolve-names-ConCSj1y.js +201 -0
- package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
- package/dist/{retire-Wj6dkyDE.js → retire-B2xffQgY.js} +15 -6
- package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
- package/dist/{rls-Ck_PocSp.js → rls-Ba9wN0SP.js} +13 -6
- package/dist/{rls-CxBZb4rZ.js → rls-Cx0dtsB7.js} +310 -128
- package/dist/{role-builder-C1VJzvcr.js → role-builder-BK2-T6oD.js} +41 -20
- package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
- package/dist/{rpc-Bk1bE-ch.js → rpc-vHIwyXCp.js} +8 -5
- package/dist/run-Ck22anC2.js +1 -0
- package/dist/{run-uLD2aWuO.js → run-PbRlXTfh.js} +26 -23
- package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-B2o2Kxz8.d.ts} +29 -14
- package/dist/{run-ticket-B5d_63Ma.js → run-ticket-Dv7aF7Dk.js} +9 -9
- package/dist/{runtime-Vif3_-zf.js → runtime-BGnrOkVH.js} +5 -2
- package/dist/{saas-Az_Kz-4D.js → saas-DK4V-3Is.js} +42 -29
- package/dist/{scan-DSljDE1Y.js → scan-CRTj6fke.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-gIcCx7zM.js → schema-BTsE1WRT.js} +8 -4
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +2 -2
- package/dist/{scim-C7JYhySg.js → scim-D8YupzX1.js} +2 -2
- package/dist/{scim-YNieBO1U.js → scim-jJBJ7g1Z.js} +33 -15
- package/dist/{scopes-BHsc-wp-.js → scopes-0Up_UA2t.js} +41 -23
- package/dist/server/index.d.ts +11 -11
- package/dist/server/index.js +12 -12
- package/dist/{server-Bnga6I50.js → server-3cVlTLde.js} +31 -31
- package/dist/{server-types-C4gZUEZy.d.ts → server-types-CyRN0-Cd.d.ts} +88 -46
- package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
- package/dist/{shared-fMKOv8hP.js → shared-Afctg7B0.js} +65 -32
- package/dist/{shared-C8LjUdVU.js → shared-l0oGGetg.js} +9 -6
- package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
- package/dist/{sink-Cp_Eot9W.d.ts → sink-B5zoUW_O.d.ts} +44 -20
- package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
- package/dist/{skills-g_3BS9NC.js → skills-C9uKfSF5.js} +3 -3
- package/dist/{skills-Dcjw9_1C.js → skills-CQQcuGBi.js} +12 -8
- package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BjAWkchD.d.ts} +21 -12
- package/dist/{snapshot-cache-DT2Kx1F8.js → snapshot-cache-Bx_4xC_6.js} +14 -11
- package/dist/solid/index.d.ts +55 -16
- package/dist/solid/index.js +46 -12
- package/dist/solid-start/index.d.ts +30 -12
- package/dist/solid-start/index.js +3 -3
- package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
- package/dist/{sources-DEEuGb8S.d.ts → sources-CWG32C0G.d.ts} +126 -53
- package/dist/{sql-B96movIM.js → sql-0WjxIp9g.js} +28 -7
- package/dist/{sql-CDEPCA0g.d.ts → sql-B80DFdpG.d.ts} +2 -2
- package/dist/{src-DLFrtrrC.js → src-C_pi2Rnh.js} +292 -101
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +47 -35
- package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
- package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-DOYEuOLx.d.ts} +7 -7
- package/dist/{store-DSP9oGvh.js → store-RNFvaJJv.js} +32 -26
- package/dist/{store-options-B_poyYvg.js → store-options-Dil3lraY.js} +105 -15
- package/dist/stores-DZJvxFIZ.d.ts +59 -0
- package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-2Vwhl7Er.d.ts → stream-9y9qw51m.d.ts} +4 -3
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{style-Ds1gNm77.js → style-DblOtSga.js} +1 -1
- package/dist/{style-Cqo7-73x.js → style-Ds11Hmk4.js} +2 -1
- package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
- package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
- package/dist/supabase/index.d.ts +48 -38
- package/dist/supabase/index.js +5 -5
- package/dist/supabase/middleware.d.ts +19 -13
- package/dist/supabase/middleware.js +7 -7
- package/dist/{supabase--0aJdLEd.js → supabase-DnMMg5Fn.js} +79 -35
- package/dist/{supabase-Bqp7iIY2.js → supabase-SBs3MYUE.js} +3 -3
- package/dist/supabase-hook-C0FyEACZ.js +1 -0
- package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-CrgU06WH.js} +175 -196
- package/dist/{supautils-MESd81bF.js → supautils-ByezN3b8.js} +385 -219
- package/dist/{support-session-Cna49-3f.js → support-session-BsmPCbz8.js} +21 -21
- package/dist/svelte/PermissionBoundary.svelte +2 -6
- package/dist/svelte/Protected.svelte +2 -8
- package/dist/svelte/index.d.ts +9 -8
- package/dist/svelte/index.js +10 -9
- package/dist/svelte/runtime.d.ts +4 -4
- package/dist/svelte/runtime.js +4 -4
- package/dist/svelte/source.d.ts +9 -8
- package/dist/svelte/source.js +6 -5
- package/dist/sveltekit/index.d.ts +30 -12
- package/dist/sveltekit/index.js +2 -2
- package/dist/{ownership-Z2LpxsGa.js → tables-BqrxBCir.js} +641 -1104
- package/dist/tanstack-start/index.d.ts +22 -10
- package/dist/tanstack-start/index.js +2 -2
- package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
- package/dist/{tenancy-CmeBQ6Nv.js → tenancy-5d1zVBvK.js} +25 -19
- package/dist/terminal/index.d.ts +23 -14
- package/dist/terminal/index.js +17 -20
- package/dist/testing/core.d.ts +1 -1
- package/dist/testing/core.js +1 -1
- package/dist/testing/fixtures/index.d.ts +8 -5
- package/dist/testing/fixtures/index.js +78 -17
- package/dist/testing/index.d.ts +225 -141
- package/dist/testing/index.js +352 -234
- package/dist/testing/saas/index.d.ts +43 -27
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -1
- package/dist/{text-diff-DhITNCnD.js → text-diff-BtfSmdUo.js} +2 -2
- package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
- package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
- package/dist/{token-2qYDvXz2.js → token-DC9EQiet.js} +14 -12
- package/dist/{tool-refusal-reAhIzdl.js → tool-refusal-Qpjs_W6M.js} +5 -2
- package/dist/trpc/index.d.ts +11 -8
- package/dist/trpc/index.js +15 -9
- package/dist/type-helpers-c7Xo_2Cu.d.ts +50 -0
- package/dist/{types-CfiKC5aN.d.ts → types-B2efzoSX.d.ts} +14 -11
- package/dist/{types-CIeZcG8v.d.ts → types-B6ExllNo.d.ts} +2 -2
- package/dist/{types-DBHftjgS.d.ts → types-BB-zWDcR.d.ts} +45 -33
- package/dist/{types-BfVmNJO5.d.ts → types-BMVDHvI0.d.ts} +128 -50
- package/dist/{types-DXmwu78Z.d.ts → types-CEinc15V.d.ts} +31 -14
- package/dist/{types-g7Oy6Zg4.d.ts → types-CN0LsqbK.d.ts} +47 -24
- package/dist/{types-CeIscIKp.d.ts → types-CWBsAwqn.d.ts} +23 -12
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-BWZybqs9.d.ts → types-CzOeVvcC.d.ts} +384 -203
- package/dist/{types-DC44-hqb.d.ts → types-DLvhVm1r.d.ts} +59 -32
- package/dist/{types-D3A19w4A.d.ts → types-DlelvQk4.d.ts} +22 -13
- package/dist/{types-cTos-H7p.d.ts → types-DsHGPtkR.d.ts} +68 -32
- package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-CQVEQawv.d.ts → types-rCRV4Ge-.d.ts} +24 -14
- package/dist/types-tQB2CEnY.d.ts +262 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-0hjZPIRX.js +1 -0
- package/dist/{usage-Bybmck7f.js → usage-B9EtHWLa.js} +50 -26
- package/dist/{usage-CDaLXCfL.js → usage-CBzgwfIs.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-CQpoquwj.d.ts → validation-error-uvp-kyfO.d.ts} +5 -2
- package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
- package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
- package/dist/{verify-pe8rL_Qw.js → verify-DlUcTDBz.js} +148 -487
- package/dist/version-DMQ0dnN5.js +48 -0
- package/dist/version-DizhmD72.js +1 -0
- package/dist/{views-BB8E9dTP.js → views-CD8wuL4Z.js} +19 -6
- package/dist/{vocabulary-Bg3eeT2H.d.ts → vocabulary-DEJ5j4mR.d.ts} +7 -4
- package/dist/vue/index.d.ts +71 -22
- package/dist/vue/index.js +50 -13
- package/dist/{waiter-DwEyouan.d.ts → waiter-CqUKX6CY.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-C-4VmFlL.js → watch-BFDKqmUa.js} +8 -8
- package/dist/watch-ClLuO2TL.js +1 -0
- package/dist/webmcp/index.d.ts +11 -11
- package/dist/webmcp/index.js +8 -5
- package/dist/{where-scope-wq2coopv.js → where-scope-DlCdCM_8.js} +24 -18
- package/dist/{who-can-BwNsI_Js.js → who-can-BoDJm0Nc.js} +23 -20
- package/dist/workflow/index.d.ts +3 -3
- package/dist/workflow/index.js +13 -13
- package/dist/workflow-sdk/index.d.ts +19 -13
- package/dist/workflow-sdk/index.js +6 -6
- package/dist/{wrap-CiSc_KCq.js → wrap-B2wziJI_.js} +4 -4
- package/dist/{wrap-B6R0cMRL.d.ts → wrap-DxXB54Wu.d.ts} +8 -5
- package/package.json +8 -8
- package/schemas/catalog-v1.json +3 -0
- package/schemas/supabase-manifest-v1.json +33 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
- package/skills/permdock-data/references/queries-and-rls.md +2 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -2
- package/skills/permdock-wire/references/adapters.md +16 -23
- package/dist/catalog-BCCjSAdH.js +0 -1
- package/dist/collect-k_Dulxr5.js +0 -1
- package/dist/config-CoQHDrDi.js +0 -166
- package/dist/denied-text-D4qkEtFz.d.ts +0 -19
- package/dist/fields-ClcQLrVc.js +0 -238
- package/dist/generate-CNU1pIOo.js +0 -171
- package/dist/headers-BIjfMaoC.js +0 -8
- package/dist/headers-CIbDTUTK.d.ts +0 -7
- package/dist/load-DrMHXzgN.js +0 -1
- package/dist/output-files-DPAY7-GX.js +0 -1
- package/dist/package-root-Dk_ETdkp.js +0 -31
- package/dist/parse-local-manifest-e4mdwAKd.d.ts +0 -10
- package/dist/policies-B2lZIurj.js +0 -295
- package/dist/powersync-CExtTLyA.js +0 -1
- package/dist/problem-details-Tcfmj3bV.d.ts +0 -7
- package/dist/protected-BwZYL1X_.d.ts +0 -39
- package/dist/pull-Cty6Ovyu.js +0 -1
- package/dist/run-Bz7DXGEv.js +0 -1
- package/dist/stores-BAZwSYZA.d.ts +0 -31
- package/dist/supabase-hook-DJxC4PoP.js +0 -1
- package/dist/types-CKV71kKh.d.ts +0 -172
- package/dist/usage-y-kBNdqs.js +0 -1
- package/dist/version-CEbQ5UeM.js +0 -18
- package/dist/version-DXkYUISx.js +0 -1
- package/dist/watch-Bd9mx3rd.js +0 -1
package/dist/resend/index.d.ts
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as ApprovalUrl, t as ApprovalPrompt } from "../approval-prompt-
|
|
3
|
-
import { d as EmailTransport, o as DeliveryResult, u as EmailMessage } from "../types-
|
|
4
|
-
import { l as ReplayStore } from "../types-
|
|
1
|
+
import { J as DecisionSink } from "../policy-types-DGIO_gxq.js";
|
|
2
|
+
import { n as ApprovalUrl, t as ApprovalPrompt } from "../approval-prompt-3BqWczTt.js";
|
|
3
|
+
import { d as EmailTransport, o as DeliveryResult, u as EmailMessage } from "../types-CN0LsqbK.js";
|
|
4
|
+
import { l as ReplayStore } from "../types-DsHGPtkR.js";
|
|
5
5
|
//#region src/resend/approval-email.d.ts
|
|
6
6
|
type ApprovalEmailOptions = {
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* The app's approval page: a base the request id is appended to, or a
|
|
9
|
+
* function of the prompt. Must be https.
|
|
10
|
+
*/
|
|
8
11
|
readonly approvalUrl: ApprovalUrl;
|
|
9
12
|
/** The product name in the footer line. */
|
|
10
13
|
readonly product?: string;
|
|
11
14
|
};
|
|
12
15
|
/**
|
|
13
|
-
* The default approval prompt email: an `approval`-category message whose
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* The default approval prompt email: an `approval`-category message whose one
|
|
17
|
+
* link opens the app's approval page for the request. It carries no approve or
|
|
18
|
+
* reject link; the signed-in approver decides on that page. Throws a
|
|
19
|
+
* `TypeError` for an approval page that is not https. Replace it with a React
|
|
20
|
+
* Email template by building the same `EmailMessage`.
|
|
18
21
|
*/
|
|
19
22
|
export declare function approvalEmail(prompt: ApprovalPrompt, options: ApprovalEmailOptions): EmailMessage;
|
|
20
23
|
//#endregion
|
|
@@ -48,16 +51,16 @@ type ResendResult<T> = {
|
|
|
48
51
|
/** The part of a `Resend` client the transport calls; a `new Resend(key)` fits. */
|
|
49
52
|
type ResendClient = {
|
|
50
53
|
readonly emails: {
|
|
51
|
-
send(payload: ResendEmailPayload, options?: {
|
|
54
|
+
send: (payload: ResendEmailPayload, options?: {
|
|
52
55
|
readonly idempotencyKey?: string;
|
|
53
|
-
})
|
|
56
|
+
}) => Promise<ResendResult<{
|
|
54
57
|
readonly id: string;
|
|
55
58
|
}>>;
|
|
56
59
|
};
|
|
57
60
|
readonly batch?: {
|
|
58
|
-
send(payloads: ResendEmailPayload[], options?: {
|
|
61
|
+
send: (payloads: ResendEmailPayload[], options?: {
|
|
59
62
|
readonly idempotencyKey?: string;
|
|
60
|
-
})
|
|
63
|
+
}) => Promise<ResendResult<{
|
|
61
64
|
readonly data: readonly {
|
|
62
65
|
readonly id: string;
|
|
63
66
|
}[];
|
|
@@ -69,22 +72,25 @@ type ResendTransportOptions = {
|
|
|
69
72
|
readonly from?: string;
|
|
70
73
|
/** The `replyTo` of an email whose message sets none. */
|
|
71
74
|
readonly replyTo?: string;
|
|
72
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Tags added to every email; names and values are ASCII letters, digits, `_`
|
|
77
|
+
* and `-`.
|
|
78
|
+
*/
|
|
73
79
|
readonly tags?: Readonly<Record<string, string>>;
|
|
74
80
|
};
|
|
75
81
|
/**
|
|
76
|
-
* The failure a Resend error name means. Rate limits, quotas and server
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
82
|
+
* The failure a Resend error name means. Rate limits, quotas and server errors
|
|
83
|
+
* are retryable with the same idempotency key; a key, sender or validation
|
|
84
|
+
* error is final. An unknown name is retryable only for a 5xx or a missing
|
|
85
|
+
* status.
|
|
80
86
|
*/
|
|
81
87
|
export declare function resendFailure(error: ResendError): DeliveryResult;
|
|
82
88
|
/**
|
|
83
89
|
* Sends the email channel of `permdock/delivery` through Resend. The
|
|
84
90
|
* idempotency key is Resend's `idempotencyKey`. The delivery id, key and
|
|
85
|
-
* category travel as tags, so `resendWebhook` can join provider events to
|
|
86
|
-
*
|
|
87
|
-
*
|
|
91
|
+
* category travel as tags, so `resendWebhook` can join provider events to the
|
|
92
|
+
* delivery. Two or more recipients go out through `batch.send`, up to 100 per
|
|
93
|
+
* call. Throws a `TypeError` for a tag outside Resend's charset.
|
|
88
94
|
*/
|
|
89
95
|
export declare function resendTransport(resend: ResendClient, options?: ResendTransportOptions): EmailTransport;
|
|
90
96
|
//#endregion
|
|
@@ -92,7 +98,7 @@ export declare function resendTransport(resend: ResendClient, options?: ResendTr
|
|
|
92
98
|
/** The part of a `Resend` client the webhook calls; a `new Resend(key)` fits. */
|
|
93
99
|
type ResendWebhookClient = {
|
|
94
100
|
readonly webhooks: {
|
|
95
|
-
verify(input: {
|
|
101
|
+
verify: (input: {
|
|
96
102
|
readonly payload: string;
|
|
97
103
|
readonly headers: {
|
|
98
104
|
readonly id: string;
|
|
@@ -100,7 +106,7 @@ type ResendWebhookClient = {
|
|
|
100
106
|
readonly signature: string;
|
|
101
107
|
};
|
|
102
108
|
readonly webhookSecret: string;
|
|
103
|
-
})
|
|
109
|
+
}) => unknown;
|
|
104
110
|
};
|
|
105
111
|
};
|
|
106
112
|
type ResendWebhookOptions = {
|
|
@@ -116,10 +122,10 @@ type ResendWebhookOptions = {
|
|
|
116
122
|
/**
|
|
117
123
|
* A fetch handler for Resend webhooks. It verifies the Standard Webhooks
|
|
118
124
|
* signature through `resend.webhooks.verify` (the `svix-*` and `webhook-*`
|
|
119
|
-
* header names both work), claims the message id, and writes one delivery
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
125
|
+
* header names both work), claims the message id, and writes one delivery event
|
|
126
|
+
* for `email.delivered`, `email.bounced`, `email.complained`, `email.failed`
|
|
127
|
+
* and `email.suppressed`. A bad signature is a `401`; a sink failure releases
|
|
128
|
+
* the claim and answers `503`, so Resend retries.
|
|
123
129
|
*/
|
|
124
130
|
export declare function resendWebhook(options: ResendWebhookOptions): (request: Request) => Promise<Response>;
|
|
125
131
|
//#endregion
|
package/dist/resend/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import { a as ownRecord } from "../paths-
|
|
3
|
-
import { o as statusProblem } from "../problem-details-
|
|
4
|
-
import { l as isRfc3339, p as nowSeconds } from "../time-
|
|
5
|
-
import { n as sha256, t as bytesToBase64Url } from "../sha256-
|
|
6
|
-
import { t as deliveryEvent } from "../delivery-event-
|
|
7
|
-
import { n as readBodyText } from "../body-text-
|
|
8
|
-
import {
|
|
9
|
-
import { t as bodyTooLarge } from "../body-
|
|
10
|
-
import { n as approvalUrlFor } from "../approval-prompt-
|
|
11
|
-
import { i as isDeliveryTarget } from "../target-
|
|
2
|
+
import { a as ownRecord } from "../paths-CUvURzHp.js";
|
|
3
|
+
import { o as statusProblem } from "../problem-details-CLDgX1KV.js";
|
|
4
|
+
import { l as isRfc3339, p as nowSeconds } from "../time-nR1JesoH.js";
|
|
5
|
+
import { n as sha256, t as bytesToBase64Url } from "../sha256-C-4WXKIu.js";
|
|
6
|
+
import { t as deliveryEvent } from "../delivery-event-JioK5YbS.js";
|
|
7
|
+
import { n as readBodyText } from "../body-text-DQhcmqdY.js";
|
|
8
|
+
import { l as problemResponse, o as methodNotAllowed } from "../problem-BVLHFK33.js";
|
|
9
|
+
import { t as bodyTooLarge } from "../body-CJQwYVa8.js";
|
|
10
|
+
import { n as approvalUrlFor } from "../approval-prompt-B8hQY69x.js";
|
|
11
|
+
import { i as isDeliveryTarget } from "../target-qdEAnnhU.js";
|
|
12
12
|
//#region src/resend/approval-email.ts
|
|
13
13
|
const HTML_ESCAPES = {
|
|
14
14
|
"&": "&",
|
|
@@ -29,11 +29,11 @@ function requesterLine(prompt) {
|
|
|
29
29
|
return actor === void 0 ? `Requested by ${principal}` : `Requested by ${principal} through ${actor.kind} ${actor.id}`;
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
* The default approval prompt email: an `approval`-category message whose
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
32
|
+
* The default approval prompt email: an `approval`-category message whose one
|
|
33
|
+
* link opens the app's approval page for the request. It carries no approve or
|
|
34
|
+
* reject link; the signed-in approver decides on that page. Throws a
|
|
35
|
+
* `TypeError` for an approval page that is not https. Replace it with a React
|
|
36
|
+
* Email template by building the same `EmailMessage`.
|
|
37
37
|
*/
|
|
38
38
|
function approvalEmail(prompt, options) {
|
|
39
39
|
const url = approvalUrlFor(prompt, options.approvalUrl);
|
|
@@ -95,10 +95,10 @@ const FINAL = {
|
|
|
95
95
|
validation_error: "rejected"
|
|
96
96
|
};
|
|
97
97
|
/**
|
|
98
|
-
* The failure a Resend error name means. Rate limits, quotas and server
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
98
|
+
* The failure a Resend error name means. Rate limits, quotas and server errors
|
|
99
|
+
* are retryable with the same idempotency key; a key, sender or validation
|
|
100
|
+
* error is final. An unknown name is retryable only for a 5xx or a missing
|
|
101
|
+
* status.
|
|
102
102
|
*/
|
|
103
103
|
function resendFailure(error) {
|
|
104
104
|
const name = error.name;
|
|
@@ -183,9 +183,9 @@ async function sendBatch(resend, items, payloadOf) {
|
|
|
183
183
|
/**
|
|
184
184
|
* Sends the email channel of `permdock/delivery` through Resend. The
|
|
185
185
|
* idempotency key is Resend's `idempotencyKey`. The delivery id, key and
|
|
186
|
-
* category travel as tags, so `resendWebhook` can join provider events to
|
|
187
|
-
*
|
|
188
|
-
*
|
|
186
|
+
* category travel as tags, so `resendWebhook` can join provider events to the
|
|
187
|
+
* delivery. Two or more recipients go out through `batch.send`, up to 100 per
|
|
188
|
+
* call. Throws a `TypeError` for a tag outside Resend's charset.
|
|
189
189
|
*/
|
|
190
190
|
function resendTransport(resend, options = {}) {
|
|
191
191
|
const tags = checkTags(options.tags ?? {});
|
|
@@ -285,9 +285,9 @@ function outcomeOf(type, data) {
|
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
287
|
/**
|
|
288
|
-
* The delivery event a verified Resend payload stands for, or `null` for
|
|
289
|
-
*
|
|
290
|
-
*
|
|
288
|
+
* The delivery event a verified Resend payload stands for, or `null` for one
|
|
289
|
+
* that is not about a PermDock delivery: opens and clicks (tracking, not
|
|
290
|
+
* delivery), sends, contact and domain events, and mail without the
|
|
291
291
|
* `permdock_delivery` and `permdock_key` tags.
|
|
292
292
|
*/
|
|
293
293
|
function eventOf(payload, source) {
|
|
@@ -333,10 +333,10 @@ async function claim(replay, key) {
|
|
|
333
333
|
/**
|
|
334
334
|
* A fetch handler for Resend webhooks. It verifies the Standard Webhooks
|
|
335
335
|
* signature through `resend.webhooks.verify` (the `svix-*` and `webhook-*`
|
|
336
|
-
* header names both work), claims the message id, and writes one delivery
|
|
337
|
-
*
|
|
338
|
-
*
|
|
339
|
-
*
|
|
336
|
+
* header names both work), claims the message id, and writes one delivery event
|
|
337
|
+
* for `email.delivered`, `email.bounced`, `email.complained`, `email.failed`
|
|
338
|
+
* and `email.suppressed`. A bad signature is a `401`; a sink failure releases
|
|
339
|
+
* the claim and answers `503`, so Resend retries.
|
|
340
340
|
*/
|
|
341
341
|
function resendWebhook(options) {
|
|
342
342
|
const source = options.source ?? "permdock";
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
2
|
+
import { c as listPermissions } from "./permission-registry-B8tYxPIt.js";
|
|
3
|
+
import { f as scopeList } from "./scopes-0Up_UA2t.js";
|
|
4
|
+
import { i as configError } from "./errors-Vpu6rKHl.js";
|
|
5
|
+
import "./budget-BELja5A9.js";
|
|
6
|
+
import "./sources-CMAM-2A3.js";
|
|
7
|
+
import { A as quoteQualified, D as qualified, I as scopeTypeOf, O as quoteIdent } from "./shared-Afctg7B0.js";
|
|
8
|
+
import { F as globalRoleRows, Q as graphSqlName, Z as graphHelper, _ as PERMISSION_HELPERS, at as memberForHelper, c as holderSources, ct as memberIdsHelper, dt as permittedForHelper, ft as permittedIdsHelper, ht as scopeTable, lt as memberOfHelper, nt as inheritedRowsHelper, o as graphPlan, pt as restrictedHelper, r as tableNames, rt as isTeamScope, tt as hasPermittedUsers, v as checkName, x as permittedByPermissionHelper } from "./tables-BqrxBCir.js";
|
|
9
|
+
import { t as FIELD_VIEWS } from "./fields-D0vUI6dq.js";
|
|
10
|
+
//#region src/cli/rls/permission-holders.ts
|
|
11
|
+
/**
|
|
12
|
+
* `permitted_<scope>_users(p_permission, p_id)`. Names are part of the SQL
|
|
13
|
+
* contract.
|
|
14
|
+
*/
|
|
15
|
+
function permittedUsersHelper(scope) {
|
|
16
|
+
return checkName(`permitted_${scope}_users`);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The users with a membership row on the instance `p_id`, or `undefined` when
|
|
20
|
+
* the scope's memberships are not all in tables.
|
|
21
|
+
*/
|
|
22
|
+
function candidatesSql(ctx, scope, user) {
|
|
23
|
+
const mapped = scopeTable(ctx, scope);
|
|
24
|
+
if (mapped !== void 0) return {
|
|
25
|
+
sql: ` select m.${quoteIdent(mapped.table.user)}::${user}
|
|
26
|
+
from ${quoteQualified(mapped.table.table)} m
|
|
27
|
+
where m.${quoteIdent(mapped.column)} = p_id`,
|
|
28
|
+
keys: []
|
|
29
|
+
};
|
|
30
|
+
const sources = holderSources(ctx, scope);
|
|
31
|
+
if (sources === void 0 || sources === "not-tables") return;
|
|
32
|
+
return {
|
|
33
|
+
sql: sources.map((source, index) => ` select h.user_id::${user}
|
|
34
|
+
from (
|
|
35
|
+
${source.holders.rows(scope, { id: `v_key_${String(index)}` }).replaceAll(/^/gmu, " ")}
|
|
36
|
+
) h`).join("\n union\n"),
|
|
37
|
+
keys: sources.map((source, index) => `v_key_${String(index)} ${source.holders.idType}`)
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* `language sql`, or PL/pgSQL when a source's id column needs `p_id` in a
|
|
42
|
+
* `%type` variable.
|
|
43
|
+
*/
|
|
44
|
+
function functionBody(keys, query) {
|
|
45
|
+
if (keys.length === 0) return `language sql
|
|
46
|
+
stable
|
|
47
|
+
security definer
|
|
48
|
+
set search_path = ''
|
|
49
|
+
as $$
|
|
50
|
+
${query}
|
|
51
|
+
$$;`;
|
|
52
|
+
return `language plpgsql
|
|
53
|
+
stable
|
|
54
|
+
security definer
|
|
55
|
+
set search_path = ''
|
|
56
|
+
as $$
|
|
57
|
+
declare
|
|
58
|
+
${keys.map((key) => ` ${key} := p_id;`).join("\n")}
|
|
59
|
+
begin
|
|
60
|
+
return query
|
|
61
|
+
${query.replaceAll(/^/gmu, " ")};
|
|
62
|
+
end
|
|
63
|
+
$$;`;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* One `permitted_<scope>_users(p_permission, p_id)` per scope in `database`
|
|
67
|
+
* mode: the users who hold a permission key on one instance, read from the
|
|
68
|
+
* scope's membership rows and the global-roles table and kept when
|
|
69
|
+
* `permitted_<scope>_ids_by_permission_for` lists the instance or
|
|
70
|
+
* `permdock_has_permission_for` answers, so denies, custom roles, expiry and
|
|
71
|
+
* suspension apply as for the user. It names other users, so no client role may
|
|
72
|
+
* execute it, and a backend role needs its own grant.
|
|
73
|
+
*/
|
|
74
|
+
function permissionHoldersSql(ctx) {
|
|
75
|
+
if (ctx.authorize !== "database") return "";
|
|
76
|
+
const user = ctx.dialect === "supabase" ? "uuid" : "text";
|
|
77
|
+
const global = globalRoleRows(ctx);
|
|
78
|
+
const hasFor = qualified(ctx, PERMISSION_HELPERS.hasFor);
|
|
79
|
+
return `${ctx.scopes.map(({ name }) => {
|
|
80
|
+
const candidates = hasPermittedUsers(ctx, name) ? candidatesSql(ctx, name, user) : void 0;
|
|
81
|
+
if (candidates === void 0) return `-- ${name}: no memberships table or table source, so permitted_${name}_users is not written`;
|
|
82
|
+
const fn = qualified(ctx, permittedUsersHelper(name));
|
|
83
|
+
const ids = qualified(ctx, checkName(`${permittedByPermissionHelper(name)}_for`));
|
|
84
|
+
const type = scopeTypeOf(ctx, name);
|
|
85
|
+
return `-- the users who hold a permission on one ${name}: its members and the global-role holders for whom the _for helpers answer; no client role may execute it
|
|
86
|
+
create or replace function ${fn}(p_permission text, p_id ${type})
|
|
87
|
+
returns setof ${user}
|
|
88
|
+
${functionBody(candidates.keys, ` select c.user_id
|
|
89
|
+
from (
|
|
90
|
+
${candidates.sql}
|
|
91
|
+
union
|
|
92
|
+
select ${global.userSql}::${user}
|
|
93
|
+
from ${global.from}
|
|
94
|
+
) c(user_id)
|
|
95
|
+
where c.user_id is not null
|
|
96
|
+
and (
|
|
97
|
+
p_id in (select ${ids}(c.user_id, p_permission))
|
|
98
|
+
or ${hasFor}(c.user_id, p_permission)
|
|
99
|
+
)
|
|
100
|
+
order by 1`)}
|
|
101
|
+
revoke execute on function ${fn}(text, ${type}) from public, anon, authenticated;`;
|
|
102
|
+
}).join("\n\n")}\n`;
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
//#region src/cli/sql/resolve-names.ts
|
|
106
|
+
/** Postgres truncates a longer identifier, so two helpers could share one name. */
|
|
107
|
+
const MAX_IDENTIFIER_BYTES = 63;
|
|
108
|
+
const IDENTIFIER = /^[a-z_][a-z0-9_]*$/u;
|
|
109
|
+
function scopeNames(name) {
|
|
110
|
+
return {
|
|
111
|
+
permittedIds: permittedIdsHelper(name),
|
|
112
|
+
permittedIdsFor: permittedForHelper(name),
|
|
113
|
+
memberIds: memberIdsHelper(name),
|
|
114
|
+
memberIdsFor: memberForHelper(name),
|
|
115
|
+
...isTeamScope(name) ? { memberIdsOf: memberOfHelper(name) } : {},
|
|
116
|
+
permittedUsers: permittedUsersHelper(name)
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function rowHelperSet(setting, resources) {
|
|
120
|
+
if (setting === void 0) return /* @__PURE__ */ new Set();
|
|
121
|
+
return new Set(setting === true ? resources : setting);
|
|
122
|
+
}
|
|
123
|
+
function baseName(table) {
|
|
124
|
+
return table.startsWith("public.") ? table.slice(7) : table.replaceAll(".", "_");
|
|
125
|
+
}
|
|
126
|
+
function resourceNames(resource, input) {
|
|
127
|
+
const sql = graphSqlName(resource);
|
|
128
|
+
const { table } = input;
|
|
129
|
+
return {
|
|
130
|
+
...table === void 0 ? {} : { table },
|
|
131
|
+
...input.graph && sql !== void 0 ? {
|
|
132
|
+
permittedIds: graphHelper(resource),
|
|
133
|
+
restricted: restrictedHelper(resource)
|
|
134
|
+
} : {},
|
|
135
|
+
...input.rows && sql !== void 0 ? {
|
|
136
|
+
rows: inheritedRowsHelper(resource),
|
|
137
|
+
row: `permitted_${sql}_row`
|
|
138
|
+
} : {},
|
|
139
|
+
...input.fields && table !== void 0 ? {
|
|
140
|
+
visible: `${table}${FIELD_VIEWS.view}`,
|
|
141
|
+
visibleFields: `${baseName(table)}${FIELD_VIEWS.companion}`,
|
|
142
|
+
mask: `${baseName(table)}${FIELD_VIEWS.mask}`
|
|
143
|
+
} : {}
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Rejects a helper that is not a lowercase SQL identifier or is longer than
|
|
148
|
+
* Postgres keeps, and two sources that resolve to the same helper.
|
|
149
|
+
*/
|
|
150
|
+
function checkNames(names) {
|
|
151
|
+
const owners = /* @__PURE__ */ new Map();
|
|
152
|
+
const claim = (name, owner) => {
|
|
153
|
+
if (!IDENTIFIER.test(name)) throw configError(`PermDock CLI: ${owner} names the SQL helper '${name}', which is not a lowercase SQL identifier`);
|
|
154
|
+
if (new TextEncoder().encode(name).length > MAX_IDENTIFIER_BYTES) throw configError(`PermDock CLI: ${owner} names the SQL helper '${name}', longer than the ${String(MAX_IDENTIFIER_BYTES)} bytes Postgres keeps; shorten the name`);
|
|
155
|
+
const other = owners.get(name);
|
|
156
|
+
if (other !== void 0 && other !== owner) throw configError(`PermDock CLI: ${other} and ${owner} both name the SQL helper '${name}'; rename one of them`);
|
|
157
|
+
owners.set(name, owner);
|
|
158
|
+
};
|
|
159
|
+
for (const [scope, helpers] of Object.entries(names.scopes)) for (const name of Object.values(helpers)) claim(name, `scope '${scope}'`);
|
|
160
|
+
for (const [resource, helpers] of Object.entries(names.resources)) {
|
|
161
|
+
const { table: _table, visible: _visible, ...functions } = helpers;
|
|
162
|
+
for (const name of Object.values(functions)) claim(name, `resource '${resource}'`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The SQL names `policy` and `config` give the generated RLS, frozen. Throws
|
|
167
|
+
* `config_invalid` for a helper name Postgres cannot hold or two sources
|
|
168
|
+
* sharing one.
|
|
169
|
+
*/
|
|
170
|
+
function resolveNames(policy, config, options = {}) {
|
|
171
|
+
const rls = config.rls;
|
|
172
|
+
const scopes = scopeList(policy.scopes);
|
|
173
|
+
const resources = [.../* @__PURE__ */ new Set([...listPermissions(policy.vocabulary.permissions).map((leaf) => leaf.resource), ...policy.resources.keys()])];
|
|
174
|
+
const graph = graphPlan(policy);
|
|
175
|
+
const tables = tableNames(rls?.tables) ?? {};
|
|
176
|
+
const rows = rowHelperSet(rls?.rowHelpers, resources);
|
|
177
|
+
const team = scopes.find((scope) => isTeamScope(scope.name));
|
|
178
|
+
const names = {
|
|
179
|
+
schema: options.schema ?? rls?.schema ?? rls?.rbac?.schema ?? "permdock",
|
|
180
|
+
gucPrefix: options.gucPrefix ?? rls?.gucPrefix ?? "app",
|
|
181
|
+
claims: {
|
|
182
|
+
tenant: options.tenantClaim ?? rls?.tenantClaim ?? "tenant_id",
|
|
183
|
+
role: rls?.roleClaim ?? "user_role"
|
|
184
|
+
},
|
|
185
|
+
...team === void 0 ? {} : { teamScope: team.name },
|
|
186
|
+
scopes: Object.fromEntries(scopes.map((scope) => [scope.name, scopeNames(scope.name)])),
|
|
187
|
+
resources: Object.fromEntries(resources.flatMap((resource) => {
|
|
188
|
+
const entry = resourceNames(resource, {
|
|
189
|
+
table: tables[resource],
|
|
190
|
+
graph: graph.has(resource),
|
|
191
|
+
rows: rows.has(resource),
|
|
192
|
+
fields: rls?.fields !== void 0
|
|
193
|
+
});
|
|
194
|
+
return Object.keys(entry).length === 0 ? [] : [[resource, entry]];
|
|
195
|
+
}))
|
|
196
|
+
};
|
|
197
|
+
checkNames(names);
|
|
198
|
+
return freezeDeep(names);
|
|
199
|
+
}
|
|
200
|
+
//#endregion
|
|
201
|
+
export { permissionHoldersSql as n, permittedUsersHelper as r, resolveNames as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as assertSafeKey } from "./paths-
|
|
1
|
+
import { t as assertSafeKey } from "./paths-CUvURzHp.js";
|
|
2
2
|
//#region src/core/resource-relations.ts
|
|
3
3
|
/** The edge's group resources with their relation and id column. */
|
|
4
4
|
function groupEntries(spec) {
|
|
@@ -35,8 +35,8 @@ function isComputedRelation(relation) {
|
|
|
35
35
|
return relation !== void 0 && !("field" in relation) && !("edge" in relation) && !("principal" in relation);
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
|
-
* The relations whose holders hold `name` on `node`: `name` itself when it
|
|
39
|
-
*
|
|
38
|
+
* The relations whose holders hold `name` on `node`: `name` itself when it has
|
|
39
|
+
* a source, then everything it includes, transitively, each once.
|
|
40
40
|
* `definePermissions` rejects cycles and unknown names, so this terminates.
|
|
41
41
|
*/
|
|
42
42
|
function expandRelation(node, name) {
|
|
@@ -53,12 +53,18 @@ function expandRelation(node, name) {
|
|
|
53
53
|
visit(name);
|
|
54
54
|
return out;
|
|
55
55
|
}
|
|
56
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Whether `node` names itself as its parent (nested folders, sub-teams,
|
|
58
|
+
* reporting lines).
|
|
59
|
+
*/
|
|
57
60
|
function isSelfParented(node) {
|
|
58
61
|
return node?.parent !== void 0 && node.parent.resource === node.name;
|
|
59
62
|
}
|
|
60
63
|
const RESOURCE_NAME = /^[A-Za-z][A-Za-z0-9_-]*$/u;
|
|
61
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* Level names ride claims and grant keys (`key@level`), so they stay SQL- and
|
|
66
|
+
* claim-safe.
|
|
67
|
+
*/
|
|
62
68
|
const LEVEL_NAME = /^[a-z][a-z0-9_]*$/u;
|
|
63
69
|
const EDGE_TABLE = /^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)?$/u;
|
|
64
70
|
function restrictedStopsOf(name, option, parent, links) {
|
|
@@ -143,7 +149,7 @@ function normaliseMatch(label, match) {
|
|
|
143
149
|
for (const column of columns) {
|
|
144
150
|
assertSafeKey(column, "edge match column");
|
|
145
151
|
const value = match[column];
|
|
146
|
-
if (typeof value !== "string" && typeof value !== "boolean" && !(typeof value === "number" && Number.isFinite(value))) throw new
|
|
152
|
+
if (typeof value !== "string" && typeof value !== "boolean" && !(typeof value === "number" && Number.isFinite(value))) throw new TypeError(`PermDock: ${label} match '${column}' must be a string, a finite number or a boolean`);
|
|
147
153
|
out[column] = value;
|
|
148
154
|
}
|
|
149
155
|
return out;
|
|
@@ -183,7 +189,10 @@ function normaliseGroups(label, groups) {
|
|
|
183
189
|
...groups.direct === void 0 ? {} : { direct: groups.direct }
|
|
184
190
|
};
|
|
185
191
|
}
|
|
186
|
-
/**
|
|
192
|
+
/**
|
|
193
|
+
* An included relation must exist on the same resource, be tenancy-free and
|
|
194
|
+
* never include itself back.
|
|
195
|
+
*/
|
|
187
196
|
function assertIncludes(node) {
|
|
188
197
|
const state = /* @__PURE__ */ new Map();
|
|
189
198
|
const visit = (name, path) => {
|
|
@@ -210,8 +219,8 @@ function assertGroupTarget(registry, node, relationName, spec, target, targetRel
|
|
|
210
219
|
/**
|
|
211
220
|
* Links and group targets name declared resources and relations. Groups may
|
|
212
221
|
* nest within one resource (teams in teams) through the same relation, which
|
|
213
|
-
* then includes nothing, so SQL can walk it with one bounded recursive query;
|
|
214
|
-
*
|
|
222
|
+
* then includes nothing, so SQL can walk it with one bounded recursive query; a
|
|
223
|
+
* group cycle across resources is rejected.
|
|
215
224
|
*/
|
|
216
225
|
function assertGraphTargets(registry) {
|
|
217
226
|
const edges = /* @__PURE__ */ new Map();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { r as escapeSqlIdent } from "./sql-
|
|
2
|
-
import { a as RETIRE_MARKER } from "./markers-
|
|
3
|
-
import { r as tableKey } from "./deciding-columns-
|
|
1
|
+
import { r as escapeSqlIdent } from "./sql-0WjxIp9g.js";
|
|
2
|
+
import { a as RETIRE_MARKER } from "./markers-BeHZ4x9Q.js";
|
|
3
|
+
import { r as tableKey } from "./deciding-columns-NB4wcyBf.js";
|
|
4
4
|
//#region src/cli/rls/retire.ts
|
|
5
5
|
const IDENT = String.raw`(?:"[^"]+"|[A-Za-z_][\w$]*)`;
|
|
6
6
|
const NAME = String.raw`(${IDENT}(?:\s*\.\s*${IDENT})?)`;
|
|
@@ -139,7 +139,10 @@ function replay(statements) {
|
|
|
139
139
|
}
|
|
140
140
|
return schema;
|
|
141
141
|
}
|
|
142
|
-
/**
|
|
142
|
+
/**
|
|
143
|
+
* Functions that write `table`, the configured `refresh` ones, and every
|
|
144
|
+
* function that calls one.
|
|
145
|
+
*/
|
|
143
146
|
function refreshFunctions(schema, table, configured) {
|
|
144
147
|
const writes = writesPattern(table);
|
|
145
148
|
const found = new Set(configured.map(key));
|
|
@@ -155,7 +158,10 @@ function refreshFunctions(schema, table, configured) {
|
|
|
155
158
|
}
|
|
156
159
|
return found;
|
|
157
160
|
}
|
|
158
|
-
/**
|
|
161
|
+
/**
|
|
162
|
+
* Calls of a legacy helper outside its own definition, grants and drops
|
|
163
|
+
* (PD056).
|
|
164
|
+
*/
|
|
159
165
|
function legacyHelperCalls(statements, name) {
|
|
160
166
|
const own = new RegExp(String.raw`^\s*(?:create\s+(?:or\s+replace\s+)?function|drop\s+function|revoke|grant|alter\s+function|comment\s+on\s+function)\b[^(]*?(?:^|[\s."])${name}"?\s*\(`, "iu");
|
|
161
167
|
const call = new RegExp(String.raw`(?<![\w$])(?:(?:"[^"]+"|\w+)\s*\.\s*)?"?${name}"?\s*\(`, "giu");
|
|
@@ -224,7 +230,10 @@ function retirePlan(statements, config) {
|
|
|
224
230
|
function escapeQualifiedName(name) {
|
|
225
231
|
return name.split(".").map((part) => escapeSqlIdent(part)).join(".");
|
|
226
232
|
}
|
|
227
|
-
/**
|
|
233
|
+
/**
|
|
234
|
+
* The retire migration: each present table without readers, its refresh
|
|
235
|
+
* triggers and functions, and the uncalled helpers.
|
|
236
|
+
*/
|
|
228
237
|
function retireSql(plan) {
|
|
229
238
|
const tables = plan.tables.filter((table) => table.present && table.readers.length === 0);
|
|
230
239
|
if (tables.length === 0) return;
|
|
@@ -3,7 +3,10 @@ type RevocationEvent = {
|
|
|
3
3
|
readonly principal: string;
|
|
4
4
|
readonly session?: string;
|
|
5
5
|
readonly tenant?: string;
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* `session-revoked` ends a connection; `changed` makes it re-resolve its
|
|
8
|
+
* subject.
|
|
9
|
+
*/
|
|
7
10
|
readonly kind: "session-revoked" | "changed";
|
|
8
11
|
};
|
|
9
12
|
type RevocationListener = (event: RevocationEvent) => void;
|
|
@@ -14,8 +17,8 @@ type RevocationListener = (event: RevocationEvent) => void;
|
|
|
14
17
|
type RevocationFeed = {
|
|
15
18
|
/** Names the implementation in errors and events. */
|
|
16
19
|
readonly name?: string;
|
|
17
|
-
subscribe(listener: RevocationListener)
|
|
18
|
-
revoke(event: RevocationEvent)
|
|
20
|
+
subscribe: (listener: RevocationListener) => () => void;
|
|
21
|
+
revoke: (event: RevocationEvent) => void | Promise<void>;
|
|
19
22
|
};
|
|
20
23
|
/** In-process feed; a multi-replica app bridges `revoke` to its own pub/sub. */
|
|
21
24
|
declare function memoryRevocationFeed(): RevocationFeed;
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { c as missingInput } from "./errors-
|
|
1
|
+
import { c as missingInput } from "./errors-Vpu6rKHl.js";
|
|
2
2
|
import { t as defineLeaf } from "./command-L8EstFNm.js";
|
|
3
|
-
import { c as given, d as policyFlag, f as validatorFlag, i as dryRunFlag, l as outFlag, n as dbUrl, o as fileOut, r as dbUrlFlags, t as checkFlag } from "./flags-
|
|
3
|
+
import { c as given, d as policyFlag, f as validatorFlag, i as dryRunFlag, l as outFlag, n as dbUrl, o as fileOut, r as dbUrlFlags, t as checkFlag } from "./flags-DXjoTVbS.js";
|
|
4
4
|
//#region src/cli/commands/rls.ts
|
|
5
5
|
const membershipsFlag = { memberships: {
|
|
6
6
|
type: "string",
|
|
7
7
|
description: "Membership table as <table>:tenant,user,role",
|
|
8
8
|
valueHint: "table"
|
|
9
9
|
} };
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* The flags that shape the generated SQL; verify --introspect and migrate take
|
|
12
|
+
* them too.
|
|
13
|
+
*/
|
|
11
14
|
const shapeFlags = {
|
|
12
15
|
target: {
|
|
13
16
|
type: "enum",
|
|
@@ -141,7 +144,10 @@ const SHAPE_DEFAULTS = {
|
|
|
141
144
|
schemas: void 0,
|
|
142
145
|
"db-url-stdin": false
|
|
143
146
|
};
|
|
144
|
-
/**
|
|
147
|
+
/**
|
|
148
|
+
* Every RlsRunInput field at its "not given" value, with the shape flags
|
|
149
|
+
* applied.
|
|
150
|
+
*/
|
|
145
151
|
async function rlsInput(ctx, verb, shape, options) {
|
|
146
152
|
return {
|
|
147
153
|
cwd: ctx.cwd,
|
|
@@ -186,7 +192,7 @@ async function rlsInput(ctx, verb, shape, options) {
|
|
|
186
192
|
};
|
|
187
193
|
}
|
|
188
194
|
async function runRls(input) {
|
|
189
|
-
return (await import("./rls-
|
|
195
|
+
return (await import("./rls-Cx0dtsB7.js")).runRls(input);
|
|
190
196
|
}
|
|
191
197
|
const generate = defineLeaf({
|
|
192
198
|
flags: {
|
|
@@ -209,7 +215,8 @@ const generate = defineLeaf({
|
|
|
209
215
|
valueHint: "parts",
|
|
210
216
|
list: true,
|
|
211
217
|
async complete() {
|
|
212
|
-
|
|
218
|
+
const { SPLIT_PARTS } = await import("./output-files-BHOIlrfD.js");
|
|
219
|
+
return SPLIT_PARTS;
|
|
213
220
|
}
|
|
214
221
|
},
|
|
215
222
|
"grants-out": {
|