permdock 0.6.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 +2 -3
- package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
- package/dist/a2a/index.d.ts +7 -7
- package/dist/a2a/index.js +9 -9
- 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-DCYe60Pi.js → adoption-scan-BLs67P1l.js} +5 -5
- package/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +31 -10
- package/dist/ai-sdk/index.js +22 -12
- 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-DvSSPQJX.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
- package/dist/approvals/index.d.ts +5 -5
- package/dist/approvals/index.js +7 -7
- package/dist/{approvals-p1PGoVjb.js → approvals-DnIBTuXE.js} +128 -78
- package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
- package/dist/{arazzo-41WuzHou.js → arazzo-3RhGfkAK.js} +2 -2
- package/dist/{arazzo-CaUVBn7D.js → arazzo-B5-ulWif.js} +6 -6
- package/dist/{args-IIolxxKA.js → args-0FrVs5EH.js} +125 -8
- package/dist/astro/index.d.ts +30 -12
- package/dist/astro/index.js +2 -2
- package/dist/{audience-DabClFLQ.js → audience-BAkBDMqn.js} +8 -8
- package/dist/{auth-DRLEizbL.js → auth--yPyZNgr.js} +21 -10
- package/dist/authzen/index.d.ts +171 -25
- package/dist/authzen/index.js +321 -149
- package/dist/{automation-BNM3TtDo.d.ts → automation-DqEoWHBc.d.ts} +42 -32
- package/dist/{automation-DVjOckjV.js → automation-x3KEUusw.js} +22 -21
- package/dist/base-url-BQbddZO5.js +9 -0
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +13 -7
- package/dist/better-supabase/index.d.ts +392 -220
- package/dist/better-supabase/index.js +293 -152
- package/dist/{bind-DOyrv6zi.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
- package/dist/{bind-CAvgUuKs.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-Bu_eDqYw.js → build-instance-CNWaYJyr.js} +3 -3
- package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
- package/dist/{capability-N1K9IpqS.js → capability-BqX94r07.js} +31 -25
- package/dist/{capability-Drg-1YhL.d.ts → capability-ChuiONQU.d.ts} +41 -29
- package/dist/{casbin-Dyu2gnUD.js → casbin-H0rKxBx2.js} +16 -8
- package/dist/{casbin-Cr7RLtA3.js → casbin-cbSbhT_k.js} +2 -2
- package/dist/{casl-64gpT-8x.js → casl-C4OINZHI.js} +2 -2
- package/dist/{casl-DjEDhTCP.js → casl-CHHoCldP.js} +19 -10
- package/dist/catalog/index.d.ts +104 -23
- package/dist/catalog/index.js +117 -8
- package/dist/{catalog-HD2gf5mY.js → catalog-BFpz2EmT.js} +57 -26
- package/dist/{catalog-DZVbrF-z.js → catalog-DCspHDc8.js} +3 -3
- package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-DjMKzJp9.js} +53 -16
- package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-e6aCWosn.js} +19 -15
- package/dist/catalog-mRQQQhNK.js +1 -0
- package/dist/catalog-operations-Dadrl7Z-.js +60 -0
- package/dist/{create-CQWIpUG-.js → challenge-DImNcR7B.js} +157 -39
- 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-CGkP3Z7A.js +40 -0
- 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 +186 -38
- package/dist/cloud/index.js +293 -31
- package/dist/{cloud-ytQ3uviA.js → cloud-BFlGMaak.js} +5 -6
- package/dist/{codemod-5mpSpnUY.js → codemod-DLQ9Zpo4.js} +3 -4
- package/dist/{codemod-ua2hHy7w.js → codemod-DWSN2erG.js} +523 -201
- package/dist/collect-B5BL3klN.js +1 -0
- package/dist/{collect-mLTY4nwb.js → collect-B7ZFAJU3.js} +36 -64
- package/dist/{collect-Ci6akVwH.js → collect-Bzv3le0A.js} +6 -6
- 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-1bsAezL0.d.ts → compile-BFzysW3o.d.ts} +36 -12
- package/dist/{compile-CMqMx_IN.js → compile-EzEMB-7v.js} +77 -33
- package/dist/{completion-BTFrHZhX.js → completion-saoYiRFO.js} +17 -8
- package/dist/config-BwPBfN0t.js +108 -0
- package/dist/{config-Bj2Ixq3d.js → config-DBeXXmBF.js} +2 -2
- package/dist/{config-report-DSpsLpCE.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-CYLQNMYq.js +434 -0
- package/dist/{context-B_u3_bDJ.js → context-BnIzxTNE.js} +4 -3
- package/dist/convex/index.d.ts +13 -7
- package/dist/convex/index.js +9 -6
- package/dist/core-H-mbhpZc.js +341 -0
- package/dist/core-hWIARPDz.d.ts +206 -0
- package/dist/{create-CBMmFie-.d.ts → create-BSNrVuxh.d.ts} +87 -34
- package/dist/{create-B30OMUOJ.d.ts → create-BVq1lNQE.d.ts} +49 -28
- package/dist/{create-D_NmPOdH.d.ts → create-CM1FciYG.d.ts} +37 -29
- package/dist/{create-CGm28gyI.js → create-Cq4Uox0f.js} +13 -9
- package/dist/{create-DCF2SvoT.js → create-_noSrY1T.js} +15 -21
- package/dist/{credential-BcoiejpY.js → credential-CyyyvCsL.js} +42 -39
- package/dist/{credentials-DPyHmYz5.js → credentials-CdDxp7jN.js} +6 -6
- package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-NB4wcyBf.js} +13 -2
- package/dist/{delegation-j6-rc37o.js → delegation-CDB6_keF.js} +31 -22
- package/dist/delivery/index.d.ts +5 -5
- package/dist/delivery/index.js +6 -5
- package/dist/{delivery-DCAgNyCn.js → delivery-BupfvJIV.js} +81 -20
- package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
- package/dist/denied-text-CHNlVInN.d.ts +22 -0
- package/dist/{describe-BybMRY7A.js → describe-Bb4hGK5d.js} +6 -5
- package/dist/{describe-B5qgDvEW.d.ts → describe-ByS9LgHK.d.ts} +5 -5
- package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
- package/dist/{diff-CmuSD3vc.js → diff-CN8IYhC_.js} +2 -2
- package/dist/{diff-3jbx6Rm4.js → diff-iZWV65nC.js} +23 -14
- package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
- package/dist/{doctor-BdZw53-k.js → doctor-CHD1M9R5.js} +485 -141
- package/dist/{doctor-3ZqNHX_G.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-CWTY6uih.js → errors-Vpu6rKHl.js} +14 -10
- package/dist/{errors-DH5QEGXh.d.ts → errors-zi_4T-rx.d.ts} +22 -6
- package/dist/{evaluate-CNClBvcj.js → evaluate-Dd8Ta0Ie.js} +185 -80
- package/dist/{evaluations-beAooV0n.js → evaluations-IBceAeKT.js} +41 -20
- package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-z8dQFDaN.d.ts} +12 -6
- 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-Dw0MTS3D.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
- package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-JL43jD3E.js} +14 -11
- package/dist/fields-D0vUI6dq.js +498 -0
- package/dist/{files-C5ZI27eV.js → files-B3AA05f1.js} +21 -5
- package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
- package/dist/{fixtures-B7XrLeY7.js → fixtures-A1_sp_tR.js} +15 -6
- package/dist/{flags-C3DktBDY.js → flags-DXjoTVbS.js} +2 -2
- package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
- package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-DCakWRsr.js} +26 -16
- package/dist/gen-B5kvbAoZ.js +58 -0
- package/dist/gen-DWCYcMQM.js +827 -0
- package/dist/generate-CRVV5V7l.js +165 -0
- package/dist/generate-CezbCaTI.js +275 -0
- package/dist/{grantee-hxrUsbpM.js → grantee-Dke-9rd1.js} +4 -4
- package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-BrYPe-w0.js} +12 -12
- package/dist/{grantee-match-DbENBHLB.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-CBYVMjwh.js → helpers-DJicaG6f.js} +40 -28
- package/dist/hono/index.d.ts +16 -10
- package/dist/hono/index.js +5 -5
- package/dist/{hosted-BPk51-kX.d.ts → hosted-Cmtxogd0.d.ts} +44 -20
- package/dist/{hosted-B46-5LYE.js → hosted-D0IzESu_.js} +68 -25
- package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
- package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
- package/dist/{http-DXJ37RDA.js → http-DOL33cO0.js} +11 -8
- package/dist/{import-wyqXUyjm.js → import-CST57XLp.js} +64 -51
- package/dist/{import-CNV7I2Dw.js → import-_YqhhwvX.js} +6 -6
- package/dist/{index-B8YjkEZ4.d.ts → index-B8s204GL.d.ts} +64 -52
- package/dist/{index-Ch8LpNDp.d.ts → index-BT5-1VsX.d.ts} +64 -25
- package/dist/{index-DuWxc5dt.d.ts → index-BW_0MZOS.d.ts} +388 -149
- package/dist/index-BhxEUY9J.d.ts +233 -0
- package/dist/index-Bv5iXPqU.d.ts +210 -0
- package/dist/{index-C-6Letxg.d.ts → index-_9UiQIkt.d.ts} +164 -77
- package/dist/index.d.ts +22 -21
- package/dist/index.js +35 -33
- package/dist/{init-GG6Jh8HD.js → init-Dz_PsHdv.js} +5 -5
- package/dist/{init-DeMYsnYJ.js → init-cE3A8aXq.js} +10 -10
- package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
- package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot--JWiTrvO.js} +81 -56
- 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 +125 -17
- package/dist/jwt/index.js +157 -16
- package/dist/{kernel-D0NVb1cK.js → kernel-C-fYydV2.js} +151 -16
- 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-DFS_ry0W.js → load-DjSU5KXO.js} +6 -6
- package/dist/load-Dm0pSYH3.js +1 -0
- package/dist/{login-Dfe5RlYk.js → login-D-8tMqzo.js} +4 -4
- package/dist/{login-imhuwvn3.js → login-DplQ0s84.js} +18 -15
- package/dist/{manifest-dvL2XEe1.js → manifest-Cgiq5oqc.js} +67 -37
- package/dist/{manifest-mx5ghSFM.d.ts → manifest-CzzWtnAb.d.ts} +144 -28
- package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-2r37XRhD.js} +80 -9
- package/dist/{manifest-C8IzW3Do.js → manifest-wg8WkkpD.js} +11 -7
- package/dist/{map-claims-D3oRmTk0.js → map-claims-BNWCJtmP.js} +27 -18
- package/dist/{map-error-Dr70oA_3.js → map-error-pasIGqMT.js} +7 -7
- package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
- package/dist/mcp/index.d.ts +154 -47
- package/dist/mcp/index.js +200 -41
- package/dist/{migrate-CIq4-E9F.js → migrate-B7oP_sQU.js} +102 -31
- 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 +61 -30
- package/dist/openapi/index.js +2 -2
- package/dist/{openapi-B7HZ0f-r.js → openapi-BOsx0xn9.js} +34 -24
- package/dist/{openapi-C4dDTVEd.js → openapi-CBZUhA3l.js} +4 -5
- package/dist/{openapi-DD1SV-5-.js → openapi-VeHHU2l9.js} +23 -14
- package/dist/{operation-findings-DgATDpvh.js → operation-findings-CXtFzlKJ.js} +3 -3
- package/dist/{operations-X0VM7F3m.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-DhRBBE4n.js → output-files-BIQ_9pIs.js} +29 -17
- package/dist/{output-1im__-08.js → output-tkju6U7R.js} +15 -7
- package/dist/ownership-B4L59T9u.js +1054 -0
- package/dist/parse-1_ZheTW5.js +151 -0
- package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
- package/dist/parse-local-manifest-DEiCF4ah.js +69 -0
- 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 +23 -12
- package/dist/{peer-CRvC7Hg1.js → peer-C9LvBCcb.js} +1 -1
- package/dist/peer-Q0fuZ6hx.js +982 -0
- package/dist/{permdock-SV8ZINYT.d.ts → permdock-B6Sf4T_S.d.ts} +270 -117
- package/dist/{permdock-BrAscV28.js → permdock-L-_I_3zP.js} +226 -74
- package/dist/{permission-registry-Br4jSNVi.js → permission-registry-B8tYxPIt.js} +24 -11
- package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-CAY-GU7e.d.ts} +130 -104
- package/dist/{permissions-u_KHg-sN.d.ts → permissions-Bx6UI8n1.d.ts} +6 -2
- package/dist/{permissions-B-wCP5ZC.js → permissions-CVXmRILq.js} +3 -3
- package/dist/{permissions-BPxlwVhN.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-CnmmYqUZ.js +21 -0
- package/dist/{policy-77FSAq_V.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
- package/dist/{policy-DbM5YYtV.js → policy-CLQ8__GF.js} +49 -20
- package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-CJgOm6aq.js} +28 -25
- package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
- package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-CCiDRZBH.d.ts} +802 -334
- package/dist/postgres-store-DcyrPS-r.js +1028 -0
- package/dist/{postgrest-DAjUkF9w.js → postgrest-D4nuPXIQ.js} +88 -36
- package/dist/{postgrest-CEgRbefE.d.ts → postgrest-DicQyqm-.d.ts} +60 -30
- package/dist/powersync-DHNQX06W.js +1117 -0
- package/dist/{powersync-DISt6SUe.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-DZdU0tne.js → preset-BjLzeFpp.js} +58 -34
- 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-BYc6drYW.js +938 -0
- package/dist/protected-action-BE7N_Luo.d.ts +58 -0
- package/dist/protected-action-DUYqb-Ma.js +80 -0
- package/dist/{protected-BlF0F6wL.js → protected-action-QEA8arRB.js} +48 -14
- package/dist/{provider-B1al-AZz.js → provider-C55OGXJ7.js} +5 -4
- package/dist/{provider-DILL9oPK.d.ts → provider-DXfq5c2d.d.ts} +1 -1
- package/dist/{provider-store-DM6DNcta.js → provider-store-CaTv00tr.js} +13 -9
- package/dist/pull-B65ndFNZ.js +1 -0
- package/dist/{pull-jEwbf80J.js → pull-CwpGaQSi.js} +12 -11
- package/dist/{push-BD4f15co.js → push-DgssgzkK.js} +62 -16
- package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
- package/dist/{pushed-policy-CqtxkV4G.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 +104 -51
- package/dist/react-native/index.js +394 -67
- package/dist/{refs-K6eWUJ0H.js → refs-C8BKxc_e.js} +17 -3
- 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-Bkm-Ne4l.d.ts → replay-DNftIb_R.d.ts} +1 -1
- package/dist/{request-context-C81Pip9n.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-CALjIQ7e.js → retire-B2xffQgY.js} +15 -6
- package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
- package/dist/{rls-DTvYd-lI.js → rls-CNEH2_BG.js} +743 -624
- package/dist/{rls-BAqP4q66.js → rls-Ca8Jz9b5.js} +41 -10
- package/dist/{role-builder-uWQZ4v84.js → role-builder-BK2-T6oD.js} +41 -20
- package/dist/rolldown-runtime-C3I60J0A.js +4 -0
- package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
- package/dist/{rpc-VSl5ylaQ.js → rpc-fNqAIqQk.js} +8 -5
- package/dist/{run-CUKuz0A8.js → run-Bz26OTfO.js} +26 -23
- package/dist/run-D-JE8QWb.js +1 -0
- package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-DbWI9f99.d.ts} +33 -13
- package/dist/{run-ticket-sxFI6LAk.js → run-ticket-Dv7aF7Dk.js} +29 -8
- package/dist/{runtime-D3VTAiCA.js → runtime-BGnrOkVH.js} +5 -2
- package/dist/{saas-BCXRuXca.js → saas-iWnUdwCt.js} +42 -29
- package/dist/{scan-qvOe0hS3.js → scan-DCj1KQfn.js} +1 -1
- package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
- package/dist/{schema-yLuBWWsh.js → schema-Dst9I9Gs.js} +9 -5
- package/dist/scim/index.d.ts +3 -2
- package/dist/scim/index.js +3 -1
- package/dist/scim-D8YupzX1.js +44 -0
- package/dist/{scim-ClHtpyV3.js → scim-jJBJ7g1Z.js} +35 -551
- package/dist/{scopes-CUPSjo9q.js → scopes-0Up_UA2t.js} +42 -24
- package/dist/server/index.d.ts +12 -12
- package/dist/server/index.js +13 -13
- package/dist/{server-C3WXAHZj.js → server-3cVlTLde.js} +31 -31
- package/dist/{server-types-CKQiCnON.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
- package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
- package/dist/{shared-BAK8t4Uo.js → shared-Afctg7B0.js} +100 -61
- package/dist/{shared-DvvFzYXe.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-4-eQIRWf.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
- package/dist/{skills-B6lVdD_W.js → skills-Bjj7BNEQ.js} +16 -12
- package/dist/{skills-CTYwkl44.js → skills-OuoMR49L.js} +3 -3
- package/dist/{snapshot-B7DkYg6g.js → snapshot-CXlzi69u.js} +21 -18
- package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
- package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-Bx_4xC_6.js} +14 -11
- package/dist/solid/index.d.ts +55 -15
- 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-B1Os_YUu.d.ts +312 -0
- package/dist/{sources-vs5dGOsS.js → sources-CMAM-2A3.js} +156 -51
- package/dist/sources-qoIJQrJv.js +11 -0
- package/dist/{sql-B5T1IL83.js → sql-0WjxIp9g.js} +32 -7
- package/dist/sql-B80DFdpG.d.ts +10 -0
- package/dist/{src-Cu2m75uo.js → src-DZ0l9UAg.js} +305 -123
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +665 -224
- package/dist/{standard-webhooks-rbD7LS6h.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-BDutJkDL.js → store-RNFvaJJv.js} +43 -29
- package/dist/{store-options-u0ycEe8s.js → store-options-Dil3lraY.js} +105 -15
- package/dist/stores-C0Kta5Ft.d.ts +59 -0
- package/dist/{stores-CGhM8BN_.js → stores-DxZWDXCs.js} +42 -5
- package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
- package/dist/{stream-CeCMJmBB.d.ts → stream-ltuLdtTG.d.ts} +4 -3
- package/dist/{style-DiKWnAvn.js → style-DblOtSga.js} +1 -1
- package/dist/{style-Uao76wO7.js → style-Ds11Hmk4.js} +3 -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 -37
- package/dist/supabase/index.js +6 -6
- package/dist/supabase/middleware.d.ts +19 -13
- package/dist/supabase/middleware.js +7 -7
- package/dist/{supabase-x5JtR2tc.js → supabase-BL1qJzzY.js} +82 -36
- package/dist/{supabase-By_frk3U.js → supabase-D39cuGPt.js} +3 -3
- package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-B-yXnzUl.js} +1206 -286
- package/dist/supabase-hook-H-MtE9Wd.js +1 -0
- package/dist/supautils-BU-pAEpf.js +808 -0
- package/dist/{support-session-C6xJQYut.js → support-session-BsmPCbz8.js} +22 -22
- 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-DqaJNJPn.js → tables-DeMNEy6V.js} +1025 -1085
- 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-DN2QAx9z.js → tenancy-5d1zVBvK.js} +36 -21
- package/dist/terminal/index.d.ts +23 -14
- package/dist/terminal/index.js +17 -20
- package/dist/testing/core.d.ts +2 -0
- package/dist/testing/core.js +1 -0
- package/dist/testing/fixtures/index.d.ts +15 -0
- package/dist/testing/fixtures/index.js +831 -0
- package/dist/testing/index.d.ts +235 -285
- package/dist/testing/index.js +502 -927
- 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-BtfSmdUo.js +444 -0
- package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
- package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
- package/dist/{token-BLZcjQgt.js → token-DC9EQiet.js} +15 -13
- package/dist/{tool-refusal-CMLN5xhn.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-8RnwUAvE.d.ts → types-AMJ5qoU_.d.ts} +49 -30
- package/dist/{types-C_IiEs64.d.ts → types-B2mlGuhW.d.ts} +14 -11
- package/dist/{types-_WhUP7ud.d.ts → types-B4uqKDnp.d.ts} +25 -12
- package/dist/{types-CX7AvRqP.d.ts → types-BJk0BKRX.d.ts} +24 -14
- package/dist/types-B_d_g7T3.d.ts +262 -0
- package/dist/{types-BdtSDbBO.d.ts → types-B_tiYvk8.d.ts} +59 -32
- package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
- package/dist/{types-Dfv0aTER.d.ts → types-DC1Loeh3.d.ts} +449 -168
- package/dist/{types-lUlG3TVd.d.ts → types-DHKPcqzr.d.ts} +2 -2
- package/dist/{types-C791HFu9.d.ts → types-DjuMBNF9.d.ts} +68 -32
- package/dist/{types-C863OQiR.d.ts → types-HzqOtvsJ.d.ts} +23 -12
- package/dist/{types-Druu9wLM.d.ts → types-ZzRGoViD.d.ts} +77 -24
- package/dist/{types-BzzaHxt3.d.ts → types-ah9NlU6j.d.ts} +137 -48
- package/dist/{types-CVZSNocA.d.ts → types-djVzLlIV.d.ts} +31 -14
- package/dist/{types-BtHtcKMr.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-SveTRTyr.js → usage-CxEzS4ey.js} +50 -26
- package/dist/{usage-CRVl9V3t.js → usage-ab0PdusX.js} +2 -2
- package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
- package/dist/{validation-error-DHUrAkku.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-BaAKx7t6.js → verify-DZeqoWu5.js} +417 -489
- package/dist/version-DMQ0dnN5.js +48 -0
- package/dist/version-DizhmD72.js +1 -0
- package/dist/{views-DTIIO-oQ.js → views-CD8wuL4Z.js} +19 -6
- package/dist/vocabulary-DEJ5j4mR.d.ts +70 -0
- package/dist/vue/index.d.ts +71 -21
- package/dist/vue/index.js +50 -13
- package/dist/{waiter-B986w1oK.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
- package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
- package/dist/{watch-vea54PRw.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-C9vfEphl.js → where-scope-DlCdCM_8.js} +56 -30
- package/dist/{who-can-DWBAcaCQ.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-gX61EtpB.js → wrap-B2wziJI_.js} +11 -5
- package/dist/{wrap-C5jC6sKI.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
- package/package.json +25 -14
- package/schemas/catalog-v1.json +3 -0
- package/schemas/cli-result-v1.json +1 -0
- package/schemas/cloud-api-v1.json +152 -7
- package/schemas/connector-v1.json +8 -0
- package/schemas/supabase-claims-v1.json +5 -0
- package/schemas/supabase-manifest-v1.json +308 -75
- package/skills/permdock/SKILL.md +1 -0
- package/skills/permdock-agents/references/runtimes.md +3 -1
- package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
- package/skills/permdock-data/references/queries-and-rls.md +6 -2
- package/skills/permdock-tenancy/SKILL.md +1 -1
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -1
- package/skills/permdock-wire/references/adapters.md +28 -22
- package/skills/permdock-wire/references/policy-options.md +1 -0
- package/dist/catalog-BoWglDPI.js +0 -1
- package/dist/collect-D7eQDffE.js +0 -1
- package/dist/config-bs_kZeYq.js +0 -162
- package/dist/denied-text-CiFQNuMV.d.ts +0 -19
- package/dist/fields-OYG_JR78.js +0 -203
- package/dist/generate-CNU1pIOo.js +0 -171
- package/dist/headers-BIjfMaoC.js +0 -8
- package/dist/headers-CIbDTUTK.d.ts +0 -7
- package/dist/index-Cp_ilKi1.d.ts +0 -91
- package/dist/index-CueFnxQc.d.ts +0 -110
- package/dist/load-BxEtwlBS.js +0 -1
- package/dist/output-files-B3IZJksC.js +0 -1
- package/dist/package-root-Dk_ETdkp.js +0 -31
- package/dist/parse-Cxq0WxrA.js +0 -53
- package/dist/parse-local-manifest-5ODwqu8b.d.ts +0 -10
- package/dist/parse-local-manifest-CVSs6J9I.js +0 -34
- package/dist/peer-C8swJ2GH.js +0 -50
- package/dist/policies-DP2nqRoF.js +0 -295
- package/dist/powersync-BkWWCS1K.js +0 -538
- package/dist/powersync-MMJ2mI2q.js +0 -1
- package/dist/problem-details-B45V5d2b.d.ts +0 -7
- package/dist/prompt-DfZLJLIn.js +0 -32
- package/dist/protected-RFGpakN9.d.ts +0 -38
- package/dist/pull-CvpINcMK.js +0 -1
- package/dist/run-DDwUaJDU.js +0 -1
- package/dist/sources-Xc4zkszI.d.ts +0 -190
- package/dist/stores-BUGNbJTt.d.ts +0 -30
- package/dist/supabase-hook-CCw5m35C.js +0 -1
- package/dist/supautils-B6HYL9eL.js +0 -91
- package/dist/text-diff-BQcUapOb.js +0 -15
- package/dist/types-B3_ooZgZ.d.ts +0 -172
- package/dist/usage-CZpSQP6L.js +0 -1
- package/dist/version-CEbQ5UeM.js +0 -18
- package/dist/version-DXkYUISx.js +0 -1
- package/dist/watch--ovlPOc0.js +0 -1
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { n as SCIM_TABLES, r as SCIM_UNIQUE } from "./postgres-store-DcyrPS-r.js";
|
|
2
|
+
import { o as quoteSqlIdent } from "./sql-0WjxIp9g.js";
|
|
3
|
+
import { n as fileSummary, t as applyFiles } from "./files-B3AA05f1.js";
|
|
4
|
+
import { r as driftOf } from "./output-files-BIQ_9pIs.js";
|
|
5
|
+
//#region src/cli/scim/generate.ts
|
|
6
|
+
const SCIM_MARKER = "-- generated by permdock scim generate";
|
|
7
|
+
/**
|
|
8
|
+
* The client roles each dialect's data API connects as; none may reach the
|
|
9
|
+
* directory.
|
|
10
|
+
*/
|
|
11
|
+
function clientRoles(dialect) {
|
|
12
|
+
switch (dialect) {
|
|
13
|
+
case "supabase": return [
|
|
14
|
+
"public",
|
|
15
|
+
"anon",
|
|
16
|
+
"authenticated"
|
|
17
|
+
];
|
|
18
|
+
case "neon": return [
|
|
19
|
+
"public",
|
|
20
|
+
"anonymous",
|
|
21
|
+
"authenticated"
|
|
22
|
+
];
|
|
23
|
+
case "guc": return ["public"];
|
|
24
|
+
default: return dialect;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The directory `postgresDirectoryStore` reads and writes: users, groups and
|
|
29
|
+
* group members keyed on `(tenant, id)`, with `userName` and `externalId`
|
|
30
|
+
* unique per tenant. Member values are SCIM `value`s, not a foreign key to
|
|
31
|
+
* users, because a member may be a nested group. No client role may read or
|
|
32
|
+
* write the tables.
|
|
33
|
+
*/
|
|
34
|
+
function scimSchemaSql(input) {
|
|
35
|
+
const schema = quoteSqlIdent(input.schema);
|
|
36
|
+
const table = (name) => `${schema}.${quoteSqlIdent(name)}`;
|
|
37
|
+
const users = table(SCIM_TABLES.users);
|
|
38
|
+
const groups = table(SCIM_TABLES.groups);
|
|
39
|
+
const members = table(SCIM_TABLES.members);
|
|
40
|
+
const all = [
|
|
41
|
+
users,
|
|
42
|
+
groups,
|
|
43
|
+
members
|
|
44
|
+
].join(", ");
|
|
45
|
+
return `${SCIM_MARKER} (--dialect ${input.dialect})
|
|
46
|
+
-- the SCIM directory postgresDirectoryStore reads and writes for scimHandler; every row belongs to one tenant
|
|
47
|
+
create schema if not exists ${schema};
|
|
48
|
+
|
|
49
|
+
create table if not exists ${users} (
|
|
50
|
+
seq bigint generated always as identity unique,
|
|
51
|
+
tenant text not null check (tenant <> ''),
|
|
52
|
+
id text not null check (id <> ''),
|
|
53
|
+
user_name text not null,
|
|
54
|
+
external_id text,
|
|
55
|
+
active boolean not null default true,
|
|
56
|
+
emails jsonb,
|
|
57
|
+
x jsonb,
|
|
58
|
+
created_at timestamptz not null default now(),
|
|
59
|
+
updated_at timestamptz not null default now(),
|
|
60
|
+
revision bigint not null default 1,
|
|
61
|
+
primary key (tenant, id),
|
|
62
|
+
constraint ${quoteSqlIdent(SCIM_UNIQUE.userName)} unique (tenant, user_name),
|
|
63
|
+
constraint ${quoteSqlIdent(SCIM_UNIQUE.userExternalId)} unique (tenant, external_id)
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
create table if not exists ${groups} (
|
|
67
|
+
seq bigint generated always as identity unique,
|
|
68
|
+
tenant text not null check (tenant <> ''),
|
|
69
|
+
id text not null check (id <> ''),
|
|
70
|
+
display_name text not null,
|
|
71
|
+
external_id text,
|
|
72
|
+
roles text[],
|
|
73
|
+
x jsonb,
|
|
74
|
+
created_at timestamptz not null default now(),
|
|
75
|
+
updated_at timestamptz not null default now(),
|
|
76
|
+
revision bigint not null default 1,
|
|
77
|
+
primary key (tenant, id),
|
|
78
|
+
constraint ${quoteSqlIdent(SCIM_UNIQUE.groupExternalId)} unique (tenant, external_id)
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
create table if not exists ${members} (
|
|
82
|
+
tenant text not null,
|
|
83
|
+
group_id text not null,
|
|
84
|
+
user_id text not null,
|
|
85
|
+
position integer not null default 0,
|
|
86
|
+
primary key (tenant, group_id, user_id),
|
|
87
|
+
foreign key (tenant, group_id) references ${groups} (tenant, id) on delete cascade
|
|
88
|
+
);
|
|
89
|
+
create index if not exists ${quoteSqlIdent(`${SCIM_TABLES.members}_user_idx`)} on ${members} (tenant, user_id);
|
|
90
|
+
|
|
91
|
+
-- server only: grant select, insert, update and delete on these tables to the role postgresDirectoryStore
|
|
92
|
+
-- connects as when it does not own them
|
|
93
|
+
alter table ${users} enable row level security;
|
|
94
|
+
alter table ${groups} enable row level security;
|
|
95
|
+
alter table ${members} enable row level security;
|
|
96
|
+
revoke all on table ${all} from ${clientRoles(input.dialect).join(", ")};
|
|
97
|
+
`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* `supabase/schemas/<schema>/scim.sql` for Supabase, the pg-delta per-schema
|
|
101
|
+
* layout; `permdock_scim.sql` otherwise.
|
|
102
|
+
*/
|
|
103
|
+
function scimOut(dialect, schema) {
|
|
104
|
+
return dialect === "supabase" ? `supabase/schemas/${schema}/scim.sql` : "permdock_scim.sql";
|
|
105
|
+
}
|
|
106
|
+
function runScimGenerate(input) {
|
|
107
|
+
const dialect = input.dialect ?? input.config.rls?.dialect ?? "supabase";
|
|
108
|
+
const schema = input.schema ?? input.config.rls?.schema ?? "permdock";
|
|
109
|
+
const sql = scimSchemaSql({
|
|
110
|
+
schema,
|
|
111
|
+
dialect
|
|
112
|
+
});
|
|
113
|
+
const out = input.out ?? scimOut(dialect, schema);
|
|
114
|
+
const data = {
|
|
115
|
+
out,
|
|
116
|
+
dialect,
|
|
117
|
+
schema,
|
|
118
|
+
tables: Object.values(SCIM_TABLES).map((name) => `${schema}.${name}`)
|
|
119
|
+
};
|
|
120
|
+
if (out === "-") return {
|
|
121
|
+
code: 0,
|
|
122
|
+
output: sql.trimEnd(),
|
|
123
|
+
data: {
|
|
124
|
+
...data,
|
|
125
|
+
sql
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
if (input.check) {
|
|
129
|
+
const drift = driftOf(input.cwd, [{
|
|
130
|
+
part: "scim",
|
|
131
|
+
rel: out,
|
|
132
|
+
text: sql
|
|
133
|
+
}]);
|
|
134
|
+
return drift.length === 0 ? {
|
|
135
|
+
code: 0,
|
|
136
|
+
output: `${out} is current`,
|
|
137
|
+
data
|
|
138
|
+
} : {
|
|
139
|
+
code: 1,
|
|
140
|
+
output: `${drift.join("\n")}\nrun permdock scim generate`,
|
|
141
|
+
data: {
|
|
142
|
+
...data,
|
|
143
|
+
drift
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const applied = applyFiles(input.cwd, [{
|
|
148
|
+
path: out,
|
|
149
|
+
text: sql
|
|
150
|
+
}], { dryRun: input.dryRun });
|
|
151
|
+
return {
|
|
152
|
+
code: 0,
|
|
153
|
+
output: fileSummary(applied, input.dryRun),
|
|
154
|
+
data: {
|
|
155
|
+
...data,
|
|
156
|
+
files: applied
|
|
157
|
+
},
|
|
158
|
+
next: [{
|
|
159
|
+
when: "in CI, to fail when the file is stale",
|
|
160
|
+
command: "permdock scim generate --check"
|
|
161
|
+
}]
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//#endregion
|
|
165
|
+
export { runScimGenerate };
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { t as byCodePoint } from "./compare-DTfyUunF.js";
|
|
3
|
+
//#region src/cli/generate.ts
|
|
4
|
+
const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
|
|
5
|
+
const MAX_DEPTH = 6;
|
|
6
|
+
function isSchemaKind(value) {
|
|
7
|
+
return value === "zod" || value === "valibot" || value === "arktype";
|
|
8
|
+
}
|
|
9
|
+
function schemaImport(kind) {
|
|
10
|
+
switch (kind) {
|
|
11
|
+
case "zod": return "import { z } from 'zod'";
|
|
12
|
+
case "valibot": return "import * as v from 'valibot'";
|
|
13
|
+
case "arktype": return "import { type } from 'arktype'";
|
|
14
|
+
default: return kind;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function emptySchema(kind) {
|
|
18
|
+
return schemaExpression(kind, { type: "object" });
|
|
19
|
+
}
|
|
20
|
+
function propertyKey(name) {
|
|
21
|
+
return IDENTIFIER.test(name) ? name : JSON.stringify(name);
|
|
22
|
+
}
|
|
23
|
+
function literalEnum(schema) {
|
|
24
|
+
const type = schema["type"];
|
|
25
|
+
const nullable = Array.isArray(type) && type.includes("null");
|
|
26
|
+
const all = schema["enum"];
|
|
27
|
+
const values = nullable && Array.isArray(all) ? all.filter((value) => value !== null) : all;
|
|
28
|
+
if (!Array.isArray(values) || values.length === 0 || !values.every((value) => typeof value === "string")) return;
|
|
29
|
+
return values;
|
|
30
|
+
}
|
|
31
|
+
function schemaType(schema) {
|
|
32
|
+
const type = schema["type"];
|
|
33
|
+
if (typeof type === "string") return type;
|
|
34
|
+
if (Array.isArray(type)) {
|
|
35
|
+
const named = type.filter((item) => item !== "null");
|
|
36
|
+
return named.length === 1 && typeof named[0] === "string" ? named[0] : void 0;
|
|
37
|
+
}
|
|
38
|
+
return isRecord(schema["properties"]) ? "object" : void 0;
|
|
39
|
+
}
|
|
40
|
+
function bound(node, key) {
|
|
41
|
+
const value = node[key];
|
|
42
|
+
return typeof value === "number" && Number.isFinite(value) ? value : void 0;
|
|
43
|
+
}
|
|
44
|
+
function isNullable(node, emit) {
|
|
45
|
+
const type = node["type"];
|
|
46
|
+
return emit.constraints && Array.isArray(type) && type.includes("null");
|
|
47
|
+
}
|
|
48
|
+
function formatOf(node, emit) {
|
|
49
|
+
const format = node["format"];
|
|
50
|
+
return emit.constraints && typeof format === "string" ? format : void 0;
|
|
51
|
+
}
|
|
52
|
+
/** `[method, value]` pairs for the bounds `keys` names, in order. */
|
|
53
|
+
function bounds(node, emit, keys) {
|
|
54
|
+
if (!emit.constraints) return [];
|
|
55
|
+
return keys.flatMap(([key, method]) => {
|
|
56
|
+
const value = bound(node, key);
|
|
57
|
+
return value === void 0 ? [] : [[method, value]];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
const NUMBER_BOUNDS = [
|
|
61
|
+
["minimum", "min"],
|
|
62
|
+
["exclusiveMinimum", "gt"],
|
|
63
|
+
["maximum", "max"],
|
|
64
|
+
["exclusiveMaximum", "lt"]
|
|
65
|
+
];
|
|
66
|
+
const LENGTH_BOUNDS = [["minLength", "min"], ["maxLength", "max"]];
|
|
67
|
+
const ITEM_BOUNDS = [["minItems", "min"], ["maxItems", "max"]];
|
|
68
|
+
const ZOD_FORMATS = {
|
|
69
|
+
uuid: "z.uuid()",
|
|
70
|
+
email: "z.email()",
|
|
71
|
+
uri: "z.url()",
|
|
72
|
+
"date-time": "z.iso.datetime({ offset: true })",
|
|
73
|
+
date: "z.iso.date()"
|
|
74
|
+
};
|
|
75
|
+
function zodChain(base, pairs) {
|
|
76
|
+
return `${base}${pairs.map(([method, value]) => `.${method}(${String(value)})`).join("")}`;
|
|
77
|
+
}
|
|
78
|
+
function zodOf(schema, emit, depth) {
|
|
79
|
+
const node = emit.resolve(schema);
|
|
80
|
+
const expression = zodNode(node, emit, depth);
|
|
81
|
+
return isNullable(node, emit) ? `${expression}.nullable()` : expression;
|
|
82
|
+
}
|
|
83
|
+
function zodNode(node, emit, depth) {
|
|
84
|
+
const values = literalEnum(node);
|
|
85
|
+
if (values !== void 0) return `z.enum(${JSON.stringify(values)})`;
|
|
86
|
+
const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
|
|
87
|
+
if (type === void 0) return "z.unknown()";
|
|
88
|
+
switch (type) {
|
|
89
|
+
case "string": return zodChain(ZOD_FORMATS[formatOf(node, emit) ?? ""] ?? "z.string()", bounds(node, emit, LENGTH_BOUNDS));
|
|
90
|
+
case "number": return zodChain("z.number()", bounds(node, emit, NUMBER_BOUNDS));
|
|
91
|
+
case "integer": return zodChain("z.number().int()", bounds(node, emit, NUMBER_BOUNDS));
|
|
92
|
+
case "boolean": return "z.boolean()";
|
|
93
|
+
case "array": return zodChain(`z.array(${isRecord(node["items"]) ? zodOf(node["items"], emit, depth + 1) : "z.unknown()"})`, bounds(node, emit, ITEM_BOUNDS));
|
|
94
|
+
case "object": {
|
|
95
|
+
const fields = objectFields(node).map(([name, child, required]) => {
|
|
96
|
+
const expression = zodOf(child, emit, depth + 1);
|
|
97
|
+
return `${propertyKey(name)}: ${required ? expression : `${expression}.optional()`}`;
|
|
98
|
+
});
|
|
99
|
+
return `z.object({${fields.length === 0 ? "" : ` ${fields.join(", ")} `}})`;
|
|
100
|
+
}
|
|
101
|
+
default: return "z.unknown()";
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** Each property of an object schema with whether `required` names it. */
|
|
105
|
+
function objectFields(node) {
|
|
106
|
+
const required = new Set(Array.isArray(node["required"]) ? node["required"] : []);
|
|
107
|
+
const properties = isRecord(node["properties"]) ? node["properties"] : {};
|
|
108
|
+
return Object.entries(properties).filter((entry) => isRecord(entry[1])).map(([name, child]) => [
|
|
109
|
+
name,
|
|
110
|
+
child,
|
|
111
|
+
required.has(name)
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
const VALIBOT_FORMATS = {
|
|
115
|
+
uuid: "v.uuid()",
|
|
116
|
+
email: "v.email()",
|
|
117
|
+
uri: "v.url()",
|
|
118
|
+
"date-time": "v.isoTimestamp()",
|
|
119
|
+
date: "v.isoDate()"
|
|
120
|
+
};
|
|
121
|
+
const VALIBOT_NUMBER_BOUNDS = [
|
|
122
|
+
["minimum", "minValue"],
|
|
123
|
+
["exclusiveMinimum", "gtValue"],
|
|
124
|
+
["maximum", "maxValue"],
|
|
125
|
+
["exclusiveMaximum", "ltValue"]
|
|
126
|
+
];
|
|
127
|
+
function valibotPipe(base, actions) {
|
|
128
|
+
return actions.length === 0 ? base : `v.pipe(${[base, ...actions].join(", ")})`;
|
|
129
|
+
}
|
|
130
|
+
function valibotLength(pairs) {
|
|
131
|
+
return pairs.map(([method, value]) => `v.${method === "min" ? "minLength" : "maxLength"}(${String(value)})`);
|
|
132
|
+
}
|
|
133
|
+
function valibotOf(schema, emit, depth) {
|
|
134
|
+
const node = emit.resolve(schema);
|
|
135
|
+
const expression = valibotNode(node, emit, depth);
|
|
136
|
+
return isNullable(node, emit) ? `v.nullable(${expression})` : expression;
|
|
137
|
+
}
|
|
138
|
+
function valibotNode(node, emit, depth) {
|
|
139
|
+
const values = literalEnum(node);
|
|
140
|
+
if (values !== void 0) return `v.picklist(${JSON.stringify(values)})`;
|
|
141
|
+
const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
|
|
142
|
+
if (type === void 0) return "v.unknown()";
|
|
143
|
+
const numeric = bounds(node, emit, VALIBOT_NUMBER_BOUNDS).map(([method, value]) => `v.${method}(${String(value)})`);
|
|
144
|
+
switch (type) {
|
|
145
|
+
case "string": {
|
|
146
|
+
const format = VALIBOT_FORMATS[formatOf(node, emit) ?? ""];
|
|
147
|
+
return valibotPipe("v.string()", [...format === void 0 ? [] : [format], ...valibotLength(bounds(node, emit, LENGTH_BOUNDS))]);
|
|
148
|
+
}
|
|
149
|
+
case "number": return valibotPipe("v.number()", numeric);
|
|
150
|
+
case "integer": return valibotPipe("v.number()", ["v.integer()", ...numeric]);
|
|
151
|
+
case "boolean": return "v.boolean()";
|
|
152
|
+
case "array": return valibotPipe(`v.array(${isRecord(node["items"]) ? valibotOf(node["items"], emit, depth + 1) : "v.unknown()"})`, valibotLength(bounds(node, emit, ITEM_BOUNDS)));
|
|
153
|
+
case "object": {
|
|
154
|
+
const fields = objectFields(node).map(([name, child, required]) => {
|
|
155
|
+
const expression = valibotOf(child, emit, depth + 1);
|
|
156
|
+
return `${propertyKey(name)}: ${required ? expression : `v.optional(${expression})`}`;
|
|
157
|
+
});
|
|
158
|
+
return `v.object({${fields.length === 0 ? "" : ` ${fields.join(", ")} `}})`;
|
|
159
|
+
}
|
|
160
|
+
default: return "v.unknown()";
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const ARKTYPE_FORMATS = {
|
|
164
|
+
uuid: "string.uuid",
|
|
165
|
+
email: "string.email",
|
|
166
|
+
uri: "string.url",
|
|
167
|
+
"date-time": "string.date.iso",
|
|
168
|
+
date: "string.date.iso"
|
|
169
|
+
};
|
|
170
|
+
/** `1 <= string <= 120`; arktype bounds apply to `string` and `number` only. */
|
|
171
|
+
function arktypeRange(keyword, pairs) {
|
|
172
|
+
const lower = pairs.find(([method]) => method === "min" || method === "gt");
|
|
173
|
+
const upper = pairs.find(([method]) => method === "max" || method === "lt");
|
|
174
|
+
const left = lower === void 0 ? "" : `${String(lower[1])} ${lower[0] === "gt" ? "<" : "<="} `;
|
|
175
|
+
const right = upper === void 0 ? "" : ` ${upper[0] === "lt" ? "<" : "<="} ${String(upper[1])}`;
|
|
176
|
+
return lower !== void 0 && upper === void 0 ? `${keyword} ${lower[0] === "gt" ? ">" : ">="} ${String(lower[1])}` : `${left}${keyword}${right}`;
|
|
177
|
+
}
|
|
178
|
+
/** An arktype definition: a string keyword or an object literal. */
|
|
179
|
+
function arktypeOf(schema, emit, depth) {
|
|
180
|
+
const node = emit.resolve(schema);
|
|
181
|
+
const definition = arktypeNode(node, emit, depth);
|
|
182
|
+
if (!isNullable(node, emit)) return definition;
|
|
183
|
+
return definition.startsWith("'") ? `'${definition.slice(1, -1)} | null'` : `[${definition}, '|', 'null']`;
|
|
184
|
+
}
|
|
185
|
+
function arktypeNode(node, emit, depth) {
|
|
186
|
+
const values = literalEnum(node);
|
|
187
|
+
if (values !== void 0) return JSON.stringify(values.map((value) => `'${value.replaceAll("'", "\\'")}'`).join(" | "));
|
|
188
|
+
const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
|
|
189
|
+
if (type === void 0) return "'unknown'";
|
|
190
|
+
switch (type) {
|
|
191
|
+
case "string": {
|
|
192
|
+
const format = ARKTYPE_FORMATS[formatOf(node, emit) ?? ""];
|
|
193
|
+
return format === void 0 ? `'${arktypeRange("string", bounds(node, emit, LENGTH_BOUNDS))}'` : `'${format}'`;
|
|
194
|
+
}
|
|
195
|
+
case "number": return `'${arktypeRange("number", bounds(node, emit, NUMBER_BOUNDS))}'`;
|
|
196
|
+
case "integer": return "'number.integer'";
|
|
197
|
+
case "boolean": return "'boolean'";
|
|
198
|
+
case "array": {
|
|
199
|
+
if (!isRecord(node["items"])) return "'unknown[]'";
|
|
200
|
+
const item = arktypeOf(node["items"], emit, depth + 1);
|
|
201
|
+
return item.startsWith("'") && !item.includes("|") ? `'${item.slice(1, -1)}[]'` : `[${item}, '[]']`;
|
|
202
|
+
}
|
|
203
|
+
case "object": {
|
|
204
|
+
const fields = objectFields(node).map(([name, child, required]) => `${JSON.stringify(required ? name : `${name}?`)}: ${arktypeOf(child, emit, depth + 1)}`);
|
|
205
|
+
return `{${fields.length === 0 ? "" : ` ${fields.join(", ")} `}}`;
|
|
206
|
+
}
|
|
207
|
+
default: return "'unknown'";
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* A validator expression for a JSON Schema object. Only the portable core
|
|
212
|
+
* (primitives, enums of strings, arrays, objects with `required`) is
|
|
213
|
+
* translated, plus with `constraints` the formats, bounds and nullable types;
|
|
214
|
+
* anything else becomes the validator's `unknown`.
|
|
215
|
+
*/
|
|
216
|
+
function schemaExpression(kind, schema, resolve = (node) => node, options = {}) {
|
|
217
|
+
const emit = {
|
|
218
|
+
resolve,
|
|
219
|
+
constraints: options.constraints === true
|
|
220
|
+
};
|
|
221
|
+
switch (kind) {
|
|
222
|
+
case "zod": return zodOf(schema, emit, 0);
|
|
223
|
+
case "valibot": return valibotOf(schema, emit, 0);
|
|
224
|
+
case "arktype": return `type(${arktypeOf(schema, emit, 0)})`;
|
|
225
|
+
default: return kind;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function renderList(value, indent) {
|
|
229
|
+
if (Array.isArray(value)) return JSON.stringify(value);
|
|
230
|
+
return JSON.stringify(value, null, 2).replaceAll("\n", `\n${indent}`);
|
|
231
|
+
}
|
|
232
|
+
function renderResource(resource, indent) {
|
|
233
|
+
const inner = `${indent} `;
|
|
234
|
+
const options = [
|
|
235
|
+
`${inner}id: '${(resource.id ?? "id").replaceAll("\\", "\\\\").replaceAll("'", "\\'")}',`,
|
|
236
|
+
`${inner}actions: ${renderList(resource.actions, inner)},`,
|
|
237
|
+
`${inner}collection: ${renderList(resource.collection, inner)},`
|
|
238
|
+
].join("\n");
|
|
239
|
+
return `${resource.schema === void 0 ? "resource({" : `resource(${resource.schema}, {`}\n${options}\n${indent}})`;
|
|
240
|
+
}
|
|
241
|
+
function insert(trie, resource) {
|
|
242
|
+
let node = trie;
|
|
243
|
+
for (const [index, segment] of resource.path.entries()) {
|
|
244
|
+
if (index === resource.path.length - 1) {
|
|
245
|
+
node.set(segment, resource);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const next = node.get(segment);
|
|
249
|
+
if (next instanceof Map) node = next;
|
|
250
|
+
else {
|
|
251
|
+
const created = /* @__PURE__ */ new Map();
|
|
252
|
+
node.set(segment, created);
|
|
253
|
+
node = created;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function renderTrie(trie, indent) {
|
|
258
|
+
return [...trie.entries()].toSorted(([a], [b]) => byCodePoint(a, b)).map(([segment, value]) => value instanceof Map ? `${indent}${propertyKey(segment)}: {\n${renderTrie(value, `${indent} `)}\n${indent}},` : `${indent}${propertyKey(segment)}: ${renderResource(value, indent)},`).join("\n");
|
|
259
|
+
}
|
|
260
|
+
/** A deterministic `definePermissions()` module with a `// @generated` header. */
|
|
261
|
+
function emitPermissionsModule(input) {
|
|
262
|
+
const trie = /* @__PURE__ */ new Map();
|
|
263
|
+
for (const resource of input.resources) insert(trie, resource);
|
|
264
|
+
const imports = ["import { definePermissions, resource } from 'permdock'", ...input.schema === void 0 ? [] : [schemaImport(input.schema)]];
|
|
265
|
+
const extras = Object.entries(input.exports ?? {}).map(([name, value]) => `export const ${name} = ${JSON.stringify(value, null, 2)} as const\n\n`);
|
|
266
|
+
return `// @generated by permdock ${input.generator}
|
|
267
|
+
${imports.join("\n")}
|
|
268
|
+
|
|
269
|
+
${extras.join("")}export const permissions = definePermissions({
|
|
270
|
+
${renderTrie(trie, " ")}
|
|
271
|
+
})
|
|
272
|
+
`;
|
|
273
|
+
}
|
|
274
|
+
//#endregion
|
|
275
|
+
export { schemaExpression as i, emptySchema as n, isSchemaKind as r, emitPermissionsModule as t };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { n as freezeDeep, t as freezeCopy } from "./freeze-
|
|
3
|
-
import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-
|
|
4
|
-
import { c as listPermissions, o as isPermission } from "./permission-registry-
|
|
5
|
-
import { i as readAppData, r as parseAppData, t as assertAppData } from "./app-data-
|
|
2
|
+
import { n as freezeDeep, t as freezeCopy } from "./freeze-jjan0lCv.js";
|
|
3
|
+
import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-CUvURzHp.js";
|
|
4
|
+
import { c as listPermissions, o as isPermission } from "./permission-registry-B8tYxPIt.js";
|
|
5
|
+
import { i as readAppData, r as parseAppData, t as assertAppData } from "./app-data-UNNm07jV.js";
|
|
6
6
|
//#region src/core/vocabulary.ts
|
|
7
7
|
const ROLE_KIND = "role";
|
|
8
8
|
const PLAN_KIND = "plan";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { a as sole, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { a as expandRelation, c as isEdgeRelation, d as isSelfParented, l as isFieldRelation, m as restrictedStops, p as restrictedFor, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-
|
|
3
|
-
import { d as isoNow } from "./time-
|
|
4
|
-
import {
|
|
2
|
+
import { a as expandRelation, c as isEdgeRelation, d as isSelfParented, l as isFieldRelation, m as restrictedStops, p as restrictedFor, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-8-pCScBO.js";
|
|
3
|
+
import { d as isoNow } from "./time-nR1JesoH.js";
|
|
4
|
+
import { f as scopeList, l as rootScope, s as resolveScope } from "./scopes-0Up_UA2t.js";
|
|
5
5
|
//#region src/core/grantee-conditions.ts
|
|
6
6
|
/**
|
|
7
|
-
* Where a graph relation starts on the row: its own id when the relation is
|
|
8
|
-
*
|
|
7
|
+
* Where a graph relation starts on the row: its own id when the relation is on
|
|
8
|
+
* the row's resource, the parent field when it is on the parent resource.
|
|
9
9
|
* `undefined` when `through` cannot reach the relation's resource.
|
|
10
10
|
*/
|
|
11
11
|
function relationStart(grantee, resource, target) {
|
|
@@ -25,10 +25,10 @@ function relationStart(grantee, resource, target) {
|
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
|
-
* A resource role held on self-parented `membershipResource` instances
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
28
|
+
* A resource role held on self-parented `membershipResource` instances (`ids`)
|
|
29
|
+
* reaches rows below them: the row itself when it is of that resource, its
|
|
30
|
+
* parent field when its parent is, walked up to the default depth. `undefined`
|
|
31
|
+
* when the row is not on such a chain.
|
|
32
32
|
*/
|
|
33
33
|
function resourceRoleCondition(resource, membershipResource, ids, resources) {
|
|
34
34
|
if (resource === void 0 || !isSelfParented(resources.get(membershipResource))) return;
|
|
@@ -72,9 +72,9 @@ function linkStop(resource, link) {
|
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
|
-
* The link path from the row to the grantee's resource: the row field of
|
|
76
|
-
*
|
|
77
|
-
*
|
|
75
|
+
* The link path from the row to the grantee's resource: the row field of the
|
|
76
|
+
* first link and each hop. `undefined` when a link is not declared or the path
|
|
77
|
+
* ends on another resource.
|
|
78
78
|
*/
|
|
79
79
|
function relationHops(grantee, resource, resources) {
|
|
80
80
|
const through = grantee.through;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { u as isoAt } from "./time-
|
|
3
|
-
import {
|
|
4
|
-
import { o as flattenGrantee } from "./grantee-
|
|
5
|
-
import { r as relationCondition, t as inheritCondition } from "./grantee-conditions-
|
|
2
|
+
import { u as isoAt } from "./time-nR1JesoH.js";
|
|
3
|
+
import { f as scopeList, t as activeFor } from "./scopes-0Up_UA2t.js";
|
|
4
|
+
import { o as flattenGrantee } from "./grantee-Dke-9rd1.js";
|
|
5
|
+
import { r as relationCondition, t as inheritCondition } from "./grantee-conditions-BrYPe-w0.js";
|
|
6
6
|
//#region src/core/grantee-match.ts
|
|
7
7
|
function combineWhere(left, right) {
|
|
8
8
|
if (left === void 0) return right;
|
|
@@ -12,7 +12,10 @@ function combineWhere(left, right) {
|
|
|
12
12
|
conditions: [left, right]
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Seats (`Membership.entitlements`) held through memberships that apply under
|
|
17
|
+
* the active tenant.
|
|
18
|
+
*/
|
|
16
19
|
function seatsInTenant(subject, scopes) {
|
|
17
20
|
const principal = subject.principal;
|
|
18
21
|
if (principal === null) return [];
|
|
@@ -110,7 +113,10 @@ function matchOne(grantee, subject, now, resource, scopes, resources) {
|
|
|
110
113
|
default: return unknownGrantee(grantee);
|
|
111
114
|
}
|
|
112
115
|
}
|
|
113
|
-
/**
|
|
116
|
+
/**
|
|
117
|
+
* A kind this build does not know, from a forged snapshot or a newer document,
|
|
118
|
+
* never matches.
|
|
119
|
+
*/
|
|
114
120
|
function unknownGrantee(_grantee) {
|
|
115
121
|
return {
|
|
116
122
|
matched: false,
|
|
@@ -19,9 +19,9 @@ type RelationsMapping = {
|
|
|
19
19
|
/** The table of each resource the graph reads; default the resource name. */
|
|
20
20
|
readonly tables?: Readonly<Record<string, string>>;
|
|
21
21
|
/**
|
|
22
|
-
* A closure table (`resource`, `ancestor`, `descendant`, `depth`) such as
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* A closure table (`resource`, `ancestor`, `descendant`, `depth`) such as the
|
|
23
|
+
* one `permdock rls` keeps. Without it, parent walks are a bounded recursive
|
|
24
|
+
* query over the resource's own table.
|
|
25
25
|
*/
|
|
26
26
|
readonly closure?: string;
|
|
27
27
|
};
|
package/dist/h3/index.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-
|
|
4
|
-
import { a as ProtectTarget, n as FetchAdapterOptions, r as FetchProtect, t as ContextReader } from "../fetch-adapter-
|
|
1
|
+
import { Gt as Snapshot, T as Policy, j as PolicyVocabulary, sr as Principal } from "../policy-types-CCiDRZBH.js";
|
|
2
|
+
import { a as PermDock } from "../permdock-B6Sf4T_S.js";
|
|
3
|
+
import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-CIlpSA2G.js";
|
|
4
|
+
import { a as ProtectTarget, n as FetchAdapterOptions, r as FetchProtect, t as ContextReader } from "../fetch-adapter-C1DCvpqV.js";
|
|
5
5
|
import { EventHandler, H3Event, H3EventContext, Middleware } from "h3";
|
|
6
6
|
//#region src/h3/create.d.ts
|
|
7
7
|
type H3PermDockOptions<TUser = unknown> = FetchAdapterOptions<H3Event, TUser>;
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* `event.context` once `middleware()` or `protect` ran: the instance and the
|
|
10
|
+
* loaded row.
|
|
11
|
+
*/
|
|
9
12
|
type H3PermDockContext<TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = H3EventContext & {
|
|
10
13
|
readonly permdock: PermDock<V>;
|
|
11
14
|
readonly permdockData: TData;
|
|
@@ -23,8 +26,8 @@ type H3PermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
|
23
26
|
readonly getSnapshot: (event: H3Event, query?: SnapshotQuery) => Promise<Snapshot>;
|
|
24
27
|
/**
|
|
25
28
|
* Types `event.context.permdock` and `permdockData` for the handler, builds
|
|
26
|
-
* the instance when no middleware set it, and answers a thrown PermDock
|
|
27
|
-
*
|
|
29
|
+
* the instance when no middleware set it, and answers a thrown PermDock error
|
|
30
|
+
* with Problem Details.
|
|
28
31
|
*/
|
|
29
32
|
readonly withPermDock: <TData = unknown>(handler: (event: H3PermDockEvent<TData, V>) => unknown) => EventHandler;
|
|
30
33
|
readonly connection: (event: H3Event, connectionOptions?: ConnectionOptions) => Promise<Connection>;
|
package/dist/h3/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as decorate } from "../bind-
|
|
3
|
-
import { t as fetchAdapter } from "../fetch-adapter-
|
|
1
|
+
import { l as InvalidSignatureError, p as webBotAuthVerifier, u as discoverViaSignatureAgent } from "../evaluations-IBceAeKT.js";
|
|
2
|
+
import { i as decorate } from "../bind-D_sZSVA3.js";
|
|
3
|
+
import { t as fetchAdapter } from "../fetch-adapter-JL43jD3E.js";
|
|
4
4
|
//#region src/h3/create.ts
|
|
5
5
|
function createPermDock(policy, options) {
|
|
6
6
|
const adapter = fetchAdapter(policy, options, "h3", (event) => event.req);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/client/headers.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The `PermDock-Approval` header for a resume; a `TypeError` for a token that
|
|
4
|
+
* is not an RFC 9651 sf-token.
|
|
5
|
+
*/
|
|
6
|
+
declare function approvalHeaders(token: string): {
|
|
7
|
+
readonly "PermDock-Approval": string;
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { approvalHeaders as t };
|