permdock 0.3.1 → 0.5.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/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
- package/dist/a2a/index.d.ts +8 -6
- package/dist/a2a/index.js +21 -31
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-B4R5fnMU.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 -23
- package/dist/ai-sdk/index.js +38 -21
- package/dist/app-data-MuyzVqX8.js +60 -0
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
- 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-Dg8XsRaO.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +228 -75
- package/dist/automation-BMZPIVUM.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 +11 -23
- package/dist/better-supabase/index.d.ts +438 -86
- package/dist/better-supabase/index.js +1027 -184
- package/dist/bind--9EFVYWF.d.ts +38 -0
- package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/build-instance-BMnAudHn.js +52 -0
- package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
- package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -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-BECMPrwc.js +100 -0
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
- 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 +26 -30
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +15 -45
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +20 -6
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +240 -347
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
- package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
- package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
- package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
- package/dist/constants-DcJABbLW.js +20 -0
- package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +18 -18
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/create-DnrmLnLW.js +323 -0
- package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/deciding-columns-Sq12mEA6.js +123 -0
- package/dist/delegation-DaXVdDhM.js +286 -0
- package/dist/delegation-input-FTxMK3ji.js +19 -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-D8jDHgsl.d.ts +19 -0
- package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
- package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/doctor-DFjUxf2f.js +2361 -0
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +6 -14
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +14 -13
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +23 -29
- 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 +14 -12
- package/dist/fastify/index.d.ts +26 -13
- package/dist/fastify/index.js +17 -36
- package/dist/fetch-adapter-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
- package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
- package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
- package/dist/grantee-Cn1HyUsI.js +254 -0
- package/dist/grantee-conditions-CcXf8hMM.js +271 -0
- package/dist/grantee-match-DHArqY82.js +142 -0
- 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-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +14 -13
- package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
- package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
- package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/index-DOVf7RJv.d.ts +900 -0
- package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +20 -14
- package/dist/index.js +33 -23
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +166 -145
- package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +6 -14
- package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
- 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-CtKR3GXL.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-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
- package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
- package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
- package/dist/mcp/index.d.ts +36 -9
- package/dist/mcp/index.js +476 -448
- package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +20 -20
- package/dist/next/index.d.ts +40 -20
- package/dist/next/index.js +37 -39
- 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-BFp-PZZA.js +126 -0
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +18 -25
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
- package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +23 -20
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +53 -27
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/output-files-DhRBBE4n.js +138 -0
- package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
- package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
- package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
- package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
- package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +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 +47 -29
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.d.ts +502 -0
- package/dist/permission-registry-Br4jSNVi.js +385 -0
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/policy-DLZJ5gAp.js +399 -0
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
- 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 +6 -12
- package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
- package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/protected-DEPHc2xV.d.ts +38 -0
- package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
- package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
- package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -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 -63
- package/dist/react-native/index.js +45 -27
- package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/relation-walk-3OyDBF0S.js +186 -0
- package/dist/relations-BnCWnJGI.js +163 -0
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/request-context-BTRTG7OT.js +71 -0
- package/dist/request-context-C2_1lchh.d.ts +5 -0
- 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-D_jw0BFx.js +243 -0
- package/dist/retire-CALjIQ7e.js +240 -0
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
- package/dist/role-builder-CXbis5-X.js +623 -0
- package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
- 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-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
- package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
- package/dist/server/index.d.ts +13 -134
- package/dist/server/index.js +13 -10
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/shared-CD11nBbC.js +304 -0
- package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +24 -25
- package/dist/solid/index.js +41 -11
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
- package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
- package/dist/sql-B5T1IL83.js +55 -0
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +440 -106
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
- package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
- package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
- package/dist/stores-ClZUgeoP.d.ts +30 -0
- package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -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/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +13 -6
- package/dist/supabase/middleware.js +16 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
- package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +11 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +26 -12
- package/dist/svelte/runtime.d.ts +10 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +5 -5
- 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/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +36 -316
- package/dist/testing/index.d.ts +391 -106
- package/dist/testing/index.js +4574 -1286
- 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-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
- package/dist/tool-refusal-CMLN5xhn.js +41 -0
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +18 -17
- package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
- package/dist/types-BNORmDM8.d.ts +172 -0
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
- package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/types-fbZ7JEXr.d.ts +89 -0
- package/dist/types-tIgIeIKJ.d.ts +66 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
- package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
- package/dist/validity-CZ7-y0Cj.js +79 -0
- package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
- package/dist/verify-DbCL9bnB.js +1770 -0
- package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
- package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
- package/dist/vue/index.d.ts +25 -21
- package/dist/vue/index.js +25 -9
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +13 -37
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.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-Bd1Tejur.d.ts +15 -0
- package/dist/wrap-gX61EtpB.js +27 -0
- package/package.json +140 -41
- 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 +129 -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 +19 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +13 -8
- 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 +18 -12
- package/skills/permdock-wire/references/adapters.md +146 -50
- package/skills/permdock-wire/references/policy-options.md +15 -6
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DbYAuNkG.js +0 -224
- package/dist/arazzo-C9chp3ST.js +0 -54
- package/dist/bind-C_ob3LKa.d.ts +0 -25
- package/dist/catalog-CRW5Mx_B.js +0 -2
- package/dist/catalog-CYj-mX2O.js +0 -48
- package/dist/catalog-DWF5cYqB.js +0 -55
- package/dist/cloud-CfwZ39Rl.js +0 -50
- package/dist/cloud-DWLXO2af.js +0 -118
- package/dist/collect-CHB22Sx4.js +0 -83
- package/dist/collect-DSWOk19R.js +0 -2
- package/dist/commands-BeaGNj_o.js +0 -97
- package/dist/config-ir40y8m0.js +0 -36
- package/dist/create-CMwIl-w2.js +0 -253
- package/dist/delegation-D8pUEuce.js +0 -103
- package/dist/diff-C9RDjjhs.js +0 -48
- package/dist/doctor-Djh6JDEk.js +0 -53
- package/dist/doctor-DvH0IQff.js +0 -1194
- package/dist/doctor-collect-CjdO0wQX.js +0 -665
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/evaluation-items-CfCCejQd.js +0 -40
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-BMl1RxoX.js +0 -26
- package/dist/grantee-Cv5Sogfv.js +0 -602
- 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-0nNqHspG.d.ts +0 -6
- package/dist/index-BNc7Wer_.d.ts +0 -483
- package/dist/index-C7Tw7MaW.d.ts +0 -201
- package/dist/instance-options-Dhhcnm3y.js +0 -22
- package/dist/load-DwJUafYN.js +0 -2
- package/dist/manifest-iaoBXHKc.js +0 -783
- package/dist/map-AcxK9o_D.js +0 -147
- package/dist/may-use-DndQ5tQ-.js +0 -77
- package/dist/openapi-CQTsgKoB.js +0 -164
- package/dist/permdock-CbgvLnuo.js +0 -3479
- package/dist/permissions-DVoF6dMt.js +0 -662
- package/dist/policy-xyWg7QdR.js +0 -1122
- package/dist/powersync-CrBX8hY6.js +0 -2
- package/dist/powersync-DE19b9dT.js +0 -62
- package/dist/protected-BdnIEFkY.d.ts +0 -27
- package/dist/protected-xAr24FEC.d.ts +0 -40
- package/dist/relations-cjOL01hZ.js +0 -505
- package/dist/rls-P-BeBx0n.js +0 -238
- package/dist/rls-graph-CHwx0V8q.js +0 -435
- package/dist/rls-ownership-DcYlZ09B.js +0 -843
- package/dist/rls-shared-Cewd_-zI.js +0 -495
- package/dist/rls-verify-CMv9H3wV.js +0 -746
- package/dist/run-BWc9qqvE.js +0 -174
- package/dist/server-DlZ28Oz5.js +0 -268
- package/dist/sink-B1fZzIMf.d.ts +0 -104
- package/dist/sink-Bd9PSyfq.js +0 -141
- package/dist/skills-C5CbhhpG.js +0 -56
- package/dist/snapshot-Enxd0n-s.js +0 -975
- package/dist/sql-xdg5f4Fi.js +0 -27
- package/dist/src-BDwEZWrZ.js +0 -568
- package/dist/store-jOBYpiXC.d.ts +0 -36
- package/dist/stores-C0IMQrGI.d.ts +0 -52
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-config-Bj3iDH2I.js +0 -472
- package/dist/supabase-hook-gd3s8bxB.js +0 -2
- package/dist/supabase-s4o9s1O1.js +0 -83
- package/dist/thenable-okc2xDsj.js +0 -10
- package/dist/types-BnIEz1sU.d.ts +0 -48
- package/dist/types-Bvc4oWT6.d.ts +0 -9
- package/dist/types-CKNSyIf_.d.ts +0 -52
- package/dist/types-Cq_H8N_X.d.ts +0 -197
- package/dist/usage-B0YuTQRO.js +0 -42
- package/dist/usage-DorAJiU_.js +0 -2
- package/dist/vocabulary-DA8a8zif.d.ts +0 -56
- package/dist/watch-BwxLTYMZ.js +0 -2
|
@@ -0,0 +1,900 @@
|
|
|
1
|
+
import { $n as Delegation, Bt as LocalSnapshotManifest, C as MembershipFixture, D as PolicyDelegation, I as SeparationConflict, In as DenialReason, J as EntitlementSource, Kt as AccessEvent, Lt as InstanceHandle, N as RoleBinding, Nn as Decision, P as RoleOptions, Pn as Denial, Qt as DeliveryEvent, R as SupportAccessOptions, Rt as Instant, T as Policy, V as VocabularyFromInput, Vt as Snapshot, W as CustomRoleSource, Xt as DecisionEvent, Y as JwtClaims, Zn as CustomRole, at as SettingsSource, c as BreakGlassOptions, ct as TenantSettings, et as MembershipSource, g as GrantCondition, h as Grant, i as ApprovalOption, ir as Subject, it as RelationSource, j as PolicyVocabulary, k as PolicyOptions, mr as OpaqueCondition, nr as Membership, nt as RelationGroup, ot as SnapshotSource, rn as SinkEvent, rr as Principal, s as AssuranceRequirement, sn as PolicyScopesInput, ur as ConditionRef, ut as TokenSigner, vr as SqlFunctionArg, yr as SqlFunctionCondition } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { C as InferPermissionTree, D as PermissionsOptions, E as PermissionTree, F as ResourceParent, L as ResourceRelationInput, M as ResourceMeta, N as ResourceNode, P as ResourceOptions, R as ResourceRestricted, T as PermissionKind, g as ActionMeta, h as ActionList, k as ResourceInit, r as Role, w as Permission, z as ResourceXTree } from "./vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { i as PermDockOptions, r as PermDock } from "./permdock-D7eeLJER.js";
|
|
4
|
+
import { a as PolicyDocument } from "./hosted-DBDX0M-P.js";
|
|
5
|
+
import { m as ApprovalStore } from "./types-CCpc2Dcv.js";
|
|
6
|
+
import { t as InstanceOptions } from "./instance-options-Omfd793B.js";
|
|
7
|
+
import { n as PermDockWrap } from "./wrap-Bd1Tejur.js";
|
|
8
|
+
import { t as JsonSchemaNode } from "./json-schema-CN_iLFH2.js";
|
|
9
|
+
import { i as CatalogEventData, s as CloudEvent } from "./sink-Bj_lDUDq.js";
|
|
10
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
11
|
+
//#region src/conditions/refs.d.ts
|
|
12
|
+
type KnownRefField = "id" | "issuer" | "kind" | "tenant" | "team" | "roles" | "plans" | "memberships" | "assurance" | "binding" | "session";
|
|
13
|
+
type SubjectRef = ConditionRef & { readonly [K in KnownRefField]: SubjectRef; } & {
|
|
14
|
+
readonly [key: string]: SubjectRef;
|
|
15
|
+
};
|
|
16
|
+
declare const principal: SubjectRef;
|
|
17
|
+
declare const context: SubjectRef;
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/core/custom-roles.d.ts
|
|
20
|
+
type CustomRoleDropReason = "unknown-permission" | "outside-ceiling" | "condition-not-allowed" | "unknown-level";
|
|
21
|
+
/** Why part of a custom role was left out: a permission, or an undeclared include. */
|
|
22
|
+
type CustomRoleDrop = {
|
|
23
|
+
readonly permission: string;
|
|
24
|
+
readonly reason: CustomRoleDropReason;
|
|
25
|
+
/** The stored level, for `unknown-level`. */
|
|
26
|
+
readonly level?: string;
|
|
27
|
+
} | {
|
|
28
|
+
readonly role: string;
|
|
29
|
+
readonly reason: "unknown-role";
|
|
30
|
+
};
|
|
31
|
+
/** A stored grant that named a permission by a key it was renamed from. */
|
|
32
|
+
type CustomRoleRename = {
|
|
33
|
+
readonly from: string;
|
|
34
|
+
readonly to: string;
|
|
35
|
+
};
|
|
36
|
+
type ResolvedCustomRole = {
|
|
37
|
+
/** Declared grants re-targeted to the custom role; conditions and approvals kept. */
|
|
38
|
+
readonly grants: readonly Grant[];
|
|
39
|
+
readonly dropped: readonly CustomRoleDrop[];
|
|
40
|
+
/** Grants stored under a former key (`definePermissions` `renamed`), resolved to the current one. */
|
|
41
|
+
readonly renamed: readonly CustomRoleRename[];
|
|
42
|
+
};
|
|
43
|
+
type CustomRoleValidation = {
|
|
44
|
+
readonly ok: boolean;
|
|
45
|
+
/** Permission keys the role allows after the ceiling, sorted. */
|
|
46
|
+
readonly permissions: readonly string[];
|
|
47
|
+
readonly dropped: readonly CustomRoleDrop[];
|
|
48
|
+
/** Grants to rewrite in storage: each still resolves, under its current key. */
|
|
49
|
+
readonly renamed: readonly CustomRoleRename[];
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* The one resolver behind evaluation, snapshots and `validateCustomRole`.
|
|
53
|
+
* Included roles' grants plus the role's own allows, minus its denies, all
|
|
54
|
+
* intersected with the ceiling. An allow inherits the condition, approval and
|
|
55
|
+
* limit of the declared grant it comes from: an included assignable role's
|
|
56
|
+
* grant when there is one, otherwise every ceiling grant of that permission,
|
|
57
|
+
* together with the denies of the roles those grants belong to.
|
|
58
|
+
*/
|
|
59
|
+
declare function resolveCustomRole(policy: Policy, role: CustomRole): ResolvedCustomRole;
|
|
60
|
+
declare function validateCustomRole(policy: Policy, role: CustomRole): CustomRoleValidation;
|
|
61
|
+
/**
|
|
62
|
+
* The compact JWT form of custom roles for the `memberships[].grants` claim
|
|
63
|
+
* RLS reads in `jwt` mode: role name to entries, where `key` allows, `-key`
|
|
64
|
+
* denies and `@role` includes. Put a team custom role on its team membership.
|
|
65
|
+
* Pass `policy` to write keys stored under a former name as the current key.
|
|
66
|
+
*/
|
|
67
|
+
declare function customRoleClaim(roles: readonly CustomRole[], policy?: Policy): Readonly<Record<string, readonly string[]>>;
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region src/core/snapshot.d.ts
|
|
70
|
+
declare function parseSnapshot(json: unknown): Snapshot;
|
|
71
|
+
//#endregion
|
|
72
|
+
//#region src/core/from-snapshot.d.ts
|
|
73
|
+
declare function fromSnapshot(snapshot: Snapshot, options?: {
|
|
74
|
+
readonly tenant?: string;
|
|
75
|
+
readonly team?: string;
|
|
76
|
+
}): PermDock;
|
|
77
|
+
declare function emptySnapshot(): Snapshot;
|
|
78
|
+
//#endregion
|
|
79
|
+
//#region src/core/approval-required.d.ts
|
|
80
|
+
declare function requiresApproval(approval: Grant["approval"] | undefined): boolean;
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region src/core/policy.d.ts
|
|
83
|
+
declare function definePolicy<TUser, TPrincipal extends Principal, const Input extends PermissionTree | PolicyVocabulary, const S extends PolicyScopesInput = PolicyScopesInput>(permissions: Input, options: PolicyOptions<TUser, TPrincipal, S>): Policy<TUser, TPrincipal, VocabularyFromInput<Input>>;
|
|
84
|
+
declare function separationConflicts(policy: Policy, memberships: readonly MembershipFixture[]): readonly SeparationConflict[];
|
|
85
|
+
//#endregion
|
|
86
|
+
//#region src/core/permission-registry.d.ts
|
|
87
|
+
declare function getResource<RX = never>(tree: PermissionTree & ResourceXTree<RX>, name: string): ([RX] extends [never] ? ResourceNode : ResourceNode & {
|
|
88
|
+
readonly meta?: ResourceMeta<Readonly<RX>>;
|
|
89
|
+
}) | undefined;
|
|
90
|
+
declare function listPermissions(tree: PermissionTree | Permission): readonly Permission[];
|
|
91
|
+
declare function findPermission(tree: PermissionTree, keyOrScope: string): Permission | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* A permission leaf: string `key`, `scope`, `resource` and `action` plus an
|
|
94
|
+
* object `meta`. `kind` is non-enumerable and does not survive
|
|
95
|
+
* `JSON.stringify`, so a leaf that crossed a serialisation boundary passes
|
|
96
|
+
* without it; when present it must be `instance` or `collection`.
|
|
97
|
+
*/
|
|
98
|
+
declare function isPermission(value: unknown): value is Permission;
|
|
99
|
+
declare function mergePermissions<const Trees extends readonly PermissionTree[]>(...trees: Trees): PermissionTree;
|
|
100
|
+
//#endregion
|
|
101
|
+
//#region src/conditions/opaque.d.ts
|
|
102
|
+
declare function opaque(input: {
|
|
103
|
+
readonly sql: string;
|
|
104
|
+
readonly fingerprint: string;
|
|
105
|
+
}): OpaqueCondition;
|
|
106
|
+
//#endregion
|
|
107
|
+
//#region src/conditions/sql-function.d.ts
|
|
108
|
+
declare function sqlFunction(name: string, options: {
|
|
109
|
+
readonly args?: readonly SqlFunctionArg[];
|
|
110
|
+
readonly twin: unknown;
|
|
111
|
+
}): SqlFunctionCondition;
|
|
112
|
+
//#endregion
|
|
113
|
+
//#region src/core/memory-sources.d.ts
|
|
114
|
+
declare function memoryEntitlementSource(entries: Readonly<Record<string, readonly string[]>>): EntitlementSource;
|
|
115
|
+
declare function memorySettingsSource(settings: Readonly<Record<string, TenantSettings>>): SettingsSource;
|
|
116
|
+
/** Memberships keyed by principal id; `tenant` is not a filter, as for a database source. */
|
|
117
|
+
declare function memoryMembershipSource(entries: Readonly<Record<string, readonly Membership[]>>): MembershipSource;
|
|
118
|
+
/** A snapshot held in memory; `set` replaces it and notifies every subscriber. */
|
|
119
|
+
declare function memorySnapshotSource(initial: Snapshot | string): SnapshotSource & {
|
|
120
|
+
set(snapshot: Snapshot | string): void;
|
|
121
|
+
};
|
|
122
|
+
declare function memoryCustomRoleSource(customRoles: readonly CustomRole[]): CustomRoleSource;
|
|
123
|
+
//#endregion
|
|
124
|
+
//#region src/core/approval-state.d.ts
|
|
125
|
+
/** The denial detail when an `ApprovalPolicySource` threw or returned an invalid entry. */
|
|
126
|
+
declare const APPROVAL_POLICY_UNAVAILABLE = "approval-policy-unavailable";
|
|
127
|
+
//#endregion
|
|
128
|
+
//#region src/core/memberships.d.ts
|
|
129
|
+
/**
|
|
130
|
+
* One `MembershipSource` over several: memberships are merged and
|
|
131
|
+
* de-duplicated, `list` concatenates the sources that can list, and `version`
|
|
132
|
+
* is the highest version any source reports. A source that throws makes the
|
|
133
|
+
* whole lookup throw, which the subject resolver turns into no memberships.
|
|
134
|
+
*/
|
|
135
|
+
declare function composeMemberships(sources: readonly MembershipSource[]): MembershipSource;
|
|
136
|
+
/**
|
|
137
|
+
* Trust the memberships the verified token carries, and read `source` only
|
|
138
|
+
* when the token marks them truncated. With `version`, a token minted before
|
|
139
|
+
* the latest membership change is stale for the policy's `fresh` permissions,
|
|
140
|
+
* or with `onStale: 'reread'` has its memberships read from `source` instead.
|
|
141
|
+
*/
|
|
142
|
+
declare function claimsFirst(source: MembershipSource | readonly MembershipSource[], options?: {
|
|
143
|
+
readonly version?: MembershipSource["version"];
|
|
144
|
+
readonly onStale?: "deny" | "reread";
|
|
145
|
+
}): MembershipSource;
|
|
146
|
+
/** Whether the identity provider owns `membership`: the application must not add, change or remove it. */
|
|
147
|
+
declare function isExternallyManaged(membership: Membership): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* How many principals hold `role` in one scope instance now, from the
|
|
150
|
+
* source's member list (`MembershipSource.list`): live memberships of exactly
|
|
151
|
+
* that scope and instance, each principal counted once. The `holders` a
|
|
152
|
+
* `decideRoleChange` with `min`, `max` or `transferOnly` needs. `undefined`
|
|
153
|
+
* when the source cannot list or the read fails, which that check denies.
|
|
154
|
+
*/
|
|
155
|
+
declare function countHolders(source: MembershipSource | readonly MembershipSource[], query: {
|
|
156
|
+
readonly scope: string;
|
|
157
|
+
readonly id: string;
|
|
158
|
+
readonly role: string | {
|
|
159
|
+
readonly key: string;
|
|
160
|
+
};
|
|
161
|
+
}): Promise<number | undefined>;
|
|
162
|
+
//#endregion
|
|
163
|
+
//#region src/core/stripe-entitlements.d.ts
|
|
164
|
+
/** The part of the Stripe Node SDK this source calls: `stripe.entitlements.activeEntitlements.list`. */
|
|
165
|
+
type StripeEntitlementsClient = {
|
|
166
|
+
readonly entitlements: {
|
|
167
|
+
readonly activeEntitlements: {
|
|
168
|
+
list(params: {
|
|
169
|
+
readonly customer: string;
|
|
170
|
+
readonly limit?: number;
|
|
171
|
+
readonly starting_after?: string;
|
|
172
|
+
}): PromiseLike<{
|
|
173
|
+
readonly data: readonly {
|
|
174
|
+
readonly id: string;
|
|
175
|
+
readonly lookup_key: string;
|
|
176
|
+
}[];
|
|
177
|
+
readonly has_more: boolean;
|
|
178
|
+
}>;
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Plan names from Stripe Entitlements: the `lookup_key` of every active
|
|
184
|
+
* entitlement of the tenant's Stripe customer. `customer` maps the active
|
|
185
|
+
* tenant to its customer id; no tenant or no customer means no entitlements.
|
|
186
|
+
* Pass it as `entitlements`, and grant with `plan('<lookup_key>')`.
|
|
187
|
+
*/
|
|
188
|
+
declare function stripeEntitlementSource(options: {
|
|
189
|
+
readonly stripe: StripeEntitlementsClient;
|
|
190
|
+
readonly customer: (tenant: string, principal: {
|
|
191
|
+
readonly id: string;
|
|
192
|
+
}) => string | undefined | PromiseLike<string | undefined>;
|
|
193
|
+
}): EntitlementSource;
|
|
194
|
+
//#endregion
|
|
195
|
+
//#region src/core/memory-relations.d.ts
|
|
196
|
+
type MemoryEdge = {
|
|
197
|
+
/** The object's id. */
|
|
198
|
+
readonly id: string;
|
|
199
|
+
readonly principal: string;
|
|
200
|
+
readonly startsAt?: number;
|
|
201
|
+
readonly expiresAt?: number;
|
|
202
|
+
};
|
|
203
|
+
type MemoryRelationSourceData = {
|
|
204
|
+
/** Rows per resource: parent pointers, links, restricted flags and relation columns are read from them. */
|
|
205
|
+
readonly rows?: Readonly<Record<string, readonly Readonly<Record<string, unknown>>[]>>;
|
|
206
|
+
/** Edge-table rows per resource and relation. */
|
|
207
|
+
readonly edges?: Readonly<Record<string, Readonly<Record<string, readonly MemoryEdge[]>>>>;
|
|
208
|
+
/**
|
|
209
|
+
* Edge tables as the database holds them, keyed by `edge` name: each row
|
|
210
|
+
* is read through the relation's `object`, `subject`, `expiresAt`, `match`
|
|
211
|
+
* and `groups` columns. A relation whose table is here ignores `edges`.
|
|
212
|
+
*/
|
|
213
|
+
readonly tables?: Readonly<Record<string, readonly Readonly<Record<string, unknown>>[]>>;
|
|
214
|
+
};
|
|
215
|
+
/**
|
|
216
|
+
* An in-process `RelationSource` over plain rows and edges, read against the
|
|
217
|
+
* resource definitions in `permissions`. For tests, fixtures and small apps.
|
|
218
|
+
*/
|
|
219
|
+
declare function memoryRelationSource(permissions: PermissionTree, data?: MemoryRelationSourceData): RelationSource;
|
|
220
|
+
//#endregion
|
|
221
|
+
//#region src/core/who-can.d.ts
|
|
222
|
+
/** One way a principal holds a permission on an object. */
|
|
223
|
+
type HoldingVia = {
|
|
224
|
+
readonly kind: "role";
|
|
225
|
+
readonly role: string;
|
|
226
|
+
readonly membership: Membership;
|
|
227
|
+
} | {
|
|
228
|
+
readonly kind: "relation";
|
|
229
|
+
readonly resource: string;
|
|
230
|
+
readonly relation: string;
|
|
231
|
+
/** The instance the relation is held on: the object or one of its ancestors. */
|
|
232
|
+
readonly id: string;
|
|
233
|
+
} | {
|
|
234
|
+
readonly kind: "share";
|
|
235
|
+
readonly resource: string;
|
|
236
|
+
readonly relation: string;
|
|
237
|
+
readonly id: string;
|
|
238
|
+
readonly expiresAt?: number;
|
|
239
|
+
/** The group the share names, when the principal holds it as one of its members. */
|
|
240
|
+
readonly group?: RelationGroup;
|
|
241
|
+
};
|
|
242
|
+
type Holder = {
|
|
243
|
+
readonly principal: {
|
|
244
|
+
readonly id: string;
|
|
245
|
+
};
|
|
246
|
+
readonly via: readonly HoldingVia[];
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* Who holds a permission on one object, for share dialogs and access
|
|
250
|
+
* reviews. It lists and never grants. `complete: false` means some grantee
|
|
251
|
+
* could not be enumerated (a global role, a plan, a source without `list`,
|
|
252
|
+
* an unavailable relation): holders may be missing, so check with `decide`.
|
|
253
|
+
*/
|
|
254
|
+
type WhoCan = {
|
|
255
|
+
readonly permission: string;
|
|
256
|
+
readonly holders: readonly Holder[];
|
|
257
|
+
readonly complete: boolean;
|
|
258
|
+
};
|
|
259
|
+
/**
|
|
260
|
+
* Who holds `permission` on `resource` for the instance's policy and how
|
|
261
|
+
* (role, relation or share), from `MembershipSource.list` and
|
|
262
|
+
* `RelationSource.related`. It lists and never grants; `complete: false`
|
|
263
|
+
* means some holders could not be listed. An instance built from a
|
|
264
|
+
* snapshot answers an empty, incomplete list.
|
|
265
|
+
*/
|
|
266
|
+
declare function whoCan(permdock: InstanceHandle, permission: Permission<string, unknown, "instance">, resource: unknown): Promise<WhoCan>;
|
|
267
|
+
//#endregion
|
|
268
|
+
//#region src/core/policy-sign.d.ts
|
|
269
|
+
type SignPolicyDocumentOptions = {
|
|
270
|
+
/** `aud`: the environment URL `cloud().policies` checks it against. */
|
|
271
|
+
readonly audience: string | readonly string[];
|
|
272
|
+
/** `exp`, a NumericDate; the signer's default (one hour after `iat`) when absent. */
|
|
273
|
+
readonly expiresAt?: number;
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* Signs `document` as a `vnd.permdock.policy+jwt`: the `policy` claim holds
|
|
277
|
+
* every field but `id` and `issuedAt`, which become `jti` and `iat`, so
|
|
278
|
+
* `policyDocumentFromClaims` reads it back. `iss` is the signer's own.
|
|
279
|
+
*/
|
|
280
|
+
declare function signPolicyDocument(document: PolicyDocument, signer: TokenSigner, options: SignPolicyDocumentOptions): Promise<string>;
|
|
281
|
+
//#endregion
|
|
282
|
+
//#region src/core/snapshot-sign.d.ts
|
|
283
|
+
type SignSnapshotOptions = {
|
|
284
|
+
/** `aud`; a signer with no default audience refuses to sign without one. */
|
|
285
|
+
readonly audience?: string | readonly string[];
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* Signs `snapshot` as a `vnd.permdock.snapshot+jwt`. `issuedAt` and
|
|
289
|
+
* `expiresAt` become `iat` and `exp` and leave the `snapshot` claim, so the
|
|
290
|
+
* registered claims are the only times a verifier reads.
|
|
291
|
+
*/
|
|
292
|
+
declare function signSnapshot(snapshot: Snapshot, signer: TokenSigner, options?: SignSnapshotOptions): Promise<string>;
|
|
293
|
+
/**
|
|
294
|
+
* The snapshot a verified `vnd.permdock.snapshot+jwt` carries, parsed as
|
|
295
|
+
* `parseSnapshot` parses it, with `issuedAt` and `expiresAt` from `iat` and
|
|
296
|
+
* `exp`. `null` when the claim is missing or not a valid snapshot.
|
|
297
|
+
*/
|
|
298
|
+
declare function snapshotFromClaims(claims: JwtClaims): Snapshot | null;
|
|
299
|
+
//#endregion
|
|
300
|
+
//#region src/core/delivery-event.d.ts
|
|
301
|
+
declare function deliveryEvent(input: Omit<DeliveryEvent, "type" | "at"> & {
|
|
302
|
+
/** An RFC 3339 instant; defaults to now. */
|
|
303
|
+
readonly at?: string;
|
|
304
|
+
}): DeliveryEvent;
|
|
305
|
+
//#endregion
|
|
306
|
+
//#region src/core/arazzo.d.ts
|
|
307
|
+
type ArazzoSimulateInput = {
|
|
308
|
+
readonly arazzo: unknown;
|
|
309
|
+
readonly openapi: unknown;
|
|
310
|
+
readonly workflowId?: string;
|
|
311
|
+
readonly permissions?: PermissionTree;
|
|
312
|
+
readonly inputs?: Readonly<Record<string, unknown>>;
|
|
313
|
+
};
|
|
314
|
+
type ArazzoStepResult = {
|
|
315
|
+
readonly stepId: string;
|
|
316
|
+
/** The nested workflow that owns the step, when it is not the plan's workflow. */
|
|
317
|
+
readonly workflowId?: string;
|
|
318
|
+
readonly operationId?: string;
|
|
319
|
+
readonly permissions: readonly Permission[];
|
|
320
|
+
readonly decision: Decision;
|
|
321
|
+
readonly provisional?: true;
|
|
322
|
+
};
|
|
323
|
+
type ArazzoPlan = {
|
|
324
|
+
readonly workflowId: string;
|
|
325
|
+
readonly outcome: Decision["outcome"];
|
|
326
|
+
readonly steps: readonly ArazzoStepResult[];
|
|
327
|
+
};
|
|
328
|
+
type ArazzoFinding = {
|
|
329
|
+
readonly stepId: string;
|
|
330
|
+
readonly workflowId: string;
|
|
331
|
+
readonly reason: "undocumented" | "unsupported" | "validation" | "unknown-key";
|
|
332
|
+
readonly detail: string;
|
|
333
|
+
};
|
|
334
|
+
declare function arazzoFindings(input: ArazzoSimulateInput, tree: PermissionTree | undefined): readonly ArazzoFinding[];
|
|
335
|
+
/**
|
|
336
|
+
* Walks an Arazzo workflow against `permdock`: each step's operation is
|
|
337
|
+
* decided as `permdock.simulate` would, and a server instance emits one
|
|
338
|
+
* simulate event for the whole plan. Works on an instance built from a
|
|
339
|
+
* snapshot too.
|
|
340
|
+
*/
|
|
341
|
+
declare function simulateArazzo(permdock: PermDock, input: ArazzoSimulateInput): ArazzoPlan;
|
|
342
|
+
//#endregion
|
|
343
|
+
//#region src/core/local-manifest.d.ts
|
|
344
|
+
/**
|
|
345
|
+
* What the policy grants, as JSON a device turns into snapshots from its own
|
|
346
|
+
* membership rows (`localSnapshot` in `permdock/react-native`). Write it at
|
|
347
|
+
* build time; the policy itself never ships to the client.
|
|
348
|
+
*/
|
|
349
|
+
declare function localSnapshotManifest(policy: Policy): LocalSnapshotManifest;
|
|
350
|
+
//#endregion
|
|
351
|
+
//#region src/core/app.d.ts
|
|
352
|
+
/**
|
|
353
|
+
* How strict `defineApp` is about the services the policy needs. `dev`
|
|
354
|
+
* fills in in-process defaults (a memory approval store and a memory limit
|
|
355
|
+
* store) so a new app runs before any infrastructure exists. `prod` throws at startup when a grant needs a
|
|
356
|
+
* service the app does not configure, instead of denying at run time.
|
|
357
|
+
*/
|
|
358
|
+
type AppProfile = "dev" | "prod";
|
|
359
|
+
/**
|
|
360
|
+
* Everything an app wires once and every adapter reads: the data sources,
|
|
361
|
+
* the opt-in features and the services. An adapter's own options win over
|
|
362
|
+
* these, key by key.
|
|
363
|
+
*/
|
|
364
|
+
type AppOptions = InstanceOptions & Pick<PermDockOptions, "settings"> & {
|
|
365
|
+
/** Where approval requests open and resume, for every adapter. */
|
|
366
|
+
readonly store?: ApprovalStore;
|
|
367
|
+
readonly profile?: AppProfile;
|
|
368
|
+
};
|
|
369
|
+
//#endregion
|
|
370
|
+
//#region src/app/define-app.d.ts
|
|
371
|
+
/**
|
|
372
|
+
* Binds the app's sources, features and services to `policy`. The result
|
|
373
|
+
* is a policy: pass it wherever a policy goes (`createPermDock`, every
|
|
374
|
+
* adapter, the CLI) and each picks up the app definition, with its own
|
|
375
|
+
* options taking precedence. The profile defaults to `prod`.
|
|
376
|
+
*/
|
|
377
|
+
declare function defineApp<TUser, TPrincipal extends Principal, V extends PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options?: AppOptions): Policy<TUser, TPrincipal, V>;
|
|
378
|
+
//#endregion
|
|
379
|
+
//#region src/core/shadow.d.ts
|
|
380
|
+
/** The application's existing check, asked the same question PermDock is. */
|
|
381
|
+
type LegacyCheck = (input: {
|
|
382
|
+
readonly permission: Permission;
|
|
383
|
+
readonly data: unknown;
|
|
384
|
+
readonly subject: Subject;
|
|
385
|
+
}) => boolean;
|
|
386
|
+
/** One check where the legacy system and PermDock disagree. */
|
|
387
|
+
type ShadowMismatch = {
|
|
388
|
+
readonly permission: string;
|
|
389
|
+
readonly principal: string | null;
|
|
390
|
+
/** What the legacy check answered; `false` when it threw. */
|
|
391
|
+
readonly legacy: boolean;
|
|
392
|
+
readonly permdock: Decision["outcome"];
|
|
393
|
+
/** `true` when PermDock's answer was the one returned. */
|
|
394
|
+
readonly enforced: boolean;
|
|
395
|
+
};
|
|
396
|
+
type ShadowOptions = {
|
|
397
|
+
readonly legacy: LegacyCheck;
|
|
398
|
+
/**
|
|
399
|
+
* Permissions PermDock decides; every other check returns the legacy
|
|
400
|
+
* answer. `"all"` once every mismatch is resolved; default none.
|
|
401
|
+
*/
|
|
402
|
+
readonly enforce?: readonly Permission[] | "all";
|
|
403
|
+
/** Called for each disagreement; a throw here is ignored. */
|
|
404
|
+
readonly onMismatch?: (mismatch: ShadowMismatch) => void;
|
|
405
|
+
};
|
|
406
|
+
/**
|
|
407
|
+
* Runs PermDock beside the application's existing checks while adopting
|
|
408
|
+
* it. Each `can`, `decide`, `decideEach`, `filter` and `assert` asks both;
|
|
409
|
+
* the legacy answer is returned unless the permission is in `enforce`, and
|
|
410
|
+
* every disagreement reaches `onMismatch`. Promote permissions one by one
|
|
411
|
+
* as their mismatches are resolved, then remove the wrap. Pass it as an
|
|
412
|
+
* adapter's `wrap` option, or call it on a core instance.
|
|
413
|
+
*/
|
|
414
|
+
declare function shadowMode(options: ShadowOptions): PermDockWrap;
|
|
415
|
+
//#endregion
|
|
416
|
+
//#region src/core/may-access.d.ts
|
|
417
|
+
/**
|
|
418
|
+
* An optimistic routing hint for a proxy or middleware, never a decision.
|
|
419
|
+
* `false` only when the subject's declared roles provably lack `permission`;
|
|
420
|
+
* `true` whenever custom roles, plans, memberships the claims do not carry or
|
|
421
|
+
* row conditions could still grant it. Synchronous, no network, never throws.
|
|
422
|
+
* Pages, Server Actions and RLS remain the enforcement points.
|
|
423
|
+
*/
|
|
424
|
+
declare function mayAccess(policy: Policy, user: unknown, permission: Permission, options?: {
|
|
425
|
+
readonly tenant?: string;
|
|
426
|
+
}): boolean;
|
|
427
|
+
//#endregion
|
|
428
|
+
//#region src/core/custom-role-source.d.ts
|
|
429
|
+
/** Reads custom roles from the application's store, as `customRoleSource` takes them. */
|
|
430
|
+
type CustomRoleReader = {
|
|
431
|
+
/** Every custom role of `tenant`, whether or not anyone in the request holds it. */
|
|
432
|
+
rolesFor(tenant: string): CustomRole[] | Promise<CustomRole[]>;
|
|
433
|
+
assignable?(tenant: string): string[] | Promise<string[]>;
|
|
434
|
+
/** Platform custom roles (`scope: 'global'`). */
|
|
435
|
+
globalRoles?(): CustomRole[] | Promise<CustomRole[]>;
|
|
436
|
+
};
|
|
437
|
+
type CustomRoleSourceOptions = {
|
|
438
|
+
/** `'all'` (default): read every custom role of each tenant, so `assignableRoles` and `decideRoleChange` see them all. */
|
|
439
|
+
readonly read?: "all";
|
|
440
|
+
} | {
|
|
441
|
+
/** `'held'`: skip a tenant's read, and the platform read, when every role the subject holds there is declared in `policy`. For requests that never manage roles. */
|
|
442
|
+
readonly read: "held";
|
|
443
|
+
readonly policy: Policy;
|
|
444
|
+
};
|
|
445
|
+
/**
|
|
446
|
+
* A `CustomRoleSource` over a reader that returns every custom role of a tenant.
|
|
447
|
+
* It keeps only the roles of the requested tenant. With `read: 'held'` it
|
|
448
|
+
* skips a tenant's read, and `globalRoles`, when the subject holds only
|
|
449
|
+
* declared roles there.
|
|
450
|
+
*/
|
|
451
|
+
declare function customRoleSource(reader: CustomRoleReader, options?: CustomRoleSourceOptions): CustomRoleSource;
|
|
452
|
+
//#endregion
|
|
453
|
+
//#region src/core/instance-snapshot.d.ts
|
|
454
|
+
type SnapshotInclude = readonly (Permission | {
|
|
455
|
+
readonly [key: string]: unknown;
|
|
456
|
+
})[];
|
|
457
|
+
//#endregion
|
|
458
|
+
//#region src/core/snapshot-for.d.ts
|
|
459
|
+
type SnapshotForOptions = {
|
|
460
|
+
/** Active tenant; ignored unless the subject holds a membership in it. */
|
|
461
|
+
readonly tenant?: string;
|
|
462
|
+
/** Database mode: replaces the memberships carried by the subject. */
|
|
463
|
+
readonly memberships?: readonly Membership[];
|
|
464
|
+
/** The tenant's custom roles, typically from a shared, tagged cache. */
|
|
465
|
+
readonly customRoles?: readonly CustomRole[];
|
|
466
|
+
/** Per tenant, the role names `CustomRoleSource.assignable` returns; narrows `assignable`. */
|
|
467
|
+
readonly assignable?: Readonly<Record<string, readonly string[]>>;
|
|
468
|
+
/** Plans of the active tenant; replaces `principal.plans`. */
|
|
469
|
+
readonly plans?: readonly string[];
|
|
470
|
+
readonly include?: SnapshotInclude;
|
|
471
|
+
readonly tenants?: "all";
|
|
472
|
+
/** The instant for `issuedAt` and membership expiry. Defaults to the clock. */
|
|
473
|
+
readonly now?: Instant;
|
|
474
|
+
};
|
|
475
|
+
/**
|
|
476
|
+
* Builds the serializable access snapshot for a subject without a request,
|
|
477
|
+
* a network call or a cache directive: call it inside the app's own
|
|
478
|
+
* `'use cache: private'` function. Synchronous; the policy's `subject` and
|
|
479
|
+
* `context` mappers must be synchronous too.
|
|
480
|
+
*/
|
|
481
|
+
declare function snapshotFor<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, user: TUser | Subject | null, options?: SnapshotForOptions): Snapshot;
|
|
482
|
+
//#endregion
|
|
483
|
+
//#region src/core/permissions.d.ts
|
|
484
|
+
declare function definePermissions<const Input, PX = never, RX = never>(input: Input, options?: PermissionsOptions<PX, RX>): InferPermissionTree<Input, "", PX> & ResourceXTree<RX>;
|
|
485
|
+
//#endregion
|
|
486
|
+
//#region src/core/permission-leaf.d.ts
|
|
487
|
+
/**
|
|
488
|
+
* The keys `permission` was renamed from, sorted. Empty for a leaf without
|
|
489
|
+
* renames and for one that crossed a serialisation boundary.
|
|
490
|
+
*/
|
|
491
|
+
declare function formerKeys(permission: object): readonly string[];
|
|
492
|
+
declare function resource<T, const A extends ActionList = readonly [], const C extends ActionList = readonly []>(schema: StandardSchemaV1<unknown, T>, options?: ResourceOptions<A, C>): ResourceInit<T, A, C>;
|
|
493
|
+
declare function resource<const A extends ActionList = readonly [], const C extends ActionList = readonly []>(options: ResourceOptions<A, C>): ResourceInit<unknown, A, C>;
|
|
494
|
+
//#endregion
|
|
495
|
+
//#region src/core/presets.d.ts
|
|
496
|
+
type ReadOnlyMeta = {
|
|
497
|
+
readonly readOnly: true;
|
|
498
|
+
};
|
|
499
|
+
type DestructiveMeta = {
|
|
500
|
+
readonly destructive: true;
|
|
501
|
+
};
|
|
502
|
+
type CrudActions = {
|
|
503
|
+
readonly read: ReadOnlyMeta;
|
|
504
|
+
readonly update: ActionMeta;
|
|
505
|
+
readonly delete: DestructiveMeta;
|
|
506
|
+
};
|
|
507
|
+
type CrudCollection = {
|
|
508
|
+
readonly create: ActionMeta;
|
|
509
|
+
readonly list: ReadOnlyMeta;
|
|
510
|
+
};
|
|
511
|
+
type ReadableActions = {
|
|
512
|
+
readonly read: ReadOnlyMeta;
|
|
513
|
+
};
|
|
514
|
+
type ReadableCollection = {
|
|
515
|
+
readonly list: ReadOnlyMeta;
|
|
516
|
+
};
|
|
517
|
+
type WritableActions = {
|
|
518
|
+
readonly read: ReadOnlyMeta;
|
|
519
|
+
readonly update: ActionMeta;
|
|
520
|
+
};
|
|
521
|
+
declare const CRUD_ACTIONS: CrudActions;
|
|
522
|
+
declare const CRUD_COLLECTION: CrudCollection;
|
|
523
|
+
declare const READABLE_ACTIONS: ReadableActions;
|
|
524
|
+
declare const READABLE_COLLECTION: ReadableCollection;
|
|
525
|
+
declare const WRITABLE_ACTIONS: WritableActions;
|
|
526
|
+
type EmptyRecord = Record<never, never>;
|
|
527
|
+
declare const WRITABLE_COLLECTION: EmptyRecord;
|
|
528
|
+
type ActionNames<A extends ActionList | undefined> = A extends readonly string[] ? A[number] & string : A extends Record<string, ActionMeta> ? keyof A & string : never;
|
|
529
|
+
type ToActionRecord<A extends ActionList | undefined> = [ActionNames<A>] extends [never] ? EmptyRecord : { readonly [K in ActionNames<A>]: ActionMeta; };
|
|
530
|
+
type OverlayMeta<Base extends ActionMeta, Extra extends ActionMeta> = Omit<Base, keyof Extra> & Extra;
|
|
531
|
+
type MergeActionRecords<Base extends Record<string, ActionMeta>, Extra extends Record<string, ActionMeta>> = { readonly [K in keyof Base | keyof Extra]: K extends keyof Extra ? K extends keyof Base ? OverlayMeta<Base[K] & ActionMeta, Extra[K] & ActionMeta> : Extra[K] & ActionMeta : K extends keyof Base ? Base[K] & ActionMeta : never; };
|
|
532
|
+
type PresetOptions<A extends ActionList | undefined = undefined, C extends ActionList | undefined = undefined> = {
|
|
533
|
+
readonly id?: string;
|
|
534
|
+
readonly parent?: ResourceParent;
|
|
535
|
+
readonly relations?: Readonly<Record<string, ResourceRelationInput>>;
|
|
536
|
+
readonly restricted?: string | ResourceRestricted;
|
|
537
|
+
readonly disclosure?: "hide" | "reveal";
|
|
538
|
+
readonly actions?: A;
|
|
539
|
+
readonly collection?: C;
|
|
540
|
+
};
|
|
541
|
+
type PresetResult<BaseA extends Record<string, ActionMeta>, BaseC extends Record<string, ActionMeta>, A extends ActionList | undefined, C extends ActionList | undefined> = {
|
|
542
|
+
readonly id?: string;
|
|
543
|
+
readonly parent?: ResourceParent;
|
|
544
|
+
readonly relations?: Readonly<Record<string, ResourceRelationInput>>;
|
|
545
|
+
readonly restricted?: string | ResourceRestricted;
|
|
546
|
+
readonly disclosure?: "hide" | "reveal";
|
|
547
|
+
readonly actions: MergeActionRecords<BaseA, ToActionRecord<A>>;
|
|
548
|
+
readonly collection?: MergeActionRecords<BaseC, ToActionRecord<C>>;
|
|
549
|
+
};
|
|
550
|
+
declare function crud<const A extends ActionList | undefined = undefined, const C extends ActionList | undefined = undefined>(options?: PresetOptions<A, C>): PresetResult<typeof CRUD_ACTIONS, typeof CRUD_COLLECTION, A, C>;
|
|
551
|
+
declare function readable<const A extends ActionList | undefined = undefined, const C extends ActionList | undefined = undefined>(options?: PresetOptions<A, C>): PresetResult<typeof READABLE_ACTIONS, typeof READABLE_COLLECTION, A, C>;
|
|
552
|
+
declare function writable<const A extends ActionList | undefined = undefined, const C extends ActionList | undefined = undefined>(options?: PresetOptions<A, C>): PresetResult<typeof WRITABLE_ACTIONS, typeof WRITABLE_COLLECTION, A, C>;
|
|
553
|
+
//#endregion
|
|
554
|
+
//#region src/core/role-builder.d.ts
|
|
555
|
+
type RoleGrants = readonly (Omit<Grant, "role" | "scope"> | readonly Omit<Grant, "role" | "scope">[])[];
|
|
556
|
+
/** A role held at a named scope: `on` is checked against `definePolicy({ scopes })`. */
|
|
557
|
+
declare function role<const S extends string>(name: string | Role, grants: RoleGrants, options: RoleOptions<S> & {
|
|
558
|
+
readonly on: S;
|
|
559
|
+
}): RoleBinding<S>;
|
|
560
|
+
/** A global role, or one held on a resource. */
|
|
561
|
+
declare function role(name: string | Role, grants: RoleGrants, options?: RoleOptions<never>): RoleBinding<never>;
|
|
562
|
+
/** Options built at runtime: the scope name is only checked by `definePolicy`. */
|
|
563
|
+
declare function role(name: string | Role, grants: RoleGrants, options?: RoleOptions): RoleBinding;
|
|
564
|
+
declare function normalizeAssurance(input: AssuranceRequirement | undefined): AssuranceRequirement | undefined;
|
|
565
|
+
//#endregion
|
|
566
|
+
//#region src/core/grant-builders.d.ts
|
|
567
|
+
declare function allow<T, K extends PermissionKind = PermissionKind>(permission: Permission<string, T, K> | readonly Permission<string, T, K>[], condition?: GrantCondition<T, K>): Omit<Grant, "role" | "scope"> | Omit<Grant, "role" | "scope">[];
|
|
568
|
+
declare function deny<T, K extends PermissionKind = PermissionKind>(permission: Permission<string, T, K> | readonly Permission<string, T, K>[], condition?: GrantCondition<T, K>): Omit<Grant, "role" | "scope"> | Omit<Grant, "role" | "scope">[];
|
|
569
|
+
//#endregion
|
|
570
|
+
//#region src/core/approval-normalize.d.ts
|
|
571
|
+
declare function normalizeApproval(approval: ApprovalOption | undefined, permission?: string): Grant["approval"];
|
|
572
|
+
//#endregion
|
|
573
|
+
//#region src/core/elevated.d.ts
|
|
574
|
+
/**
|
|
575
|
+
* The only deny override: a break-glass grant overrides deny grants whose
|
|
576
|
+
* `name` it lists, and nothing else. It is an allow that stays non-portable
|
|
577
|
+
* (RLS never compiles it) and grants only once its `requires` are met.
|
|
578
|
+
*/
|
|
579
|
+
declare function breakGlass<T>(permission: Permission<string, T> | readonly Permission<string, T>[], options?: BreakGlassOptions): Omit<Grant, "role" | "scope"> | Omit<Grant, "role" | "scope">[];
|
|
580
|
+
/**
|
|
581
|
+
* Support access with tenant consent: a role a vendor holds only through a
|
|
582
|
+
* consented, time-bound `via: 'support'` membership. `actorRequired` denies
|
|
583
|
+
* every decision under it without an `act`; `forbid` compiles to deny grants
|
|
584
|
+
* scoped to `via: 'support'`.
|
|
585
|
+
*/
|
|
586
|
+
declare function supportAccess<const S extends string>(options: SupportAccessOptions<S> & {
|
|
587
|
+
readonly on: S;
|
|
588
|
+
}): RoleBinding<S>;
|
|
589
|
+
/** Support access held in the `tenant` scope. */
|
|
590
|
+
declare function supportAccess(options: SupportAccessOptions<never>): RoleBinding<"tenant">;
|
|
591
|
+
type ActivateInput = {
|
|
592
|
+
readonly role: string | Role;
|
|
593
|
+
/** The scope the activation applies in (a declared name or the `tenant` / `team` alias). */
|
|
594
|
+
readonly scope: string;
|
|
595
|
+
readonly id: string;
|
|
596
|
+
/** Ancestor scope ids, keyed by scope name, for a nested-scope activation. */
|
|
597
|
+
readonly within?: Readonly<Record<string, string>>;
|
|
598
|
+
/** Seconds the elevation lasts; capped at the role's `maxDuration`. */
|
|
599
|
+
readonly duration?: number;
|
|
600
|
+
readonly reason?: string;
|
|
601
|
+
};
|
|
602
|
+
/**
|
|
603
|
+
* Requests a just-in-time role activation. It never writes: a granted
|
|
604
|
+
* decision carries the elevated membership under `elevation` for the app to
|
|
605
|
+
* write. `approval-required` comes back first when the role's `activation`
|
|
606
|
+
* sets `approval`. Fail-closed: an unknown role, an ineligible subject, a
|
|
607
|
+
* missing justification or stale authentication all deny.
|
|
608
|
+
*/
|
|
609
|
+
/**
|
|
610
|
+
* Requests a just-in-time activation of an eligible role for the subject of
|
|
611
|
+
* `permdock`. It never writes: a granted decision carries the elevated
|
|
612
|
+
* membership under `elevation` for the app to write, and
|
|
613
|
+
* `approval-required` comes back first when the role's `activation` sets
|
|
614
|
+
* `approval`. An instance built from a snapshot denies with `unsupported`.
|
|
615
|
+
*/
|
|
616
|
+
declare function activate(permdock: InstanceHandle, input: ActivateInput): Decision;
|
|
617
|
+
//#endregion
|
|
618
|
+
//#region src/core/ownership.d.ts
|
|
619
|
+
/** Who a role change is about: their principal id and their membership in the scope instance. */
|
|
620
|
+
type RoleChangeTarget = {
|
|
621
|
+
readonly id: string;
|
|
622
|
+
/** The kind of the target's membership in the instance (`staff`, `contact`, ...). */
|
|
623
|
+
readonly via?: string;
|
|
624
|
+
/** The roles the target holds in the instance now. */
|
|
625
|
+
readonly roles?: readonly string[];
|
|
626
|
+
/** `idp` when the identity provider owns the target's membership: the application cannot change it. */
|
|
627
|
+
readonly managedBy?: "idp";
|
|
628
|
+
};
|
|
629
|
+
type RoleChangeBase = {
|
|
630
|
+
readonly kind: "assign" | "revoke" | "transfer";
|
|
631
|
+
readonly role: string | Role;
|
|
632
|
+
/** Ids of the instance's ancestor scopes; a holder there may assign here. */
|
|
633
|
+
readonly within?: Readonly<Record<string, string>>;
|
|
634
|
+
readonly target: RoleChangeTarget;
|
|
635
|
+
/**
|
|
636
|
+
* How many principals hold `role` in the instance now, from the
|
|
637
|
+
* application's store. Without it a role with `min`, `max` or
|
|
638
|
+
* `transferOnly` is denied.
|
|
639
|
+
*/
|
|
640
|
+
readonly holders?: number;
|
|
641
|
+
};
|
|
642
|
+
/**
|
|
643
|
+
* A role held at a named scope instance (`scope` is a declared name or alias
|
|
644
|
+
* and `id` the instance), or a global role: `scope: 'global'` with no `id`.
|
|
645
|
+
* A global change has no tenant, so `within` and `holders` do not apply to it.
|
|
646
|
+
*/
|
|
647
|
+
type RoleChange = RoleChangeBase & ({
|
|
648
|
+
/** The scope the role is held at (a declared name or alias). */
|
|
649
|
+
readonly scope: string;
|
|
650
|
+
/** The scope instance. */
|
|
651
|
+
readonly id: string;
|
|
652
|
+
} | {
|
|
653
|
+
readonly scope: "global";
|
|
654
|
+
readonly id?: undefined;
|
|
655
|
+
});
|
|
656
|
+
/**
|
|
657
|
+
* `granted` names the role that authorised the change (`null` when a
|
|
658
|
+
* `meta.manageRoles` holder or the declared-role ceiling did); `denied` lists
|
|
659
|
+
* every rule the change breaks.
|
|
660
|
+
*/
|
|
661
|
+
type RoleChangeDecision = {
|
|
662
|
+
readonly outcome: "granted";
|
|
663
|
+
readonly change: RoleChange;
|
|
664
|
+
readonly role: string | null;
|
|
665
|
+
} | {
|
|
666
|
+
readonly outcome: "denied";
|
|
667
|
+
readonly change: RoleChange;
|
|
668
|
+
readonly denials: readonly Denial[];
|
|
669
|
+
};
|
|
670
|
+
type RoleChangeOptions = {
|
|
671
|
+
/**
|
|
672
|
+
* `true` when the application loaded `change.within` from its own store
|
|
673
|
+
* (the instance's stored parent), not from the request. Without it, a
|
|
674
|
+
* nested instance's tenant comes only from a live membership the actor
|
|
675
|
+
* holds on that instance or under it.
|
|
676
|
+
*/
|
|
677
|
+
readonly trusted?: boolean;
|
|
678
|
+
};
|
|
679
|
+
/**
|
|
680
|
+
* The one rule check behind `permdock.decideRoleChange`. The actor is always
|
|
681
|
+
* the instance's own principal; nothing in `change` can stand in for it.
|
|
682
|
+
*/
|
|
683
|
+
/**
|
|
684
|
+
* Whether the subject of `permdock` may assign, revoke or transfer a role
|
|
685
|
+
* in one scope instance: `assigns`, the ceiling, `for`, `exclusiveWith`,
|
|
686
|
+
* `min`, `max` and `transferOnly`. It never writes; the application does,
|
|
687
|
+
* and generated RLS triggers re-check the holder counts at commit. A nested
|
|
688
|
+
* instance's tenant comes from a live membership the subject holds on it,
|
|
689
|
+
* or from `change.within` only with `{ trusted: true }`; otherwise
|
|
690
|
+
* `no-membership`. An instance built from a snapshot denies with
|
|
691
|
+
* `unsupported`.
|
|
692
|
+
*/
|
|
693
|
+
declare function decideRoleChange(permdock: InstanceHandle, change: RoleChange, options?: RoleChangeOptions): RoleChangeDecision;
|
|
694
|
+
//#endregion
|
|
695
|
+
//#region src/core/parse-sink-events.d.ts
|
|
696
|
+
/**
|
|
697
|
+
* Validates one untrusted sink event against its family's schema and returns
|
|
698
|
+
* a frozen copy, or `null` for anything else. Never throws.
|
|
699
|
+
*/
|
|
700
|
+
declare function parseSinkEvent(value: unknown): SinkEvent | null;
|
|
701
|
+
/**
|
|
702
|
+
* Validates an untrusted list of sink events, such as a request body a sink
|
|
703
|
+
* receiver read. Each event that fails its schema is dropped, and a value
|
|
704
|
+
* that is not an array yields no events. Never throws.
|
|
705
|
+
*/
|
|
706
|
+
declare function parseSinkEvents(value: unknown): readonly SinkEvent[];
|
|
707
|
+
/** Validates the data of a `com.permdock.catalog.*` CloudEvent; `null` when it does not match. */
|
|
708
|
+
declare function parseCatalogEventData(value: unknown): CatalogEventData | null;
|
|
709
|
+
/**
|
|
710
|
+
* Validates one CloudEvent against the closed type list, its `dataschema` and
|
|
711
|
+
* its data shape; `null` for anything else, a reserved type included. Never
|
|
712
|
+
* throws.
|
|
713
|
+
*/
|
|
714
|
+
declare function parseCloudEvent(value: unknown): CloudEvent | null;
|
|
715
|
+
/**
|
|
716
|
+
* Validates a CloudEvents JSON batch (`application/cloudevents-batch+json`):
|
|
717
|
+
* `null` unless the value is an array and every event in it is valid.
|
|
718
|
+
*/
|
|
719
|
+
declare function parseCloudEventBatch(value: unknown): readonly CloudEvent[] | null;
|
|
720
|
+
//#endregion
|
|
721
|
+
//#region src/core/event-schemas.d.ts
|
|
722
|
+
/** The URL each event family's schema is published at, and its CloudEvents `dataschema`. */
|
|
723
|
+
declare const EVENT_SCHEMA_IDS: {
|
|
724
|
+
readonly decision: "https://permdock.com/schemas/decision-event-v1.json";
|
|
725
|
+
readonly directory: "https://permdock.com/schemas/directory-event-v1.json";
|
|
726
|
+
readonly membership: "https://permdock.com/schemas/membership-event-v1.json";
|
|
727
|
+
readonly credential: "https://permdock.com/schemas/credential-event-v1.json";
|
|
728
|
+
readonly access: "https://permdock.com/schemas/access-event-v1.json";
|
|
729
|
+
readonly automation: "https://permdock.com/schemas/automation-event-v1.json";
|
|
730
|
+
readonly catalog: "https://permdock.com/schemas/catalog-event-v1.json";
|
|
731
|
+
readonly delivery: "https://permdock.com/schemas/delivery-event-v1.json";
|
|
732
|
+
};
|
|
733
|
+
declare const DECISION_EVENT_SCHEMA: JsonSchemaNode;
|
|
734
|
+
declare const DIRECTORY_EVENT_SCHEMA: JsonSchemaNode;
|
|
735
|
+
declare const MEMBERSHIP_EVENT_SCHEMA: JsonSchemaNode;
|
|
736
|
+
declare const CREDENTIAL_EVENT_SCHEMA: JsonSchemaNode;
|
|
737
|
+
declare const ACCESS_EVENT_SCHEMA: JsonSchemaNode;
|
|
738
|
+
declare const AUTOMATION_EVENT_SCHEMA: JsonSchemaNode;
|
|
739
|
+
declare const CATALOG_EVENT_SCHEMA: JsonSchemaNode;
|
|
740
|
+
declare const DELIVERY_EVENT_SCHEMA: JsonSchemaNode;
|
|
741
|
+
/** Every sink event family's schema, keyed by the event's `type`. */
|
|
742
|
+
declare const SINK_EVENT_SCHEMAS: {
|
|
743
|
+
readonly decision: JsonSchemaNode;
|
|
744
|
+
readonly directory: JsonSchemaNode;
|
|
745
|
+
readonly membership: JsonSchemaNode;
|
|
746
|
+
readonly credential: JsonSchemaNode;
|
|
747
|
+
readonly access: JsonSchemaNode;
|
|
748
|
+
readonly automation: JsonSchemaNode;
|
|
749
|
+
readonly delivery: JsonSchemaNode;
|
|
750
|
+
};
|
|
751
|
+
//#endregion
|
|
752
|
+
//#region src/core/ocsf.d.ts
|
|
753
|
+
/** The OCSF schema version `toOcsf` emits. */
|
|
754
|
+
declare const OCSF_VERSION = "1.9.0";
|
|
755
|
+
/**
|
|
756
|
+
* An OCSF Authorize Session (class 3003, category Identity and Access Management) event.
|
|
757
|
+
* API Activity (6003) would fit a per-request decision, but it requires `api` and
|
|
758
|
+
* `src_endpoint`, which a decision event does not carry.
|
|
759
|
+
*/
|
|
760
|
+
type OcsfAuthorizeSession = {
|
|
761
|
+
readonly class_uid: 3003;
|
|
762
|
+
readonly category_uid: 3;
|
|
763
|
+
readonly activity_id: 1;
|
|
764
|
+
readonly type_uid: 300301;
|
|
765
|
+
readonly severity_id: 1 | 4;
|
|
766
|
+
readonly time: number;
|
|
767
|
+
readonly status_id: 0 | 1 | 2 | 99;
|
|
768
|
+
/** OCSF requires a source label for status 99: `Approval Required`. */
|
|
769
|
+
readonly status: "Unknown" | "Success" | "Failure" | "Approval Required";
|
|
770
|
+
readonly status_detail?: string;
|
|
771
|
+
readonly message: string;
|
|
772
|
+
readonly privileges: readonly string[];
|
|
773
|
+
/** OCSF requires `user`; an anonymous subject is `{ name: 'anonymous' }`. */
|
|
774
|
+
readonly user: {
|
|
775
|
+
readonly uid: string;
|
|
776
|
+
} | {
|
|
777
|
+
readonly name: "anonymous";
|
|
778
|
+
};
|
|
779
|
+
readonly actor?: {
|
|
780
|
+
readonly user?: {
|
|
781
|
+
readonly uid: string;
|
|
782
|
+
};
|
|
783
|
+
readonly app_name?: string;
|
|
784
|
+
};
|
|
785
|
+
readonly metadata: {
|
|
786
|
+
readonly version: typeof OCSF_VERSION;
|
|
787
|
+
readonly product: {
|
|
788
|
+
readonly name: "PermDock";
|
|
789
|
+
readonly vendor_name: "PermDock";
|
|
790
|
+
readonly feature?: {
|
|
791
|
+
readonly name: string;
|
|
792
|
+
};
|
|
793
|
+
};
|
|
794
|
+
readonly tenant_uid?: string;
|
|
795
|
+
readonly correlation_uid?: string;
|
|
796
|
+
};
|
|
797
|
+
readonly unmapped: {
|
|
798
|
+
readonly outcome: DecisionEvent["outcome"];
|
|
799
|
+
readonly scope: string;
|
|
800
|
+
readonly resource: DecisionEvent["resource"];
|
|
801
|
+
readonly call: DecisionEvent["call"];
|
|
802
|
+
readonly phase?: DecisionEvent["phase"];
|
|
803
|
+
readonly role?: string | null;
|
|
804
|
+
/** The matched grant's declared `name`. */
|
|
805
|
+
readonly grant?: string;
|
|
806
|
+
/** The names of the app obligations the decision carries. */
|
|
807
|
+
readonly obligations?: readonly string[];
|
|
808
|
+
readonly via?: string | null;
|
|
809
|
+
/** Set high-severity break-glass events apart in a SIEM. */
|
|
810
|
+
readonly breakGlass?: true;
|
|
811
|
+
readonly purpose?: readonly string[];
|
|
812
|
+
readonly reason?: string;
|
|
813
|
+
};
|
|
814
|
+
};
|
|
815
|
+
/**
|
|
816
|
+
* Projects a decision or approval event onto OCSF Authorize Session; the event itself is unchanged.
|
|
817
|
+
* An event whose `at` does not parse has no OCSF `time` and projects to `undefined`.
|
|
818
|
+
*/
|
|
819
|
+
declare function toOcsf(event: DecisionEvent): OcsfAuthorizeSession | undefined;
|
|
820
|
+
/**
|
|
821
|
+
* An OCSF User Management (class 3007) event for a support-access lifecycle
|
|
822
|
+
* event: `started` enables the session, `ended` and `revoked` disable it.
|
|
823
|
+
* Support access is high severity, so a SIEM can alert on vendor access.
|
|
824
|
+
* OCSF 1.9.0 deprecates Account Change (3001) in favour of this class.
|
|
825
|
+
*/
|
|
826
|
+
type OcsfUserManagement = {
|
|
827
|
+
readonly class_uid: 3007;
|
|
828
|
+
readonly category_uid: 3;
|
|
829
|
+
/** 4 Enable for `started`, 5 Disable for `ended` and `revoked`. */
|
|
830
|
+
readonly activity_id: 4 | 5;
|
|
831
|
+
readonly type_uid: 300704 | 300705;
|
|
832
|
+
readonly severity_id: 4;
|
|
833
|
+
readonly time: number;
|
|
834
|
+
readonly message: string;
|
|
835
|
+
readonly user: {
|
|
836
|
+
readonly uid: string;
|
|
837
|
+
};
|
|
838
|
+
readonly actor?: {
|
|
839
|
+
readonly user?: {
|
|
840
|
+
readonly uid: string;
|
|
841
|
+
};
|
|
842
|
+
};
|
|
843
|
+
readonly metadata: {
|
|
844
|
+
readonly version: typeof OCSF_VERSION;
|
|
845
|
+
readonly product: {
|
|
846
|
+
readonly name: "PermDock";
|
|
847
|
+
readonly vendor_name: "PermDock";
|
|
848
|
+
};
|
|
849
|
+
readonly tenant_uid: string;
|
|
850
|
+
};
|
|
851
|
+
readonly unmapped: {
|
|
852
|
+
readonly operation: AccessEvent["operation"];
|
|
853
|
+
readonly via: string;
|
|
854
|
+
readonly roles: readonly string[];
|
|
855
|
+
readonly member?: {
|
|
856
|
+
readonly group: string;
|
|
857
|
+
};
|
|
858
|
+
readonly grantedBy?: string;
|
|
859
|
+
readonly reason?: string;
|
|
860
|
+
};
|
|
861
|
+
};
|
|
862
|
+
/** An access event whose `at` does not parse projects to `undefined`. */
|
|
863
|
+
declare function accessToOcsf(event: AccessEvent): OcsfUserManagement | undefined;
|
|
864
|
+
//#endregion
|
|
865
|
+
//#region src/core/csv.d.ts
|
|
866
|
+
/** The CSV export columns, in order; the header row of every CSV file. */
|
|
867
|
+
declare const CSV_COLUMNS: readonly ["time", "principal", "actor", "tenant", "permission", "outcome", "matched.role", "via", "denials.reason", "token"];
|
|
868
|
+
/**
|
|
869
|
+
* One RFC 4180 row for a decision or approval event, without a line
|
|
870
|
+
* terminator; join rows with CRLF under a `CSV_COLUMNS` header.
|
|
871
|
+
*/
|
|
872
|
+
declare function toCsvRow(event: DecisionEvent): string;
|
|
873
|
+
//#endregion
|
|
874
|
+
//#region src/core/catalog-fingerprint.d.ts
|
|
875
|
+
/**
|
|
876
|
+
* The catalog v1 fingerprint: the `sha-256:` digest of its RFC 8785 JSON without `generatedAt`, `generator`, `fingerprint`
|
|
877
|
+
* and every `permissions[].usages`, so neither the CLI version, the clock nor
|
|
878
|
+
* call sites change it.
|
|
879
|
+
*/
|
|
880
|
+
declare function catalogFingerprint(catalog: unknown): string;
|
|
881
|
+
//#endregion
|
|
882
|
+
//#region src/core/delegation.d.ts
|
|
883
|
+
type DelegatedPermission = Pick<Permission, "scope" | "resource" | "action">;
|
|
884
|
+
/**
|
|
885
|
+
* Whether a delegated caller may use a permission its principal holds, through
|
|
886
|
+
* OAuth `scopes`, RFC 9396 `authorizationDetails` or GNAP `access`.
|
|
887
|
+
* `undefined` means covered; otherwise the denial reason `decide` would add.
|
|
888
|
+
*/
|
|
889
|
+
declare function coveredByDelegation(permission: DelegatedPermission, delegation: Delegation | undefined, resourceId?: string, hasActor?: boolean): DenialReason | undefined;
|
|
890
|
+
/**
|
|
891
|
+
* The permission keys the policy's delegations let `subject.actor` use for
|
|
892
|
+
* `subject.principal` right now: the union over every active delegation whose
|
|
893
|
+
* `to` matches the actor and whose `from` the principal holds. `undefined`
|
|
894
|
+
* when none applies, so the call falls back to the token delegation alone.
|
|
895
|
+
* An actor with `readOnly: true` gets only each delegation's read-only keys.
|
|
896
|
+
* Attenuation only: a key here still needs a matching allow and no deny.
|
|
897
|
+
*/
|
|
898
|
+
declare function delegatedPermissions(delegations: readonly PolicyDelegation[] | undefined, subject: Subject, heldRoles: ReadonlySet<string>, now: number): ReadonlySet<string> | undefined;
|
|
899
|
+
//#endregion
|
|
900
|
+
export { ShadowMismatch as $, CustomRoleValidation as $t, decideRoleChange as A, isExternallyManaged as At, crud as B, getResource as Bt, parseCloudEventBatch as C, MemoryRelationSourceData as Ct, RoleChangeDecision as D, claimsFirst as Dt, RoleChange as E, stripeEntitlementSource as Et, normalizeApproval as F, memorySettingsSource as Ft, definePermissions as G, separationConflicts as Gt, writable as H, listPermissions as Ht, allow as I, memorySnapshotSource as It, CustomRoleReader as J, fromSnapshot as Jt, SnapshotForOptions as K, requiresApproval as Kt, deny as L, sqlFunction as Lt, activate as M, memoryCustomRoleSource as Mt, breakGlass as N, memoryEntitlementSource as Nt, RoleChangeOptions as O, composeMemberships as Ot, supportAccess as P, memoryMembershipSource as Pt, LegacyCheck as Q, CustomRoleRename as Qt, normalizeAssurance as R, opaque as Rt, parseCloudEvent as S, MemoryEdge as St, parseSinkEvents as T, StripeEntitlementsClient as Tt, formerKeys as U, mergePermissions as Ut, readable as V, isPermission as Vt, resource as W, definePolicy as Wt, customRoleSource as X, CustomRoleDrop as Xt, CustomRoleSourceOptions as Y, parseSnapshot as Yt, mayAccess as Z, CustomRoleDropReason as Zt, DIRECTORY_EVENT_SCHEMA as _, signPolicyDocument as _t, toCsvRow as a, principal as an, localSnapshotManifest as at, SINK_EVENT_SCHEMAS as b, WhoCan as bt, OcsfUserManagement as c, ArazzoSimulateInput as ct, ACCESS_EVENT_SCHEMA as d, simulateArazzo as dt, ResolvedCustomRole as en, ShadowOptions as et, AUTOMATION_EVENT_SCHEMA as f, deliveryEvent as ft, DELIVERY_EVENT_SCHEMA as g, SignPolicyDocumentOptions as gt, DECISION_EVENT_SCHEMA as h, snapshotFromClaims as ht, CSV_COLUMNS as i, context as in, AppProfile as it, ActivateInput as j, APPROVAL_POLICY_UNAVAILABLE as jt, RoleChangeTarget as k, countHolders as kt, accessToOcsf as l, ArazzoStepResult as lt, CREDENTIAL_EVENT_SCHEMA as m, signSnapshot as mt, delegatedPermissions as n, resolveCustomRole as nn, defineApp as nt, OCSF_VERSION as o, ArazzoFinding as ot, CATALOG_EVENT_SCHEMA as p, SignSnapshotOptions as pt, snapshotFor as q, emptySnapshot as qt, catalogFingerprint as r, validateCustomRole as rn, AppOptions as rt, OcsfAuthorizeSession as s, ArazzoPlan as st, coveredByDelegation as t, customRoleClaim as tn, shadowMode as tt, toOcsf as u, arazzoFindings as ut, EVENT_SCHEMA_IDS as v, Holder as vt, parseSinkEvent as w, memoryRelationSource as wt, parseCatalogEventData as x, whoCan as xt, MEMBERSHIP_EVENT_SCHEMA as y, HoldingVia as yt, role as z, findPermission as zt };
|