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,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { n as
|
|
1
|
+
import { $n as Delegation, Q as LimitStore, Rt as Instant, Zn as CustomRole, ar as Subject, it as RelationSource, nr as Membership, qn as Actor, rr as Principal } from "../../policy-types-n0uRTsW8.js";
|
|
2
|
+
import { w as Permission } from "../../vocabulary-CN8H_9UF.js";
|
|
3
|
+
import { i as PermDockOptions } from "../../permdock-SV8ZINYT.js";
|
|
4
|
+
import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-u_KHg-sN.js";
|
|
5
|
+
import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-77FSAq_V.js";
|
|
5
6
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
6
7
|
//#region src/testing/saas/schema.d.ts
|
|
7
8
|
type FieldKind = "string" | "boolean" | "nullable-string";
|
|
@@ -121,8 +122,8 @@ type SaasTokenOptions = {
|
|
|
121
122
|
/** Claim memberships; `false` omits the claim (database mode). Defaults to the seed. */
|
|
122
123
|
readonly memberships?: readonly Membership[] | false;
|
|
123
124
|
readonly ttl?: number;
|
|
124
|
-
/**
|
|
125
|
-
readonly now?:
|
|
125
|
+
/** The instant used for `iat`; defaults to the current time. */
|
|
126
|
+
readonly now?: Instant;
|
|
126
127
|
readonly issuer?: string;
|
|
127
128
|
readonly audience?: string;
|
|
128
129
|
readonly claims?: Readonly<Record<string, unknown>>;
|
|
@@ -134,9 +135,9 @@ export declare function signSaasToken(sub: string, options?: SaasTokenOptions):
|
|
|
134
135
|
* and returns its `sub`, or `null`; never throws. Identity only: memberships
|
|
135
136
|
* and plans come from the seed, never from the token.
|
|
136
137
|
*/
|
|
137
|
-
export declare function verifySaasToken(token: string | null | undefined, now?:
|
|
138
|
+
export declare function verifySaasToken(token: string | null | undefined, now?: Instant): Promise<string | null>;
|
|
138
139
|
/** `verifySaasToken` plus the token's `exp` as `expiresAt` (epoch seconds). */
|
|
139
|
-
export declare function verifySaasSession(token: string | null | undefined,
|
|
140
|
+
export declare function verifySaasSession(token: string | null | undefined, at?: Instant): Promise<{
|
|
140
141
|
readonly sub: string;
|
|
141
142
|
readonly expiresAt: number;
|
|
142
143
|
} | null>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-
|
|
2
|
-
import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-
|
|
1
|
+
import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-BPxlwVhN.js";
|
|
2
|
+
import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-BCXRuXca.js";
|
|
3
3
|
export { SAAS_API_KEY_LIMIT, SAAS_EXPIRED_AT, SAAS_TOKEN_TTL_SECONDS, SaasDocSchema, SaasFolderSchema, SaasProjectSchema, rowSchema, saasAudience, saasCustomRoles, saasDoc, saasFolder, saasFolderScenarios, saasIssuer, saasJwks, saasLimitStore, saasMemberships, saasOrg, saasPermissions, saasPlans, saasPolicy, saasPrincipal, saasPrivateJwk, saasProject, saasPublicJwk, saasRelations, saasRoles, saasScenarioOptions, saasScenarios, saasSchemaSql, saasSeed, saasSeedSql, saasTenantRoleNames, saasUser, saasUsers, signSaasToken, verifySaasSession, verifySaasToken };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-
|
|
1
|
+
import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-u_KHg-sN.js";
|
|
2
2
|
export { SaasDoc, SaasDocSchema, SaasFolder, SaasFolderSchema, SaasProject, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { SaasDocSchema, SaasFolderSchema, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
|
|
1
|
+
export { t as SaasDocSchema, n as SaasFolderSchema, r as SaasProjectSchema, i as saasPermissions, a as saasPlans, o as saasRoles, s as saasTenantRoleNames } from "../../permissions-BPxlwVhN.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/cli/shared/text.ts
|
|
2
|
+
/** The text before the first `separator`, or all of it when there is none. */
|
|
3
|
+
function beforeFirst(text, separator) {
|
|
4
|
+
const at = text.indexOf(separator);
|
|
5
|
+
return at === -1 ? text : text.slice(0, at);
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { beforeFirst as t };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
+
//#region src/core/thenable.ts
|
|
3
|
+
function isThenable(value) {
|
|
4
|
+
return value !== null && typeof value === "object" && "then" in value && typeof value.then === "function";
|
|
5
|
+
}
|
|
6
|
+
/** Settles a promise nobody awaits, so its rejection is not reported as unhandled. */
|
|
7
|
+
function ignoreRejection(value) {
|
|
8
|
+
Promise.resolve(value).then(void 0, () => void 0);
|
|
9
|
+
}
|
|
10
|
+
/** Runs a Standard Schema that must answer synchronously; an asynchronous answer fails. */
|
|
11
|
+
function validateSync(schema, value) {
|
|
12
|
+
const result = schema["~standard"].validate(value);
|
|
13
|
+
if (isThenable(result)) {
|
|
14
|
+
ignoreRejection(result);
|
|
15
|
+
return { ok: false };
|
|
16
|
+
}
|
|
17
|
+
return result.issues === void 0 ? {
|
|
18
|
+
ok: true,
|
|
19
|
+
value: result.value
|
|
20
|
+
} : {
|
|
21
|
+
ok: false,
|
|
22
|
+
issues: result.issues
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** `validateSync` for a schema whose output must be an object; anything else is `undefined`. */
|
|
26
|
+
function validateRecord(schema, value) {
|
|
27
|
+
const validated = validateSync(schema, value);
|
|
28
|
+
return validated.ok && isRecord(validated.value) ? validated.value : void 0;
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { validateSync as i, isThenable as n, validateRecord as r, ignoreRejection as t };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
//#region src/core/time.ts
|
|
2
|
+
/** RFC 3339 `date-time` in UTC or with an offset; fractional seconds optional. */
|
|
3
|
+
const RFC3339_PATTERN = "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$";
|
|
4
|
+
const RFC3339 = /* @__PURE__ */ new RegExp(RFC3339_PATTERN, "u");
|
|
5
|
+
function isRfc3339(value) {
|
|
6
|
+
return typeof value === "string" && RFC3339.test(value) && Number.isFinite(Date.parse(value));
|
|
7
|
+
}
|
|
8
|
+
/** Seconds since the epoch as RFC 3339 in UTC. */
|
|
9
|
+
function rfc3339(seconds) {
|
|
10
|
+
return (/* @__PURE__ */ new Date(seconds * 1e3)).toISOString();
|
|
11
|
+
}
|
|
12
|
+
/** Milliseconds since the epoch as RFC 3339 in UTC, milliseconds kept; throws a `RangeError` for a value outside the `Date` range. */
|
|
13
|
+
function isoAt(millis) {
|
|
14
|
+
return new Date(millis).toISOString();
|
|
15
|
+
}
|
|
16
|
+
/** RFC 3339 in UTC of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
|
|
17
|
+
function isoNow(now) {
|
|
18
|
+
return dateAt(now).toISOString();
|
|
19
|
+
}
|
|
20
|
+
/** Whole seconds since the epoch of an RFC 3339 instant; `undefined` for anything else. */
|
|
21
|
+
function secondsOf(value) {
|
|
22
|
+
return isRfc3339(value) ? Math.floor(Date.parse(value) / 1e3) : void 0;
|
|
23
|
+
}
|
|
24
|
+
/** Whole seconds since the epoch of an RFC 3339 string or an `Instant`; `undefined` for anything else, Unix seconds included. */
|
|
25
|
+
function instantOf(value) {
|
|
26
|
+
if (typeof value === "string") return secondsOf(value);
|
|
27
|
+
if (typeof value === "object" && value !== null && "epochMilliseconds" in value && typeof value.epochMilliseconds === "number" && Number.isFinite(value.epochMilliseconds)) return Math.floor(value.epochMilliseconds / 1e3);
|
|
28
|
+
}
|
|
29
|
+
/** A duration: a whole number of seconds above zero, else `undefined`. */
|
|
30
|
+
function durationOf(value) {
|
|
31
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : void 0;
|
|
32
|
+
}
|
|
33
|
+
/** Throws at definition time unless `value` is a whole number of seconds above zero. */
|
|
34
|
+
function assertDuration(value, label) {
|
|
35
|
+
if (durationOf(value) === void 0) throw new Error(`PermDock: ${label} must be a whole number of seconds above 0, got ${JSON.stringify(value) ?? String(value)}`);
|
|
36
|
+
}
|
|
37
|
+
/** Whole seconds since the epoch of `now`, or of the clock when absent. */
|
|
38
|
+
function nowSeconds(now) {
|
|
39
|
+
return Math.floor(nowMillis(now) / 1e3);
|
|
40
|
+
}
|
|
41
|
+
/** The `validation` denial detail for a `now` option that is not an `Instant`. */
|
|
42
|
+
const INVALID_NOW = Object.freeze({
|
|
43
|
+
field: "now",
|
|
44
|
+
message: "now must be an Instant ({ epochMilliseconds }), such as a Temporal.Instant"
|
|
45
|
+
});
|
|
46
|
+
/** The `Date` of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
|
|
47
|
+
function dateAt(now) {
|
|
48
|
+
const millis = nowMillis(now);
|
|
49
|
+
if (!Number.isFinite(millis)) throw new RangeError(`PermDock: ${INVALID_NOW.message}`);
|
|
50
|
+
return new Date(millis);
|
|
51
|
+
}
|
|
52
|
+
/** Whole seconds since the epoch of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
|
|
53
|
+
function secondsAt(now) {
|
|
54
|
+
return Math.floor(dateAt(now).getTime() / 1e3);
|
|
55
|
+
}
|
|
56
|
+
/** The instant `seconds` after the epoch. */
|
|
57
|
+
function instantAt(seconds) {
|
|
58
|
+
return { epochMilliseconds: seconds * 1e3 };
|
|
59
|
+
}
|
|
60
|
+
/** Seconds since the epoch of `now`, fraction kept, or of the clock when absent. */
|
|
61
|
+
function epochSeconds(now) {
|
|
62
|
+
return nowMillis(now) / 1e3;
|
|
63
|
+
}
|
|
64
|
+
/** Milliseconds since the epoch of `now`, or of the clock when absent; `NaN` for a `now` that is not an `Instant`. */
|
|
65
|
+
function nowMillis(now) {
|
|
66
|
+
if (now === void 0) return Date.now();
|
|
67
|
+
const millis = typeof now === "object" && now !== null ? now.epochMilliseconds : void 0;
|
|
68
|
+
return typeof millis === "number" ? millis : NaN;
|
|
69
|
+
}
|
|
70
|
+
//#endregion
|
|
71
|
+
export { durationOf as a, instantOf as c, isoNow as d, nowMillis as f, secondsOf as g, secondsAt as h, dateAt as i, isRfc3339 as l, rfc3339 as m, RFC3339_PATTERN as n, epochSeconds as o, nowSeconds as p, assertDuration as r, instantAt as s, INVALID_NOW as t, isoAt as u };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as canonicalJson } from "./canonical-json-
|
|
2
|
-
import {
|
|
1
|
+
import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
|
|
2
|
+
import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
|
|
3
3
|
//#region src/core/token.ts
|
|
4
4
|
/**
|
|
5
5
|
* Only stable identity goes into the token, so refreshing a session (new
|
|
@@ -22,7 +22,16 @@ function versionOf(row, field) {
|
|
|
22
22
|
}
|
|
23
23
|
/** The digest that binds a token to the call's data when no row id does. */
|
|
24
24
|
function payloadDigest(data) {
|
|
25
|
-
return
|
|
25
|
+
return sha256Digest(canonicalJson(data));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The payload a decision token binds: the call's `args` when the caller
|
|
29
|
+
* passes them (an agent or MCP tool call, row or not), otherwise the data of
|
|
30
|
+
* a call without a row id. `undefined` binds nothing beyond the row id.
|
|
31
|
+
*/
|
|
32
|
+
function tokenPayload(resourceId, data, args) {
|
|
33
|
+
if (args !== void 0) return payloadDigest(args);
|
|
34
|
+
return resourceId === "*" && data !== void 0 ? payloadDigest(data) : void 0;
|
|
26
35
|
}
|
|
27
36
|
/**
|
|
28
37
|
* `version` is set only for an approval that goes stale on a resource
|
|
@@ -32,7 +41,7 @@ function payloadDigest(data) {
|
|
|
32
41
|
* others.
|
|
33
42
|
*/
|
|
34
43
|
function decisionToken(input) {
|
|
35
|
-
const payload =
|
|
44
|
+
const payload = canonicalJson({
|
|
36
45
|
key: input.key,
|
|
37
46
|
resourceId: input.resourceId,
|
|
38
47
|
principal: principalIdentity(input.principal),
|
|
@@ -44,7 +53,7 @@ function decisionToken(input) {
|
|
|
44
53
|
...input.version === void 0 ? {} : { version: input.version },
|
|
45
54
|
...input.payload === void 0 ? {} : { payload: input.payload }
|
|
46
55
|
});
|
|
47
|
-
return
|
|
56
|
+
return sha256Digest(payload);
|
|
48
57
|
}
|
|
49
58
|
//#endregion
|
|
50
|
-
export { payloadDigest as n,
|
|
59
|
+
export { versionOf as i, payloadDigest as n, tokenPayload as r, decisionToken as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as describe } from "./describe-
|
|
1
|
+
import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
|
|
2
|
+
import { t as describe } from "./describe-BybMRY7A.js";
|
|
3
3
|
//#region src/core/tool-refusal.ts
|
|
4
4
|
function deniedToolRefusal(decision, permission, resource) {
|
|
5
5
|
const alternatives = decision.alternatives.map((leaf) => leaf.key);
|
package/dist/trpc/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { t as
|
|
1
|
+
import { T as Policy, rr as Principal } from "../policy-types-n0uRTsW8.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-CN8H_9UF.js";
|
|
3
|
+
import { r as PermDock } from "../permdock-SV8ZINYT.js";
|
|
4
|
+
import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
|
|
5
|
+
import { D as ConnectionOptions, T as Connection, i as OpenApiHooks } from "../server-types-CKQiCnON.js";
|
|
6
|
+
import { t as ServerAdapterOptions } from "../bind-DOyrv6zi.js";
|
|
7
|
+
import { t as StreamProtectOptions } from "../stream-CeCMJmBB.js";
|
|
7
8
|
import { AnyTRPCMiddlewareFunction } from "@trpc/server";
|
|
8
9
|
//#region src/trpc/create.d.ts
|
|
9
10
|
type TrpcMiddlewareOpts<TCtx = object, TInput = unknown> = {
|
|
@@ -33,11 +34,13 @@ type TrpcOpenApiHooks = {
|
|
|
33
34
|
readonly securitySchemes: OpenApiHooks["securitySchemes"];
|
|
34
35
|
};
|
|
35
36
|
type TrpcPermDock<TCtx = object> = {
|
|
36
|
-
|
|
37
|
-
readonly
|
|
37
|
+
/** The `PermDock` for one procedure call, for code the middleware does not run before. */
|
|
38
|
+
readonly getPermDock: (opts: TrpcMiddlewareOpts<TCtx>) => Promise<PermDock>;
|
|
39
|
+
readonly middleware: () => TrpcMiddleware;
|
|
40
|
+
readonly protect: (permission: Permission | null, data?: (opts: TrpcMiddlewareOpts<TCtx>) => unknown, protectOptions?: StreamProtectOptions) => TrpcMiddleware;
|
|
38
41
|
/** A long-lived connection for the request behind `ctx`. */
|
|
39
42
|
readonly connection: (opts: TrpcMiddlewareOpts<TCtx>, connectionOptions?: ConnectionOptions) => Promise<Connection>;
|
|
40
|
-
readonly permdockHandler: (request: Request) => Promise<Response>;
|
|
43
|
+
readonly permdockHandler: () => (request: Request) => Promise<Response>;
|
|
41
44
|
readonly openapi: TrpcOpenApiHooks;
|
|
42
45
|
readonly errorFormatter: <TShape extends {
|
|
43
46
|
readonly data: object;
|
package/dist/trpc/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { o as problemMessage } from "../http-BBoKefeS.js";
|
|
2
|
-
import { t as problemFromError } from "../map-error-
|
|
3
|
-
import { n as attached } from "../bind-
|
|
4
|
-
import {
|
|
5
|
-
import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-
|
|
2
|
+
import { t as problemFromError } from "../map-error-Dr70oA_3.js";
|
|
3
|
+
import { n as attached } from "../bind-CAvgUuKs.js";
|
|
4
|
+
import { i as isAsyncIterable, o as reloadAfter } from "../stream-CvdUS9V1.js";
|
|
5
|
+
import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-VSl5ylaQ.js";
|
|
6
6
|
import { TRPCError, isTrackedEnvelope } from "@trpc/server";
|
|
7
7
|
//#region src/trpc/create.ts
|
|
8
8
|
const PROBLEM = Symbol.for("permdock.problem");
|
|
@@ -58,9 +58,10 @@ function errorFormatter(opts) {
|
|
|
58
58
|
}
|
|
59
59
|
function createPermDock(policy, options) {
|
|
60
60
|
const { kernel, bind, attach, scopeOf, connection, evaluate, guard: runGuard } = bindRpcKernel(policy, options, "trpc", (opts) => opts.ctx, (opts) => opts.path);
|
|
61
|
-
const
|
|
61
|
+
const getPermDock = async (opts) => kernel.getPermDock(bind(opts), await scopeOf(opts));
|
|
62
|
+
const middleware = () => (async (opts) => {
|
|
62
63
|
const request = bind(opts);
|
|
63
|
-
const instance = await attached(async () => kernel.
|
|
64
|
+
const instance = await attached(async () => kernel.getPermDock(request, await scopeOf(opts)));
|
|
64
65
|
if (!instance.ok) return throwTrpcError(instance.response);
|
|
65
66
|
const nextCtx = {
|
|
66
67
|
...opts.ctx,
|
|
@@ -70,18 +71,18 @@ function createPermDock(policy, options) {
|
|
|
70
71
|
return mapDownstream(await opts.next({ ctx: nextCtx }));
|
|
71
72
|
});
|
|
72
73
|
/** Wraps a subscription's iterable so revocation ends it and unreadable items drop. */
|
|
73
|
-
const guardSubscription = async (result, opts, permission,
|
|
74
|
+
const guardSubscription = async (result, opts, permission, data, protectOptions) => {
|
|
74
75
|
if (result === null || typeof result !== "object" || result.ok !== true || !isAsyncIterable(result.data)) return result;
|
|
75
76
|
return {
|
|
76
77
|
...result,
|
|
77
|
-
data: await guardStream(result.data, (connectionOptions) => connection(opts, connectionOptions), permission,
|
|
78
|
+
data: await guardStream(result.data, (connectionOptions) => connection(opts, connectionOptions), permission, data, protectOptions, {
|
|
78
79
|
unwrap: (item) => isTrackedEnvelope(item) ? item[1] : item,
|
|
79
80
|
onRevoked: trpcErrorFrom
|
|
80
81
|
})
|
|
81
82
|
};
|
|
82
83
|
};
|
|
83
|
-
const protect = (permission,
|
|
84
|
-
const { request, guard } = await runGuard(permission,
|
|
84
|
+
const protect = (permission, data, protectOptions) => (async (opts) => {
|
|
85
|
+
const { request, guard } = await runGuard(permission, data, opts, protectOptions);
|
|
85
86
|
if (guard.ok) {
|
|
86
87
|
const nextCtx = {
|
|
87
88
|
...opts.ctx,
|
|
@@ -89,11 +90,11 @@ function createPermDock(policy, options) {
|
|
|
89
90
|
permdockData: guard.data
|
|
90
91
|
};
|
|
91
92
|
attach(nextCtx, request);
|
|
92
|
-
return guardSubscription(await mapDownstream(await opts.next({ ctx: nextCtx })), opts, permission,
|
|
93
|
+
return guardSubscription(await mapDownstream(await opts.next({ ctx: nextCtx })), opts, permission, data === void 0 ? void 0 : reloadAfter(guard.data, () => data(opts)), protectOptions);
|
|
93
94
|
}
|
|
94
95
|
return throwTrpcError(guard.response);
|
|
95
96
|
});
|
|
96
|
-
const
|
|
97
|
+
const handler = (request) => {
|
|
97
98
|
return evaluate(request, {
|
|
98
99
|
ctx: { req: request },
|
|
99
100
|
path: "permdock",
|
|
@@ -103,10 +104,11 @@ function createPermDock(policy, options) {
|
|
|
103
104
|
};
|
|
104
105
|
const kernelOpenApi = kernel.openapi;
|
|
105
106
|
return {
|
|
106
|
-
|
|
107
|
+
getPermDock,
|
|
108
|
+
middleware,
|
|
107
109
|
protect,
|
|
108
110
|
connection,
|
|
109
|
-
permdockHandler,
|
|
111
|
+
permdockHandler: () => handler,
|
|
110
112
|
openapi: {
|
|
111
113
|
security: (permission) => ({ openapi: {
|
|
112
114
|
protect: true,
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { ar as Subject, dt as TokenVerifier, ot as SnapshotSource, q as DecisionSink, ut as TokenSigner } from "./policy-types-n0uRTsW8.js";
|
|
2
|
+
import { o as PolicySource } from "./hosted-BPk51-kX.js";
|
|
3
|
+
import { m as ApprovalStore, u as ApprovalRequest } from "./types-BdtSDbBO.js";
|
|
4
|
+
import { a as CatalogDocument } from "./types-Druu9wLM.js";
|
|
5
|
+
import { a as CatalogFinding } from "./sink-4-eQIRWf.js";
|
|
6
|
+
//#region src/cloud/types.d.ts
|
|
7
|
+
type CloudEndpointOptions = {
|
|
8
|
+
readonly url?: string;
|
|
9
|
+
readonly environment?: string;
|
|
10
|
+
};
|
|
11
|
+
type CloudEndpoints = {
|
|
12
|
+
/** The environment URL, `<url>/v1/environments/<env>`: `iss` and `aud` of the policy document. */
|
|
13
|
+
readonly issuer: string;
|
|
14
|
+
/** The environment's JWK Set URL, for `joseTokenVerifier({ jwks })`. */
|
|
15
|
+
readonly jwks: string;
|
|
16
|
+
};
|
|
17
|
+
/** What every `permdock/cloud` client needs to reach one environment. */
|
|
18
|
+
type CloudConnectionOptions = CloudEndpointOptions & {
|
|
19
|
+
/** The environment key; defaults to `PERMDOCK_CLOUD_KEY`. */
|
|
20
|
+
readonly key?: string;
|
|
21
|
+
readonly fetch?: typeof fetch;
|
|
22
|
+
};
|
|
23
|
+
/** Who signs the `PermDock-Approver` token `approvals.resolve` sends. */
|
|
24
|
+
type CloudApproverOptions = {
|
|
25
|
+
/**
|
|
26
|
+
* Signs the token with a key the environment trusts as an issuer, such as
|
|
27
|
+
* `joseTokenSigner` over your own key. Never `cloudSigner`: a client key
|
|
28
|
+
* that could mint approver tokens could forge any approver.
|
|
29
|
+
*/
|
|
30
|
+
readonly signer: TokenSigner;
|
|
31
|
+
/** `aud` of the token; defaults to `<issuer>/approvals`, the environment URL plus `/approvals`. */
|
|
32
|
+
readonly audience?: string | readonly string[];
|
|
33
|
+
/**
|
|
34
|
+
* The `holder(permission)` approvers of `request` that `approver` holds,
|
|
35
|
+
* typically `approverPermissions(request, permdockFor(approver))`. Signed
|
|
36
|
+
* into the token as `permissions`; without it the verdict's own
|
|
37
|
+
* `permissions` are signed. A throw signs none.
|
|
38
|
+
*/
|
|
39
|
+
readonly permissions?: (request: ApprovalRequest, approver: Subject) => readonly string[] | Promise<readonly string[]>;
|
|
40
|
+
/**
|
|
41
|
+
* The relation approvers of `request` that `approver` holds, typically
|
|
42
|
+
* `approverRelations(request, approver, { relations, permissions })`.
|
|
43
|
+
* Signed into the token as `relations`; without it the verdict's own
|
|
44
|
+
* `relations` are signed. A throw signs none.
|
|
45
|
+
*/
|
|
46
|
+
readonly relations?: (request: ApprovalRequest, approver: Subject) => readonly string[] | Promise<readonly string[]>;
|
|
47
|
+
};
|
|
48
|
+
type CloudOptions = CloudConnectionOptions & {
|
|
49
|
+
/**
|
|
50
|
+
* Proves the approver on `approvals.resolve`. Without it, every resolve but
|
|
51
|
+
* a `system` rejection throws `approver-unauthenticated` and sends nothing.
|
|
52
|
+
*/
|
|
53
|
+
readonly approver?: CloudApproverOptions;
|
|
54
|
+
readonly flushAt?: number;
|
|
55
|
+
/** Most events the sink holds while the Cloud is unreachable (default 10 000); the oldest are dropped first. */
|
|
56
|
+
readonly capacity?: number;
|
|
57
|
+
readonly waitUntil?: (task: Promise<void>) => void;
|
|
58
|
+
/** The CloudEvents `source` of every event the sink sends, an absolute URI; defaults to the environment URL. */
|
|
59
|
+
readonly source?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Verifies the environment's signed policy document, typically
|
|
62
|
+
* `joseTokenVerifier({ jwks: cloudEndpoints().jwks })`. Without one,
|
|
63
|
+
* `policies.current()` stays `null`: an unverifiable document is never applied.
|
|
64
|
+
*/
|
|
65
|
+
readonly verifier?: TokenVerifier;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* What `POST /catalog` answers: `201` with the new version and the drift
|
|
69
|
+
* findings against the previous one, or `200` with `unchanged: true` when
|
|
70
|
+
* the fingerprint is already published.
|
|
71
|
+
*/
|
|
72
|
+
type CloudCatalogPush = {
|
|
73
|
+
readonly version: number;
|
|
74
|
+
readonly fingerprint: string;
|
|
75
|
+
readonly findings: readonly CatalogFinding[];
|
|
76
|
+
} | {
|
|
77
|
+
readonly version: number;
|
|
78
|
+
readonly fingerprint: string;
|
|
79
|
+
readonly unchanged: true;
|
|
80
|
+
};
|
|
81
|
+
type CloudCatalog = {
|
|
82
|
+
/**
|
|
83
|
+
* Posts the catalog, its `operations` included, to the environment.
|
|
84
|
+
* Throws when the Cloud refuses it or answers another shape. The Cloud
|
|
85
|
+
* shows and diffs it; it never decides with it.
|
|
86
|
+
*/
|
|
87
|
+
push(catalog: CatalogDocument): Promise<CloudCatalogPush>;
|
|
88
|
+
};
|
|
89
|
+
type CloudClient = CloudEndpoints & {
|
|
90
|
+
readonly approvals: ApprovalStore;
|
|
91
|
+
readonly sink: DecisionSink;
|
|
92
|
+
/**
|
|
93
|
+
* A `SnapshotSource` for the subject `token` proves: an `at+jwt` the
|
|
94
|
+
* environment issued, or one a trusted issuer registered for `subject`
|
|
95
|
+
* signed. Sent as `PermDock-Subject`; the Cloud never takes a subject from
|
|
96
|
+
* anything else.
|
|
97
|
+
*/
|
|
98
|
+
snapshotsFor(token: string): SnapshotSource;
|
|
99
|
+
readonly policies: PolicySource;
|
|
100
|
+
readonly catalog: CloudCatalog;
|
|
101
|
+
};
|
|
102
|
+
type CloudSignerOptions = CloudConnectionOptions & {
|
|
103
|
+
/** `aud` when a `sign` call names none; signing without either throws. */
|
|
104
|
+
readonly audience?: string | readonly string[];
|
|
105
|
+
};
|
|
106
|
+
//#endregion
|
|
107
|
+
export { CloudConnectionOptions as a, CloudOptions as c, CloudClient as i, CloudSignerOptions as l, CloudCatalog as n, CloudEndpointOptions as o, CloudCatalogPush as r, CloudEndpoints as s, CloudApproverOptions as t };
|
|
@@ -1,77 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
type ClientStatus = "ready" | "pending" | "stale" | "server-only";
|
|
6
|
-
type PermissionState = {
|
|
7
|
-
readonly allowed: boolean;
|
|
8
|
-
readonly status: ClientStatus;
|
|
9
|
-
readonly decision: Decision;
|
|
10
|
-
};
|
|
11
|
-
type PermissionSet = {
|
|
12
|
-
readonly granted: readonly Permission[];
|
|
13
|
-
get(permission: Permission): PermissionState | undefined;
|
|
14
|
-
};
|
|
15
|
-
type ClientPermDock<V extends PolicyVocabulary = PolicyVocabulary> = PermDock<V> & {
|
|
16
|
-
status(permission?: Permission, data?: unknown): ClientStatus;
|
|
17
|
-
invalidate(ref: Permission | {
|
|
18
|
-
readonly [key: string]: unknown;
|
|
19
|
-
}): void;
|
|
20
|
-
refresh(options?: {
|
|
21
|
-
readonly tenant?: string;
|
|
22
|
-
}): Promise<void>;
|
|
23
|
-
clear(): void;
|
|
24
|
-
subscribe(listener: () => void): () => void;
|
|
25
|
-
};
|
|
26
|
-
type ApprovalState = "not-needed" | "required" | "pending" | "approved" | "rejected" | "expired";
|
|
27
|
-
type ApprovalHandle = {
|
|
28
|
-
readonly state: ApprovalState;
|
|
29
|
-
readonly token: string | undefined;
|
|
30
|
-
readonly request: (note?: string) => Promise<void>;
|
|
31
|
-
};
|
|
32
|
-
type SubjectView = {
|
|
33
|
-
readonly principal: Principal | null;
|
|
34
|
-
readonly actor: Actor | undefined;
|
|
35
|
-
readonly delegation: Delegation | undefined;
|
|
36
|
-
readonly expiresAt: number | undefined;
|
|
37
|
-
readonly simulated: boolean;
|
|
38
|
-
};
|
|
39
|
-
type TenantView = {
|
|
40
|
-
readonly tenant: string | null;
|
|
41
|
-
readonly tenants: readonly string[];
|
|
42
|
-
readonly switchTo: (id: string) => Promise<void>;
|
|
43
|
-
readonly status: ClientStatus;
|
|
44
|
-
};
|
|
45
|
-
type FilterResult<T> = readonly T[] & {
|
|
46
|
-
readonly partial: boolean;
|
|
47
|
-
};
|
|
48
|
-
type UseRolesOptions = {
|
|
49
|
-
readonly tenant?: string;
|
|
50
|
-
readonly team?: string;
|
|
51
|
-
};
|
|
52
|
-
/** The provider options Vue, Svelte and Solid share; each adds its own reactive `snapshot`, `tenant`, `headers`, `verifier` and `defaults`. */
|
|
53
|
-
type ProviderOptionsBase = {
|
|
54
|
-
/**
|
|
55
|
-
* The AuthZEN evaluations endpoint for checks the snapshot cannot answer.
|
|
56
|
-
* `false` never calls one: such a check is denied with reason `server-only`.
|
|
57
|
-
*/
|
|
58
|
-
readonly endpoint?: string | false;
|
|
59
|
-
/** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
|
|
60
|
-
readonly snapshotUrl?: string;
|
|
61
|
-
readonly approvals?: string;
|
|
62
|
-
/** Read on every request, so a new `fetch` applies without a new store. */
|
|
63
|
-
readonly fetch?: typeof fetch;
|
|
64
|
-
readonly maxAge?: number;
|
|
65
|
-
/** Localised text for the describe helper. */
|
|
66
|
-
readonly messages?: DescribeMessages;
|
|
67
|
-
/** Called with each snapshot the store accepts. */
|
|
68
|
-
readonly onSnapshot?: NonNullable<ClientStoreOptions["onSnapshot"]>;
|
|
69
|
-
/** Called when the store drops its snapshot. */
|
|
70
|
-
readonly onClear?: () => void;
|
|
71
|
-
/** Milliseconds between approval status polls. Defaults to 2000. */
|
|
72
|
-
readonly approvalInterval?: number;
|
|
73
|
-
};
|
|
74
|
-
//#endregion
|
|
1
|
+
import { $n as Delegation, Nn as Decision, Vt as Snapshot, dt as TokenVerifier, j as PolicyVocabulary, qn as Actor, rr as Principal } from "./policy-types-n0uRTsW8.js";
|
|
2
|
+
import { w as Permission } from "./vocabulary-CN8H_9UF.js";
|
|
3
|
+
import { r as PermDock } from "./permdock-SV8ZINYT.js";
|
|
4
|
+
import { n as DescribeMessages, t as DecisionDescription } from "./describe-B5qgDvEW.js";
|
|
75
5
|
//#region src/client/request.d.ts
|
|
76
6
|
type StoreHeaders = Readonly<Record<string, string>>;
|
|
77
7
|
//#endregion
|
|
@@ -144,4 +74,99 @@ type ClientStore = {
|
|
|
144
74
|
dispose(): void;
|
|
145
75
|
};
|
|
146
76
|
//#endregion
|
|
147
|
-
|
|
77
|
+
//#region src/client/types.d.ts
|
|
78
|
+
type ClientStatus = "ready" | "pending" | "stale" | "server-only";
|
|
79
|
+
type PermissionState = {
|
|
80
|
+
readonly allowed: boolean;
|
|
81
|
+
readonly status: ClientStatus;
|
|
82
|
+
readonly decision: Decision;
|
|
83
|
+
};
|
|
84
|
+
type PermissionSet = {
|
|
85
|
+
readonly granted: readonly Permission[];
|
|
86
|
+
get(permission: Permission): PermissionState | undefined;
|
|
87
|
+
};
|
|
88
|
+
type ClientPermDock<V extends PolicyVocabulary = PolicyVocabulary> = PermDock<V> & {
|
|
89
|
+
status(permission?: Permission, data?: unknown): ClientStatus;
|
|
90
|
+
invalidate(ref: Permission | {
|
|
91
|
+
readonly [key: string]: unknown;
|
|
92
|
+
}): void;
|
|
93
|
+
refresh(options?: {
|
|
94
|
+
readonly tenant?: string;
|
|
95
|
+
}): Promise<void>;
|
|
96
|
+
clear(): void;
|
|
97
|
+
subscribe(listener: () => void): () => void;
|
|
98
|
+
};
|
|
99
|
+
type ApprovalState = "not-needed" | "required" | "pending" | "approved" | "rejected" | "expired";
|
|
100
|
+
type ApprovalHandle = {
|
|
101
|
+
readonly state: ApprovalState;
|
|
102
|
+
readonly token: string | undefined;
|
|
103
|
+
readonly request: (note?: string) => Promise<void>;
|
|
104
|
+
};
|
|
105
|
+
type SubjectView = {
|
|
106
|
+
readonly principal: Principal | null;
|
|
107
|
+
readonly actor: Actor | undefined;
|
|
108
|
+
readonly delegation: Delegation | undefined;
|
|
109
|
+
readonly expiresAt: number | undefined;
|
|
110
|
+
readonly simulated: boolean;
|
|
111
|
+
};
|
|
112
|
+
type TenantView = {
|
|
113
|
+
readonly tenant: string | null;
|
|
114
|
+
readonly tenants: readonly string[];
|
|
115
|
+
readonly switchTo: (id: string) => Promise<void>;
|
|
116
|
+
readonly status: ClientStatus;
|
|
117
|
+
};
|
|
118
|
+
type FilterResult<T> = readonly T[] & {
|
|
119
|
+
readonly partial: boolean;
|
|
120
|
+
};
|
|
121
|
+
type RolesOptions = {
|
|
122
|
+
readonly tenant?: string;
|
|
123
|
+
readonly team?: string;
|
|
124
|
+
};
|
|
125
|
+
/** The provider options Vue, Svelte and Solid share; each adds its own reactive `snapshot`, `tenant`, `headers`, `verifier` and `defaults`. */
|
|
126
|
+
type ProviderOptionsBase = {
|
|
127
|
+
/**
|
|
128
|
+
* The AuthZEN evaluations endpoint for checks the snapshot cannot answer.
|
|
129
|
+
* `false` never calls one: such a check is denied with reason `server-only`.
|
|
130
|
+
*/
|
|
131
|
+
readonly endpoint?: string | false;
|
|
132
|
+
/** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
|
|
133
|
+
readonly snapshotUrl?: string;
|
|
134
|
+
readonly approvals?: string;
|
|
135
|
+
/** Read on every request, so a new `fetch` applies without a new store. */
|
|
136
|
+
readonly fetch?: typeof fetch;
|
|
137
|
+
readonly maxAge?: number;
|
|
138
|
+
/** Localised text for the describe helper. */
|
|
139
|
+
readonly messages?: DescribeMessages;
|
|
140
|
+
/** Called with each snapshot the store accepts. */
|
|
141
|
+
readonly onSnapshot?: NonNullable<ClientStoreOptions["onSnapshot"]>;
|
|
142
|
+
/** Called when the store drops its snapshot. */
|
|
143
|
+
readonly onClear?: () => void;
|
|
144
|
+
/** Milliseconds between approval status polls. Defaults to 2000. */
|
|
145
|
+
readonly approvalInterval?: number;
|
|
146
|
+
};
|
|
147
|
+
/** How a control shows a permission it cannot use: hidden, or disabled with a reason. */
|
|
148
|
+
type GateMode = "hide" | "disable";
|
|
149
|
+
/**
|
|
150
|
+
* Everything a permission-gated control renders from, in one value: a
|
|
151
|
+
* button, a menu item or a link reads these fields and decides nothing
|
|
152
|
+
* itself. The client is a hint; the server checks again.
|
|
153
|
+
*/
|
|
154
|
+
type GateView = {
|
|
155
|
+
/** The decision granted the action. */
|
|
156
|
+
readonly allowed: boolean;
|
|
157
|
+
/** The snapshot is loading; render the control disabled, not hidden. */
|
|
158
|
+
readonly pending: boolean;
|
|
159
|
+
/** `mode: "hide"` and the action is not available: render nothing. */
|
|
160
|
+
readonly hidden: boolean;
|
|
161
|
+
/** The control cannot run the action now (denied, pending or awaiting approval). */
|
|
162
|
+
readonly disabled: boolean;
|
|
163
|
+
/** The decision needs a person's approval first; offer to request it. */
|
|
164
|
+
readonly needsApproval: boolean;
|
|
165
|
+
/** The plans that would grant the action, for an upgrade prompt; empty otherwise. */
|
|
166
|
+
readonly upgrade: readonly string[];
|
|
167
|
+
/** Title and detail for a tooltip or an accessible description. */
|
|
168
|
+
readonly reason: DecisionDescription;
|
|
169
|
+
readonly decision: Decision;
|
|
170
|
+
};
|
|
171
|
+
//#endregion
|
|
172
|
+
export { FilterResult as a, PermissionSet as c, RolesOptions as d, SubjectView as f, ClientStoreOptions as h, ClientStatus as i, PermissionState as l, ClientStore as m, ApprovalState as n, GateMode as o, TenantView as p, ClientPermDock as r, GateView as s, ApprovalHandle as t, ProviderOptionsBase as u };
|