permdock 0.4.0 → 0.6.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 +37 -35
- package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
- package/dist/a2a/index.d.ts +6 -6
- package/dist/a2a/index.js +14 -17
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-DCYe60Pi.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -35
- package/dist/ai-sdk/index.js +37 -23
- package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-DvSSPQJX.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-p1PGoVjb.js +995 -0
- package/dist/arazzo-41WuzHou.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.js} +20 -14
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-DabClFLQ.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +94 -79
- package/dist/automation-BNM3TtDo.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +9 -8
- package/dist/better-supabase/index.d.ts +357 -30
- package/dist/better-supabase/index.js +936 -194
- package/dist/{bind-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
- package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/{build-instance-DIIV9DbC.js → build-instance-Bu_eDqYw.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-Drg-1YhL.d.ts} +44 -25
- package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/catalog-BoWglDPI.js +1 -0
- package/dist/catalog-DZVbrF-z.js +52 -0
- package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.js} +45 -23
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +24 -27
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +9 -14
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +19 -5
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +239 -340
- package/dist/cloud-ytQ3uviA.js +87 -0
- package/dist/codemod-5mpSpnUY.js +37 -0
- package/dist/codemod-ua2hHy7w.js +2084 -0
- package/dist/collect-Ci6akVwH.js +55 -0
- package/dist/collect-D7eQDffE.js +1 -0
- package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
- package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/completion-BTFrHZhX.js +143 -0
- package/dist/config-Bj2Ixq3d.js +26 -0
- package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- package/dist/create-B30OMUOJ.d.ts +107 -0
- package/dist/create-CBMmFie-.d.ts +138 -0
- package/dist/create-CGm28gyI.js +130 -0
- package/dist/create-CQWIpUG-.js +403 -0
- package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
- package/dist/create-D_NmPOdH.d.ts +110 -0
- package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-j6-rc37o.js +286 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/{denied-text-DfRk15uw.d.ts → denied-text-CiFQNuMV.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/{diff-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
- package/dist/diff-CmuSD3vc.js +37 -0
- package/dist/doctor-3ZqNHX_G.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.js} +245 -50
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +2 -2
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +13 -12
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
- package/dist/evaluate-CNClBvcj.js +1785 -0
- package/dist/evaluations-C_1vdSZc.d.ts +32 -0
- package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.js} +145 -34
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +22 -28
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +12 -11
- package/dist/fastify/index.d.ts +25 -22
- package/dist/fastify/index.js +13 -12
- package/dist/fetch-adapter-DD_gfmrC.js +120 -0
- package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
- package/dist/fields-OYG_JR78.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-CTCMsFZk.js} +55 -52
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.js} +5 -4
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-C9YmyBIa.js → helpers-CBYVMjwh.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-B46-5LYE.js +315 -0
- package/dist/hosted-BPk51-kX.d.ts +78 -0
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
- package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
- package/dist/{import-BFIlhetD.js → import-wyqXUyjm.js} +190 -53
- package/dist/index-B8YjkEZ4.d.ts +210 -0
- package/dist/index-C-6Letxg.d.ts +431 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
- package/dist/index-Cp_ilKi1.d.ts +91 -0
- package/dist/index-CueFnxQc.d.ts +110 -0
- package/dist/index-DuWxc5dt.d.ts +909 -0
- package/dist/index.d.ts +19 -15
- package/dist/index.js +31 -21
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-plkrsAog.d.ts → instance-options-BsVpyGIk.d.ts} +2 -2
- package/dist/instance-snapshot-BOEhcqIF.js +601 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +156 -135
- package/dist/{kernel-CB3LrIJM.js → kernel-D0NVb1cK.js} +52 -24
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +2 -2
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-dvL2XEe1.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
- package/dist/{map-error-BE27PYkE.js → map-error-Dr70oA_3.js} +3 -3
- package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
- package/dist/mcp/index.d.ts +22 -12
- package/dist/mcp/index.js +57 -39
- package/dist/{migrate-BwlB5-Wk.js → migrate-CIq4-E9F.js} +53 -14
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +15 -14
- package/dist/next/index.d.ts +18 -21
- package/dist/next/index.js +13 -11
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +17 -24
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
- package/dist/openapi-C4dDTVEd.js +138 -0
- package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-X0VM7F3m.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +20 -15
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +30 -7
- package/dist/output-1im__-08.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
- package/dist/{permission-keys-B26jeyUv.js → ownership-DqaJNJPn.js} +1045 -153
- package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
- package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
- package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
- package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +45 -26
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-BrAscV28.js +868 -0
- package/dist/permdock-SV8ZINYT.d.ts +502 -0
- package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-CCJ6lmxB.js → permissions-BPxlwVhN.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
- package/dist/policies-DP2nqRoF.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
- package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
- package/dist/postgrest-CEgRbefE.d.ts +100 -0
- package/dist/postgrest-DAjUkF9w.js +575 -0
- package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
- package/dist/powersync-DISt6SUe.js +62 -0
- package/dist/powersync-MMJ2mI2q.js +1 -0
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +2 -2
- package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
- package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-B45V5d2b.d.ts} +1 -1
- package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/{protected-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
- package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
- package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
- package/dist/pull-CvpINcMK.js +1 -0
- package/dist/pull-jEwbf80J.js +256 -0
- package/dist/push-BD4f15co.js +116 -0
- package/dist/pushed-policy-CqtxkV4G.js +238 -0
- package/dist/pushed-policy-DCW91KQU.d.ts +57 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -72
- package/dist/react-native/index.js +29 -25
- package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
- package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-COpmZUfx.d.ts → replay-Bkm-Ne4l.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.js} +3 -3
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
- package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BAqP4q66.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
- package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
- package/dist/run-CUKuz0A8.js +723 -0
- package/dist/run-DDwUaJDU.js +1 -0
- package/dist/run-ticket-DocwaTKn.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DtaA4JuW.js → saas-BCXRuXca.js} +16 -14
- package/dist/scan-qvOe0hS3.js +29 -0
- package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
- package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
- package/dist/server/index.d.ts +12 -143
- package/dist/server/index.js +12 -9
- package/dist/server-C3WXAHZj.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
- package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-4-eQIRWf.d.ts +225 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-B7DkYg6g.js +269 -0
- package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-PXI-vGpY.d.ts} +7 -5
- package/dist/solid/index.d.ts +11 -12
- package/dist/solid/index.js +7 -7
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-Dljy06zL.d.ts → sources-Xc4zkszI.d.ts} +7 -13
- package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
- package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
- package/dist/src-Cu2m75uo.js +1860 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
- package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
- package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
- package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.d.ts} +2 -2
- package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +7 -6
- package/dist/supabase/middleware.js +13 -11
- package/dist/supabase-By_frk3U.js +92 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
- package/dist/supabase-hook-CCw5m35C.js +1 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +4 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +10 -10
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +4 -4
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +23 -287
- package/dist/testing/index.d.ts +311 -38
- package/dist/testing/index.js +3475 -201
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
- package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +16 -14
- package/dist/types-8RnwUAvE.d.ts +107 -0
- package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
- package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
- package/dist/types-BtHtcKMr.d.ts +157 -0
- package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
- package/dist/types-C791HFu9.d.ts +332 -0
- package/dist/types-C863OQiR.d.ts +57 -0
- package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
- package/dist/types-C_IiEs64.d.ts +65 -0
- package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
- package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
- package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CRVl9V3t.js +32 -0
- package/dist/usage-CZpSQP6L.js +1 -0
- package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.d.ts} +1 -1
- package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
- package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
- package/dist/{verify-BztUB3GX.js → verify-BaAKx7t6.js} +645 -50
- package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
- package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-CN8H_9UF.d.ts} +67 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- package/dist/waiter-B986w1oK.d.ts +36 -0
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/watch--ovlPOc0.js +1 -0
- package/dist/{watch-zeucB7eF.js → watch-vea54PRw.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- package/dist/where-scope-C9vfEphl.js +306 -0
- package/dist/who-can-DWBAcaCQ.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/{wrap-Cr93qqdP.d.ts → wrap-C5jC6sKI.d.ts} +2 -1
- package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
- package/package.json +136 -37
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +123 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +10 -9
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
- package/skills/permdock-wire/SKILL.md +17 -11
- package/skills/permdock-wire/references/adapters.md +139 -51
- package/skills/permdock-wire/references/policy-options.md +5 -5
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DZL76lKW.js +0 -240
- package/dist/arazzo-CD8d0WLb.js +0 -54
- package/dist/catalog-6yWAX6Ps.js +0 -2
- package/dist/catalog-WHG4kBq7.js +0 -48
- package/dist/cloud-C7bSDgX4.js +0 -50
- package/dist/cloud-PeBN3IEn.js +0 -118
- package/dist/collect-Bw2Jdq1q.js +0 -2
- package/dist/collect-CQx4hX4N.js +0 -83
- package/dist/commands-Cpip4ULx.js +0 -97
- package/dist/config-DLt6BvV7.js +0 -36
- package/dist/diff-Cnghh_Ip.js +0 -48
- package/dist/doctor-CuVJvhV_.js +0 -53
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-fwfXN01n.js +0 -1016
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-DgM7w96K.d.ts +0 -6
- package/dist/index-Dz7didpC.d.ts +0 -201
- package/dist/index-UdVQgq48.d.ts +0 -550
- package/dist/load-B_shHrmd.js +0 -2
- package/dist/manifest-BngWKryL.js +0 -770
- package/dist/may-use-BOn_dR_w.js +0 -78
- package/dist/openapi-DcQ1Kg40.js +0 -164
- package/dist/ownership-BgnbOJFT.js +0 -851
- package/dist/permdock-L26udHSk.js +0 -3646
- package/dist/powersync-BFSbSElQ.js +0 -62
- package/dist/powersync-DCDgZgfZ.js +0 -2
- package/dist/rls-55DQTuf5.js +0 -250
- package/dist/run-DMcNW_8T.js +0 -174
- package/dist/server-ZYEHtNHS.js +0 -268
- package/dist/sink-BTtmfPnE.js +0 -141
- package/dist/sink-CPN4zLfs.d.ts +0 -104
- package/dist/skills-Dle4ZoLF.js +0 -56
- package/dist/snapshot-Dc9CHPME.js +0 -1078
- package/dist/src-Bb7no-hS.js +0 -639
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-Dbqr141s.js +0 -83
- package/dist/supabase-hook-BULg7Ut_.js +0 -2
- package/dist/thenable-QSmvt-vZ.js +0 -65
- package/dist/types-C0dee0Qf.d.ts +0 -197
- package/dist/types-DvupZE0w.d.ts +0 -9
- package/dist/usage-4G6t643F.js +0 -42
- package/dist/usage-iFLJ0-rr.js +0 -2
- package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
- package/dist/watch-C8TpsAl4.js +0 -2
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { t as byCodePoint } from "./compare-pfyVnBjE.js";
|
|
2
2
|
import { i as readJsonFile } from "./files-D_JIzUrP.js";
|
|
3
|
-
import { t as packageRoot } from "./package-root-
|
|
3
|
+
import { t as packageRoot } from "./package-root-Dk_ETdkp.js";
|
|
4
|
+
import { t as didYouMean } from "./args-IIolxxKA.js";
|
|
4
5
|
import { cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, readlinkSync, realpathSync, writeFileSync } from "node:fs";
|
|
5
6
|
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
6
7
|
import { createRequire } from "node:module";
|
|
@@ -20,13 +21,22 @@ const AGENT_FOLDERS = {
|
|
|
20
21
|
claude: ".claude/skills",
|
|
21
22
|
cursor: ".cursor/skills"
|
|
22
23
|
};
|
|
23
|
-
/** The `--
|
|
24
|
+
/** The `--for` names `skills install` knows, with the folder each writes. */
|
|
24
25
|
const SKILL_AGENTS = AGENT_FOLDERS;
|
|
25
26
|
/** Agents whose config folder (`.claude`, `.cursor`, `.agents`) the project already has. */
|
|
26
27
|
function detectedAgents(cwd) {
|
|
27
28
|
return Object.entries(AGENT_FOLDERS).filter(([, folder]) => existsSync(join(cwd, dirname(folder)))).map(([agent]) => agent);
|
|
28
29
|
}
|
|
29
30
|
function runSkills(input) {
|
|
31
|
+
const names = /* @__PURE__ */ new Set([...Object.keys(AGENT_FOLDERS), "agent"]);
|
|
32
|
+
const unknown = input.agents.find((agent) => !names.has(agent));
|
|
33
|
+
if (unknown !== void 0) {
|
|
34
|
+
const suggestion = didYouMean(unknown, Object.keys(AGENT_FOLDERS));
|
|
35
|
+
return {
|
|
36
|
+
code: 2,
|
|
37
|
+
output: `skills: unknown --for '${unknown}'.${suggestion === void 0 ? "" : ` Did you mean ${suggestion}?`} Use ${Object.keys(AGENT_FOLDERS).join(", ")}.`
|
|
38
|
+
};
|
|
39
|
+
}
|
|
30
40
|
switch (input.action) {
|
|
31
41
|
case void 0:
|
|
32
42
|
case "install":
|
|
@@ -169,10 +179,7 @@ function listSkills(cwd) {
|
|
|
169
179
|
}
|
|
170
180
|
function resolveTargets(agents) {
|
|
171
181
|
if (agents.length === 0) return Object.values(AGENT_FOLDERS);
|
|
172
|
-
return agents.map((agent) =>
|
|
173
|
-
const key = agent === "agent" ? "agents" : agent;
|
|
174
|
-
return AGENT_FOLDERS[key] ?? `.${key}/skills`;
|
|
175
|
-
});
|
|
182
|
+
return agents.map((agent) => AGENT_FOLDERS[agent === "agent" ? "agents" : agent] ?? ".agents/skills");
|
|
176
183
|
}
|
|
177
184
|
function resolveSkillsRoot(cwd, bundled) {
|
|
178
185
|
try {
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { t as defineLeaf } from "./command-L8EstFNm.js";
|
|
2
|
+
import { t as checkFlag } from "./flags-C3DktBDY.js";
|
|
3
|
+
import { r as pick, t as CANCELLED } from "./prompt-DfZLJLIn.js";
|
|
4
|
+
import { n as detectedAgents, r as runSkills, t as SKILL_AGENTS } from "./skills-B6lVdD_W.js";
|
|
5
|
+
//#region src/cli/commands/skills.ts
|
|
6
|
+
const forFlag = { for: {
|
|
7
|
+
type: "string",
|
|
8
|
+
repeatable: true,
|
|
9
|
+
description: "Agent folders to write: agents, claude or cursor",
|
|
10
|
+
valueHint: "name",
|
|
11
|
+
complete: () => Object.keys(SKILL_AGENTS)
|
|
12
|
+
} };
|
|
13
|
+
async function installTo(ctx, action, clients, check) {
|
|
14
|
+
let agents = clients;
|
|
15
|
+
if (ctx.interactive && !ctx.yes && !check && agents.length === 0) {
|
|
16
|
+
const detected = detectedAgents(ctx.cwd);
|
|
17
|
+
const picked = await pick("Which agents should get the PermDock skills?", Object.entries(SKILL_AGENTS).map(([value, hint]) => ({
|
|
18
|
+
value,
|
|
19
|
+
hint
|
|
20
|
+
})), detected.length > 0 ? detected : Object.keys(SKILL_AGENTS));
|
|
21
|
+
if (picked === void 0) return CANCELLED;
|
|
22
|
+
agents = picked;
|
|
23
|
+
}
|
|
24
|
+
return runSkills({
|
|
25
|
+
cwd: ctx.cwd,
|
|
26
|
+
action,
|
|
27
|
+
agents,
|
|
28
|
+
check
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const install = defineLeaf({
|
|
32
|
+
flags: {
|
|
33
|
+
...forFlag,
|
|
34
|
+
...checkFlag
|
|
35
|
+
},
|
|
36
|
+
run: (ctx, { flags }) => installTo(ctx, "install", flags.for, flags.check)
|
|
37
|
+
});
|
|
38
|
+
const update = defineLeaf({
|
|
39
|
+
flags: { ...forFlag },
|
|
40
|
+
run: (ctx, { flags }) => installTo(ctx, "update", flags.for, false)
|
|
41
|
+
});
|
|
42
|
+
const list = defineLeaf({
|
|
43
|
+
flags: {},
|
|
44
|
+
run: (ctx) => runSkills({
|
|
45
|
+
cwd: ctx.cwd,
|
|
46
|
+
action: "list",
|
|
47
|
+
agents: []
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
//#endregion
|
|
51
|
+
export { install, list, update };
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
+
import { n as isForbiddenKey } from "./paths-DXSHAMIa.js";
|
|
4
|
+
import { c as isConditionRef, i as resolveConditionRef } from "./refs-K6eWUJ0H.js";
|
|
5
|
+
import { l as isRfc3339, m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
6
|
+
import { d as scopeList } from "./scopes-CUPSjo9q.js";
|
|
7
|
+
import { _ as listPlans, v as listRoles } from "./grantee-hxrUsbpM.js";
|
|
8
|
+
import { i as wireValidity } from "./validity-CZ7-y0Cj.js";
|
|
9
|
+
import { m as tenantsOf } from "./tenancy-DN2QAx9z.js";
|
|
10
|
+
import { n as toWireDelegation } from "./wire-delegation-Cv3W2eaM.js";
|
|
11
|
+
//#region src/conditions/bind.ts
|
|
12
|
+
function isPrimitive(value) {
|
|
13
|
+
return typeof value === "string" || typeof value === "number" || typeof value === "boolean";
|
|
14
|
+
}
|
|
15
|
+
const ALWAYS = {
|
|
16
|
+
op: "eq",
|
|
17
|
+
field: "_",
|
|
18
|
+
value: true
|
|
19
|
+
};
|
|
20
|
+
const NEVER = {
|
|
21
|
+
op: "or",
|
|
22
|
+
conditions: []
|
|
23
|
+
};
|
|
24
|
+
function bindValue(value, subject, only) {
|
|
25
|
+
if (isConditionRef(value) && only !== void 0 && !only(value.ref)) return value;
|
|
26
|
+
if (isConditionRef(value)) {
|
|
27
|
+
const resolved = resolveConditionRef(value.ref, subject);
|
|
28
|
+
if (Array.isArray(resolved)) return resolved.filter((item) => isPrimitive(item));
|
|
29
|
+
return isPrimitive(resolved) ? resolved : null;
|
|
30
|
+
}
|
|
31
|
+
if (Array.isArray(value)) return value.map((item) => bindValue(item, subject, only));
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
function bindArg(arg, subject, only) {
|
|
35
|
+
return arg !== null && typeof arg === "object" && "field" in arg && !isConditionRef(arg) ? arg : bindValue(arg, subject, only);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Replaces every `principal.*` / `context.*` ref with the subject's value, and
|
|
39
|
+
* a `liveSession` node with a constant, so a `where()` result compiles the
|
|
40
|
+
* same without the subject. A ref the subject
|
|
41
|
+
* does not hold binds to `null` (or `[]` in a list), which never matches, as
|
|
42
|
+
* in `evaluateCondition`. With `only`, refs it rejects stay refs.
|
|
43
|
+
*/
|
|
44
|
+
function bindConditionRefs(condition, subject, only) {
|
|
45
|
+
switch (condition.op) {
|
|
46
|
+
case "and":
|
|
47
|
+
case "or": return {
|
|
48
|
+
op: condition.op,
|
|
49
|
+
conditions: condition.conditions.map((child) => bindConditionRefs(child, subject, only))
|
|
50
|
+
};
|
|
51
|
+
case "not": return {
|
|
52
|
+
op: "not",
|
|
53
|
+
condition: bindConditionRefs(condition.condition, subject, only)
|
|
54
|
+
};
|
|
55
|
+
case "in":
|
|
56
|
+
case "notIn": {
|
|
57
|
+
const value = condition.value;
|
|
58
|
+
if (isConditionRef(value) && only !== void 0 && !only(value.ref)) return condition;
|
|
59
|
+
const bound = bindValue(value, subject, only);
|
|
60
|
+
return {
|
|
61
|
+
...condition,
|
|
62
|
+
value: Array.isArray(bound) ? bound : []
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
case "eq":
|
|
66
|
+
case "ne":
|
|
67
|
+
case "gt":
|
|
68
|
+
case "gte":
|
|
69
|
+
case "lt":
|
|
70
|
+
case "lte":
|
|
71
|
+
case "contains": return {
|
|
72
|
+
...condition,
|
|
73
|
+
value: bindValue(condition.value, subject, only)
|
|
74
|
+
};
|
|
75
|
+
case "sqlFunction": return {
|
|
76
|
+
...condition,
|
|
77
|
+
args: condition.args.map((arg) => bindArg(arg, subject, only)),
|
|
78
|
+
twin: bindConditionRefs(condition.twin, subject, only)
|
|
79
|
+
};
|
|
80
|
+
case "liveSession": return subject.liveSession === true ? ALWAYS : NEVER;
|
|
81
|
+
case "isNull":
|
|
82
|
+
case "memberOf":
|
|
83
|
+
case "related":
|
|
84
|
+
case "opaque": return condition;
|
|
85
|
+
default: return condition;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
//#region src/core/snapshot.ts
|
|
90
|
+
function plainPermission(leaf) {
|
|
91
|
+
return {
|
|
92
|
+
key: leaf.key,
|
|
93
|
+
scope: leaf.scope,
|
|
94
|
+
resource: leaf.resource,
|
|
95
|
+
action: leaf.action,
|
|
96
|
+
meta: leaf.meta,
|
|
97
|
+
kind: leaf.kind
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function plainRole(leaf) {
|
|
101
|
+
return compact({
|
|
102
|
+
key: leaf.key,
|
|
103
|
+
on: leaf.on,
|
|
104
|
+
assignable: leaf.assignable,
|
|
105
|
+
meta: leaf.meta,
|
|
106
|
+
kind: leaf.kind
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function plainPlan(leaf) {
|
|
110
|
+
return {
|
|
111
|
+
key: leaf.key,
|
|
112
|
+
meta: leaf.meta,
|
|
113
|
+
kind: leaf.kind
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function snapshotGrant(grant, membership) {
|
|
117
|
+
const scope = grant.scope === "global" ? void 0 : typeof grant.scope === "string" ? grant.scope : { resource: grant.scope.resource };
|
|
118
|
+
const entry = compact({
|
|
119
|
+
permission: grant.permission.key,
|
|
120
|
+
effect: grant.effect,
|
|
121
|
+
role: grant.role,
|
|
122
|
+
to: grant.to,
|
|
123
|
+
where: grant.portable ? grant.where : void 0,
|
|
124
|
+
check: grant.portable ? grant.check : void 0,
|
|
125
|
+
approval: grant.approval,
|
|
126
|
+
scope,
|
|
127
|
+
membership,
|
|
128
|
+
portable: grant.portable ? void 0 : false,
|
|
129
|
+
fields: grant.fields,
|
|
130
|
+
validity: wireValidity(grant.validity),
|
|
131
|
+
name: grant.name,
|
|
132
|
+
meta: grant.meta,
|
|
133
|
+
obligations: grant.obligations
|
|
134
|
+
});
|
|
135
|
+
return freezeDeep(entry);
|
|
136
|
+
}
|
|
137
|
+
const CARRIED = /* @__PURE__ */ new Set([
|
|
138
|
+
"id",
|
|
139
|
+
"roles",
|
|
140
|
+
"plans",
|
|
141
|
+
"tenant",
|
|
142
|
+
"memberships"
|
|
143
|
+
]);
|
|
144
|
+
/** Principal refs the snapshot principal does not carry (`claims`, `teamIds`, …) are bound to the subject's values. */
|
|
145
|
+
function isClaimRef(ref) {
|
|
146
|
+
const [root, head] = ref.split(".", 2);
|
|
147
|
+
return root === "principal" && !CARRIED.has(String(head));
|
|
148
|
+
}
|
|
149
|
+
function bindClaims(grant, subject) {
|
|
150
|
+
if (grant.where === void 0 && grant.check === void 0) return grant;
|
|
151
|
+
return freezeDeep(compact({
|
|
152
|
+
...grant,
|
|
153
|
+
where: grant.where === void 0 ? void 0 : bindConditionRefs(grant.where, subject, isClaimRef),
|
|
154
|
+
check: grant.check === void 0 ? void 0 : bindConditionRefs(grant.check, subject, isClaimRef)
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
function notEntitledOf(items) {
|
|
158
|
+
const seen = /* @__PURE__ */ new Map();
|
|
159
|
+
for (const { grant } of items) {
|
|
160
|
+
const key = `${grant.permission.key}\u0000${grant.role ?? ""}`;
|
|
161
|
+
if (!seen.has(key)) seen.set(key, {
|
|
162
|
+
permission: grant.permission.key,
|
|
163
|
+
role: grant.role,
|
|
164
|
+
to: grant.to
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return seen.size === 0 ? void 0 : [...seen.values()];
|
|
168
|
+
}
|
|
169
|
+
function buildSnapshot(input) {
|
|
170
|
+
const now = input.now ?? nowSeconds();
|
|
171
|
+
const principal = input.subject.principal;
|
|
172
|
+
const allTenants = tenantsOf(principal, scopeList(input.scopes));
|
|
173
|
+
const tenants = input.tenants === "all" ? allTenants : principal?.tenant === void 0 ? [] : [principal.tenant];
|
|
174
|
+
const include = input.include;
|
|
175
|
+
const included = (permission) => include === void 0 || include.length === 0 || include.some((prefix) => permission.key === prefix || permission.key.startsWith(`${prefix}.`) || permission.resource === prefix);
|
|
176
|
+
const grants = input.grants.filter((item) => included(item.grant.permission)).map((item) => bindClaims(snapshotGrant(item.grant, item.membership), input.subject));
|
|
177
|
+
const ids = {};
|
|
178
|
+
for (const item of input.grants) {
|
|
179
|
+
const name = item.grant.permission.resource;
|
|
180
|
+
const field = input.idOf?.(name);
|
|
181
|
+
if (field !== void 0 && field !== "id" && included(item.grant.permission)) ids[name] = field;
|
|
182
|
+
}
|
|
183
|
+
const assignableFor = input.assignable;
|
|
184
|
+
const assignable = assignableFor === void 0 ? [] : tenants.map((tenant) => {
|
|
185
|
+
const entry = assignableFor(tenant);
|
|
186
|
+
const permissions = entry.permissions.filter(included).map(plainPermission);
|
|
187
|
+
if (entry.levels === void 0) return {
|
|
188
|
+
...entry,
|
|
189
|
+
permissions
|
|
190
|
+
};
|
|
191
|
+
const keys = new Set(permissions.map((leaf) => leaf.key));
|
|
192
|
+
const levels = Object.fromEntries(Object.entries(entry.levels).filter(([key]) => keys.has(key)));
|
|
193
|
+
return compact({
|
|
194
|
+
...entry,
|
|
195
|
+
permissions,
|
|
196
|
+
levels: Object.keys(levels).length === 0 ? void 0 : levels
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
return freezeDeep(compact({
|
|
200
|
+
v: 1,
|
|
201
|
+
issuedAt: rfc3339(now),
|
|
202
|
+
subject: compact({
|
|
203
|
+
principal: principal === null ? null : compact({
|
|
204
|
+
id: principal.id,
|
|
205
|
+
roles: principal.roles ?? [],
|
|
206
|
+
plans: principal.plans,
|
|
207
|
+
tenant: principal.tenant,
|
|
208
|
+
memberships: principal.memberships
|
|
209
|
+
}),
|
|
210
|
+
delegation: toWireDelegation(snapshotDelegation(input.subject, input.delegated !== void 0)),
|
|
211
|
+
context: input.subject.context
|
|
212
|
+
}),
|
|
213
|
+
roles: input.roles,
|
|
214
|
+
audiences: input.audiences,
|
|
215
|
+
grants,
|
|
216
|
+
tenants,
|
|
217
|
+
include,
|
|
218
|
+
simulated: input.simulated === true ? true : void 0,
|
|
219
|
+
expiresAt: input.subject.expiresAt === void 0 ? void 0 : rfc3339(input.subject.expiresAt),
|
|
220
|
+
scopes: input.scopes,
|
|
221
|
+
ids: Object.keys(ids).length === 0 ? void 0 : ids,
|
|
222
|
+
assignable: assignable.length > 0 ? assignable : void 0,
|
|
223
|
+
delegated: input.delegated === void 0 ? void 0 : [...input.delegated].toSorted(),
|
|
224
|
+
notEntitled: notEntitledOf((input.notEntitled ?? []).filter((item) => included(item.grant.permission))),
|
|
225
|
+
vocabulary: input.vocabulary === void 0 ? void 0 : compact({
|
|
226
|
+
roles: listRoles(input.vocabulary.roles).length === 0 ? void 0 : Object.fromEntries(listRoles(input.vocabulary.roles).map((leaf) => [leaf.key, plainRole(leaf)])),
|
|
227
|
+
plans: listPlans(input.vocabulary.plans).length === 0 ? void 0 : Object.fromEntries(listPlans(input.vocabulary.plans).map((leaf) => [leaf.key, plainPlan(leaf)]))
|
|
228
|
+
})
|
|
229
|
+
}));
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* The token delegation as the client sees it. An actor with no token
|
|
233
|
+
* delegation gets an empty `scopes` list so the client ceiling agrees with
|
|
234
|
+
* `no-delegation`, unless a policy delegation applies (`delegated`), which
|
|
235
|
+
* then is the ceiling.
|
|
236
|
+
*/
|
|
237
|
+
function snapshotDelegation(subject, delegated) {
|
|
238
|
+
const delegation = subject.delegation;
|
|
239
|
+
if (subject.actor === void 0 || delegated) return delegation;
|
|
240
|
+
if (delegation?.scopes === void 0 && delegation?.authorizationDetails === void 0 && delegation?.access === void 0) return {
|
|
241
|
+
...delegation,
|
|
242
|
+
scopes: []
|
|
243
|
+
};
|
|
244
|
+
return delegation;
|
|
245
|
+
}
|
|
246
|
+
function rejectUnsafe(value, path) {
|
|
247
|
+
if (value === null || typeof value !== "object") return;
|
|
248
|
+
if (Array.isArray(value)) {
|
|
249
|
+
for (const [index, item] of value.entries()) rejectUnsafe(item, `${path}[${index}]`);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
for (const key of Object.keys(value)) {
|
|
253
|
+
if (isForbiddenKey(key)) throw new Error(`PermDock: unsafe snapshot key '${key}' at ${path}`);
|
|
254
|
+
rejectUnsafe(value[key], `${path}.${key}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function parseSnapshot(json) {
|
|
258
|
+
const input = typeof json === "string" ? JSON.parse(json) : json;
|
|
259
|
+
if (input === null || typeof input !== "object" || Array.isArray(input)) throw new Error("PermDock: snapshot must be an object");
|
|
260
|
+
const value = typeof json === "string" || Object.isFrozen(input) ? input : JSON.parse(JSON.stringify(input));
|
|
261
|
+
rejectUnsafe(value, "$");
|
|
262
|
+
const record = value;
|
|
263
|
+
const version = record["v"];
|
|
264
|
+
if (version !== 1) throw new Error(`PermDock: unsupported snapshot version '${String(version)}'`);
|
|
265
|
+
if (!isRfc3339(record["issuedAt"]) || record["expiresAt"] !== void 0 && !isRfc3339(record["expiresAt"])) throw new Error("PermDock: snapshot times must be RFC 3339");
|
|
266
|
+
return freezeDeep(value);
|
|
267
|
+
}
|
|
268
|
+
//#endregion
|
|
269
|
+
export { bindConditionRefs as i, parseSnapshot as n, snapshotGrant as r, buildSnapshot as t };
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { g as secondsOf, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
2
|
+
import { n as payloadDigest } from "./token-BLZcjQgt.js";
|
|
2
3
|
//#region src/core/snapshot-cache.ts
|
|
4
|
+
/** Seconds since the epoch of a NumericDate or an RFC 3339 instant. */
|
|
5
|
+
function epochSeconds(value) {
|
|
6
|
+
return typeof value === "number" ? value : secondsOf(value);
|
|
7
|
+
}
|
|
3
8
|
/**
|
|
4
9
|
* `{ stale }` in seconds: `max` when the value never expires, otherwise the seconds left, clamped
|
|
5
10
|
* to `[min, max]`. A value with less than `min` seconds left gets its real remainder, so Next.js
|
|
@@ -8,10 +13,11 @@ import { n as payloadDigest } from "./token-Bx9qy30p.js";
|
|
|
8
13
|
function cacheLifeFor(value, options = {}) {
|
|
9
14
|
const min = options.min ?? 30;
|
|
10
15
|
const max = Math.max(options.max ?? 300, min);
|
|
11
|
-
const expiresAt = value?.expiresAt;
|
|
12
|
-
if (expiresAt === void 0
|
|
13
|
-
const
|
|
14
|
-
const
|
|
16
|
+
const expiresAt = epochSeconds(value?.expiresAt);
|
|
17
|
+
if (expiresAt === void 0) return { stale: max };
|
|
18
|
+
const issued = epochSeconds(value?.issuedAt);
|
|
19
|
+
const issuedAt = issued !== void 0 && issued > 0 ? issued : void 0;
|
|
20
|
+
const now = options.now === void 0 ? issuedAt ?? nowSeconds() : nowSeconds(options.now);
|
|
15
21
|
const remaining = Math.floor(expiresAt - now);
|
|
16
22
|
if (remaining < min) return { stale: Math.max(0, remaining) };
|
|
17
23
|
return { stale: Math.min(max, remaining) };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Rt as Instant, Vt as Snapshot } from "./policy-types-n0uRTsW8.js";
|
|
2
2
|
//#region src/core/snapshot-cache.d.ts
|
|
3
3
|
type CacheLifeForOptions = {
|
|
4
4
|
/** Lower bound in seconds. Next.js includes a private entry in per-link prefetches from 30. */
|
|
5
5
|
readonly min?: number;
|
|
6
6
|
/** Upper bound in seconds. Next.js keeps a per-session App Shell entry from 300. */
|
|
7
7
|
readonly max?: number;
|
|
8
|
-
/**
|
|
9
|
-
readonly now?:
|
|
8
|
+
/** Defaults to the snapshot's `issuedAt`, then the clock. */
|
|
9
|
+
readonly now?: Instant;
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
12
|
* `{ stale }` in seconds: `max` when the value never expires, otherwise the seconds left, clamped
|
|
@@ -14,8 +14,10 @@ type CacheLifeForOptions = {
|
|
|
14
14
|
* leaves it out of prefetches and an HTTP cache does not serve it past `expiresAt`.
|
|
15
15
|
*/
|
|
16
16
|
declare function cacheLifeFor(value: {
|
|
17
|
-
|
|
18
|
-
readonly
|
|
17
|
+
/** RFC 3339, or a NumericDate. */
|
|
18
|
+
readonly expiresAt?: number | string | null;
|
|
19
|
+
/** RFC 3339, or a NumericDate. */
|
|
20
|
+
readonly issuedAt?: number | string;
|
|
19
21
|
} | null, options?: CacheLifeForOptions): {
|
|
20
22
|
readonly stale: number;
|
|
21
23
|
};
|
package/dist/solid/index.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { i as describe, r as DescribeOptions, t as DecisionDescription } from "../describe-C3ldA9os.js";
|
|
1
|
+
import { Mn as ApprovalRequiredDecision, Nn as Decision, Vt as Snapshot, dt as TokenVerifier, nr as Membership, zn as GrantedDecision } from "../policy-types-n0uRTsW8.js";
|
|
2
|
+
import { r as Role, w as Permission } from "../vocabulary-CN8H_9UF.js";
|
|
3
|
+
import { n as requiredPlans } from "../problem-details-B45V5d2b.js";
|
|
4
|
+
import { i as describe, r as DescribeOptions, t as DecisionDescription } from "../describe-B5qgDvEW.js";
|
|
6
5
|
import { t as PermissionBoundaryState } from "../boundary-BmHxVH1J.js";
|
|
7
|
-
import { t as approvalHeaders } from "../headers-
|
|
8
|
-
import { a as
|
|
6
|
+
import { t as approvalHeaders } from "../headers-CIbDTUTK.js";
|
|
7
|
+
import { a as FilterResult, c as PermissionSet, d as RolesOptions, f as SubjectView, i as ClientStatus, l as PermissionState, n as ApprovalState, p as TenantView, r as ClientPermDock, t as ApprovalHandle, u as ProviderOptionsBase } from "../types-B3_ooZgZ.js";
|
|
9
8
|
import { Accessor, Accessor as Accessor$1, JSX } from "solid-js";
|
|
10
9
|
//#region src/solid/types.d.ts
|
|
11
10
|
/** Structural `JSX.Element`: text, a DOM node or a list of children. */
|
|
@@ -31,7 +30,7 @@ type PermDockProviderProps = ProviderOptionsBase & {
|
|
|
31
30
|
/** Provider-wide content for the `<Protected>` slots a component leaves out. */
|
|
32
31
|
type PermDockDefaults = {
|
|
33
32
|
readonly pending?: SolidChild;
|
|
34
|
-
readonly
|
|
33
|
+
readonly denied?: SolidChild | ((decision: Decision) => SolidChild);
|
|
35
34
|
readonly approval?: SolidChild | ((decision: ApprovalRequiredDecision) => SolidChild);
|
|
36
35
|
};
|
|
37
36
|
type PermissionBoundaryProps = {
|
|
@@ -46,8 +45,8 @@ type ProtectedProps = {
|
|
|
46
45
|
readonly data?: unknown;
|
|
47
46
|
readonly tenant?: string;
|
|
48
47
|
readonly pending?: SolidChild;
|
|
49
|
-
readonly
|
|
50
|
-
/** Rendered for an approval-required decision; defaults to `
|
|
48
|
+
readonly denied?: SolidChild | ((decision: Decision) => SolidChild);
|
|
49
|
+
/** Rendered for an approval-required decision; defaults to `denied`. */
|
|
51
50
|
readonly approval?: SolidChild | ((decision: ApprovalRequiredDecision) => SolidChild);
|
|
52
51
|
readonly children: SolidChild | ((decision: GrantedDecision) => SolidChild);
|
|
53
52
|
};
|
|
@@ -59,7 +58,7 @@ export declare function usePermissions(permissions: Accessor<readonly Permission
|
|
|
59
58
|
export declare function useFilter<T>(permission: Permission<string, T, "instance">, rows: Accessor<readonly T[]>): Accessor<FilterResult<T>>;
|
|
60
59
|
export declare function useTenant(): Accessor<TenantView>;
|
|
61
60
|
export declare function useMemberships(): Accessor<readonly Membership[]>;
|
|
62
|
-
export declare function useRoles(options?: Accessor<
|
|
61
|
+
export declare function useRoles(options?: Accessor<RolesOptions>): Accessor<{
|
|
63
62
|
readonly roles: readonly Role[];
|
|
64
63
|
}>;
|
|
65
64
|
export declare function useAssignableRoles(): Accessor<readonly Role[]>;
|
|
@@ -90,4 +89,4 @@ export declare function Protected(props: ProtectedProps): JSX.Element;
|
|
|
90
89
|
//#region src/solid/provider.d.ts
|
|
91
90
|
export declare function PermDockProvider(props: PermDockProviderProps): JSX.Element;
|
|
92
91
|
//#endregion
|
|
93
|
-
export { type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type PermDockDefaults, type PermDockProviderProps, type PermissionBoundaryProps, type PermissionBoundaryState, type PermissionSet, type PermissionState, type ProtectedProps, type
|
|
92
|
+
export { type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type PermDockDefaults, type PermDockProviderProps, type PermissionBoundaryProps, type PermissionBoundaryState, type PermissionSet, type PermissionState, type ProtectedProps, type RolesOptions, type SolidChild, type SubjectView, type TenantView, approvalHeaders, describe, requiredPlans };
|
package/dist/solid/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import { r as requiredPlans } from "../problem-details-
|
|
3
|
-
import { t as describe } from "../describe-
|
|
4
|
-
import { t as approvalHeaders } from "../headers-BZSDieNT.js";
|
|
5
|
-
import { i as isPromiseLike } from "../store-options-CbUHDoSe.js";
|
|
6
|
-
import { a as permissionSet, c as scopedTenant, d as tenantView, i as livePermDock, l as slotContent, n as describeWith, o as protectedView, r as filterResult, s as rolesView, t as approvalHandle, u as subjectView } from "../views-CJsrBS1f.js";
|
|
2
|
+
import { r as requiredPlans } from "../problem-details-cn5X30gZ.js";
|
|
3
|
+
import { t as describe } from "../describe-BybMRY7A.js";
|
|
7
4
|
import { n as boundaryFallback, t as boundaryDigest } from "../boundary-BM8a_P6E.js";
|
|
8
|
-
import {
|
|
5
|
+
import { t as approvalHeaders } from "../headers-BIjfMaoC.js";
|
|
6
|
+
import { i as isPromiseLike } from "../store-options-u0ycEe8s.js";
|
|
7
|
+
import { n as switchTenant, t as providerStore } from "../provider-store-DM6DNcta.js";
|
|
8
|
+
import { a as livePermDock, c as rolesView, d as subjectView, f as tenantView, l as scopedTenant, n as describeWith, o as permissionSet, r as filterResult, s as protectedView, t as approvalHandle, u as slotContent } from "../views-DTIIO-oQ.js";
|
|
9
9
|
import { ErrorBoundary, createComponent, createComputed, createContext, createMemo, createSignal, getOwner, on, onCleanup, useContext } from "solid-js";
|
|
10
10
|
//#region src/solid/context.ts
|
|
11
11
|
const PermDockContext = createContext(void 0);
|
|
@@ -138,7 +138,7 @@ function Protected(props) {
|
|
|
138
138
|
const current = view();
|
|
139
139
|
switch (current.slot) {
|
|
140
140
|
case "pending": return slotContent("pending", props, ui.defaults) ?? null;
|
|
141
|
-
case "
|
|
141
|
+
case "denied": return content(slotContent("denied", props, ui.defaults), current.decision);
|
|
142
142
|
case "approval": return content(slotContent("approval", props, ui.defaults), current.decision);
|
|
143
143
|
case "default": return typeof props.children === "function" ? props.children(current.decision) : props.children;
|
|
144
144
|
default: return current;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { T as Policy, Vt as Snapshot, j as PolicyVocabulary, rr as Principal } from "../policy-types-n0uRTsW8.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-CN8H_9UF.js";
|
|
3
|
+
import { a as OperationInput, t as Operation } from "../operations-X0VM7F3m.js";
|
|
4
|
+
import { r as PermDock } from "../permdock-SV8ZINYT.js";
|
|
5
|
+
import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-CKQiCnON.js";
|
|
6
|
+
import { a as ProtectTarget, n as FetchAdapterOptions, t as ContextReader } from "../fetch-adapter-Dw0MTS3D.js";
|
|
7
|
+
import { APIEvent, FetchEvent } from "@solidjs/start/server";
|
|
8
|
+
//#region src/solid-start/create.d.ts
|
|
9
|
+
/** The h3 event under every SolidStart request; `subject` and `scope` read it. */
|
|
10
|
+
type SolidStartNativeEvent = FetchEvent["nativeEvent"];
|
|
11
|
+
/** An h3 middleware for `createMiddleware([...])` in `src/middleware.ts`. */
|
|
12
|
+
type SolidStartMiddleware = (event: SolidStartNativeEvent, next: () => unknown) => Promise<unknown>;
|
|
13
|
+
type SolidStartPermDockOptions<TUser = unknown> = FetchAdapterOptions<SolidStartNativeEvent, TUser>;
|
|
14
|
+
/** What the adapter sets on `event.locals`. */
|
|
15
|
+
type SolidStartPermDockLocals<TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
16
|
+
readonly permdock: PermDock<V>;
|
|
17
|
+
readonly permdockData: TData;
|
|
18
|
+
};
|
|
19
|
+
/** The event a wrapped API route receives: its own `APIEvent` with typed `locals`. */
|
|
20
|
+
type SolidStartPermDockEvent<TEvent extends FetchEvent = APIEvent, TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = TEvent & {
|
|
21
|
+
readonly locals: SolidStartPermDockLocals<TData, V>;
|
|
22
|
+
};
|
|
23
|
+
/** Wraps an API route handler. */
|
|
24
|
+
type SolidStartGuarded<TData, V extends PolicyVocabulary = PolicyVocabulary> = <TEvent extends FetchEvent = APIEvent, R = Response>(handler: (event: SolidStartPermDockEvent<TEvent, TData, V>) => R | Promise<R>) => (event: TEvent) => Promise<R | Response>;
|
|
25
|
+
type SolidStartProtect<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
26
|
+
<T = unknown>(permission: Permission | null, data?: ContextReader<APIEvent, T | null | undefined>, protectOptions?: ProtectOptions): SolidStartGuarded<NonNullable<T>, V>;
|
|
27
|
+
<TOperation extends Operation>(operation: TOperation, input?: ContextReader<APIEvent, OperationInput<TOperation>>, protectOptions?: ProtectOptions): SolidStartGuarded<unknown, V>;
|
|
28
|
+
};
|
|
29
|
+
/** The decision endpoint, one API route handler per method. */
|
|
30
|
+
type SolidStartPermDockHandlers = {
|
|
31
|
+
readonly GET: (event: FetchEvent) => Promise<Response>;
|
|
32
|
+
readonly POST: (event: FetchEvent) => Promise<Response>;
|
|
33
|
+
};
|
|
34
|
+
type SolidStartPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
35
|
+
/** Sets `event.context.permdock` on the h3 event; a bad Web Bot Auth signature is a `401`. */
|
|
36
|
+
readonly middleware: () => SolidStartMiddleware;
|
|
37
|
+
/** `export const DELETE = protect(permissions.post.delete, loadPost)(handler)`. */
|
|
38
|
+
readonly protect: SolidStartProtect<V>;
|
|
39
|
+
/** Types `event.locals.permdock` for an API route and answers a thrown PermDock error with Problem Details. */
|
|
40
|
+
readonly withPermDock: SolidStartGuarded<unknown, V>;
|
|
41
|
+
/** The instance for an API route, or a server function through `getRequestEvent()`. */
|
|
42
|
+
readonly getPermDock: (event: FetchEvent) => Promise<PermDock<V>>;
|
|
43
|
+
/** The snapshot a route `query` returns for `permdock/solid`. */
|
|
44
|
+
readonly getSnapshot: (event: FetchEvent, query?: SnapshotQuery) => Promise<Snapshot>;
|
|
45
|
+
readonly connection: (event: FetchEvent, connectionOptions?: ConnectionOptions) => Promise<Connection>;
|
|
46
|
+
/** `export const { GET, POST } = permdockHandler()` in `src/routes/api/permdock.ts`. */
|
|
47
|
+
readonly permdockHandler: () => SolidStartPermDockHandlers;
|
|
48
|
+
readonly openapi: OpenApiHooks;
|
|
49
|
+
};
|
|
50
|
+
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: SolidStartPermDockOptions<TUser>): SolidStartPermDock<V>;
|
|
51
|
+
//#endregion
|
|
52
|
+
export { type ContextReader, InvalidSignatureError, type ProtectTarget, type SolidStartGuarded, type SolidStartMiddleware, type SolidStartNativeEvent, type SolidStartPermDock, type SolidStartPermDockEvent, type SolidStartPermDockHandlers, type SolidStartPermDockLocals, type SolidStartPermDockOptions, type SolidStartProtect, discoverViaSignatureAgent, webBotAuthVerifier };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { d as discoverViaSignatureAgent, m as webBotAuthVerifier, u as InvalidSignatureError } from "../evaluations-beAooV0n.js";
|
|
2
|
+
import { i as decorate } from "../bind-CAvgUuKs.js";
|
|
3
|
+
import { n as guardedRoute, t as fetchAdapter } from "../fetch-adapter-DD_gfmrC.js";
|
|
4
|
+
//#region src/solid-start/create.ts
|
|
5
|
+
/**
|
|
6
|
+
* `event.locals`. Its type, `App.RequestEventLocals`, is declared by
|
|
7
|
+
* `@solidjs/start/env`, which only an app's own `tsconfig` loads.
|
|
8
|
+
*/
|
|
9
|
+
function localsOf(event) {
|
|
10
|
+
return Reflect.get(event, "locals");
|
|
11
|
+
}
|
|
12
|
+
const route = {
|
|
13
|
+
context: (event) => event.nativeEvent,
|
|
14
|
+
locals: localsOf
|
|
15
|
+
};
|
|
16
|
+
function createPermDock(policy, options) {
|
|
17
|
+
const adapter = fetchAdapter(policy, options, "solid-start", (event) => event.req);
|
|
18
|
+
const middleware = () => async (event, next) => {
|
|
19
|
+
const attached = await adapter.ensure(event.context, event);
|
|
20
|
+
if (!attached.ok) return attached.response;
|
|
21
|
+
return adapter.mapErrors(event, next);
|
|
22
|
+
};
|
|
23
|
+
const protect = ((target, data, protectOptions) => guardedRoute(adapter, route, target, data, protectOptions));
|
|
24
|
+
const withPermDock = (handler) => async (event) => {
|
|
25
|
+
const attached = await adapter.ensure(event.nativeEvent.context, event.nativeEvent);
|
|
26
|
+
if (!attached.ok) return attached.response;
|
|
27
|
+
decorate(localsOf(event), attached.permdock);
|
|
28
|
+
return adapter.mapErrors(event.nativeEvent, () => handler(event));
|
|
29
|
+
};
|
|
30
|
+
const handlers = () => {
|
|
31
|
+
const { GET, POST } = adapter.handlers();
|
|
32
|
+
return {
|
|
33
|
+
GET: (event) => GET(event.nativeEvent),
|
|
34
|
+
POST: (event) => POST(event.nativeEvent)
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
middleware,
|
|
39
|
+
protect,
|
|
40
|
+
withPermDock,
|
|
41
|
+
getPermDock: (event) => adapter.getPermDock(event.nativeEvent),
|
|
42
|
+
getSnapshot: (event, query) => adapter.getSnapshot(event.nativeEvent, query),
|
|
43
|
+
connection: (event, connectionOptions) => adapter.connection(event.nativeEvent, connectionOptions),
|
|
44
|
+
permdockHandler: handlers,
|
|
45
|
+
openapi: adapter.kernel.openapi
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent, webBotAuthVerifier };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as RoleThrough, y as SupabaseSuspension } from "./types-
|
|
3
|
-
import { o as SupabaseManifestMembership } from "./manifest-
|
|
1
|
+
import { et as MembershipSource } from "./policy-types-n0uRTsW8.js";
|
|
2
|
+
import { n as RoleThrough, y as SupabaseSuspension } from "./types-BzzaHxt3.js";
|
|
3
|
+
import { o as SupabaseManifestMembership } from "./manifest-mx5ghSFM.js";
|
|
4
4
|
//#region src/supabase/roles.d.ts
|
|
5
5
|
/** A roles table a role column references, by `schema.table`. */
|
|
6
6
|
type RoleKeys = {
|
|
@@ -163,26 +163,20 @@ type SqlMembershipSource = MembershipSource & {
|
|
|
163
163
|
type SupabasePostgres = {
|
|
164
164
|
readonly queryRaw: (text: string, params?: unknown[]) => Promise<readonly Record<string, unknown>[]>;
|
|
165
165
|
};
|
|
166
|
-
|
|
167
|
-
* `ctx.postgres` (from `withPostgresClient`) or `ctx.postgresAdmin` as a
|
|
168
|
-
* `SqlQuery` for `fromTable`, `fromJunction` and `supabaseApprovalStore`.
|
|
169
|
-
* `ctx.postgres` runs as the caller under RLS, so the membership tables must
|
|
170
|
-
* be readable by `authenticated`; `ctx.postgresAdmin` bypasses RLS.
|
|
171
|
-
*/
|
|
172
|
-
declare function fromSupabasePostgres(postgres: SupabasePostgres): SqlQuery;
|
|
166
|
+
declare function supabasePostgresQuery(postgres: SupabasePostgres): SqlQuery;
|
|
173
167
|
/**
|
|
174
168
|
* Memberships from one table holding every scope: a row per user, scope,
|
|
175
169
|
* instance and role (`user_id, scope, scope_id, role`), with optional
|
|
176
170
|
* `within`, `via`, expiry, owner and seat columns. Rows of the same instance
|
|
177
171
|
* merge into one membership.
|
|
178
172
|
*/
|
|
179
|
-
declare function
|
|
173
|
+
declare function tableMembershipSource(options: MembershipTableOptions): SqlMembershipSource;
|
|
180
174
|
/**
|
|
181
175
|
* Memberships from a table of one scope (`customer_contacts`): every row is a
|
|
182
176
|
* membership of `scope`, with roles from a column or fixed (`['contact']`), a
|
|
183
177
|
* fixed `via`, and ancestor ids from `within` columns.
|
|
184
178
|
*/
|
|
185
|
-
declare function
|
|
179
|
+
declare function junctionMembershipSource(options: MembershipJunctionOptions): SqlMembershipSource;
|
|
186
180
|
declare const AUTHZ_VERSION_TABLE = "permdock_authz_version";
|
|
187
181
|
/**
|
|
188
182
|
* Reads the authorization version `permdock supabase hook generate` keeps in
|
|
@@ -193,4 +187,4 @@ declare function authzVersion(options: {
|
|
|
193
187
|
readonly schema?: string;
|
|
194
188
|
}): NonNullable<MembershipSource["version"]>;
|
|
195
189
|
//#endregion
|
|
196
|
-
export { MembershipTableOptions as a, SupabasePostgres as c,
|
|
190
|
+
export { MembershipTableOptions as a, SupabasePostgres as c, supabasePostgresQuery as d, tableMembershipSource as f, MembershipSql as i, authzVersion as l, MembershipHolders as n, SqlMembershipSource as o, MembershipJunctionOptions as r, SqlQuery as s, AUTHZ_VERSION_TABLE as t, junctionMembershipSource as u };
|