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