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
package/dist/testing/index.d.ts
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { J as EntitlementSource, K as DecisionProvider, Q as LimitStore, T as Policy, U as CredentialVerifier, Vt as Snapshot, W as CustomRoleSource, Zn as CustomRole, Zt as DeliveryChannel, at as SettingsSource, dt as TokenVerifier, et as MembershipSource, ir as Subject, it as RelationSource, mt as WhereCompiler, nr as Membership, ot as SnapshotSource, q as DecisionSink, rr as Principal, st as SubjectResolver, ut as TokenSigner } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { C as InferPermissionTree, k as ResourceInit, r as Role, w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { Q as LegacyCheck } from "../index-DOVf7RJv.js";
|
|
4
|
+
import { S as ApprovalPolicySource, c as WhereResult, d as PrincipalIdentity, g as Limits, i as PermDockOptions, p as PrincipalSource, r as PermDock } from "../permdock-D7eeLJER.js";
|
|
5
|
+
import { o as PolicySource } from "../hosted-DBDX0M-P.js";
|
|
6
|
+
import { a as ApprovalDelegationSource, m as ApprovalStore } from "../types-CCpc2Dcv.js";
|
|
7
|
+
import { a as ProblemDetails } from "../errors-C2PXIv4c.js";
|
|
8
|
+
import { c as ModelMap, t as AgentPermDock, u as ToolMap } from "../create-BDS7wc3y.js";
|
|
9
|
+
import { c as AccessReviewStore } from "../types-_sHy8BQf.js";
|
|
10
|
+
import { F as IdempotencyStore } from "../index-CxGUswIC.js";
|
|
11
|
+
import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
|
|
12
|
+
import { s as SupportSessionSource } from "../index-Chrs5fQ-.js";
|
|
13
|
+
import { a as AutomationSource, t as Automation } from "../automation-BMZPIVUM.js";
|
|
14
|
+
import { c as DeliveryTransport, g as TransportMessages } from "../types-DX0LaKTb.js";
|
|
15
|
+
import { n as SupabaseHookManifest } from "../manifest-mx5ghSFM.js";
|
|
7
16
|
import { t as supabaseMembershipsBudget } from "../budget-JqcRqyhK.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
17
|
+
import { t as CloudApproverOptions } from "../types-C8-KNsFf.js";
|
|
18
|
+
import { n as ApprovalWaiter } from "../waiter-CKy4MQSY.js";
|
|
19
|
+
import { g as SetQueue, l as ReplayStore } from "../types-DiQjupG2.js";
|
|
20
|
+
import { r as SnapshotStorage } from "../types-BjV-fqcA.js";
|
|
21
|
+
import { y as DirectoryStore } from "../index-SGdIQyzc.js";
|
|
22
|
+
import { a as SaasProject } from "../permissions-oEWfl-kl.js";
|
|
23
|
+
import { n as saasPolicy } from "../policy-Czo4n3Hs.js";
|
|
13
24
|
import { expectTypeOf } from "vitest";
|
|
14
25
|
//#region src/testing/describe-policy.d.ts
|
|
15
26
|
type MatrixOutcome = "granted" | "denied" | "approval-required";
|
|
@@ -81,7 +92,7 @@ type RlsParityOptions = {
|
|
|
81
92
|
readonly role?: "authenticated" | "anon";
|
|
82
93
|
/**
|
|
83
94
|
* Tenant-defined roles the subjects' memberships may hold. `decide` resolves them through a
|
|
84
|
-
* `
|
|
95
|
+
* `CustomRoleSource`; each membership's claim carries them as the compact `grants` map, which the
|
|
85
96
|
* helpers read in `jwt` mode. Seeding the `database`-mode tables is the caller's job.
|
|
86
97
|
*/
|
|
87
98
|
readonly customRoles?: readonly CustomRole[];
|
|
@@ -113,7 +124,7 @@ type RlsParityReport = {
|
|
|
113
124
|
readonly ok: boolean;
|
|
114
125
|
readonly results: readonly RlsParityCase[];
|
|
115
126
|
};
|
|
116
|
-
export declare function
|
|
127
|
+
export declare function testRlsParity<TUser>(policy: Policy<TUser>, options: RlsParityOptions): Promise<RlsParityReport>;
|
|
117
128
|
//#endregion
|
|
118
129
|
//#region src/testing/orm-parity.d.ts
|
|
119
130
|
type OrmParityScenario<TUser = unknown> = {
|
|
@@ -161,7 +172,7 @@ type OrmParityReport = {
|
|
|
161
172
|
* A partial `where()` (a closure grant it cannot compile) may be refused or
|
|
162
173
|
* return fewer rows, never more.
|
|
163
174
|
*/
|
|
164
|
-
export declare function
|
|
175
|
+
export declare function testOrmParity<TUser>(policy: Policy<TUser>, scenarios: readonly OrmParityScenario<TUser>[], options: OrmParityOptions<TUser>): Promise<OrmParityReport>;
|
|
165
176
|
//#endregion
|
|
166
177
|
//#region src/testing/client-parity.d.ts
|
|
167
178
|
type ClientParityCase = {
|
|
@@ -178,7 +189,7 @@ type ClientParityCase = {
|
|
|
178
189
|
readonly stricter?: boolean;
|
|
179
190
|
};
|
|
180
191
|
type ClientParityOptions = {
|
|
181
|
-
readonly customRoles?:
|
|
192
|
+
readonly customRoles?: CustomRoleSource;
|
|
182
193
|
};
|
|
183
194
|
/**
|
|
184
195
|
* Asserts that `fromSnapshot(permdock.snapshot())` never grants what the
|
|
@@ -186,6 +197,26 @@ type ClientParityOptions = {
|
|
|
186
197
|
*/
|
|
187
198
|
export declare function testClientParity(policy: Policy, cases: readonly ClientParityCase[], options?: ClientParityOptions): void;
|
|
188
199
|
//#endregion
|
|
200
|
+
//#region src/testing/legacy-parity.d.ts
|
|
201
|
+
type LegacyParityCase = {
|
|
202
|
+
readonly name: string;
|
|
203
|
+
/** The value the policy's `subject` function receives. */
|
|
204
|
+
readonly user: unknown;
|
|
205
|
+
readonly permission: Permission;
|
|
206
|
+
readonly row?: unknown;
|
|
207
|
+
/**
|
|
208
|
+
* The answer PermDock should give where it intentionally differs from the
|
|
209
|
+
* legacy check; absent means the two must agree.
|
|
210
|
+
*/
|
|
211
|
+
readonly expect?: boolean;
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Asserts that the policy answers each case as the application's legacy
|
|
215
|
+
* check does, or as the case's `expect` says where the difference is
|
|
216
|
+
* intended. Run it before enforcing a permission with `shadowMode`.
|
|
217
|
+
*/
|
|
218
|
+
export declare function testLegacyParity(policy: Policy, legacy: LegacyCheck, cases: readonly LegacyParityCase[]): void;
|
|
219
|
+
//#endregion
|
|
189
220
|
//#region src/testing/client-store.d.ts
|
|
190
221
|
type ClientStoreStatus = "ready" | "pending" | "stale" | "server-only";
|
|
191
222
|
/** The client surface every UI adapter hands to components. */
|
|
@@ -229,7 +260,7 @@ export declare function snapshotFixture(policy: Policy, subject: unknown, option
|
|
|
229
260
|
readonly simulated?: boolean;
|
|
230
261
|
}): Promise<Snapshot>;
|
|
231
262
|
//#endregion
|
|
232
|
-
//#region src/testing/http-adapter.d.ts
|
|
263
|
+
//#region src/testing/http-adapter/domain.d.ts
|
|
233
264
|
/**
|
|
234
265
|
* What a mount wires into its framework. Every value is server-side: the
|
|
235
266
|
* subject comes from a verified bearer token, memberships and plans from the
|
|
@@ -254,9 +285,9 @@ type HttpScenarioDomain = {
|
|
|
254
285
|
readonly ticks: (org: string | undefined, signal: AbortSignal) => AsyncIterable<SaasProject>;
|
|
255
286
|
/** The `:org` segment of a path; mounts may read their route param instead. */
|
|
256
287
|
readonly org: (path: string) => string | undefined;
|
|
257
|
-
readonly customRoles:
|
|
288
|
+
readonly customRoles: CustomRoleSource;
|
|
258
289
|
readonly store: ApprovalStore;
|
|
259
|
-
readonly limits:
|
|
290
|
+
readonly limits: Limits;
|
|
260
291
|
/** A project row by id, whatever its org: tenant checks belong to the policy. */
|
|
261
292
|
readonly project: (id: string | undefined) => SaasProject | null;
|
|
262
293
|
};
|
|
@@ -352,6 +383,8 @@ type HttpAdapterOptions = {
|
|
|
352
383
|
/** The mount serves the events stream; the `stream-*` scenarios run only then. */
|
|
353
384
|
readonly streams?: boolean;
|
|
354
385
|
};
|
|
386
|
+
//#endregion
|
|
387
|
+
//#region src/testing/http-adapter/scenarios.d.ts
|
|
355
388
|
/**
|
|
356
389
|
* Real-life HTTP scenarios over the shared SaaS domain. `mount` builds the
|
|
357
390
|
* application once with the adapter under test; every expectation below is
|
|
@@ -383,7 +416,7 @@ type AgentScenarioDomain = {
|
|
|
383
416
|
* approval.
|
|
384
417
|
*/
|
|
385
418
|
readonly tools: ToolMap & { readonly [K in AgentToolName]: ToolMap[K]; };
|
|
386
|
-
readonly customRoles:
|
|
419
|
+
readonly customRoles: CustomRoleSource;
|
|
387
420
|
readonly store: ApprovalStore;
|
|
388
421
|
};
|
|
389
422
|
type AgentCall = {
|
|
@@ -414,13 +447,55 @@ type AgentAdapterOptions = {
|
|
|
414
447
|
*/
|
|
415
448
|
export declare function testAgentAdapter(options: AgentAdapterOptions): void;
|
|
416
449
|
//#endregion
|
|
450
|
+
//#region src/testing/agent-runtime.d.ts
|
|
451
|
+
/** The server-side context of one call; the subject and tenant come from here, never from arguments. */
|
|
452
|
+
type AgentRuntimeContext = {
|
|
453
|
+
/** `null` for a call with no authenticated user. */
|
|
454
|
+
readonly user: string | null;
|
|
455
|
+
readonly org: string;
|
|
456
|
+
};
|
|
457
|
+
type AgentRuntimeOperation = "project_read" | "project_search" | "api_keys_revoke_all";
|
|
458
|
+
type AgentRuntimeModel = "standard" | "frontier";
|
|
459
|
+
/** What a mount wires into its `AgentPermDock`. */
|
|
460
|
+
type AgentRuntimeDomain = {
|
|
461
|
+
readonly policy: typeof saasPolicy;
|
|
462
|
+
/** The principal for `user` with the plans of `org`, or `null`. Throws for `AGENT_THROWING_USER`. */
|
|
463
|
+
readonly subject: (user: string | null, org: string) => Principal | null;
|
|
464
|
+
/**
|
|
465
|
+
* `project_read` loads the row named by `args.id`; `project_search` has a
|
|
466
|
+
* `results` permission; `api_keys_revoke_all` needs approval.
|
|
467
|
+
*/
|
|
468
|
+
readonly operations: ToolMap & { readonly [K in AgentRuntimeOperation]: ToolMap[K]; };
|
|
469
|
+
/** `standard` for any reader, `frontier` for an admin on the `pro` plan. */
|
|
470
|
+
readonly models: ModelMap & { readonly [K in AgentRuntimeModel]: ModelMap[K]; };
|
|
471
|
+
readonly customRoles: CustomRoleSource;
|
|
472
|
+
readonly store: ApprovalStore;
|
|
473
|
+
};
|
|
474
|
+
type AgentRuntimeMounted = {
|
|
475
|
+
readonly agent: AgentPermDock<AgentRuntimeContext>;
|
|
476
|
+
readonly close?: () => Promise<void> | void;
|
|
477
|
+
};
|
|
478
|
+
type AgentRuntimeScenarioName = "granted" | "denied" | "cross-tenant" | "anonymous" | "subject-throws" | "loader-throws" | "missing-row" | "approval-required" | "unmapped-operation" | "allowed-operations" | "model-gate" | "permitted-models" | "results-filter" | "gateway-options";
|
|
479
|
+
type AgentRuntimeOptions = {
|
|
480
|
+
readonly name: string;
|
|
481
|
+
readonly mount: (domain: AgentRuntimeDomain) => AgentRuntimeMounted | Promise<AgentRuntimeMounted>;
|
|
482
|
+
/** Scenarios the runtime cannot express, each with a reason. */
|
|
483
|
+
readonly skip?: Readonly<Partial<Record<AgentRuntimeScenarioName, string>>>;
|
|
484
|
+
};
|
|
485
|
+
/**
|
|
486
|
+
* Runs the `AgentPermDock` contract against a runtime: operations decided by
|
|
487
|
+
* name, the listing hint, the model gate, the results filter and gateway
|
|
488
|
+
* attribution. Every failure denies, and no method throws.
|
|
489
|
+
*/
|
|
490
|
+
export declare function testAgentRuntime(options: AgentRuntimeOptions): void;
|
|
491
|
+
//#endregion
|
|
417
492
|
//#region src/testing/authzen.d.ts
|
|
418
493
|
type Entity = {
|
|
419
494
|
readonly type: string;
|
|
420
495
|
readonly id?: string;
|
|
421
496
|
readonly properties?: Readonly<Record<string, unknown>>;
|
|
422
497
|
};
|
|
423
|
-
type
|
|
498
|
+
type AuthzenEvaluationVector = {
|
|
424
499
|
readonly request: {
|
|
425
500
|
readonly subject: Entity;
|
|
426
501
|
readonly action: {
|
|
@@ -431,7 +506,7 @@ type AuthZenEvaluationVector = {
|
|
|
431
506
|
};
|
|
432
507
|
readonly expected: boolean;
|
|
433
508
|
};
|
|
434
|
-
type
|
|
509
|
+
type AuthzenEvaluationsVector = {
|
|
435
510
|
readonly request: {
|
|
436
511
|
readonly subject?: Entity;
|
|
437
512
|
readonly action?: {
|
|
@@ -450,7 +525,7 @@ type AuthZenEvaluationsVector = {
|
|
|
450
525
|
readonly decision: boolean;
|
|
451
526
|
}[];
|
|
452
527
|
};
|
|
453
|
-
type
|
|
528
|
+
type AuthzenSearchVector = {
|
|
454
529
|
readonly request: Readonly<Record<string, unknown>>;
|
|
455
530
|
readonly expected: {
|
|
456
531
|
readonly results: readonly Readonly<Record<string, unknown>>[];
|
|
@@ -461,17 +536,17 @@ type AuthZenSearchVector = {
|
|
|
461
536
|
* (`decisions-*.json` for Basic and Batch, `search/{subject,resource,action}`
|
|
462
537
|
* `results.json` for Search), so the official files load unchanged.
|
|
463
538
|
*/
|
|
464
|
-
type
|
|
465
|
-
readonly evaluation?: readonly
|
|
466
|
-
readonly evaluations?: readonly
|
|
539
|
+
type AuthzenVectors = {
|
|
540
|
+
readonly evaluation?: readonly AuthzenEvaluationVector[];
|
|
541
|
+
readonly evaluations?: readonly AuthzenEvaluationsVector[];
|
|
467
542
|
readonly search?: {
|
|
468
|
-
readonly subject?: readonly
|
|
469
|
-
readonly resource?: readonly
|
|
470
|
-
readonly action?: readonly
|
|
543
|
+
readonly subject?: readonly AuthzenSearchVector[];
|
|
544
|
+
readonly resource?: readonly AuthzenSearchVector[];
|
|
545
|
+
readonly action?: readonly AuthzenSearchVector[];
|
|
471
546
|
};
|
|
472
547
|
};
|
|
473
|
-
type
|
|
474
|
-
readonly vectors:
|
|
548
|
+
type TestAuthzenOptions = {
|
|
549
|
+
readonly vectors: AuthzenVectors;
|
|
475
550
|
/** Origin the requests are addressed to; the discovery document must name it. */
|
|
476
551
|
readonly origin?: string;
|
|
477
552
|
readonly headers?: Readonly<Record<string, string>>;
|
|
@@ -479,7 +554,7 @@ type TestAuthZenOptions = {
|
|
|
479
554
|
readonly discovery?: boolean;
|
|
480
555
|
};
|
|
481
556
|
/** Runs AuthZEN 1.0 interop vectors against an Authorization API endpoint. */
|
|
482
|
-
export declare function
|
|
557
|
+
export declare function testAuthzen(handle: (request: Request) => Promise<Response>, options: TestAuthzenOptions): void;
|
|
483
558
|
type TodoUser = {
|
|
484
559
|
readonly id: string;
|
|
485
560
|
readonly identity: string;
|
|
@@ -509,23 +584,156 @@ export declare const authzenTodoData: {
|
|
|
509
584
|
* every user against every action on their own and on Rick's todo, one batch
|
|
510
585
|
* per user, and the three searches.
|
|
511
586
|
*/
|
|
512
|
-
export declare function authzenTodoVectors():
|
|
587
|
+
export declare function authzenTodoVectors(): AuthzenVectors;
|
|
513
588
|
//#endregion
|
|
514
|
-
//#region src/testing/
|
|
515
|
-
|
|
516
|
-
|
|
589
|
+
//#region src/testing/cloud-api/platform-checks.d.ts
|
|
590
|
+
type TestCloudPlatformOptions = {
|
|
591
|
+
/** A `PERMDOCK_CLOUD_TOKEN` for `project`: read-only, pinned to one environment. */
|
|
592
|
+
readonly token: string;
|
|
593
|
+
/** The project the token reads; defaults to the environment. */
|
|
594
|
+
readonly project?: string;
|
|
595
|
+
/** A project with no `cloud push` yet and a login token that reads it; the `policy-not-published` check is skipped without it. */
|
|
596
|
+
readonly unpublished?: {
|
|
597
|
+
readonly project: string;
|
|
598
|
+
readonly token: string;
|
|
599
|
+
};
|
|
600
|
+
/** Registers a test MCP client with RFC 7591; skipped unless true. */
|
|
601
|
+
readonly registration?: boolean;
|
|
602
|
+
};
|
|
603
|
+
//#endregion
|
|
604
|
+
//#region src/testing/cloud-api/index.d.ts
|
|
605
|
+
type CloudApiKeys = {
|
|
606
|
+
/** The `client` key the application deploys (`PERMDOCK_CLOUD_KEY`). */
|
|
607
|
+
readonly client: string;
|
|
608
|
+
/** The `admin` key; the authoring checks are skipped without it. */
|
|
609
|
+
readonly admin?: string;
|
|
610
|
+
/** An `export` key; its key-kind check is skipped without it. */
|
|
611
|
+
readonly export?: string;
|
|
612
|
+
};
|
|
613
|
+
type TestCloudApiOptions = {
|
|
614
|
+
readonly environment?: string;
|
|
615
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
616
|
+
/** Signs the `PermDock-Approver` tokens; its issuer is a trusted issuer for `approver`. */
|
|
617
|
+
readonly approver: CloudApproverOptions;
|
|
618
|
+
/** A fresh `PermDock-Subject` token per call; the snapshot checks are skipped without it. */
|
|
619
|
+
readonly subject?: () => string | Promise<string>;
|
|
620
|
+
/** Verifies the environment's policy documents for `testPolicySource`. */
|
|
621
|
+
readonly verifier?: TokenVerifier;
|
|
622
|
+
/** AuthZEN vectors for the hosted ADS, with the caller's credentials as `headers`. */
|
|
623
|
+
readonly authzen?: {
|
|
624
|
+
readonly vectors: AuthzenVectors;
|
|
625
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
626
|
+
};
|
|
627
|
+
/** The platform issuer and project read API at `baseUrl`; skipped without it. */
|
|
628
|
+
readonly platform?: TestCloudPlatformOptions;
|
|
629
|
+
};
|
|
630
|
+
/**
|
|
631
|
+
* Runs the conformance runners and the HTTP contract checks against one
|
|
632
|
+
* PermDock Cloud environment, and validates every response body against
|
|
633
|
+
* `cloud-api-v1.json`. Point it at a test environment: it creates approvals,
|
|
634
|
+
* sends decision events and deliveries to `.invalid` addresses, and pushes
|
|
635
|
+
* the catalog the environment already holds.
|
|
636
|
+
*/
|
|
637
|
+
export declare function testCloudApi(baseUrl: string, keys: CloudApiKeys, options: TestCloudApiOptions): void;
|
|
638
|
+
//#endregion
|
|
639
|
+
//#region src/testing/conformance/approvals.d.ts
|
|
640
|
+
type ApprovalStoreOptions = {
|
|
641
|
+
/**
|
|
642
|
+
* Opens a second store over the same backing storage, as a restarted process
|
|
643
|
+
* would. Omit it for stores that do not persist (the resume-after-restart
|
|
644
|
+
* case is then skipped).
|
|
645
|
+
*/
|
|
646
|
+
readonly reopen?: () => ApprovalStore | Promise<ApprovalStore>;
|
|
647
|
+
};
|
|
648
|
+
export declare function testApprovalStore(store: ApprovalStore, options?: ApprovalStoreOptions): void;
|
|
649
|
+
/**
|
|
650
|
+
* Checks an `ApprovalPolicySource`: entries are plain JSON, belong to the
|
|
651
|
+
* queried tenant or to none, and every entry loads against `policy` (an
|
|
652
|
+
* entry that does not would deny every call).
|
|
653
|
+
*/
|
|
654
|
+
export declare function testApprovalPolicySource(source: ApprovalPolicySource, options: {
|
|
655
|
+
readonly policy: Policy;
|
|
656
|
+
readonly tenant: string;
|
|
657
|
+
readonly unknown?: string;
|
|
517
658
|
}): void;
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
659
|
+
/**
|
|
660
|
+
* Checks an `AccessReviewStore`: create is kept, items page, a decision is
|
|
661
|
+
* recorded once, only a revoked item can be marked applied, and close is once.
|
|
662
|
+
*/
|
|
663
|
+
export declare function testAccessReviewStore(store: AccessReviewStore): void;
|
|
664
|
+
/**
|
|
665
|
+
* Checks an `ApprovalDelegationSource`: entries are plain JSON, name the
|
|
666
|
+
* delegate, and are active at `at`. A query for another delegate is empty.
|
|
667
|
+
*/
|
|
668
|
+
export declare function testApprovalDelegationSource(source: ApprovalDelegationSource, options: {
|
|
669
|
+
readonly delegate: string;
|
|
670
|
+
readonly delegator: string;
|
|
527
671
|
readonly tenant?: string;
|
|
672
|
+
readonly at?: string;
|
|
673
|
+
}): void;
|
|
674
|
+
/**
|
|
675
|
+
* Checks an `IdempotencyStore`: a stored response comes back as written
|
|
676
|
+
* until it expires, keys never share an entry, and a later `set` replaces an
|
|
677
|
+
* earlier one.
|
|
678
|
+
*/
|
|
679
|
+
export declare function testIdempotencyStore(store: IdempotencyStore): void;
|
|
680
|
+
//#endregion
|
|
681
|
+
//#region src/testing/conformance/where.d.ts
|
|
682
|
+
type WhereRow = Readonly<Record<string, unknown>>;
|
|
683
|
+
/**
|
|
684
|
+
* `matches` answers whether the compiled output selects `row`, for example
|
|
685
|
+
* by running it against a table holding only that row. With it, every case
|
|
686
|
+
* must select the rows the in-memory evaluator keeps, including rows whose
|
|
687
|
+
* fields are NULL.
|
|
688
|
+
*/
|
|
689
|
+
export declare function testWhereCompiler<TTarget>(compiler: WhereCompiler<TTarget>, options: {
|
|
690
|
+
readonly target: TTarget;
|
|
691
|
+
readonly isFailClosed?: (compiled: unknown) => boolean;
|
|
692
|
+
readonly matches?: (compiled: unknown, row: WhereRow) => boolean | Promise<boolean>;
|
|
693
|
+
}): void;
|
|
694
|
+
//#endregion
|
|
695
|
+
//#region src/testing/conformance/credentials.d.ts
|
|
696
|
+
export declare function testReplayStore(store: ReplayStore): void;
|
|
697
|
+
export declare function testSetQueue(queue: SetQueue): void;
|
|
698
|
+
export declare function testRevocationFeed(feed: RevocationFeed): void;
|
|
699
|
+
export declare function testTokenVerifier(verifier: TokenVerifier, options?: {
|
|
700
|
+
readonly audience?: string;
|
|
701
|
+
readonly issuer?: string;
|
|
528
702
|
}): void;
|
|
703
|
+
/**
|
|
704
|
+
* `key` is a live key the verifier knows, or a function issuing one (called
|
|
705
|
+
* once). `revoke`, when given, revokes it; the runner then expects the key
|
|
706
|
+
* to stop verifying.
|
|
707
|
+
*/
|
|
708
|
+
export declare function testCredentialVerifier(verifier: CredentialVerifier, options: {
|
|
709
|
+
readonly key: string | (() => string | Promise<string>);
|
|
710
|
+
readonly revoke?: () => void | Promise<void>;
|
|
711
|
+
}): void;
|
|
712
|
+
export declare function testTokenSigner(signer: TokenSigner, options: {
|
|
713
|
+
readonly verifier: TokenVerifier;
|
|
714
|
+
}): void;
|
|
715
|
+
//#endregion
|
|
716
|
+
//#region src/testing/conformance/runtime-stores.d.ts
|
|
717
|
+
export declare function testLimitStore(store: LimitStore): void;
|
|
718
|
+
export declare function testDecisionSink(sink: DecisionSink): void;
|
|
719
|
+
export declare function testSnapshotSource(source: SnapshotSource): void;
|
|
720
|
+
export declare function testPolicySource(source: PolicySource, options?: {
|
|
721
|
+
readonly policy?: Policy;
|
|
722
|
+
}): void;
|
|
723
|
+
//#endregion
|
|
724
|
+
//#region src/testing/conformance/providers.d.ts
|
|
725
|
+
type DecisionProviderRunnerOptions = {
|
|
726
|
+
/** A permission the provider handles. */
|
|
727
|
+
readonly permission: Permission;
|
|
728
|
+
readonly subject: Subject;
|
|
729
|
+
readonly data?: unknown;
|
|
730
|
+
/** The same provider wired to a transport that fails; it must deny. */
|
|
731
|
+
readonly unavailable?: DecisionProvider;
|
|
732
|
+
};
|
|
733
|
+
export declare function testDecisionProvider(provider: DecisionProvider, options: DecisionProviderRunnerOptions): void;
|
|
734
|
+
export declare function testSnapshotStorage(storage: SnapshotStorage): void;
|
|
735
|
+
//#endregion
|
|
736
|
+
//#region src/testing/conformance/relations.d.ts
|
|
529
737
|
/**
|
|
530
738
|
* A `RelationSource` answers facts only: well-formed chains nearest first and
|
|
531
739
|
* no longer than `depth`, holders with principal ids or group references and
|
|
@@ -548,6 +756,119 @@ export declare function testRelationSource(source: RelationSource, options: {
|
|
|
548
756
|
readonly links?: Readonly<Record<string, string>>;
|
|
549
757
|
};
|
|
550
758
|
}): void;
|
|
759
|
+
//#endregion
|
|
760
|
+
//#region src/testing/conformance/principals.d.ts
|
|
761
|
+
/**
|
|
762
|
+
* Checks a `PrincipalSource`: `principal` answers each listed id with the
|
|
763
|
+
* expected principal or `null`, never another id; `principalByIdentity`
|
|
764
|
+
* resolves each listed identity to the expected principal id or `null`, and
|
|
765
|
+
* an email matches trimmed and in any case.
|
|
766
|
+
*/
|
|
767
|
+
export declare function testPrincipalSource(source: PrincipalSource, options: {
|
|
768
|
+
readonly principals: readonly {
|
|
769
|
+
readonly id: string;
|
|
770
|
+
readonly tenant?: string;
|
|
771
|
+
/** The principal `principal(id)` returns, or `null` for none; omit to check only the shape. */
|
|
772
|
+
readonly expect?: Principal | null;
|
|
773
|
+
}[];
|
|
774
|
+
readonly identities?: readonly {
|
|
775
|
+
readonly identity: PrincipalIdentity;
|
|
776
|
+
/** The id of the principal the identity resolves to, or `null` for none. */
|
|
777
|
+
readonly expect: string | null;
|
|
778
|
+
}[];
|
|
779
|
+
}): void;
|
|
780
|
+
//#endregion
|
|
781
|
+
//#region src/testing/conformance/automations.d.ts
|
|
782
|
+
/**
|
|
783
|
+
* Checks an `AutomationSource`: `automation(id)` answers each listed id
|
|
784
|
+
* with a valid Automation v1 record of that id or `null`, never another id;
|
|
785
|
+
* a record held to one tenant is `null` when asked for another; an empty or
|
|
786
|
+
* unknown id is `null`.
|
|
787
|
+
*/
|
|
788
|
+
export declare function testAutomationSource(source: AutomationSource, options: {
|
|
789
|
+
readonly automations: readonly {
|
|
790
|
+
readonly id: string;
|
|
791
|
+
readonly tenant?: string;
|
|
792
|
+
/** The record `automation(id)` returns, or `null` for none; omit to check only the shape. */
|
|
793
|
+
readonly expect?: Automation | null;
|
|
794
|
+
}[];
|
|
795
|
+
}): void;
|
|
796
|
+
/**
|
|
797
|
+
* Checks a `SupportSessionSource`: `session(id)` answers each listed id
|
|
798
|
+
* with a record of that id or `null`, never another id; `ended` is a
|
|
799
|
+
* boolean when present; an empty or unknown id is `null`.
|
|
800
|
+
*/
|
|
801
|
+
export declare function testSupportSessionSource(source: SupportSessionSource, options: {
|
|
802
|
+
readonly sessions: readonly {
|
|
803
|
+
readonly id: string;
|
|
804
|
+
/** `true` for an ended session, `false` for a live one, `null` for an unknown one. */
|
|
805
|
+
readonly ended?: boolean | null;
|
|
806
|
+
}[];
|
|
807
|
+
}): void;
|
|
808
|
+
/**
|
|
809
|
+
* Checks an `ApprovalWaiter`: a wait ends when its token is woken and not
|
|
810
|
+
* when another token is; waking a token nobody waits on resolves; a wait
|
|
811
|
+
* whose `expiresAt` has passed ends; an aborted `signal` rejects the wait with its reason.
|
|
812
|
+
* Pass `expiry: false` or `abort: false` for a waiter whose runner offers no
|
|
813
|
+
* timer or no cancellation, `pending` when the waiter reads a store, and
|
|
814
|
+
* `parked` when a wait parks asynchronously.
|
|
815
|
+
*/
|
|
816
|
+
export declare function testApprovalWaiter(waiter: ApprovalWaiter, options?: {
|
|
817
|
+
/** Opens a pending approval request and returns its token; a fixed token per label when absent. */
|
|
818
|
+
readonly pending?: (label: string) => string | Promise<string>;
|
|
819
|
+
/** Resolves once `wait(token)` has parked; one macrotask when absent. */
|
|
820
|
+
readonly parked?: (token: string) => Promise<void>;
|
|
821
|
+
readonly expiry?: boolean;
|
|
822
|
+
readonly abort?: boolean;
|
|
823
|
+
/** Milliseconds a wait may take to end after its trigger. Defaults to 1000. */
|
|
824
|
+
readonly timeout?: number;
|
|
825
|
+
}): void;
|
|
826
|
+
//#endregion
|
|
827
|
+
//#region src/testing/delivery-transport.d.ts
|
|
828
|
+
/** How a provider fails on its next call: a retryable error, a final error, or a throw from its client. */
|
|
829
|
+
type DeliveryFailureKind = "retryable" | "final" | "throw";
|
|
830
|
+
type DeliveryTransportHarness<C extends DeliveryChannel> = {
|
|
831
|
+
readonly transport: DeliveryTransport<C>;
|
|
832
|
+
/** What the provider accepted, one entry per delivery, with the idempotency key it received. */
|
|
833
|
+
received(): readonly {
|
|
834
|
+
readonly idempotencyKey: string;
|
|
835
|
+
}[] | Promise<readonly {
|
|
836
|
+
readonly idempotencyKey: string;
|
|
837
|
+
}[]>;
|
|
838
|
+
/** Makes the provider's next call fail this way. */
|
|
839
|
+
fail(kind: DeliveryFailureKind): void;
|
|
840
|
+
};
|
|
841
|
+
type DeliveryTransportOptions<C extends DeliveryChannel> = {
|
|
842
|
+
readonly channel: C;
|
|
843
|
+
/** An address the provider accepts on `channel`. */
|
|
844
|
+
readonly address: string;
|
|
845
|
+
readonly message: TransportMessages[C];
|
|
846
|
+
/** A fresh harness per test. */
|
|
847
|
+
create(): DeliveryTransportHarness<C>;
|
|
848
|
+
};
|
|
849
|
+
/**
|
|
850
|
+
* Conformance for a `DeliveryTransport`: it sends a checked target with its
|
|
851
|
+
* idempotency key, keeps the key on a retry, refuses a target without a
|
|
852
|
+
* granted decision before calling the provider, and maps provider errors to
|
|
853
|
+
* retryable or final failures without rejecting.
|
|
854
|
+
*/
|
|
855
|
+
export declare function testDeliveryTransport<C extends DeliveryChannel>(name: string, options: DeliveryTransportOptions<C>): void;
|
|
856
|
+
//#endregion
|
|
857
|
+
//#region src/testing/conformance/identity.d.ts
|
|
858
|
+
export declare function testSubjectResolver<TInput>(resolver: SubjectResolver<TInput>, options: {
|
|
859
|
+
readonly invalid: TInput;
|
|
860
|
+
}): void;
|
|
861
|
+
export declare function testMembershipSource(source: MembershipSource, options: {
|
|
862
|
+
readonly principals: readonly {
|
|
863
|
+
readonly id: string;
|
|
864
|
+
readonly kind?: string;
|
|
865
|
+
}[];
|
|
866
|
+
readonly expect?: Record<string, readonly Membership[]>;
|
|
867
|
+
/** With the policy, every membership must name one of its scopes and carry its parent ids. */
|
|
868
|
+
readonly policy?: Policy;
|
|
869
|
+
/** Passed to every `membershipsFor`; a source keyed by tenant answers nothing without one. */
|
|
870
|
+
readonly tenant?: string;
|
|
871
|
+
}): void;
|
|
551
872
|
export declare function testEntitlementSource(source: EntitlementSource, options: {
|
|
552
873
|
readonly principal: {
|
|
553
874
|
readonly id: string;
|
|
@@ -555,7 +876,7 @@ export declare function testEntitlementSource(source: EntitlementSource, options
|
|
|
555
876
|
readonly tenant: string;
|
|
556
877
|
readonly expect?: readonly string[];
|
|
557
878
|
}): void;
|
|
558
|
-
export declare function
|
|
879
|
+
export declare function testCustomRoleSource(source: CustomRoleSource, options: {
|
|
559
880
|
readonly tenant: string;
|
|
560
881
|
readonly declared: readonly (string | Role)[];
|
|
561
882
|
/** When set, every custom role's `grants` must resolve inside the ceiling. */
|
|
@@ -566,69 +887,14 @@ export declare function testRoleSource(source: RoleSource, options: {
|
|
|
566
887
|
*/
|
|
567
888
|
readonly every?: readonly string[];
|
|
568
889
|
}): void;
|
|
569
|
-
export declare function testLimitStore(store: LimitStore): void;
|
|
570
|
-
export declare function testDecisionSink(sink: DecisionSink): void;
|
|
571
|
-
export declare function testSnapshotSource(source: SnapshotSource): void;
|
|
572
|
-
export declare function testPolicySource(source: PolicySource, options?: {
|
|
573
|
-
readonly policy?: Policy;
|
|
574
|
-
}): void;
|
|
575
|
-
export declare function testReplayStore(store: ReplayStore): void;
|
|
576
|
-
export declare function testRevocationFeed(feed: RevocationFeed): void;
|
|
577
890
|
export declare function testDirectoryStore(store: DirectoryStore, options: {
|
|
578
891
|
readonly tenants: readonly [string, string];
|
|
579
892
|
}): void;
|
|
580
|
-
type ApprovalStoreOptions = {
|
|
581
|
-
/**
|
|
582
|
-
* Opens a second store over the same backing storage, as a restarted process
|
|
583
|
-
* would. Omit it for stores that do not persist (the resume-after-restart
|
|
584
|
-
* case is then skipped).
|
|
585
|
-
*/
|
|
586
|
-
readonly reopen?: () => ApprovalStore | Promise<ApprovalStore>;
|
|
587
|
-
};
|
|
588
|
-
export declare function testApprovalStore(store: ApprovalStore, options?: ApprovalStoreOptions): void;
|
|
589
|
-
export declare function testTokenVerifier(verifier: TokenVerifier, options?: {
|
|
590
|
-
readonly audience?: string;
|
|
591
|
-
readonly issuer?: string;
|
|
592
|
-
}): void;
|
|
593
893
|
/** Settings for `tenant`, or `undefined`; a thrown source fails the runner. */
|
|
594
894
|
export declare function testSettingsSource(source: SettingsSource, options: {
|
|
595
895
|
readonly tenant: string;
|
|
596
896
|
readonly unknown?: string;
|
|
597
897
|
}): void;
|
|
598
|
-
/**
|
|
599
|
-
* Checks an `ApprovalPolicySource`: entries are plain JSON, belong to the
|
|
600
|
-
* queried tenant or to none, and every entry loads against `policy` (an
|
|
601
|
-
* entry that does not would deny every call).
|
|
602
|
-
*/
|
|
603
|
-
export declare function testApprovalPolicySource(source: ApprovalPolicySource, options: {
|
|
604
|
-
readonly policy: Policy;
|
|
605
|
-
readonly tenant: string;
|
|
606
|
-
readonly unknown?: string;
|
|
607
|
-
}): void;
|
|
608
|
-
/**
|
|
609
|
-
* `key` is a live key the verifier knows, or a function issuing one (called
|
|
610
|
-
* once). `revoke`, when given, revokes it; the runner then expects the key
|
|
611
|
-
* to stop verifying.
|
|
612
|
-
*/
|
|
613
|
-
export declare function testCredentialVerifier(verifier: CredentialVerifier, options: {
|
|
614
|
-
readonly key: string | (() => string | Promise<string>);
|
|
615
|
-
readonly revoke?: () => void | Promise<void>;
|
|
616
|
-
}): void;
|
|
617
|
-
export declare function testTokenSigner(signer: TokenSigner, options: {
|
|
618
|
-
readonly verifier: TokenVerifier;
|
|
619
|
-
}): void;
|
|
620
|
-
type WhereRow = Readonly<Record<string, unknown>>;
|
|
621
|
-
/**
|
|
622
|
-
* `matches` answers whether the compiled output selects `row`, for example
|
|
623
|
-
* by running it against a table holding only that row. With it, every case
|
|
624
|
-
* must select the rows the in-memory evaluator keeps, including rows whose
|
|
625
|
-
* fields are NULL.
|
|
626
|
-
*/
|
|
627
|
-
export declare function testWhereCompiler<TTarget>(compiler: WhereCompiler<TTarget>, options: {
|
|
628
|
-
readonly target: TTarget;
|
|
629
|
-
readonly isFailClosed?: (compiled: unknown) => boolean;
|
|
630
|
-
readonly matches?: (compiled: unknown, row: WhereRow) => boolean | Promise<boolean>;
|
|
631
|
-
}): void;
|
|
632
898
|
//#endregion
|
|
633
899
|
//#region src/testing/jwt-fixtures.d.ts
|
|
634
900
|
export declare const jwtFixtureJwks: {
|
|
@@ -650,9 +916,9 @@ export declare const jwtFixtureTokens: {
|
|
|
650
916
|
readonly wrongIss: "eyJhbGciOiJFZDI1NTE5Iiwia2lkIjoiMjAyNi0wOSIsInR5cCI6ImF0K2p3dCJ9.eyJzdWIiOiJ1XzEiLCJpc3MiOiJodHRwczovL2V2aWwuZXhhbXBsZS5jb20iLCJhdWQiOiJodHRwczovL2FwaS5leGFtcGxlLmNvbSIsImlhdCI6MTcwMDAwMDAwMCwiZXhwIjoyMDAwMDAwMDAwfQ.tIcLHLa9JLtKz1gqjRGdr5DFbUzRDs5KsoPsJCxspvbBcsFfRFG2G0XJnd1h4QHyZ_5B4OhY3W_jIIsnOPD9Bg";
|
|
651
917
|
readonly unknownKid: "eyJhbGciOiJFZDI1NTE5Iiwia2lkIjoibm9wZSIsInR5cCI6ImF0K2p3dCJ9.eyJzdWIiOiJ1XzEiLCJpc3MiOiJodHRwczovL2xvZ2luLmV4YW1wbGUuY29tIiwiYXVkIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iLCJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MjAwMDAwMDAwMH0.walgG5GvpCVBnkMtkdw-epi5c93JqfvAM_N4EWR9Tqhiw_cnzITnlQyoVfihECmV1fqtFrhwM1RCIRJvd38zAQ";
|
|
652
918
|
readonly none: "eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1XzEiLCJpc3MiOiJodHRwczovL2xvZ2luLmV4YW1wbGUuY29tIiwiYXVkIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iLCJleHAiOjIwMDAwMDAwMDAsImlhdCI6MTcwMDAwMDAwMH0.";
|
|
653
|
-
readonly snapshot: "
|
|
654
|
-
readonly approval: "
|
|
655
|
-
readonly decisions: "
|
|
919
|
+
readonly snapshot: "eyJhbGciOiJFZDI1NTE5Iiwia2lkIjoiMjAyNi0wOSIsInR5cCI6InZuZC5wZXJtZG9jay5zbmFwc2hvdCtqd3QifQ.eyJzbmFwc2hvdCI6eyJ2IjoxLCJzdWJqZWN0Ijp7InByaW5jaXBhbCI6eyJpZCI6InVfMSIsInJvbGVzIjpbIm1lbWJlciJdfSwiY29udGV4dCI6e319LCJyb2xlcyI6WyJtZW1iZXIiXSwiZ3JhbnRzIjpbXSwidGVuYW50cyI6W119LCJzdWIiOiJ1XzEiLCJpYXQiOjE3MDAwMDAwMDAsImp0aSI6InNuYXBfZml4dHVyZSIsImlzcyI6Imh0dHBzOi8vYXBwLmV4YW1wbGUuY29tIiwiYXVkIjoiaHR0cHM6Ly9hcHAuZXhhbXBsZS5jb20iLCJleHAiOjIwMDAwMDAwMDB9.41KijBuOn1Ehodp60-Pn6qx_WrHQ-BiVUmYy2vjcHjO3o1dopXxjnHJP7P1c-6ghYgrvucPu7hZrDjTtPhxWBw";
|
|
920
|
+
readonly approval: "eyJhbGciOiJFZDI1NTE5Iiwia2lkIjoiMjAyNi0wOSIsInR5cCI6InZuZC5wZXJtZG9jay5hcHByb3ZhbCtqd3QifQ.eyJzdWIiOiJ1XzEiLCJ0b2tlbiI6InNoYS0yNTY6NDdERVFwajhIQlNhLV9USW1XLTVKQ2V1UWVSa201Tk1wSldaRzNoU3VGVSIsInJlc29sdmVkX2J5IjoidV8yIiwiYXBwcm92YWxzIjpbeyJieSI6InVfMiIsImF0IjoiMjAyMy0xMS0xNFQyMjoxMzoyMFoifV0sImF1dGhvcml6YXRpb25fZGV0YWlscyI6W3sidHlwZSI6InBvc3QiLCJhY3Rpb25zIjpbImRlbGV0ZSJdLCJpZGVudGlmaWVyIjoiNDIifV0sImlhdCI6MTcwMDAwMDAwMCwianRpIjoiYXByX2ZpeHR1cmUiLCJpc3MiOiJodHRwczovL2FwcC5leGFtcGxlLmNvbSIsImF1ZCI6Imh0dHBzOi8vYXBwLmV4YW1wbGUuY29tIiwiZXhwIjoyMDAwMDAwMDAwfQ.Q76F3tDT2FrEnxD9TjdLfEayJEyyGUWHu6bTCCl5Flegcl9-o370agNVhcV03Khfidm-lK7gPg05ZiYcpCfyBQ";
|
|
921
|
+
readonly decisions: "eyJhbGciOiJFZDI1NTE5Iiwia2lkIjoiMjAyNi0wOSIsInR5cCI6InZuZC5wZXJtZG9jay5ldmlkZW5jZStqd3QifQ.eyJldmVudHMiOltdLCJpYXQiOjE3MDAwMDAwMDAsImp0aSI6ImRlY19maXh0dXJlIiwiaXNzIjoiaHR0cHM6Ly9hcHAuZXhhbXBsZS5jb20iLCJhdWQiOiJodHRwczovL2FwcC5leGFtcGxlLmNvbSIsImV4cCI6MjAwMDAwMDAwMH0.oGiFmCEFWUAEBtLO3F_rnGMSKBhb9rIxng4YLwRbBTA3fudrbJMcJD2BhNH99cjcBa1xCmADfdOnTc-Ltq-kAA";
|
|
656
922
|
};
|
|
657
923
|
//#endregion
|
|
658
924
|
//#region src/testing/supabase-fixtures.d.ts
|
|
@@ -660,7 +926,7 @@ export declare const jwtFixtureTokens: {
|
|
|
660
926
|
* Claim sets in the shape the Supabase custom access token hook produces (the RBAC guide's
|
|
661
927
|
* `user_role` claim, optionally mirrored into `app_metadata`, plus a `memberships` array for
|
|
662
928
|
* multi-org apps). `tenantPlans` has scoped memberships, `tenant_id` and per-tenant plans in
|
|
663
|
-
* `features`, read with `plans: 'features'`. `full` sets every field of the
|
|
929
|
+
* `features`, read with `claims: { plans: 'features' }`. `full` sets every field of the
|
|
664
930
|
* claim contract plus a `hook.claims` extra claim; `portalContact`, `oauthClient` and
|
|
665
931
|
* `actChain` cover a customer contact, a Supabase OAuth server token and an RFC 8693 chain.
|
|
666
932
|
* `supportSession`, `supportSessionReadOnly` and `impersonation` are the `act.kind` tokens
|
|
@@ -672,7 +938,9 @@ type SupabaseClaimFixture = {
|
|
|
672
938
|
readonly claims: Readonly<Record<string, unknown>>;
|
|
673
939
|
/** `subjectFromSupabase` options the case needs. */
|
|
674
940
|
readonly options?: {
|
|
675
|
-
readonly
|
|
941
|
+
readonly claims?: {
|
|
942
|
+
readonly plans?: string;
|
|
943
|
+
};
|
|
676
944
|
readonly anonymousSignIns?: "deny";
|
|
677
945
|
};
|
|
678
946
|
readonly expect: {
|
|
@@ -742,4 +1010,21 @@ export declare const supabaseClaimVectors: SupabaseClaimVectors;
|
|
|
742
1010
|
*/
|
|
743
1011
|
export declare const supabaseHookManifestFixture: SupabaseHookManifest;
|
|
744
1012
|
//#endregion
|
|
745
|
-
|
|
1013
|
+
//#region src/core/problem-types.d.ts
|
|
1014
|
+
/**
|
|
1015
|
+
* The Problem Details types PermDock defines (RFC 9457 section 4). Every
|
|
1016
|
+
* other status answers with `about:blank` and its RFC 9110 reason phrase.
|
|
1017
|
+
*/
|
|
1018
|
+
declare const PROBLEM_TYPES: readonly ["denied", "approval-required", "validation", "step-up-required", "not-entitled", "rate-limited", "limit-unavailable", "invalid-signature", "approver-not-eligible"];
|
|
1019
|
+
type ProblemType = (typeof PROBLEM_TYPES)[number];
|
|
1020
|
+
//#endregion
|
|
1021
|
+
//#region src/testing/problem-examples.d.ts
|
|
1022
|
+
/**
|
|
1023
|
+
* One RFC 9457 body per PermDock problem type, exactly as the HTTP adapters
|
|
1024
|
+
* write it for a `post.delete` request by subject `u_123`. A client tests its
|
|
1025
|
+
* error handling against these; `tests/standards/problem-details.test.ts`
|
|
1026
|
+
* rebuilds each from the code that emits it, and the docs show the same JSON.
|
|
1027
|
+
*/
|
|
1028
|
+
export declare const PROBLEM_EXAMPLES: Readonly<Record<ProblemType, ProblemDetails>>;
|
|
1029
|
+
//#endregion
|
|
1030
|
+
export { type AgentAdapterOptions, type AgentCall, type AgentMounted, type AgentOutcome, type AgentRuntimeContext, type AgentRuntimeDomain, type AgentRuntimeModel, type AgentRuntimeMounted, type AgentRuntimeOperation, type AgentRuntimeOptions, type AgentRuntimeScenarioName, type AgentScenarioDomain, type AgentScenarioName, type AgentToolName, type ApprovalStoreOptions, type AuthzenEvaluationVector, type AuthzenEvaluationsVector, type AuthzenSearchVector, type AuthzenVectors, type ClientParityCase, type ClientParityOptions, type ClientStoreFactory, type ClientStoreFactoryOptions, type ClientStoreHandle, type ClientStorePermDock, type ClientStoreStatus, type CloudApiKeys, type DecisionProviderRunnerOptions, type DeliveryFailureKind, type DeliveryTransportHarness, type DeliveryTransportOptions, type DescribePolicyConfig, type HttpAdapterOptions, type HttpCall, type HttpMounted, type HttpOp, type HttpResult, type HttpScenarioDomain, type HttpScenarioName, type LegacyParityCase, type MatrixCell, type MatrixOutcome, type OrmParityCase, type OrmParityOptions, type OrmParityReport, type OrmParityRunInput, type OrmParityScenario, type RlsDbOutcome, type RlsFieldsOutcome, type RlsParityCase, type RlsParityFixture, type RlsParityOptions, type RlsParityReport, type RlsParitySubject, type RlsQueryFn, type RlsQueryResult, type SupabaseClaimFixture, type SupabaseClaimFixtureName, type SupabaseClaimVectors, type TestAuthzenOptions, type TestCloudApiOptions, type TestCloudPlatformOptions, expectTypeOf, supabaseMembershipsBudget };
|