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
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { i as configError, u as usageResult } from "./errors-
|
|
3
|
-
import { s as writeFileEnsuringDir } from "./files-
|
|
4
|
-
import { r as escapeSqlIdent, s as quoteSqlLiteral } from "./sql-
|
|
5
|
-
import { C as parseMembershipsFlag, r as HELPERS } from "./shared-
|
|
6
|
-
import {
|
|
7
|
-
import { t as FIELD_VIEWS } from "./fields-
|
|
8
|
-
import { n as emptySchema, r as isSchemaKind, t as emitPermissionsModule } from "./generate-
|
|
2
|
+
import { i as configError, u as usageResult } from "./errors-Vpu6rKHl.js";
|
|
3
|
+
import { s as writeFileEnsuringDir } from "./files-BSjrtIHw.js";
|
|
4
|
+
import { r as escapeSqlIdent, s as quoteSqlLiteral } from "./sql-0WjxIp9g.js";
|
|
5
|
+
import { C as parseMembershipsFlag, r as HELPERS } from "./shared-Afctg7B0.js";
|
|
6
|
+
import { n as pgConnector } from "./pg-DQTqRrou.js";
|
|
7
|
+
import { t as FIELD_VIEWS } from "./fields-D0vUI6dq.js";
|
|
8
|
+
import { n as emptySchema, r as isSchemaKind, t as emitPermissionsModule } from "./generate-CezbCaTI.js";
|
|
9
9
|
import { existsSync, readFileSync } from "node:fs";
|
|
10
10
|
import { resolve } from "node:path";
|
|
11
11
|
import { createHash } from "node:crypto";
|
|
@@ -42,7 +42,10 @@ function funcName(value) {
|
|
|
42
42
|
if (!Array.isArray(names) || names.length === 0) return;
|
|
43
43
|
return names.map((item) => stringVal(item) ?? "").join(".");
|
|
44
44
|
}
|
|
45
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* The expression of a scalar `(select <expr>)`, the InitPlan form generate
|
|
47
|
+
* writes.
|
|
48
|
+
*/
|
|
46
49
|
function scalarSubselect(value) {
|
|
47
50
|
const targets = asNode$1(asNode$1(asNode$1(asNode$1(unwrap(value))?.["SubLink"])?.["subselect"])?.["SelectStmt"])?.["targetList"];
|
|
48
51
|
if (!Array.isArray(targets) || targets[0] === void 0) return;
|
|
@@ -175,7 +178,7 @@ async function fingerprintSql(sql) {
|
|
|
175
178
|
const deparsed = await deparse(parsed);
|
|
176
179
|
return createHash("sha256").update(deparsed).digest("hex").slice(0, 16);
|
|
177
180
|
} catch {
|
|
178
|
-
return createHash("sha256").update(sql.replaceAll(/\s+/
|
|
181
|
+
return createHash("sha256").update(sql.replaceAll(/\s+/gu, " ").trim().toLowerCase()).digest("hex").slice(0, 16);
|
|
179
182
|
}
|
|
180
183
|
}
|
|
181
184
|
function nodeStmt(first) {
|
|
@@ -192,7 +195,10 @@ function jwtClaim(value) {
|
|
|
192
195
|
const claim = constValue(expr["rexpr"]);
|
|
193
196
|
return typeof claim === "string" ? claim : void 0;
|
|
194
197
|
}
|
|
195
|
-
/**
|
|
198
|
+
/**
|
|
199
|
+
* `auth.jwt()` / `auth.session()`, bare or as a scalar `(select …)`; a column's
|
|
200
|
+
* `->>` is row data, not a claim.
|
|
201
|
+
*/
|
|
196
202
|
function isJwtCall(value) {
|
|
197
203
|
const inner = scalarSubselect(value);
|
|
198
204
|
if (inner !== void 0) return isJwtCall(inner);
|
|
@@ -203,20 +209,15 @@ function isJwtCall(value) {
|
|
|
203
209
|
//#region src/cli/rls/import-membership.ts
|
|
204
210
|
/**
|
|
205
211
|
* What the `where` of a membership subquery on `table` says, or `undefined`
|
|
206
|
-
* when any part of it cannot be read as one. A subquery imports as
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
212
|
+
* when any part of it cannot be read as one. A subquery imports as `memberOf`
|
|
213
|
+
* only when it binds the membership row to the signed-in user and to the policy
|
|
214
|
+
* row, and filters roles with string literals at most: a predicate left unread
|
|
215
|
+
* would widen the imported condition.
|
|
210
216
|
*/
|
|
211
217
|
function membershipRoles(subquery, table) {
|
|
212
218
|
const where = selectWhere(subquery.select);
|
|
213
219
|
if (where === void 0) return;
|
|
214
|
-
const scopeColumns = new Set([
|
|
215
|
-
...Object.values(table.columns ?? {}),
|
|
216
|
-
table.tenant,
|
|
217
|
-
table.team,
|
|
218
|
-
table.id
|
|
219
|
-
].filter((column) => column !== void 0));
|
|
220
|
+
const scopeColumns = new Set([...Object.values(table.columns ?? {}), table.id].filter((column) => column !== void 0));
|
|
220
221
|
if (subquery.field !== void 0 && !scopeColumns.has(selectTarget(subquery.select) ?? "")) return;
|
|
221
222
|
const roleColumn = typeof table.role === "string" ? table.role : void 0;
|
|
222
223
|
const roles = [];
|
|
@@ -393,7 +394,10 @@ function helperCall(value) {
|
|
|
393
394
|
} : void 0;
|
|
394
395
|
}
|
|
395
396
|
const MEMBER = /^member_([a-z][a-z0-9_]*)_ids$/u;
|
|
396
|
-
/**
|
|
397
|
+
/**
|
|
398
|
+
* `col in (select member_<scope>_ids())`: any live membership of the row's
|
|
399
|
+
* instance.
|
|
400
|
+
*/
|
|
397
401
|
function memberCall(value) {
|
|
398
402
|
const sub = asNode$1(asNode$1(unwrap(value))?.["SubLink"]);
|
|
399
403
|
const kind = sub?.["subLinkType"];
|
|
@@ -442,8 +446,8 @@ function helperCalls(conjunct) {
|
|
|
442
446
|
/**
|
|
443
447
|
* The role structure of a policy that calls the helpers: each OR branch's
|
|
444
448
|
* helper calls become grants (roles from the `role_permissions` seeds), the
|
|
445
|
-
* branch's other conjuncts become their `where`. Restrictive policies are
|
|
446
|
-
*
|
|
449
|
+
* branch's other conjuncts become their `where`. Restrictive policies are read
|
|
450
|
+
* through their outer `not`.
|
|
447
451
|
*/
|
|
448
452
|
async function helperGrants(sql, memberships, functions, seeds) {
|
|
449
453
|
if (sql === void 0) return [];
|
|
@@ -480,10 +484,10 @@ async function helperGrants(sql, memberships, functions, seeds) {
|
|
|
480
484
|
else rest.push(mapped);
|
|
481
485
|
}
|
|
482
486
|
if (calls.length === 0) continue;
|
|
483
|
-
const condition =
|
|
487
|
+
const condition = portable ? rest.length === 0 ? void 0 : rest.length === 1 ? rest[0] : {
|
|
484
488
|
op: "and",
|
|
485
489
|
conditions: rest
|
|
486
|
-
};
|
|
490
|
+
} : unportable;
|
|
487
491
|
for (const call of calls) {
|
|
488
492
|
const permission = seeds.find((seed) => seed.grantKey === call.key)?.permission ?? call.key.replace(/#[a-z0-9][a-z0-9_-]*$/u, "");
|
|
489
493
|
grants.push({
|
|
@@ -543,10 +547,7 @@ function mapNode(value, ctx) {
|
|
|
543
547
|
const subquery = membershipSubquery(node);
|
|
544
548
|
if (subquery !== void 0) {
|
|
545
549
|
const { table } = subquery;
|
|
546
|
-
const
|
|
547
|
-
if (memberships?.tenant !== void 0) mappedScopes.push(["tenant", memberships.tenant]);
|
|
548
|
-
if (memberships?.team !== void 0) mappedScopes.push(["team", memberships.team]);
|
|
549
|
-
const matches = mappedScopes.filter(([, mapped]) => mapped.table === table);
|
|
550
|
+
const matches = Object.entries(memberships?.scopes ?? {}).filter(([, mapped]) => mapped.table === table);
|
|
550
551
|
if (matches.length > 0) {
|
|
551
552
|
for (const [scope, mapped] of matches) {
|
|
552
553
|
const read = membershipRoles(subquery, mapped);
|
|
@@ -631,7 +632,10 @@ function seedFromRow(row) {
|
|
|
631
632
|
effect: row["effect"] === "deny" ? "deny" : "allow"
|
|
632
633
|
};
|
|
633
634
|
}
|
|
634
|
-
/**
|
|
635
|
+
/**
|
|
636
|
+
* `role_permissions` rows from the `insert ... values` statements of a SQL
|
|
637
|
+
* dump.
|
|
638
|
+
*/
|
|
635
639
|
async function seedsFromSql(sql) {
|
|
636
640
|
let parsed;
|
|
637
641
|
try {
|
|
@@ -754,7 +758,10 @@ function sourceOf(select) {
|
|
|
754
758
|
companion: right
|
|
755
759
|
};
|
|
756
760
|
}
|
|
757
|
-
/**
|
|
761
|
+
/**
|
|
762
|
+
* A mask is `allow`, `not deny` or `allow and not deny`; the generator puts the
|
|
763
|
+
* deny last.
|
|
764
|
+
*/
|
|
758
765
|
function splitMask(mask) {
|
|
759
766
|
const bool = asNode(asNode(mask)?.["BoolExpr"]);
|
|
760
767
|
if (bool?.["boolop"] === "NOT_EXPR") return { deny: list(bool["args"])[0] };
|
|
@@ -778,9 +785,9 @@ async function grantsOf(node, memberships, functions, seeds) {
|
|
|
778
785
|
}
|
|
779
786
|
/**
|
|
780
787
|
* Reads back the field views `rls generate --fields views` writes: a
|
|
781
|
-
* `security_invoker` `<table>_visible` whose restricted columns are
|
|
782
|
-
*
|
|
783
|
-
*
|
|
788
|
+
* `security_invoker` `<table>_visible` whose restricted columns are `case when
|
|
789
|
+
* <mask> then col end`, either inline or through the `<table>_visible_fields`
|
|
790
|
+
* companion it joins. Other views are ignored.
|
|
784
791
|
*/
|
|
785
792
|
async function fieldViewsFromSql(sql, memberships, functions, seeds) {
|
|
786
793
|
let stmts;
|
|
@@ -830,7 +837,10 @@ async function fieldViewsFromSql(sql, memberships, functions, seeds) {
|
|
|
830
837
|
return out;
|
|
831
838
|
}
|
|
832
839
|
const quote = escapeSqlIdent;
|
|
833
|
-
/**
|
|
840
|
+
/**
|
|
841
|
+
* `create view` statements for every view in the database, from
|
|
842
|
+
* `pg_get_viewdef` and the view's options.
|
|
843
|
+
*/
|
|
834
844
|
async function viewsSqlFromDb(query) {
|
|
835
845
|
return (await query(`select n.nspname as schema, c.relname as name, c.reloptions as options, pg_get_viewdef(c.oid) as definition
|
|
836
846
|
from pg_class c join pg_namespace n on n.oid = c.relnamespace
|
|
@@ -845,9 +855,9 @@ async function viewsSqlFromDb(query) {
|
|
|
845
855
|
}
|
|
846
856
|
//#endregion
|
|
847
857
|
//#region src/cli/rls/import.ts
|
|
848
|
-
const POLICY_RE = /create\s+policy\s+"?([A-Za-z0-9_]+)"?\s+on\s+"?([A-Za-z0-9_]+)"?([\s\S]*?);/
|
|
858
|
+
const POLICY_RE = /create\s+policy\s+"?([A-Za-z0-9_]+)"?\s+on\s+"?([A-Za-z0-9_]+)"?([\s\S]*?);/giu;
|
|
849
859
|
function extractParenClause(sql, keyword) {
|
|
850
|
-
const match = new RegExp(`\\b${keyword}\\s*\\(`, "
|
|
860
|
+
const match = new RegExp(`\\b${keyword}\\s*\\(`, "iu").exec(sql);
|
|
851
861
|
if (match?.index === void 0) return;
|
|
852
862
|
const start = match.index + match[0].length;
|
|
853
863
|
let depth = 1;
|
|
@@ -866,11 +876,11 @@ function splitPolicies(sql) {
|
|
|
866
876
|
const name = match[1] ?? "policy";
|
|
867
877
|
const table = match[2] ?? "table";
|
|
868
878
|
const body = match[3] ?? "";
|
|
869
|
-
const clauses = body.search(/\b(?:using|with\s+check)\s*\(/
|
|
879
|
+
const clauses = body.search(/\b(?:using|with\s+check)\s*\(/iu);
|
|
870
880
|
const header = clauses === -1 ? body : body.slice(0, clauses);
|
|
871
|
-
const asRestrictive = /\bas\s+restrictive\b/
|
|
872
|
-
const cmdMatch = /\bfor\s+(all|select|insert|update|delete)\b/
|
|
873
|
-
const toMatch = /\bto\s+([^\n]+)/
|
|
881
|
+
const asRestrictive = /\bas\s+restrictive\b/iu.test(header);
|
|
882
|
+
const cmdMatch = /\bfor\s+(all|select|insert|update|delete)\b/iu.exec(header);
|
|
883
|
+
const toMatch = /\bto\s+([^\n]+)/iu.exec(header);
|
|
874
884
|
const using = extractParenClause(body, "using");
|
|
875
885
|
const check = extractParenClause(body, "with\\s+check");
|
|
876
886
|
const roles = (toMatch?.[1] ?? "authenticated").split(",").map((item) => item.trim()).filter((item) => item !== "");
|
|
@@ -922,7 +932,7 @@ function emitGenerated(catalog, fieldViews, schema) {
|
|
|
922
932
|
resources: tables.map((table) => {
|
|
923
933
|
const { actions, collection } = actionsFor(catalog.filter((item) => item.table === table).map((item) => item.cmd));
|
|
924
934
|
return {
|
|
925
|
-
path: [table.replaceAll(/[^A-Za-z0-9_]/
|
|
935
|
+
path: [table.replaceAll(/[^A-Za-z0-9_]/gu, "_")],
|
|
926
936
|
schema: emptySchema(kind),
|
|
927
937
|
actions,
|
|
928
938
|
collection
|
|
@@ -931,7 +941,7 @@ function emitGenerated(catalog, fieldViews, schema) {
|
|
|
931
941
|
});
|
|
932
942
|
}
|
|
933
943
|
function assertNoServiceRole(sql) {
|
|
934
|
-
if (/\bto\s+service_role\b|\bfrom\s+service_role\b/
|
|
944
|
+
if (/\bto\s+service_role\b|\bfrom\s+service_role\b/iu.test(sql)) throw configError("PermDock CLI: imported SQL must never target service_role");
|
|
935
945
|
}
|
|
936
946
|
async function seedsFromDb(query) {
|
|
937
947
|
const schema = (await query(`select table_schema from information_schema.tables where table_name = 'role_permissions' order by table_schema = 'permdock' desc, table_schema = 'public' desc, table_schema limit 1`)).rows[0]?.["table_schema"];
|
|
@@ -945,10 +955,13 @@ async function seedsFromDb(query) {
|
|
|
945
955
|
return [];
|
|
946
956
|
}
|
|
947
957
|
}
|
|
948
|
-
/**
|
|
958
|
+
/**
|
|
959
|
+
* `pg_policies.roles` is a `name[]`, which `pg` returns as an array or,
|
|
960
|
+
* untyped, as `{a,b}`.
|
|
961
|
+
*/
|
|
949
962
|
function policyRoles(value) {
|
|
950
963
|
if (Array.isArray(value)) return value.map(String);
|
|
951
|
-
return typeof value === "string" ? value.replaceAll(/[{}]/
|
|
964
|
+
return typeof value === "string" ? value.replaceAll(/[{}]/gu, "").split(",").map((item) => item.trim()).filter((item) => item !== "") : [];
|
|
952
965
|
}
|
|
953
966
|
async function policiesFromDb(db, connect) {
|
|
954
967
|
const client = await connect(db);
|
|
@@ -1011,7 +1024,11 @@ async function runRlsImport(input) {
|
|
|
1011
1024
|
seeds = await seedsFromSql(sql);
|
|
1012
1025
|
policies = splitPolicies(await canonicalDump(sql) ?? sql);
|
|
1013
1026
|
if (policies.length === 0) policies = splitPolicies(sql);
|
|
1014
|
-
} else if (input.db
|
|
1027
|
+
} else if (input.db === void 0) return {
|
|
1028
|
+
code: 2,
|
|
1029
|
+
output: "PermDock CLI: rls import needs --sql <file> or a database: --db-url-stdin, DATABASE_URL or SUPABASE_DB_URL"
|
|
1030
|
+
};
|
|
1031
|
+
else try {
|
|
1015
1032
|
const fromDb = await policiesFromDb(input.db, input.connect ?? pgConnector("permdock rls import --db-url-stdin", input.cwd));
|
|
1016
1033
|
policies = fromDb.policies;
|
|
1017
1034
|
bodies = fromDb.bodies;
|
|
@@ -1020,10 +1037,6 @@ async function runRlsImport(input) {
|
|
|
1020
1037
|
} catch (cause) {
|
|
1021
1038
|
return usageResult(cause);
|
|
1022
1039
|
}
|
|
1023
|
-
else return {
|
|
1024
|
-
code: 2,
|
|
1025
|
-
output: "PermDock CLI: rls import needs --sql <file> or a database: --db-url-stdin, DATABASE_URL or SUPABASE_DB_URL"
|
|
1026
|
-
};
|
|
1027
1040
|
const memberships = parseMembershipsFlag(input.memberships) ?? input.config.rls?.memberships;
|
|
1028
1041
|
const roleValues = input.config.rls?.roleValues;
|
|
1029
1042
|
if (roleValues !== void 0) seeds = seeds.map((row) => {
|
|
@@ -1070,7 +1083,7 @@ function fieldViewHint(view) {
|
|
|
1070
1083
|
return `field view ${view.view} over ${view.table}: ${view.restricted.map((item) => item.column).join(", ")} are field-limited; set fields on the read grants that list them (fieldViews export)`;
|
|
1071
1084
|
}
|
|
1072
1085
|
function membershipHint(table) {
|
|
1073
|
-
return [`exists over ${table} stayed opaque; if it holds memberships, map it in permdock.config.ts:`, `// rls: { memberships: { tenant: { table: '${table}', user: 'user_id', tenant: 'tenant_id', role: 'role' } } }`].join("\n");
|
|
1086
|
+
return [`exists over ${table} stayed opaque; if it holds memberships, map it in permdock.config.ts:`, `// rls: { memberships: { scopes: { tenant: { table: '${table}', user: 'user_id', columns: { tenant: 'tenant_id' }, role: 'role' } } } }`].join("\n");
|
|
1074
1087
|
}
|
|
1075
1088
|
function uniqueHints(names, bodies) {
|
|
1076
1089
|
const lines = [];
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { t as byCodePoint } from "./compare-
|
|
3
|
-
import { i as readJsonFile } from "./files-
|
|
4
|
-
import { t as applyFiles } from "./files-
|
|
5
|
-
import { n as httpRequest } from "./http-
|
|
6
|
-
import { i as schemaExpression, t as emitPermissionsModule } from "./generate-
|
|
7
|
-
import { t as validateOpenapi } from "./schema-
|
|
2
|
+
import { t as byCodePoint } from "./compare-DTfyUunF.js";
|
|
3
|
+
import { i as readJsonFile } from "./files-BSjrtIHw.js";
|
|
4
|
+
import { t as applyFiles } from "./files-B3AA05f1.js";
|
|
5
|
+
import { n as httpRequest } from "./http-DOL33cO0.js";
|
|
6
|
+
import { i as schemaExpression, t as emitPermissionsModule } from "./generate-CezbCaTI.js";
|
|
7
|
+
import { t as validateOpenapi } from "./schema-Dst9I9Gs.js";
|
|
8
8
|
import { existsSync, readFileSync } from "node:fs";
|
|
9
9
|
import { resolve } from "node:path";
|
|
10
10
|
//#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/browser/dist/nodes/identity.js
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { Ct as Credential,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { c as ServerPermDock, l as ServerPermDockOptions } from "./server-types-CKQiCnON.js";
|
|
1
|
+
import { Ct as Credential, Ln as Decision, St as ApiKeyPrincipal, T as Policy, Tt as CredentialKind, U as CredentialVerifier, Zt as AuthEvent, at as SettingsSource, dt as TokenVerifier, gt as SupportSession, j as PolicyVocabulary, lr as Subject, lt as TokenFailureCause, q as DecisionSink, sr as Principal, ut as TokenSigner } from "./policy-types-CCiDRZBH.js";
|
|
2
|
+
import { f as PermissionTree, u as Permission } from "./permission-types-CAY-GU7e.js";
|
|
3
|
+
import { _ as PrincipalSource } from "./permdock-B6Sf4T_S.js";
|
|
4
|
+
import { a as ProblemDetails, s as Disclosure, t as ApprovalHint } from "./errors-zi_4T-rx.js";
|
|
5
|
+
import { c as ServerPermDock, l as ServerPermDockOptions } from "./server-types-CIlpSA2G.js";
|
|
7
6
|
//#region src/server/create.d.ts
|
|
8
7
|
/**
|
|
9
8
|
* The Fetch factory behind every HTTP adapter. The subject and actor are
|
|
@@ -21,9 +20,9 @@ type ProblemFromErrorOptions = {
|
|
|
21
20
|
};
|
|
22
21
|
/**
|
|
23
22
|
* Turns a thrown PermDock error into its Problem Details response, with the
|
|
24
|
-
* status, `WWW-Authenticate` and rate-limit fields `protect` sends for the
|
|
25
|
-
*
|
|
26
|
-
*
|
|
23
|
+
* status, `WWW-Authenticate` and rate-limit fields `protect` sends for the same
|
|
24
|
+
* decision. Returns `undefined` for anything else so the framework's own error
|
|
25
|
+
* path takes over.
|
|
27
26
|
*/
|
|
28
27
|
declare function problemFromError(error: unknown, options?: ProblemFromErrorOptions): Response | undefined;
|
|
29
28
|
//#endregion
|
|
@@ -35,7 +34,10 @@ type ApiKeyParts = {
|
|
|
35
34
|
readonly id: string;
|
|
36
35
|
readonly secret: string;
|
|
37
36
|
};
|
|
38
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* What an application stores per key: the credential and the key's hash, never
|
|
39
|
+
* the key.
|
|
40
|
+
*/
|
|
39
41
|
type StoredCredential = {
|
|
40
42
|
readonly credential: Credential;
|
|
41
43
|
readonly hash: string;
|
|
@@ -43,19 +45,19 @@ type StoredCredential = {
|
|
|
43
45
|
/**
|
|
44
46
|
* Splits `pdk_<id>_<secret><checksum>`: `id` is 1 to 128 of `A-Z a-z 0-9 _ -`,
|
|
45
47
|
* the secret 43 base62 characters and the checksum the 6 base62 characters of
|
|
46
|
-
* the CRC-32 of everything before it. Anything else, including a checksum
|
|
47
|
-
*
|
|
48
|
+
* the CRC-32 of everything before it. Anything else, including a checksum that
|
|
49
|
+
* does not match, is `undefined`.
|
|
48
50
|
*/
|
|
49
51
|
declare function parseApiKey(key: unknown): ApiKeyParts | undefined;
|
|
50
52
|
/**
|
|
51
|
-
* Splits `pdfeed_<id>_<secret><checksum>`. `id` is `isFeedId`, the secret is
|
|
52
|
-
*
|
|
53
|
-
*
|
|
53
|
+
* Splits `pdfeed_<id>_<secret><checksum>`. `id` is `isFeedId`, the secret is 26
|
|
54
|
+
* lowercase base32 characters and the checksum is 6 more. A checksum that does
|
|
55
|
+
* not match is `undefined`.
|
|
54
56
|
*/
|
|
55
57
|
declare function parseFeedKey(key: unknown): ApiKeyParts | undefined;
|
|
56
58
|
/**
|
|
57
|
-
* A fresh `pdfeed_<id>_<secret><checksum>`: 26 lowercase base32 characters
|
|
58
|
-
*
|
|
59
|
+
* A fresh `pdfeed_<id>_<secret><checksum>`: 26 lowercase base32 characters (130
|
|
60
|
+
* bits) and a 6-character CRC-32 checksum. The whole key is lowercase.
|
|
59
61
|
*/
|
|
60
62
|
declare function generateFeedKey(id: string): string;
|
|
61
63
|
/**
|
|
@@ -67,11 +69,11 @@ declare function generateApiKey(id: string): string;
|
|
|
67
69
|
/** base64url SHA-256 of the whole key, the value to store and compare. */
|
|
68
70
|
declare function hashApiKey(key: string): Promise<string>;
|
|
69
71
|
/**
|
|
70
|
-
* A `CredentialVerifier` over the application's own table: `find` looks a
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
72
|
+
* A `CredentialVerifier` over the application's own table: `find` looks a key
|
|
73
|
+
* up by the id in it, and the key's hash is compared in constant time. A record
|
|
74
|
+
* that is not a valid v1 credential, or whose id is not the key's, verifies to
|
|
75
|
+
* `null`. A throwing `find` propagates, so the resolver denies with
|
|
76
|
+
* `source-threw`.
|
|
75
77
|
*/
|
|
76
78
|
declare function apiKeyVerifier(options: {
|
|
77
79
|
readonly find: (id: string) => StoredCredential | null | undefined | Promise<StoredCredential | null | undefined>;
|
|
@@ -80,14 +82,14 @@ declare function apiKeyVerifier(options: {
|
|
|
80
82
|
}): CredentialVerifier;
|
|
81
83
|
type MemoryCredentialStore = CredentialVerifier & {
|
|
82
84
|
/** Stores `credential` and returns its key; the key is never stored. */
|
|
83
|
-
issue(credential: Credential)
|
|
85
|
+
issue: (credential: Credential) => Promise<string>;
|
|
84
86
|
/** A new secret for the same id; the old key stops verifying at once. */
|
|
85
|
-
rotate(id: string)
|
|
87
|
+
rotate: (id: string) => Promise<string | undefined>;
|
|
86
88
|
/** `true` when a credential was removed. */
|
|
87
|
-
revoke(id: string)
|
|
88
|
-
list()
|
|
89
|
+
revoke: (id: string) => boolean;
|
|
90
|
+
list: () => readonly Credential[];
|
|
89
91
|
/** When `touch` last recorded a use of `id`, as RFC 3339. */
|
|
90
|
-
lastUsedAt(id: string)
|
|
92
|
+
lastUsedAt: (id: string) => string | undefined;
|
|
91
93
|
};
|
|
92
94
|
/**
|
|
93
95
|
* In-process credentials for tests and single-replica apps. `issue`, `rotate`
|
|
@@ -99,24 +101,30 @@ declare function memoryCredentialStore(options?: {
|
|
|
99
101
|
}): MemoryCredentialStore;
|
|
100
102
|
type ApiKeySubjectOptions = {
|
|
101
103
|
readonly verifier: CredentialVerifier;
|
|
102
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* The definitions, to turn the credential's permission keys into its
|
|
106
|
+
* delegation.
|
|
107
|
+
*/
|
|
103
108
|
readonly permissions: PermissionTree;
|
|
104
109
|
/**
|
|
105
|
-
* Loads the live owner of a user-bound key: roles and memberships as of
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
+
* Loads the live owner of a user-bound key: roles and memberships as of this
|
|
111
|
+
* request, asked with the key's tenant. `null` (a deleted or suspended user)
|
|
112
|
+
* is anonymous with `owner-unavailable`, and a throw is `source-threw`.
|
|
113
|
+
* Without it the owner is `{ id, kind: 'user' }` and its rights come from the
|
|
114
|
+
* `memberships` source passed to `createPermDock`.
|
|
110
115
|
*/
|
|
111
116
|
readonly principals?: PrincipalSource;
|
|
112
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* The tenant the request acts in: a user key is held to its owner's
|
|
119
|
+
* memberships there.
|
|
120
|
+
*/
|
|
113
121
|
readonly tenant?: string;
|
|
114
122
|
/** `true` when the application revoked the credential id; a throw denies. */
|
|
115
123
|
readonly revoked?: (id: string) => boolean | Promise<boolean>;
|
|
116
124
|
/**
|
|
117
|
-
* The tenant `credentials` policy, checked on every use so a tightened
|
|
118
|
-
*
|
|
119
|
-
*
|
|
125
|
+
* The tenant `credentials` policy, checked on every use so a tightened policy
|
|
126
|
+
* reaches existing keys: a service key's own tenant, a user key's the
|
|
127
|
+
* `tenant` the resolver is called with. A throw denies.
|
|
120
128
|
*/
|
|
121
129
|
readonly settings?: SettingsSource;
|
|
122
130
|
/** Receives a `credential` event with operation `used` for sampled uses. */
|
|
@@ -132,10 +140,10 @@ type ApiKeySubjectOptions = {
|
|
|
132
140
|
};
|
|
133
141
|
/**
|
|
134
142
|
* Resolves an opaque API key (`pdk_<id>_<secret>`) into the subject its
|
|
135
|
-
* credential acts as. Every failure (a malformed or unknown key, a record
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
143
|
+
* credential acts as. Every failure (a malformed or unknown key, a record that
|
|
144
|
+
* is not a valid credential, expiry, a tenant policy the key breaks, a revoked
|
|
145
|
+
* id, a missing owner, a throwing verifier, source or callback) is the
|
|
146
|
+
* anonymous subject, never a throw.
|
|
139
147
|
*/
|
|
140
148
|
declare function subjectFromApiKey(key: string | undefined | null, options: ApiKeySubjectOptions): Promise<Subject<ApiKeyPrincipal>>;
|
|
141
149
|
//#endregion
|
|
@@ -145,7 +153,7 @@ type SupportSessionFailureCause = TokenFailureCause | "invalid-claims" | "sessio
|
|
|
145
153
|
/** The live state of each support session, so one can end before it expires. */
|
|
146
154
|
type SupportSessionSource = {
|
|
147
155
|
/** The session as of now, or `null` for an unknown one. A throw ends it. */
|
|
148
|
-
session(id: string)
|
|
156
|
+
session: (id: string) => {
|
|
149
157
|
readonly id: string;
|
|
150
158
|
readonly ended?: boolean;
|
|
151
159
|
} | null | Promise<{
|
|
@@ -176,19 +184,19 @@ type SupportSessionContext = {
|
|
|
176
184
|
};
|
|
177
185
|
/**
|
|
178
186
|
* Signs a granted `SupportSession` as a `vnd.permdock.support-session+jwt`
|
|
179
|
-
* (`sub` the viewed principal, `act` the support actor, `jti` the session
|
|
180
|
-
*
|
|
187
|
+
* (`sub` the viewed principal, `act` the support actor, `jti` the session id)
|
|
188
|
+
* that expires with the session. Throws a `TypeError` for a record
|
|
181
189
|
* `parseSupportSession` refuses.
|
|
182
190
|
*/
|
|
183
191
|
declare function signSupportSession(session: SupportSession, signer: TokenSigner, options?: {
|
|
184
192
|
readonly audience?: string | readonly string[];
|
|
185
193
|
}): Promise<string>;
|
|
186
194
|
/**
|
|
187
|
-
* Resolves a `vnd.permdock.support-session+jwt` into the subject each
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
195
|
+
* Resolves a `vnd.permdock.support-session+jwt` into the subject each request
|
|
196
|
+
* of the session acts as: the viewed principal loaded live, a `support` actor,
|
|
197
|
+
* the session's permissions as the delegation and `context.supportSession`. The
|
|
198
|
+
* actor must still exist. Every failure is the anonymous subject, never a
|
|
199
|
+
* throw.
|
|
192
200
|
*/
|
|
193
201
|
declare function subjectFromSupportSession(token: string | undefined | null, options: SupportSessionSubjectOptions): Promise<Subject>;
|
|
194
202
|
//#endregion
|
|
@@ -196,15 +204,19 @@ declare function subjectFromSupportSession(token: string | undefined | null, opt
|
|
|
196
204
|
declare function wwwAuthenticate(decision: Decision, permission: Permission | undefined, credentials?: boolean): string | undefined;
|
|
197
205
|
declare function problemResponse(details: ProblemDetails, permission?: Permission, decision?: Decision, extra?: Readonly<Record<string, string>>, credentials?: boolean): Response;
|
|
198
206
|
declare function validationProblem(detail: string): Response;
|
|
199
|
-
|
|
207
|
+
type DecisionProblemOptions = {
|
|
200
208
|
readonly instance?: string;
|
|
201
209
|
readonly approval?: ApprovalHint;
|
|
202
210
|
/** `'hide'` on a loaded row: a denial answers as `404` `/not-found`. */
|
|
203
211
|
readonly disclosure?: Disclosure;
|
|
204
212
|
/** Whether the request carried credentials, which picks the `401` challenge. */
|
|
205
213
|
readonly credentials?: boolean;
|
|
206
|
-
/**
|
|
214
|
+
/**
|
|
215
|
+
* The scope an `insufficient_scope` challenge names; the permission's own
|
|
216
|
+
* scope when absent.
|
|
217
|
+
*/
|
|
207
218
|
readonly scope?: string;
|
|
208
|
-
}
|
|
219
|
+
};
|
|
220
|
+
declare function problemFromDecision(decision: Decision, permission: Permission, subject: Subject | undefined, options?: DecisionProblemOptions): Response;
|
|
209
221
|
//#endregion
|
|
210
222
|
export { subjectFromApiKey as C, createPermDock as E, parseFeedKey as S, problemFromError as T, generateApiKey as _, SupportSessionContext as a, memoryCredentialStore as b, SupportSessionSubjectOptions as c, ApiKeyFailureCause as d, ApiKeyParts as f, apiKeyVerifier as g, StoredCredential as h, wwwAuthenticate as i, signSupportSession as l, MemoryCredentialStore as m, problemResponse as n, SupportSessionFailureCause as o, ApiKeySubjectOptions as p, validationProblem as r, SupportSessionSource as s, problemFromDecision as t, subjectFromSupportSession as u, generateFeedKey as v, ProblemFromErrorOptions as w, parseApiKey as x, hashApiKey as y };
|