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
package/dist/authzen/index.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import { r as ownGet } from "../paths-
|
|
3
|
-
import { o as statusProblem } from "../problem-details-
|
|
4
|
-
import { a as getResource, c as listPermissions } from "../permission-registry-
|
|
2
|
+
import { r as ownGet } from "../paths-CUvURzHp.js";
|
|
3
|
+
import { a as problemType, o as statusProblem } from "../problem-details-CLDgX1KV.js";
|
|
4
|
+
import { a as getResource, c as listPermissions } from "../permission-registry-B8tYxPIt.js";
|
|
5
5
|
import { t as fromWireDelegation } from "../wire-delegation-Cv3W2eaM.js";
|
|
6
6
|
import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
|
|
7
|
-
import { n as readBodyText } from "../body-text-
|
|
8
|
-
import { r as hasCredentials } from "../http-
|
|
9
|
-
import {
|
|
10
|
-
import { t as
|
|
11
|
-
import { n as
|
|
12
|
-
import { _ as wireResourceId, a as evaluationReasons, c as unknownSemanticProblem, g as permissionLookup, h as itemResourceData, i as evaluateBatch, l as withRequestId, n as applyApprovalResume, r as authzenMetadata, s as evaluationsSemantic, t as EVALUATIONS_SEMANTICS } from "../evaluations-beAooV0n.js";
|
|
7
|
+
import { n as readBodyText, t as MAX_BODY_BYTES } from "../body-text-DQhcmqdY.js";
|
|
8
|
+
import { r as hasCredentials } from "../http-DKLXrFGk.js";
|
|
9
|
+
import { d as unauthenticatedProblem, l as problemResponse, o as methodNotAllowed } from "../problem-BVLHFK33.js";
|
|
10
|
+
import { n as resolveOrNull, t as buildInstance } from "../build-instance-CNWaYJyr.js";
|
|
11
|
+
import { a as evaluationReasons, c as withRequestId, g as wireResourceId, h as permissionLookup, i as evaluateBatch, m as itemResourceData, n as applyApprovalResume, r as authzenMetadata, s as evaluationsSemantic, t as EVALUATIONS_SEMANTICS } from "../evaluations-IBceAeKT.js";
|
|
13
12
|
//#region src/authzen/map.ts
|
|
14
13
|
const UNKNOWN = {
|
|
15
14
|
outcome: "denied",
|
|
@@ -41,7 +40,10 @@ function permissionOf(lookup, item) {
|
|
|
41
40
|
function resourceData(item) {
|
|
42
41
|
return itemResourceData(item.resource);
|
|
43
42
|
}
|
|
44
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* The row id an item names; `undefined` for none and for the collection
|
|
45
|
+
* sentinel `id: "*"`.
|
|
46
|
+
*/
|
|
45
47
|
function resourceIdOf(item) {
|
|
46
48
|
return wireResourceId(item.resource?.id);
|
|
47
49
|
}
|
|
@@ -123,18 +125,30 @@ function mergeEvaluationItem(shared, item) {
|
|
|
123
125
|
context: item["context"] ?? shared.context
|
|
124
126
|
});
|
|
125
127
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
128
|
+
//#endregion
|
|
129
|
+
//#region src/authzen/page.ts
|
|
130
|
+
/** The largest page a search answers; a larger `page.limit` is capped to it. */
|
|
131
|
+
const AUTHZEN_MAX_PAGE = 200;
|
|
132
|
+
const DEFAULT_PAGE = 50;
|
|
133
|
+
/**
|
|
134
|
+
* The page a search body asks for. The token is `page.token`, else
|
|
135
|
+
* `page.next_token`, read as a decimal offset; anything else starts at 0. The
|
|
136
|
+
* size is `page.limit`, else `page.size`, capped at 200 and 50 by default.
|
|
137
|
+
*/
|
|
138
|
+
function readAuthzenPage(body) {
|
|
139
|
+
const page = isRecord(body) && isRecord(body["page"]) ? body["page"] : void 0;
|
|
140
|
+
const raw = typeof page?.["token"] === "string" ? page["token"] : typeof page?.["next_token"] === "string" ? page["next_token"] : "0";
|
|
129
141
|
const parsed = Math.trunc(Number(raw));
|
|
130
|
-
const sizeRaw = page["limit"] ?? page["size"];
|
|
131
|
-
const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) :
|
|
142
|
+
const sizeRaw = page?.["limit"] ?? page?.["size"];
|
|
143
|
+
const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) : DEFAULT_PAGE;
|
|
132
144
|
return {
|
|
133
145
|
offset: Number.isFinite(parsed) && parsed > 0 ? parsed : 0,
|
|
134
146
|
size
|
|
135
147
|
};
|
|
136
148
|
}
|
|
137
|
-
|
|
149
|
+
/** One page of `items` with the AuthZEN `page` object. */
|
|
150
|
+
function authzenPage(items, request) {
|
|
151
|
+
const { offset, size } = request;
|
|
138
152
|
const slice = items.slice(offset, offset + size);
|
|
139
153
|
const next = offset + slice.length;
|
|
140
154
|
return {
|
|
@@ -146,43 +160,259 @@ function paged(items, offset, size) {
|
|
|
146
160
|
}
|
|
147
161
|
};
|
|
148
162
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
163
|
+
/** The answer to a search the PDP cannot run: no results and no next page. */
|
|
164
|
+
function emptyAuthzenPage() {
|
|
165
|
+
return authzenPage([], {
|
|
166
|
+
offset: 0,
|
|
167
|
+
size: 1
|
|
168
|
+
});
|
|
153
169
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
170
|
+
//#endregion
|
|
171
|
+
//#region src/authzen/parse.ts
|
|
172
|
+
/** AuthZEN 1.0 sections 5, 6.1 and 10.1.1. */
|
|
173
|
+
const REQUIRED = {
|
|
174
|
+
evaluation: {
|
|
175
|
+
subject: "type-id",
|
|
176
|
+
action: true,
|
|
177
|
+
resource: "type-id"
|
|
178
|
+
},
|
|
179
|
+
evaluations: {
|
|
180
|
+
subject: "type-id",
|
|
181
|
+
action: true,
|
|
182
|
+
resource: "type-id"
|
|
183
|
+
},
|
|
184
|
+
"search/action": {
|
|
185
|
+
subject: "type-id",
|
|
186
|
+
resource: "type-id"
|
|
187
|
+
},
|
|
188
|
+
"search/resource": {
|
|
189
|
+
subject: "type-id",
|
|
190
|
+
action: true,
|
|
191
|
+
resource: "type"
|
|
192
|
+
},
|
|
193
|
+
"search/subject": {
|
|
194
|
+
subject: "type",
|
|
195
|
+
action: true,
|
|
196
|
+
resource: "type-id"
|
|
162
197
|
}
|
|
198
|
+
};
|
|
199
|
+
function invalid(detail) {
|
|
200
|
+
return {
|
|
201
|
+
ok: false,
|
|
202
|
+
problem: compact({
|
|
203
|
+
type: problemType("validation"),
|
|
204
|
+
title: "Invalid request",
|
|
205
|
+
status: 400,
|
|
206
|
+
detail
|
|
207
|
+
})
|
|
208
|
+
};
|
|
163
209
|
}
|
|
164
|
-
/**
|
|
165
|
-
|
|
166
|
-
* fields (AuthZEN 1.0 sections 5, 6.1 and 10.1.1), or `undefined`.
|
|
167
|
-
*/
|
|
168
|
-
function missingProblem(body, required) {
|
|
210
|
+
/** The first missing entity or field, checked subject, resource, then action. */
|
|
211
|
+
function missing(body, required) {
|
|
169
212
|
for (const name of ["subject", "resource"]) {
|
|
170
213
|
const needs = required[name];
|
|
171
214
|
if (needs === void 0) continue;
|
|
172
215
|
const entity = body[name];
|
|
173
|
-
if (!isRecord(entity) || typeof entity["type"] !== "string") return
|
|
174
|
-
if (needs === "type-id" && typeof entity["id"] !== "string") return
|
|
216
|
+
if (!isRecord(entity) || typeof entity["type"] !== "string") return invalid(`${name}.type is required`);
|
|
217
|
+
if (needs === "type-id" && typeof entity["id"] !== "string") return invalid(`${name}.id is required`);
|
|
175
218
|
}
|
|
176
219
|
if (required.action === true) {
|
|
177
220
|
const action = body["action"];
|
|
178
|
-
if (!isRecord(action) || typeof action["name"] !== "string") return
|
|
221
|
+
if (!isRecord(action) || typeof action["name"] !== "string") return invalid("action.name is required");
|
|
179
222
|
}
|
|
180
223
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
224
|
+
function evaluations(body, maxEvaluations) {
|
|
225
|
+
const items = body["evaluations"] ?? [];
|
|
226
|
+
if (!Array.isArray(items)) return invalid("evaluations must be an array");
|
|
227
|
+
if (items.length === 0) return missing(body, REQUIRED.evaluations) ?? {
|
|
228
|
+
ok: true,
|
|
229
|
+
request: {
|
|
230
|
+
kind: "evaluation",
|
|
231
|
+
item: body
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
if (items.length > maxEvaluations) return {
|
|
235
|
+
ok: false,
|
|
236
|
+
problem: statusProblem(413, `evaluations batch exceeds ${String(maxEvaluations)}`)
|
|
237
|
+
};
|
|
238
|
+
const semantic = evaluationsSemantic(body);
|
|
239
|
+
if (semantic === void 0) return invalid(`options.evaluations_semantic must be one of ${EVALUATIONS_SEMANTICS.join(", ")}`);
|
|
240
|
+
const shared = compact({
|
|
241
|
+
subject: isRecord(body["subject"]) ? body["subject"] : void 0,
|
|
242
|
+
action: isRecord(body["action"]) ? body["action"] : void 0,
|
|
243
|
+
resource: isRecord(body["resource"]) ? body["resource"] : void 0,
|
|
244
|
+
context: body["context"]
|
|
245
|
+
});
|
|
246
|
+
return {
|
|
247
|
+
ok: true,
|
|
248
|
+
request: {
|
|
249
|
+
kind: "evaluations",
|
|
250
|
+
semantic,
|
|
251
|
+
items: items.map((item) => mergeEvaluationItem(shared, item))
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Checks a parsed AuthZEN body the way `permdock/authzen` answers it: the body
|
|
257
|
+
* is an object, then each required entity and field in a fixed order, then the
|
|
258
|
+
* `evaluations` array, batch size and semantic. A failure is the 400 (or 413)
|
|
259
|
+
* Problem Details the handler sends, with the same `detail`.
|
|
260
|
+
*/
|
|
261
|
+
function parseAuthzenRequest(kind, body, options = {}) {
|
|
262
|
+
return parseAny(kind, body, options);
|
|
263
|
+
}
|
|
264
|
+
function parseAny(kind, body, options) {
|
|
265
|
+
if (!isRecord(body)) return invalid(`${kind} body must be an object`);
|
|
266
|
+
switch (kind) {
|
|
267
|
+
case "evaluation": return missing(body, REQUIRED.evaluation) ?? {
|
|
268
|
+
ok: true,
|
|
269
|
+
request: {
|
|
270
|
+
kind,
|
|
271
|
+
item: body
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
case "evaluations": return evaluations(body, options.maxEvaluations ?? 256);
|
|
275
|
+
case "search/action":
|
|
276
|
+
case "search/resource":
|
|
277
|
+
case "search/subject": return missing(body, REQUIRED[kind]) ?? {
|
|
278
|
+
ok: true,
|
|
279
|
+
request: {
|
|
280
|
+
kind,
|
|
281
|
+
item: body,
|
|
282
|
+
page: readAuthzenPage(body)
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
default: return kind;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Reads `request` as an AuthZEN body: `Content-Type: application/json`, at most
|
|
290
|
+
* 1 MiB (a 413 above it), valid JSON, then `parseAuthzenRequest`.
|
|
291
|
+
*/
|
|
292
|
+
async function readAuthzenRequest(kind, request, options = {}) {
|
|
293
|
+
if (request.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() !== "application/json") return invalid("AuthZEN requests must use Content-Type: application/json");
|
|
294
|
+
const read = await readBodyText(request);
|
|
295
|
+
if (!read.ok) return read.cause === "too-large" ? {
|
|
296
|
+
ok: false,
|
|
297
|
+
problem: statusProblem(413, `request body exceeds ${String(MAX_BODY_BYTES)} bytes`)
|
|
298
|
+
} : invalid("AuthZEN body was not valid JSON");
|
|
299
|
+
let body;
|
|
300
|
+
try {
|
|
301
|
+
body = JSON.parse(read.text);
|
|
302
|
+
} catch {
|
|
303
|
+
return invalid("AuthZEN body was not valid JSON");
|
|
304
|
+
}
|
|
305
|
+
return parseAuthzenRequest(kind, body, options);
|
|
306
|
+
}
|
|
307
|
+
//#endregion
|
|
308
|
+
//#region src/authzen/search.ts
|
|
309
|
+
/** The one `decide` call every AuthZEN evaluation and search makes. */
|
|
310
|
+
function decideAuthzen(permdock, permission, data, trusted) {
|
|
311
|
+
const decide = permdock.decide;
|
|
312
|
+
return decide(permission, data, trusted ? {
|
|
313
|
+
call: "endpoint",
|
|
314
|
+
adapter: "authzen",
|
|
315
|
+
trusted: true
|
|
316
|
+
} : {
|
|
317
|
+
call: "endpoint",
|
|
318
|
+
adapter: "authzen",
|
|
319
|
+
trusted: false,
|
|
320
|
+
boundary: "decision-endpoint"
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
/** Every permission of resource type `type`, in catalog order. */
|
|
324
|
+
function permissionsOfType(tree, type) {
|
|
325
|
+
return listPermissions(tree).filter((leaf) => leaf.resource === type);
|
|
326
|
+
}
|
|
327
|
+
/** The distinct actions of the granted `leaves`, in catalog order. */
|
|
328
|
+
async function grantedActions(leaves, decide) {
|
|
329
|
+
const decisions = await Promise.all(leaves.map(async (leaf) => ({
|
|
330
|
+
leaf,
|
|
331
|
+
decision: await decide(leaf)
|
|
332
|
+
})));
|
|
333
|
+
const names = [];
|
|
334
|
+
for (const { leaf, decision } of decisions) if (decision.outcome === "granted" && !names.includes(leaf.action)) names.push(leaf.action);
|
|
335
|
+
return names.map((name) => ({ name }));
|
|
336
|
+
}
|
|
337
|
+
/** The granted ids among `records`; any subject type but `user` matches none. */
|
|
338
|
+
async function grantedSubjects(type, records, decide) {
|
|
339
|
+
if (typeof type === "string" && type !== "user") return [];
|
|
340
|
+
return (await Promise.all(records.map(async (record) => {
|
|
341
|
+
const properties = {};
|
|
342
|
+
for (const [key, value] of Object.entries(record)) if (key !== "id") properties[key] = value;
|
|
343
|
+
return {
|
|
344
|
+
id: record.id,
|
|
345
|
+
decision: await decide({
|
|
346
|
+
type: "user",
|
|
347
|
+
id: record.id,
|
|
348
|
+
properties
|
|
349
|
+
})
|
|
350
|
+
};
|
|
351
|
+
}))).flatMap(({ id, decision }) => decision.outcome === "granted" ? [{
|
|
352
|
+
type: "user",
|
|
353
|
+
id
|
|
354
|
+
}] : []);
|
|
355
|
+
}
|
|
356
|
+
function scopeOf(options) {
|
|
357
|
+
return {
|
|
358
|
+
tenant: options.tenant,
|
|
359
|
+
actor: options.actor,
|
|
360
|
+
delegation: options.delegation
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* The AuthZEN `search/action` answer for `user` on `resource`: every permission
|
|
365
|
+
* of `resource.type` in the policy is decided, and the distinct actions of the
|
|
366
|
+
* granted ones are returned in catalog order. Paging is the caller's
|
|
367
|
+
* (`authzenPage`).
|
|
368
|
+
*/
|
|
369
|
+
async function searchActions(policy, user, resource, options = {}) {
|
|
370
|
+
const { permdock } = await buildInstance({
|
|
371
|
+
policy,
|
|
372
|
+
user,
|
|
373
|
+
sources: options,
|
|
374
|
+
scope: scopeOf(options)
|
|
375
|
+
});
|
|
376
|
+
const trusted = "data" in options;
|
|
377
|
+
const data = trusted ? options.data : resourceData({ resource });
|
|
378
|
+
return grantedActions(permissionsOfType(policy.permissions, resource.type), (leaf) => decideAuthzen(permdock, leaf, data, trusted));
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* The AuthZEN `search/subject` answer: the candidates `lister` returns for
|
|
382
|
+
* `request`, each decided as itself, filtered to those granted `action` on
|
|
383
|
+
* `resource`. An unknown action, a subject type other than `user`, or a lister
|
|
384
|
+
* that throws answers none.
|
|
385
|
+
*/
|
|
386
|
+
async function searchSubjects(policy, lister, request, options = {}) {
|
|
387
|
+
const permission = permissionOf(permissionLookup(policy.permissions), request);
|
|
388
|
+
if (permission === void 0) return [];
|
|
389
|
+
let records;
|
|
390
|
+
try {
|
|
391
|
+
records = await lister.list(compact({
|
|
392
|
+
type: request.subject.type,
|
|
393
|
+
action: request.action,
|
|
394
|
+
resource: request.resource,
|
|
395
|
+
context: request.context
|
|
396
|
+
}));
|
|
397
|
+
} catch {
|
|
398
|
+
return [];
|
|
399
|
+
}
|
|
400
|
+
const data = resourceData(request);
|
|
401
|
+
return grantedSubjects(request.subject.type, records, async (subject) => {
|
|
402
|
+
const { permdock } = await buildInstance({
|
|
403
|
+
policy,
|
|
404
|
+
user: userFromEntity(subject),
|
|
405
|
+
sources: options,
|
|
406
|
+
scope: scopeOf(options)
|
|
407
|
+
});
|
|
408
|
+
return decideAuthzen(permdock, permission, data, false);
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
//#endregion
|
|
412
|
+
//#region src/authzen/create.ts
|
|
413
|
+
function notFound(detail) {
|
|
414
|
+
return problemResponse(statusProblem(404, detail));
|
|
415
|
+
}
|
|
186
416
|
const WELL_KNOWN = "/.well-known/authzen-configuration";
|
|
187
417
|
/** The name an item's action gives, for the reasons of an unknown permission. */
|
|
188
418
|
function actionName(item) {
|
|
@@ -249,73 +479,41 @@ const createPermDock = (policy, options) => {
|
|
|
249
479
|
if (resolved === void 0) return UNAVAILABLE;
|
|
250
480
|
const { data, trusted } = resolved;
|
|
251
481
|
const permdock = await instantiate(pep, item);
|
|
252
|
-
|
|
253
|
-
const decision = decide(permission, data, trusted ? {
|
|
254
|
-
call: "endpoint",
|
|
255
|
-
adapter: "authzen",
|
|
256
|
-
trusted: true
|
|
257
|
-
} : {
|
|
258
|
-
call: "endpoint",
|
|
259
|
-
adapter: "authzen",
|
|
260
|
-
trusted: false,
|
|
261
|
-
boundary: "decision-endpoint"
|
|
262
|
-
});
|
|
263
|
-
return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, resourceIdOf(item)), "authzen");
|
|
482
|
+
return applyApprovalResume(decideAuthzen(permdock, permission, data, trusted), permission, permdock, options.store, request, resourceRef(permission, data, resourceIdOf(item)), "authzen");
|
|
264
483
|
}
|
|
265
484
|
async function rowOf(request, pep, item) {
|
|
266
485
|
return evaluationRow(await decideItem(request, pep, item), permissionOf(lookup, item)?.key ?? actionName(item));
|
|
267
486
|
}
|
|
487
|
+
function read(kind, request) {
|
|
488
|
+
return readAuthzenRequest(kind, request, { maxEvaluations });
|
|
489
|
+
}
|
|
268
490
|
async function evaluation(request, pep) {
|
|
269
|
-
const
|
|
270
|
-
if (
|
|
271
|
-
|
|
272
|
-
const missing = missingProblem(body, EVALUATION);
|
|
273
|
-
if (missing !== void 0) return missing;
|
|
274
|
-
return Response.json(await rowOf(request, pep, body));
|
|
491
|
+
const parsed = await read("evaluation", request);
|
|
492
|
+
if (!parsed.ok) return problemResponse(parsed.problem);
|
|
493
|
+
return Response.json(await rowOf(request, pep, parsed.request.item));
|
|
275
494
|
}
|
|
276
495
|
async function evaluations(request, pep) {
|
|
277
|
-
const
|
|
278
|
-
if (
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
if (semantic === void 0) return unknownSemanticProblem();
|
|
286
|
-
const shared = compact({
|
|
287
|
-
subject: isRecord(body["subject"]) ? body["subject"] : void 0,
|
|
288
|
-
action: isRecord(body["action"]) ? body["action"] : void 0,
|
|
289
|
-
resource: isRecord(body["resource"]) ? body["resource"] : void 0,
|
|
290
|
-
context: body["context"]
|
|
291
|
-
});
|
|
292
|
-
return Response.json({ evaluations: await evaluateBatch(items, semantic, (item) => rowOf(request, pep, mergeEvaluationItem(shared, item))) });
|
|
496
|
+
const parsed = await read("evaluations", request);
|
|
497
|
+
if (!parsed.ok) return problemResponse(parsed.problem);
|
|
498
|
+
const body = parsed.request;
|
|
499
|
+
switch (body.kind) {
|
|
500
|
+
case "evaluation": return Response.json(await rowOf(request, pep, body.item));
|
|
501
|
+
case "evaluations": return Response.json({ evaluations: await evaluateBatch(body.items, body.semantic, (item) => rowOf(request, pep, item)) });
|
|
502
|
+
default: return body;
|
|
503
|
+
}
|
|
293
504
|
}
|
|
294
505
|
async function searchAction(request, pep) {
|
|
295
|
-
const
|
|
296
|
-
if (
|
|
297
|
-
|
|
298
|
-
const
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
|
|
305
|
-
const leaves = listPermissions(policy.permissions).filter((leaf) => type === void 0 || leaf.resource === type);
|
|
306
|
-
const decisions = await Promise.all(leaves.map(async (leaf) => ({
|
|
307
|
-
leaf,
|
|
308
|
-
decision: await decideItem(request, pep, compact({
|
|
309
|
-
subject: item.subject,
|
|
310
|
-
context: item.context,
|
|
311
|
-
resource: item.resource,
|
|
312
|
-
action: { name: leaf.key }
|
|
313
|
-
}))
|
|
506
|
+
const parsed = await read("search/action", request);
|
|
507
|
+
if (!parsed.ok) return problemResponse(parsed.problem);
|
|
508
|
+
const { item, page } = parsed.request;
|
|
509
|
+
const type = typeof item.resource?.type === "string" ? item.resource.type : "";
|
|
510
|
+
const actions = await grantedActions(permissionsOfType(policy.permissions, type), (leaf) => decideItem(request, pep, compact({
|
|
511
|
+
subject: item.subject,
|
|
512
|
+
context: item.context,
|
|
513
|
+
resource: item.resource,
|
|
514
|
+
action: { name: leaf.key }
|
|
314
515
|
})));
|
|
315
|
-
|
|
316
|
-
for (const { leaf, decision } of decisions) if (decision.outcome === "granted" && !names.includes(leaf.action)) names.push(leaf.action);
|
|
317
|
-
const { offset, size } = pageOf(body);
|
|
318
|
-
return Response.json(paged(names.map((name) => ({ name })), offset, size));
|
|
516
|
+
return Response.json(authzenPage(actions, page));
|
|
319
517
|
}
|
|
320
518
|
async function listRows(type, where) {
|
|
321
519
|
const list = options.resources?.[type]?.list;
|
|
@@ -327,19 +525,12 @@ const createPermDock = (policy, options) => {
|
|
|
327
525
|
}
|
|
328
526
|
}
|
|
329
527
|
async function searchResource(request, pep) {
|
|
330
|
-
const
|
|
331
|
-
if (
|
|
332
|
-
|
|
333
|
-
const missingResource = missingProblem(body, {
|
|
334
|
-
subject: "type-id",
|
|
335
|
-
action: true,
|
|
336
|
-
resource: "type"
|
|
337
|
-
});
|
|
338
|
-
if (missingResource !== void 0) return missingResource;
|
|
339
|
-
const item = body;
|
|
528
|
+
const parsed = await read("search/resource", request);
|
|
529
|
+
if (!parsed.ok) return problemResponse(parsed.problem);
|
|
530
|
+
const { item, page } = parsed.request;
|
|
340
531
|
const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
|
|
341
532
|
const permission = permissionOf(lookup, item);
|
|
342
|
-
if (type === void 0 || permission === void 0) return Response.json(
|
|
533
|
+
if (type === void 0 || permission === void 0) return Response.json(emptyAuthzenPage());
|
|
343
534
|
const rows = await listRows(type, isRecord(item.resource?.properties) ? item.resource.properties : void 0);
|
|
344
535
|
const permdock = await instantiate(pep, item);
|
|
345
536
|
let permitted = [];
|
|
@@ -353,51 +544,32 @@ const createPermDock = (policy, options) => {
|
|
|
353
544
|
id: String(id)
|
|
354
545
|
}] : [];
|
|
355
546
|
});
|
|
356
|
-
|
|
357
|
-
return Response.json(paged(entities, offset, size));
|
|
547
|
+
return Response.json(authzenPage(entities, page));
|
|
358
548
|
}
|
|
359
549
|
async function searchSubject(request, pep) {
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
if (!
|
|
364
|
-
const
|
|
365
|
-
subject: "type",
|
|
366
|
-
action: true,
|
|
367
|
-
resource: "type-id"
|
|
368
|
-
});
|
|
369
|
-
if (missingSubject !== void 0) return missingSubject;
|
|
550
|
+
const lister = options.subjects;
|
|
551
|
+
if (lister?.list === void 0) return notFound("search/subject is not configured");
|
|
552
|
+
const parsed = await read("search/subject", request);
|
|
553
|
+
if (!parsed.ok) return problemResponse(parsed.problem);
|
|
554
|
+
const { item, page } = parsed.request;
|
|
370
555
|
let records;
|
|
371
556
|
try {
|
|
372
|
-
records = await
|
|
557
|
+
records = await lister.list(compact({
|
|
558
|
+
type: typeof item.subject?.type === "string" ? item.subject.type : "",
|
|
559
|
+
action: item.action ?? {},
|
|
560
|
+
resource: item.resource ?? {},
|
|
561
|
+
context: item.context
|
|
562
|
+
}));
|
|
373
563
|
} catch {
|
|
374
|
-
return Response.json(
|
|
564
|
+
return Response.json(emptyAuthzenPage());
|
|
375
565
|
}
|
|
376
|
-
const
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
id: record.id,
|
|
384
|
-
decision: await decideItem(request, pep, compact({
|
|
385
|
-
action: item.action,
|
|
386
|
-
resource: item.resource,
|
|
387
|
-
context: item.context,
|
|
388
|
-
subject: {
|
|
389
|
-
type: "user",
|
|
390
|
-
id: record.id,
|
|
391
|
-
properties
|
|
392
|
-
}
|
|
393
|
-
}))
|
|
394
|
-
};
|
|
395
|
-
}))).flatMap(({ id, decision }) => decision.outcome === "granted" ? [{
|
|
396
|
-
type: "user",
|
|
397
|
-
id
|
|
398
|
-
}] : []);
|
|
399
|
-
const { offset, size } = pageOf(body);
|
|
400
|
-
return Response.json(paged(matches, offset, size));
|
|
566
|
+
const matches = await grantedSubjects(item.subject?.type, records, (subject) => decideItem(request, pep, compact({
|
|
567
|
+
action: item.action,
|
|
568
|
+
resource: item.resource,
|
|
569
|
+
context: item.context,
|
|
570
|
+
subject
|
|
571
|
+
})));
|
|
572
|
+
return Response.json(authzenPage(matches, page));
|
|
401
573
|
}
|
|
402
574
|
function discovery(request, pathname) {
|
|
403
575
|
const pdp = `${new URL(request.url).origin}${pathname.slice(pathname.indexOf(WELL_KNOWN) + 34).replace(/\/+$/u, "")}`;
|
|
@@ -452,4 +624,4 @@ const createPermDock = (policy, options) => {
|
|
|
452
624
|
return { permdockHandler: () => handler };
|
|
453
625
|
};
|
|
454
626
|
//#endregion
|
|
455
|
-
export { EVALUATIONS_SEMANTICS, createPermDock, evaluateBatch, evaluationsSemantic, mergeEvaluationItem };
|
|
627
|
+
export { AUTHZEN_MAX_PAGE, EVALUATIONS_SEMANTICS, authzenPage, createPermDock, emptyAuthzenPage, evaluateBatch, evaluationsSemantic, mergeEvaluationItem, parseAuthzenRequest, readAuthzenPage, readAuthzenRequest, searchActions, searchSubjects };
|