permdock 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -35
- package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
- package/dist/a2a/index.d.ts +6 -6
- package/dist/a2a/index.js +14 -17
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-DCYe60Pi.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -35
- package/dist/ai-sdk/index.js +37 -23
- package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-DvSSPQJX.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-p1PGoVjb.js +995 -0
- package/dist/arazzo-41WuzHou.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.js} +20 -14
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-DabClFLQ.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +94 -79
- package/dist/automation-BNM3TtDo.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +9 -8
- package/dist/better-supabase/index.d.ts +357 -30
- package/dist/better-supabase/index.js +936 -194
- package/dist/{bind-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
- package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/{build-instance-DIIV9DbC.js → build-instance-Bu_eDqYw.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-Drg-1YhL.d.ts} +44 -25
- package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/catalog-BoWglDPI.js +1 -0
- package/dist/catalog-DZVbrF-z.js +52 -0
- package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.js} +45 -23
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +24 -27
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +9 -14
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +19 -5
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +239 -340
- package/dist/cloud-ytQ3uviA.js +87 -0
- package/dist/codemod-5mpSpnUY.js +37 -0
- package/dist/codemod-ua2hHy7w.js +2084 -0
- package/dist/collect-Ci6akVwH.js +55 -0
- package/dist/collect-D7eQDffE.js +1 -0
- package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
- package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/completion-BTFrHZhX.js +143 -0
- package/dist/config-Bj2Ixq3d.js +26 -0
- package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- package/dist/create-B30OMUOJ.d.ts +107 -0
- package/dist/create-CBMmFie-.d.ts +138 -0
- package/dist/create-CGm28gyI.js +130 -0
- package/dist/create-CQWIpUG-.js +403 -0
- package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
- package/dist/create-D_NmPOdH.d.ts +110 -0
- package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-j6-rc37o.js +286 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/{denied-text-DfRk15uw.d.ts → denied-text-CiFQNuMV.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/{diff-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
- package/dist/diff-CmuSD3vc.js +37 -0
- package/dist/doctor-3ZqNHX_G.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.js} +245 -50
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +2 -2
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +13 -12
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
- package/dist/evaluate-CNClBvcj.js +1785 -0
- package/dist/evaluations-C_1vdSZc.d.ts +32 -0
- package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.js} +145 -34
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +22 -28
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +12 -11
- package/dist/fastify/index.d.ts +25 -22
- package/dist/fastify/index.js +13 -12
- package/dist/fetch-adapter-DD_gfmrC.js +120 -0
- package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
- package/dist/fields-OYG_JR78.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-CTCMsFZk.js} +55 -52
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.js} +5 -4
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-C9YmyBIa.js → helpers-CBYVMjwh.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-B46-5LYE.js +315 -0
- package/dist/hosted-BPk51-kX.d.ts +78 -0
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
- package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
- package/dist/{import-BFIlhetD.js → import-wyqXUyjm.js} +190 -53
- package/dist/index-B8YjkEZ4.d.ts +210 -0
- package/dist/index-C-6Letxg.d.ts +431 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
- package/dist/index-Cp_ilKi1.d.ts +91 -0
- package/dist/index-CueFnxQc.d.ts +110 -0
- package/dist/index-DuWxc5dt.d.ts +909 -0
- package/dist/index.d.ts +19 -15
- package/dist/index.js +31 -21
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-plkrsAog.d.ts → instance-options-BsVpyGIk.d.ts} +2 -2
- package/dist/instance-snapshot-BOEhcqIF.js +601 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +156 -135
- package/dist/{kernel-CB3LrIJM.js → kernel-D0NVb1cK.js} +52 -24
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +2 -2
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-dvL2XEe1.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
- package/dist/{map-error-BE27PYkE.js → map-error-Dr70oA_3.js} +3 -3
- package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
- package/dist/mcp/index.d.ts +22 -12
- package/dist/mcp/index.js +57 -39
- package/dist/{migrate-BwlB5-Wk.js → migrate-CIq4-E9F.js} +53 -14
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +15 -14
- package/dist/next/index.d.ts +18 -21
- package/dist/next/index.js +13 -11
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +17 -24
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
- package/dist/openapi-C4dDTVEd.js +138 -0
- package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-X0VM7F3m.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +20 -15
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +30 -7
- package/dist/output-1im__-08.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
- package/dist/{permission-keys-B26jeyUv.js → ownership-DqaJNJPn.js} +1045 -153
- package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
- package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
- package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
- package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +45 -26
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-BrAscV28.js +868 -0
- package/dist/permdock-SV8ZINYT.d.ts +502 -0
- package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-CCJ6lmxB.js → permissions-BPxlwVhN.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
- package/dist/policies-DP2nqRoF.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
- package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
- package/dist/postgrest-CEgRbefE.d.ts +100 -0
- package/dist/postgrest-DAjUkF9w.js +575 -0
- package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
- package/dist/powersync-DISt6SUe.js +62 -0
- package/dist/powersync-MMJ2mI2q.js +1 -0
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +2 -2
- package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
- package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-B45V5d2b.d.ts} +1 -1
- package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/{protected-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
- package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
- package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
- package/dist/pull-CvpINcMK.js +1 -0
- package/dist/pull-jEwbf80J.js +256 -0
- package/dist/push-BD4f15co.js +116 -0
- package/dist/pushed-policy-CqtxkV4G.js +238 -0
- package/dist/pushed-policy-DCW91KQU.d.ts +57 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -72
- package/dist/react-native/index.js +29 -25
- package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
- package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-COpmZUfx.d.ts → replay-Bkm-Ne4l.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.js} +3 -3
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
- package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BAqP4q66.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
- package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
- package/dist/run-CUKuz0A8.js +723 -0
- package/dist/run-DDwUaJDU.js +1 -0
- package/dist/run-ticket-DocwaTKn.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DtaA4JuW.js → saas-BCXRuXca.js} +16 -14
- package/dist/scan-qvOe0hS3.js +29 -0
- package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
- package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
- package/dist/server/index.d.ts +12 -143
- package/dist/server/index.js +12 -9
- package/dist/server-C3WXAHZj.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
- package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-4-eQIRWf.d.ts +225 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-B7DkYg6g.js +269 -0
- package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-PXI-vGpY.d.ts} +7 -5
- package/dist/solid/index.d.ts +11 -12
- package/dist/solid/index.js +7 -7
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-Dljy06zL.d.ts → sources-Xc4zkszI.d.ts} +7 -13
- package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
- package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
- package/dist/src-Cu2m75uo.js +1860 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
- package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
- package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
- package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.d.ts} +2 -2
- package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +7 -6
- package/dist/supabase/middleware.js +13 -11
- package/dist/supabase-By_frk3U.js +92 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
- package/dist/supabase-hook-CCw5m35C.js +1 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +4 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +10 -10
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +4 -4
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +23 -287
- package/dist/testing/index.d.ts +311 -38
- package/dist/testing/index.js +3475 -201
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
- package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +16 -14
- package/dist/types-8RnwUAvE.d.ts +107 -0
- package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
- package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
- package/dist/types-BtHtcKMr.d.ts +157 -0
- package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
- package/dist/types-C791HFu9.d.ts +332 -0
- package/dist/types-C863OQiR.d.ts +57 -0
- package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
- package/dist/types-C_IiEs64.d.ts +65 -0
- package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
- package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
- package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CRVl9V3t.js +32 -0
- package/dist/usage-CZpSQP6L.js +1 -0
- package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.d.ts} +1 -1
- package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
- package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
- package/dist/{verify-BztUB3GX.js → verify-BaAKx7t6.js} +645 -50
- package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
- package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-CN8H_9UF.d.ts} +67 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- package/dist/waiter-B986w1oK.d.ts +36 -0
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/watch--ovlPOc0.js +1 -0
- package/dist/{watch-zeucB7eF.js → watch-vea54PRw.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- package/dist/where-scope-C9vfEphl.js +306 -0
- package/dist/who-can-DWBAcaCQ.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/{wrap-Cr93qqdP.d.ts → wrap-C5jC6sKI.d.ts} +2 -1
- package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
- package/package.json +136 -37
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +123 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +10 -9
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
- package/skills/permdock-wire/SKILL.md +17 -11
- package/skills/permdock-wire/references/adapters.md +139 -51
- package/skills/permdock-wire/references/policy-options.md +5 -5
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DZL76lKW.js +0 -240
- package/dist/arazzo-CD8d0WLb.js +0 -54
- package/dist/catalog-6yWAX6Ps.js +0 -2
- package/dist/catalog-WHG4kBq7.js +0 -48
- package/dist/cloud-C7bSDgX4.js +0 -50
- package/dist/cloud-PeBN3IEn.js +0 -118
- package/dist/collect-Bw2Jdq1q.js +0 -2
- package/dist/collect-CQx4hX4N.js +0 -83
- package/dist/commands-Cpip4ULx.js +0 -97
- package/dist/config-DLt6BvV7.js +0 -36
- package/dist/diff-Cnghh_Ip.js +0 -48
- package/dist/doctor-CuVJvhV_.js +0 -53
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-fwfXN01n.js +0 -1016
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-DgM7w96K.d.ts +0 -6
- package/dist/index-Dz7didpC.d.ts +0 -201
- package/dist/index-UdVQgq48.d.ts +0 -550
- package/dist/load-B_shHrmd.js +0 -2
- package/dist/manifest-BngWKryL.js +0 -770
- package/dist/may-use-BOn_dR_w.js +0 -78
- package/dist/openapi-DcQ1Kg40.js +0 -164
- package/dist/ownership-BgnbOJFT.js +0 -851
- package/dist/permdock-L26udHSk.js +0 -3646
- package/dist/powersync-BFSbSElQ.js +0 -62
- package/dist/powersync-DCDgZgfZ.js +0 -2
- package/dist/rls-55DQTuf5.js +0 -250
- package/dist/run-DMcNW_8T.js +0 -174
- package/dist/server-ZYEHtNHS.js +0 -268
- package/dist/sink-BTtmfPnE.js +0 -141
- package/dist/sink-CPN4zLfs.d.ts +0 -104
- package/dist/skills-Dle4ZoLF.js +0 -56
- package/dist/snapshot-Dc9CHPME.js +0 -1078
- package/dist/src-Bb7no-hS.js +0 -639
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-Dbqr141s.js +0 -83
- package/dist/supabase-hook-BULg7Ut_.js +0 -2
- package/dist/thenable-QSmvt-vZ.js +0 -65
- package/dist/types-C0dee0Qf.d.ts +0 -197
- package/dist/types-DvupZE0w.d.ts +0 -9
- package/dist/usage-4G6t643F.js +0 -42
- package/dist/usage-iFLJ0-rr.js +0 -2
- package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
- package/dist/watch-C8TpsAl4.js +0 -2
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { Ct as Credential, Nn as Decision, St as ApiKeyPrincipal, T as Policy, Tt as CredentialKind, U as CredentialVerifier, ar as Subject, at as SettingsSource, dt as TokenVerifier, gt as SupportSession, j as PolicyVocabulary, lt as TokenFailureCause, q as DecisionSink, qt as AuthEvent, rr as Principal, ut as TokenSigner } from "./policy-types-n0uRTsW8.js";
|
|
2
|
+
import { E as PermissionTree, w as Permission } from "./vocabulary-CN8H_9UF.js";
|
|
3
|
+
import { p as PrincipalSource } from "./permdock-SV8ZINYT.js";
|
|
4
|
+
import { t as Disclosure } from "./problem-details-B45V5d2b.js";
|
|
5
|
+
import { a as ProblemDetails, t as ApprovalHint } from "./errors-DH5QEGXh.js";
|
|
6
|
+
import { c as ServerPermDock, l as ServerPermDockOptions } from "./server-types-CKQiCnON.js";
|
|
7
|
+
//#region src/server/create.d.ts
|
|
8
|
+
/**
|
|
9
|
+
* The Fetch factory behind every HTTP adapter. The subject and actor are
|
|
10
|
+
* resolved once per `Request`; one instance is cached per `(Request, tenant)`,
|
|
11
|
+
* so a global middleware and a later tenant-scoped `protect` never share a
|
|
12
|
+
* tenant.
|
|
13
|
+
*/
|
|
14
|
+
declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: ServerPermDockOptions<TUser>): ServerPermDock<V>;
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/server/map-error.d.ts
|
|
17
|
+
type ProblemFromErrorOptions = {
|
|
18
|
+
readonly instance?: string;
|
|
19
|
+
/** Whether the request carried credentials, which picks the `401` challenge. */
|
|
20
|
+
readonly credentials?: boolean;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Turns a thrown PermDock error into its Problem Details response, with the
|
|
24
|
+
* status, `WWW-Authenticate` and rate-limit fields `protect` sends for the
|
|
25
|
+
* same decision. Returns `undefined` for anything else so the framework's own
|
|
26
|
+
* error path takes over.
|
|
27
|
+
*/
|
|
28
|
+
declare function problemFromError(error: unknown, options?: ProblemFromErrorOptions): Response | undefined;
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/server/credentials.d.ts
|
|
31
|
+
/** `on('auth')` causes for an API key that resolves to the anonymous subject. */
|
|
32
|
+
type ApiKeyFailureCause = "malformed" | "unknown-credential" | "invalid-claims" | "expired" | "credential-policy" | "credential-revoked" | "owner-unavailable";
|
|
33
|
+
/** An opaque key split at its last `_`: `pdk_<id>_<secret><checksum>`. */
|
|
34
|
+
type ApiKeyParts = {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
readonly secret: string;
|
|
37
|
+
};
|
|
38
|
+
/** What an application stores per key: the credential and the key's hash, never the key. */
|
|
39
|
+
type StoredCredential = {
|
|
40
|
+
readonly credential: Credential;
|
|
41
|
+
readonly hash: string;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Splits `pdk_<id>_<secret><checksum>`: `id` is 1 to 128 of `A-Z a-z 0-9 _ -`,
|
|
45
|
+
* the secret 43 base62 characters and the checksum the 6 base62 characters of
|
|
46
|
+
* the CRC-32 of everything before it. Anything else, including a checksum
|
|
47
|
+
* that does not match, is `undefined`.
|
|
48
|
+
*/
|
|
49
|
+
declare function parseApiKey(key: unknown): ApiKeyParts | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Splits `pdfeed_<id>_<secret><checksum>`. `id` is `isFeedId`, the secret is
|
|
52
|
+
* 26 lowercase base32 characters and the checksum is 6 more. A checksum that
|
|
53
|
+
* does not match is `undefined`.
|
|
54
|
+
*/
|
|
55
|
+
declare function parseFeedKey(key: unknown): ApiKeyParts | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* A fresh `pdfeed_<id>_<secret><checksum>`: 26 lowercase base32 characters
|
|
58
|
+
* (130 bits) and a 6-character CRC-32 checksum. The whole key is lowercase.
|
|
59
|
+
*/
|
|
60
|
+
declare function generateFeedKey(id: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* A fresh `pdk_<id>_<secret><checksum>`: a 43-character base62 secret (about
|
|
63
|
+
* 256 bits) and a 6-character CRC-32 checksum, so a secret scanner can tell a
|
|
64
|
+
* real key from a lookalike without calling the issuer.
|
|
65
|
+
*/
|
|
66
|
+
declare function generateApiKey(id: string): string;
|
|
67
|
+
/** base64url SHA-256 of the whole key, the value to store and compare. */
|
|
68
|
+
declare function hashApiKey(key: string): Promise<string>;
|
|
69
|
+
/**
|
|
70
|
+
* A `CredentialVerifier` over the application's own table: `find` looks a
|
|
71
|
+
* key up by the id in it, and the key's hash is compared in constant time.
|
|
72
|
+
* A record that is not a valid v1 credential, or whose id is not the key's,
|
|
73
|
+
* verifies to `null`. A throwing `find` propagates, so the resolver denies
|
|
74
|
+
* with `source-threw`.
|
|
75
|
+
*/
|
|
76
|
+
declare function apiKeyVerifier(options: {
|
|
77
|
+
readonly find: (id: string) => StoredCredential | null | undefined | Promise<StoredCredential | null | undefined>;
|
|
78
|
+
/** Passed through as the verifier's `touch`, for a `lastUsedAt` column. */
|
|
79
|
+
readonly touch?: CredentialVerifier["touch"];
|
|
80
|
+
}): CredentialVerifier;
|
|
81
|
+
type MemoryCredentialStore = CredentialVerifier & {
|
|
82
|
+
/** Stores `credential` and returns its key; the key is never stored. */
|
|
83
|
+
issue(credential: Credential): Promise<string>;
|
|
84
|
+
/** A new secret for the same id; the old key stops verifying at once. */
|
|
85
|
+
rotate(id: string): Promise<string | undefined>;
|
|
86
|
+
/** `true` when a credential was removed. */
|
|
87
|
+
revoke(id: string): boolean;
|
|
88
|
+
list(): readonly Credential[];
|
|
89
|
+
/** When `touch` last recorded a use of `id`, as RFC 3339. */
|
|
90
|
+
lastUsedAt(id: string): string | undefined;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* In-process credentials for tests and single-replica apps. `issue`, `rotate`
|
|
94
|
+
* and `revoke` write `credential` events to `sink` when one is given.
|
|
95
|
+
*/
|
|
96
|
+
declare function memoryCredentialStore(options?: {
|
|
97
|
+
readonly sink?: DecisionSink;
|
|
98
|
+
readonly source?: string;
|
|
99
|
+
}): MemoryCredentialStore;
|
|
100
|
+
type ApiKeySubjectOptions = {
|
|
101
|
+
readonly verifier: CredentialVerifier;
|
|
102
|
+
/** The definitions, to turn the credential's permission keys into its delegation. */
|
|
103
|
+
readonly permissions: PermissionTree;
|
|
104
|
+
/**
|
|
105
|
+
* Loads the live owner of a user-bound key: roles and memberships as of
|
|
106
|
+
* this request, asked with the key's tenant. `null` (a deleted or
|
|
107
|
+
* suspended user) is anonymous with `owner-unavailable`, and a throw is
|
|
108
|
+
* `source-threw`. Without it the owner is `{ id, kind: 'user' }` and its
|
|
109
|
+
* rights come from the `memberships` source passed to `createPermDock`.
|
|
110
|
+
*/
|
|
111
|
+
readonly principals?: PrincipalSource;
|
|
112
|
+
/** The tenant the request acts in: a user key is held to its owner's memberships there. */
|
|
113
|
+
readonly tenant?: string;
|
|
114
|
+
/** `true` when the application revoked the credential id; a throw denies. */
|
|
115
|
+
readonly revoked?: (id: string) => boolean | Promise<boolean>;
|
|
116
|
+
/**
|
|
117
|
+
* The tenant `credentials` policy, checked on every use so a tightened
|
|
118
|
+
* policy reaches existing keys: a service key's own tenant, a user key's
|
|
119
|
+
* the `tenant` the resolver is called with. A throw denies.
|
|
120
|
+
*/
|
|
121
|
+
readonly settings?: SettingsSource;
|
|
122
|
+
/** Receives a `credential` event with operation `used` for sampled uses. */
|
|
123
|
+
readonly sink?: DecisionSink;
|
|
124
|
+
/** Fraction of uses reported to `sink`, in `(0, 1]`; defaults to 1. */
|
|
125
|
+
readonly sample?: number;
|
|
126
|
+
/** The `source` of `used` events; defaults to `permdock`. */
|
|
127
|
+
readonly source?: string;
|
|
128
|
+
readonly onAuth?: (event: AuthEvent) => void;
|
|
129
|
+
readonly requestId?: string;
|
|
130
|
+
/** Accept only these credential kinds. A key of another kind is anonymous. */
|
|
131
|
+
readonly kinds?: readonly CredentialKind[];
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Resolves an opaque API key (`pdk_<id>_<secret>`) into the subject its
|
|
135
|
+
* credential acts as. Every failure (a malformed or unknown key, a record
|
|
136
|
+
* that is not a valid credential, expiry, a tenant policy the key breaks, a
|
|
137
|
+
* revoked id, a missing owner, a throwing verifier, source or callback) is
|
|
138
|
+
* the anonymous subject, never a throw.
|
|
139
|
+
*/
|
|
140
|
+
declare function subjectFromApiKey(key: string | undefined | null, options: ApiKeySubjectOptions): Promise<Subject<ApiKeyPrincipal>>;
|
|
141
|
+
//#endregion
|
|
142
|
+
//#region src/server/support-session.d.ts
|
|
143
|
+
/** `on('auth')` causes: a verification failure, or one of the session checks. */
|
|
144
|
+
type SupportSessionFailureCause = TokenFailureCause | "invalid-claims" | "session-ended" | "principal-unavailable" | "actor-unavailable";
|
|
145
|
+
/** The live state of each support session, so one can end before it expires. */
|
|
146
|
+
type SupportSessionSource = {
|
|
147
|
+
/** The session as of now, or `null` for an unknown one. A throw ends it. */
|
|
148
|
+
session(id: string): {
|
|
149
|
+
readonly id: string;
|
|
150
|
+
readonly ended?: boolean;
|
|
151
|
+
} | null | Promise<{
|
|
152
|
+
readonly id: string;
|
|
153
|
+
readonly ended?: boolean;
|
|
154
|
+
} | null>;
|
|
155
|
+
};
|
|
156
|
+
type SupportSessionSubjectOptions = {
|
|
157
|
+
readonly verifier: TokenVerifier;
|
|
158
|
+
/** Loads the viewed principal and the support actor, live, on every request. */
|
|
159
|
+
readonly principals: PrincipalSource;
|
|
160
|
+
/** The permission tree the session's keys name. */
|
|
161
|
+
readonly permissions: PermissionTree;
|
|
162
|
+
/** Checked on every request when set; an unknown or ended session denies. */
|
|
163
|
+
readonly sessions?: SupportSessionSource;
|
|
164
|
+
readonly audience?: string | readonly string[];
|
|
165
|
+
readonly issuer?: string;
|
|
166
|
+
readonly clockTolerance?: number;
|
|
167
|
+
readonly onAuth?: (event: AuthEvent) => void;
|
|
168
|
+
readonly requestId?: string;
|
|
169
|
+
};
|
|
170
|
+
/** `subject.context.supportSession` of a subject resolved from a session token. */
|
|
171
|
+
type SupportSessionContext = {
|
|
172
|
+
readonly id: string;
|
|
173
|
+
readonly reason: string;
|
|
174
|
+
readonly approvedBy?: string;
|
|
175
|
+
readonly reference?: string;
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Signs a granted `SupportSession` as a `vnd.permdock.support-session+jwt`
|
|
179
|
+
* (`sub` the viewed principal, `act` the support actor, `jti` the session
|
|
180
|
+
* id) that expires with the session. Throws a `TypeError` for a record
|
|
181
|
+
* `parseSupportSession` refuses.
|
|
182
|
+
*/
|
|
183
|
+
declare function signSupportSession(session: SupportSession, signer: TokenSigner, options?: {
|
|
184
|
+
readonly audience?: string | readonly string[];
|
|
185
|
+
}): Promise<string>;
|
|
186
|
+
/**
|
|
187
|
+
* Resolves a `vnd.permdock.support-session+jwt` into the subject each
|
|
188
|
+
* request of the session acts as: the viewed principal loaded live, a
|
|
189
|
+
* `support` actor, the session's permissions as the delegation and
|
|
190
|
+
* `context.supportSession`. The actor must still exist. Every failure is the
|
|
191
|
+
* anonymous subject, never a throw.
|
|
192
|
+
*/
|
|
193
|
+
declare function subjectFromSupportSession(token: string | undefined | null, options: SupportSessionSubjectOptions): Promise<Subject>;
|
|
194
|
+
//#endregion
|
|
195
|
+
//#region src/server/problem.d.ts
|
|
196
|
+
declare function wwwAuthenticate(decision: Decision, permission: Permission | undefined, credentials?: boolean): string | undefined;
|
|
197
|
+
declare function problemResponse(details: ProblemDetails, permission?: Permission, decision?: Decision, extra?: Readonly<Record<string, string>>, credentials?: boolean): Response;
|
|
198
|
+
declare function validationProblem(detail: string): Response;
|
|
199
|
+
declare function problemFromDecision(decision: Decision, permission: Permission, subject: Subject | undefined, options?: {
|
|
200
|
+
readonly instance?: string;
|
|
201
|
+
readonly approval?: ApprovalHint;
|
|
202
|
+
/** `'hide'` on a loaded row: a denial answers as `404` `/not-found`. */
|
|
203
|
+
readonly disclosure?: Disclosure;
|
|
204
|
+
/** Whether the request carried credentials, which picks the `401` challenge. */
|
|
205
|
+
readonly credentials?: boolean;
|
|
206
|
+
/** The scope an `insufficient_scope` challenge names; the permission's own scope when absent. */
|
|
207
|
+
readonly scope?: string;
|
|
208
|
+
}): Response;
|
|
209
|
+
//#endregion
|
|
210
|
+
export { subjectFromApiKey as C, createPermDock as E, parseFeedKey as S, problemFromError as T, generateApiKey as _, SupportSessionContext as a, memoryCredentialStore as b, SupportSessionSubjectOptions as c, ApiKeyFailureCause as d, ApiKeyParts as f, apiKeyVerifier as g, StoredCredential as h, wwwAuthenticate as i, signSupportSession as l, MemoryCredentialStore as m, problemResponse as n, SupportSessionFailureCause as o, ApiKeySubjectOptions as p, validationProblem as r, SupportSessionSource as s, problemFromDecision as t, subjectFromSupportSession as u, generateFeedKey as v, ProblemFromErrorOptions as w, parseApiKey as x, hashApiKey as y };
|
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import { Nn as Decision, Rt as Instant, T as Policy, Yn as AuthorizationDetail, ar as Subject, et as MembershipSource, fn as Approver, it as RelationSource, nr as Membership, ut as TokenSigner } from "./policy-types-n0uRTsW8.js";
|
|
2
|
+
import { E as PermissionTree, V as AppData, w as Permission } from "./vocabulary-CN8H_9UF.js";
|
|
3
|
+
import { r as PermDock } from "./permdock-SV8ZINYT.js";
|
|
4
|
+
import { a as ApprovalDelegationSource, c as ApprovalListQuery, g as ApprovalVerdict, i as ApprovalDelegation, l as ApprovalPage, m as ApprovalStore, o as ApprovalInspectResult, r as ApprovalCancelMeta, s as ApprovalListFilter, u as ApprovalRequest } from "./types-BdtSDbBO.js";
|
|
5
|
+
import { a as AccessReviewItemQuery, c as AccessReviewStore, i as AccessReviewItemPage, n as AccessReviewDecision, r as AccessReviewItem, t as AccessReview } from "./types-C_IiEs64.js";
|
|
6
|
+
import { t as JsonSchemaNode } from "./json-schema-CN_iLFH2.js";
|
|
7
|
+
//#region src/approvals/access-reviews/handler.d.ts
|
|
8
|
+
type AccessReviewsHandlerOptions = {
|
|
9
|
+
readonly subject: (request: Request) => Subject | null | undefined | Promise<Subject | null | undefined>;
|
|
10
|
+
/**
|
|
11
|
+
* The reviewer's own instance, for `holder()` reviewers. Without it they
|
|
12
|
+
* match nobody.
|
|
13
|
+
*/
|
|
14
|
+
readonly permdockFor?: (reviewer: Subject, tenant: string) => PermDock | Promise<PermDock>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* HTTP for one access-review store: `GET` a review and its items, `POST`
|
|
18
|
+
* `.../keep`, `.../revoke`, `.../applied` and `.../close`. A caller who is
|
|
19
|
+
* not a reviewer and did not open the review gets 404.
|
|
20
|
+
*/
|
|
21
|
+
declare function accessReviewsHandler(store: AccessReviewStore, options: AccessReviewsHandlerOptions): (request: Request) => Promise<Response>;
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/approvals/access-reviews/decide.d.ts
|
|
24
|
+
type AccessReviewVerdict = {
|
|
25
|
+
readonly status: "kept" | "revoked";
|
|
26
|
+
readonly by: Subject;
|
|
27
|
+
readonly note?: string;
|
|
28
|
+
/**
|
|
29
|
+
* The `holder(permission)` reviewers `by` holds, read from `by`'s own
|
|
30
|
+
* instance. Server-side input. Absent means none.
|
|
31
|
+
*/
|
|
32
|
+
readonly permissions?: readonly string[];
|
|
33
|
+
};
|
|
34
|
+
/** Whether `by` is named as a reviewer. A link, a feed or a contact is never a reviewer. */
|
|
35
|
+
declare function accessReviewerEligible(review: AccessReview, by: Subject, permissions?: readonly string[], now?: Instant): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* The decision to persist, or throws. A reviewer cannot decide a holding
|
|
38
|
+
* of their own principal. `holder()` matches only through `permissions`.
|
|
39
|
+
*/
|
|
40
|
+
declare function decideAccessReviewItem(review: AccessReview, item: AccessReviewItem, verdict: AccessReviewVerdict, at?: Instant): AccessReviewDecision;
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/approvals/access-reviews/errors.d.ts
|
|
43
|
+
type AccessReviewErrorCode = "review-not-found" | "review-closed" | "item-not-found" | "item-not-pending" | "reviewer-unauthenticated" | "reviewer-not-eligible" | "reviewer-is-holder" | "not-revoked" | "already-applied";
|
|
44
|
+
declare class AccessReviewError extends Error {
|
|
45
|
+
override readonly name: "AccessReviewError";
|
|
46
|
+
readonly code: AccessReviewErrorCode;
|
|
47
|
+
constructor(code: AccessReviewErrorCode, message: string);
|
|
48
|
+
}
|
|
49
|
+
declare function isAccessReviewError(value: unknown): value is AccessReviewError;
|
|
50
|
+
//#endregion
|
|
51
|
+
//#region src/approvals/access-reviews/start.d.ts
|
|
52
|
+
type AccessReviewHolder = {
|
|
53
|
+
readonly principal: string;
|
|
54
|
+
readonly permission: string;
|
|
55
|
+
readonly via: readonly string[];
|
|
56
|
+
};
|
|
57
|
+
type StartAccessReviewInput = {
|
|
58
|
+
readonly id: string;
|
|
59
|
+
readonly permissions: readonly Permission[];
|
|
60
|
+
readonly reviewers: Approver | readonly Approver[];
|
|
61
|
+
readonly dueAt: string;
|
|
62
|
+
};
|
|
63
|
+
type AccessReviewOptions = {
|
|
64
|
+
readonly reviews: AccessReviewStore;
|
|
65
|
+
/**
|
|
66
|
+
* Replaces the membership listing. The Supabase recipe passes the rows of
|
|
67
|
+
* `permitted_<scope>_users`. `complete` defaults to `true` for this path.
|
|
68
|
+
*/
|
|
69
|
+
readonly holders?: readonly AccessReviewHolder[];
|
|
70
|
+
readonly complete?: boolean;
|
|
71
|
+
readonly memberships?: MembershipSource;
|
|
72
|
+
/** Scope name passed to `memberships.list`. Defaults to `tenant`. */
|
|
73
|
+
readonly scope?: string;
|
|
74
|
+
/**
|
|
75
|
+
* An instance for one member, used to confirm each holding with a rowless
|
|
76
|
+
* `decide`. Required when `holders` is omitted.
|
|
77
|
+
*/
|
|
78
|
+
readonly permdockFor?: (principalId: string) => PermDock | Promise<PermDock>;
|
|
79
|
+
/**
|
|
80
|
+
* When set, a global role, a plan, a relation or an inherit grant on a
|
|
81
|
+
* reviewed permission makes `complete` false. Without it the membership
|
|
82
|
+
* path is incomplete, because those holders cannot be listed from a tenant.
|
|
83
|
+
*/
|
|
84
|
+
readonly policy?: Policy;
|
|
85
|
+
readonly now?: Instant;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Opens a review of who holds `permissions` in the caller's active tenant.
|
|
89
|
+
* The caller must be signed in. PermDock stores the population and does not
|
|
90
|
+
* revoke anything: the application changes the source, then `markApplied`.
|
|
91
|
+
*/
|
|
92
|
+
declare function startAccessReview(permdock: PermDock, input: StartAccessReviewInput, options: AccessReviewOptions): Promise<AccessReview>;
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region src/approvals/access-reviews/store.d.ts
|
|
95
|
+
/** Pages items in `(principal, id)` order with the approval cursor codec. */
|
|
96
|
+
declare function pageAccessReviewItems(matching: readonly AccessReviewItem[], query: AccessReviewItemQuery): AccessReviewItemPage;
|
|
97
|
+
type MemoryAccessReviewStore = AccessReviewStore & {
|
|
98
|
+
readonly reviews: () => readonly AccessReview[];
|
|
99
|
+
};
|
|
100
|
+
/** In-process access reviews for tests and single-replica apps. */
|
|
101
|
+
declare function memoryAccessReviewStore(): MemoryAccessReviewStore;
|
|
102
|
+
//#endregion
|
|
103
|
+
//#region src/approvals/delegation.d.ts
|
|
104
|
+
/**
|
|
105
|
+
* A frozen copy of a delegation with only the known fields, or `undefined`
|
|
106
|
+
* when a known field has the wrong type, `until` is not after `from`, or
|
|
107
|
+
* the delegate and the delegator are the same principal.
|
|
108
|
+
*/
|
|
109
|
+
declare function parseApprovalDelegation(input: unknown): ApprovalDelegation | undefined;
|
|
110
|
+
/** In-process delegations. An entry that does not parse is dropped. */
|
|
111
|
+
declare function memoryApprovalDelegationSource(entries: readonly unknown[]): ApprovalDelegationSource;
|
|
112
|
+
type ApprovalDelegationMatch = {
|
|
113
|
+
readonly delegation: ApprovalDelegation;
|
|
114
|
+
readonly delegator: Subject;
|
|
115
|
+
readonly relations: readonly string[];
|
|
116
|
+
readonly permissions: readonly string[];
|
|
117
|
+
};
|
|
118
|
+
type MatchDelegationOptions = {
|
|
119
|
+
readonly approvalDelegations?: ApprovalDelegationSource;
|
|
120
|
+
readonly subjectFor?: (principalId: string, request: ApprovalRequest) => Subject | null | undefined | Promise<Subject | null | undefined>;
|
|
121
|
+
readonly now?: Instant;
|
|
122
|
+
readonly requireDistinct: boolean;
|
|
123
|
+
readonly factsFor: (subject: Subject) => Promise<{
|
|
124
|
+
readonly relations: readonly string[];
|
|
125
|
+
readonly permissions: readonly string[];
|
|
126
|
+
}>;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* The first active delegation under which `delegate` may approve `request`,
|
|
130
|
+
* or `undefined`. The delegator is resolved by `subjectFor` and checked with
|
|
131
|
+
* `assertApprover`, so relation and permission approvers use the delegator's
|
|
132
|
+
* facts. A throw, a missing option or a delegator the source does not name
|
|
133
|
+
* matches nobody. The delegator's own delegations are never read.
|
|
134
|
+
*/
|
|
135
|
+
declare function matchDelegation(request: ApprovalRequest, delegate: Subject, options: MatchDelegationOptions): Promise<ApprovalDelegationMatch | undefined>;
|
|
136
|
+
//#endregion
|
|
137
|
+
//#region src/approvals/idempotency.d.ts
|
|
138
|
+
/** A response the approvals handler replays for a repeated `Idempotency-Key`. */
|
|
139
|
+
type IdempotentResponse = {
|
|
140
|
+
/** Which request produced it: a reused key with another fingerprint is refused with `422`. */
|
|
141
|
+
readonly fingerprint: string;
|
|
142
|
+
readonly status: number;
|
|
143
|
+
readonly headers: readonly (readonly [name: string, value: string])[];
|
|
144
|
+
readonly body: string;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Where `approvalsHandler` keeps `Idempotency-Key` responses
|
|
148
|
+
* (draft-ietf-httpapi-idempotency-key-header). Keys arrive scoped to the
|
|
149
|
+
* approver. Share one store across instances so a retry that lands on another
|
|
150
|
+
* instance replays the first response.
|
|
151
|
+
*/
|
|
152
|
+
type IdempotencyStore = {
|
|
153
|
+
/** Names the implementation in errors and events. */
|
|
154
|
+
readonly name?: string;
|
|
155
|
+
get(key: string): IdempotentResponse | undefined | Promise<IdempotentResponse | undefined>;
|
|
156
|
+
/** `expiresAt` is epoch milliseconds; the store may drop the entry after it. */
|
|
157
|
+
set(key: string, response: IdempotentResponse, expiresAt: number): void | Promise<void>;
|
|
158
|
+
};
|
|
159
|
+
/** An in-process `IdempotencyStore`, for one instance and for tests. */
|
|
160
|
+
declare function memoryIdempotencyStore(): IdempotencyStore;
|
|
161
|
+
//#endregion
|
|
162
|
+
//#region src/approvals/handler.d.ts
|
|
163
|
+
type ApprovalsHandlerOptions = {
|
|
164
|
+
readonly subject: (request: Request) => Subject | null | undefined | Promise<Subject | null | undefined>;
|
|
165
|
+
/** Refuse the principal even on grants that set `approval: { distinct: false }`. */
|
|
166
|
+
readonly requireDistinctApprover?: boolean;
|
|
167
|
+
readonly signer?: TokenSigner;
|
|
168
|
+
readonly audience?: string | readonly string[];
|
|
169
|
+
/** Where `relation()` approvers are read, by the request's resource id; without it they match nobody. */
|
|
170
|
+
readonly relations?: RelationSource;
|
|
171
|
+
/** The policy's permission tree, for `through` links and `includes` on relation approvers. */
|
|
172
|
+
readonly permissions?: PermissionTree;
|
|
173
|
+
/**
|
|
174
|
+
* The approver's own instance in the request's tenant, for
|
|
175
|
+
* `holder(permission)` approvers (custom roles included when the instance
|
|
176
|
+
* reads a `CustomRoleSource`). Without it, or when it throws, they match nobody.
|
|
177
|
+
*/
|
|
178
|
+
readonly permdockFor?: (approver: Subject, request: ApprovalRequest) => PermDock | Promise<PermDock>;
|
|
179
|
+
/**
|
|
180
|
+
* Out-of-office delegations. With `subjectFor`, a caller who is not an
|
|
181
|
+
* approver may approve as someone who delegated to them. Without either,
|
|
182
|
+
* delegation matches nobody.
|
|
183
|
+
*/
|
|
184
|
+
readonly approvalDelegations?: ApprovalDelegationSource;
|
|
185
|
+
/**
|
|
186
|
+
* Resolves a delegator's subject from their principal id. Server-side:
|
|
187
|
+
* never from the request body. A throw matches nobody.
|
|
188
|
+
*/
|
|
189
|
+
readonly subjectFor?: (principalId: string, request: ApprovalRequest) => Subject | null | undefined | Promise<Subject | null | undefined>;
|
|
190
|
+
/**
|
|
191
|
+
* Where `Idempotency-Key` responses on approve and reject are kept for 24
|
|
192
|
+
* hours; a `memoryIdempotencyStore()` per handler when absent.
|
|
193
|
+
*/
|
|
194
|
+
readonly idempotency?: IdempotencyStore;
|
|
195
|
+
};
|
|
196
|
+
/** An approval as the approvals API shows it: never the resume `token`. */
|
|
197
|
+
type ApprovalView = Omit<ApprovalRequest, "token">;
|
|
198
|
+
declare function approvalsHandler(store: ApprovalStore, options: ApprovalsHandlerOptions): (request: Request) => Promise<Response>;
|
|
199
|
+
//#endregion
|
|
200
|
+
//#region src/approvals/parse-request.d.ts
|
|
201
|
+
/**
|
|
202
|
+
* Reads an `ApprovalRequest` (parsed, or the JSON text) as an approval store
|
|
203
|
+
* or the Cloud returns it, validated against
|
|
204
|
+
* `schemas/approval-request-v1.json`. Returns a deep-frozen copy, or `null`
|
|
205
|
+
* for anything that does not match, including a `__proto__`, `constructor`
|
|
206
|
+
* or `prototype` key.
|
|
207
|
+
*/
|
|
208
|
+
declare function parseApprovalRequest(value: unknown): ApprovalRequest | null;
|
|
209
|
+
//#endregion
|
|
210
|
+
//#region src/approvals/request-schema.d.ts
|
|
211
|
+
/**
|
|
212
|
+
* `schemas/approval-request-v1.json`: the `ApprovalRequest` an approval store
|
|
213
|
+
* holds. Self-contained (`$defs`, no remote `$ref`) so `rls.jsonSchema` can
|
|
214
|
+
* inline it into a pg_jsonschema check constraint.
|
|
215
|
+
*/
|
|
216
|
+
declare const APPROVAL_REQUEST_SCHEMA: JsonSchemaNode;
|
|
217
|
+
//#endregion
|
|
218
|
+
//#region src/approvals/signature.d.ts
|
|
219
|
+
/** One recorded approval as the `approvals` claim of a `vnd.permdock.approval+jwt` carries it. */
|
|
220
|
+
type ApprovalSignatureEntry = {
|
|
221
|
+
readonly by: string;
|
|
222
|
+
/** RFC 3339. */
|
|
223
|
+
readonly at: string;
|
|
224
|
+
readonly stage?: number;
|
|
225
|
+
readonly vouched?: string;
|
|
226
|
+
readonly on_behalf_of?: string;
|
|
227
|
+
readonly delegation?: string;
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* The claims of a `vnd.permdock.approval+jwt` other than `iss`, `aud`,
|
|
231
|
+
* `iat`, `exp` and `jti`, which the signer sets: `jti` is the request `id`,
|
|
232
|
+
* `iat` its `resolvedAt` and `exp` its `expiresAt`.
|
|
233
|
+
*/
|
|
234
|
+
type ApprovalSignatureClaims = {
|
|
235
|
+
readonly sub?: string;
|
|
236
|
+
/** RFC 8693: the actor that asked for the approval. */
|
|
237
|
+
readonly act?: {
|
|
238
|
+
readonly sub: string;
|
|
239
|
+
};
|
|
240
|
+
/** The `PermDock-Approval` token the signature approves. */
|
|
241
|
+
readonly token: string;
|
|
242
|
+
readonly resolved_by?: string;
|
|
243
|
+
readonly approvals: readonly ApprovalSignatureEntry[];
|
|
244
|
+
/** RFC 9396: one entry, the approved action on the approved resource. */
|
|
245
|
+
readonly authorization_details: readonly [AuthorizationDetail];
|
|
246
|
+
};
|
|
247
|
+
declare function approvalSignatureClaims(request: ApprovalRequest): ApprovalSignatureClaims;
|
|
248
|
+
type SignApprovalOptions = {
|
|
249
|
+
/** `aud`: the resource server that verifies the signature. */
|
|
250
|
+
readonly audience?: string | readonly string[];
|
|
251
|
+
};
|
|
252
|
+
/**
|
|
253
|
+
* Signs an approved request as a `vnd.permdock.approval+jwt`: `jti` is the
|
|
254
|
+
* request id, `iat` its `resolvedAt` and `exp` its `expiresAt`. `undefined`
|
|
255
|
+
* without a signer or for any status but `approved`.
|
|
256
|
+
*/
|
|
257
|
+
declare function signApproval(request: ApprovalRequest, signer: TokenSigner | undefined, options?: SignApprovalOptions): Promise<string | undefined>;
|
|
258
|
+
//#endregion
|
|
259
|
+
//#region src/approvals/relations.d.ts
|
|
260
|
+
type ApproverRelationsOptions = {
|
|
261
|
+
/** The object graph relation approvers are read from; without it they match nobody. */
|
|
262
|
+
readonly relations?: RelationSource;
|
|
263
|
+
/** The permission tree the policy declares; needed to follow `through` links and `includes`. */
|
|
264
|
+
readonly permissions?: PermissionTree;
|
|
265
|
+
/** The clock relation expiry is read at; defaults to the current time. */
|
|
266
|
+
readonly now?: Instant;
|
|
267
|
+
};
|
|
268
|
+
/**
|
|
269
|
+
* The relation approvers of `request` that `subject` holds on its resource,
|
|
270
|
+
* keyed by `approverRelationKey`, for `ApprovalVerdict.relations`. Reads go
|
|
271
|
+
* through `relations` by the request's resource id; a request without an id,
|
|
272
|
+
* a missing source or a read that fails holds nothing.
|
|
273
|
+
*/
|
|
274
|
+
declare function approverRelations(request: ApprovalRequest, subject: Subject, options: ApproverRelationsOptions): Promise<readonly string[]>;
|
|
275
|
+
//#endregion
|
|
276
|
+
//#region src/approvals/helpers.d.ts
|
|
277
|
+
declare function summarizeSubject(subject: Subject): ApprovalRequest["subject"];
|
|
278
|
+
declare function requestApproval(store: ApprovalStore, decision: Extract<Decision, {
|
|
279
|
+
readonly outcome: "approval-required";
|
|
280
|
+
}>, meta: {
|
|
281
|
+
readonly permission: Permission | {
|
|
282
|
+
readonly key: string;
|
|
283
|
+
readonly scope: string;
|
|
284
|
+
readonly resource: string;
|
|
285
|
+
};
|
|
286
|
+
readonly resource?: {
|
|
287
|
+
readonly type: string;
|
|
288
|
+
readonly id?: string;
|
|
289
|
+
};
|
|
290
|
+
readonly subject: Subject;
|
|
291
|
+
readonly membership?: Membership;
|
|
292
|
+
readonly adapter?: string;
|
|
293
|
+
readonly ttl?: number;
|
|
294
|
+
readonly now?: Instant;
|
|
295
|
+
readonly detail?: string;
|
|
296
|
+
/** The application's own data for the request; plain JSON, checked here. */
|
|
297
|
+
readonly x?: AppData;
|
|
298
|
+
}): Promise<ApprovalRequest>;
|
|
299
|
+
/**
|
|
300
|
+
* Checks `verdict.by` and resolves the request. Relation approvers are read
|
|
301
|
+
* through `options.relations` unless `verdict.relations` is already set.
|
|
302
|
+
*/
|
|
303
|
+
declare function resolveApproval(store: ApprovalStore, token: string, verdict: ApprovalVerdict, options?: ApproverRelationsOptions & {
|
|
304
|
+
readonly requireDistinctApprover?: boolean;
|
|
305
|
+
readonly permdockFor?: ApprovalsHandlerOptions["permdockFor"];
|
|
306
|
+
}): Promise<ApprovalRequest>;
|
|
307
|
+
declare function vouchApproval(store: ApprovalStore, token: string, verdict: {
|
|
308
|
+
readonly status: "approved" | "rejected";
|
|
309
|
+
readonly by: Subject;
|
|
310
|
+
readonly rule: string;
|
|
311
|
+
readonly note?: string;
|
|
312
|
+
}): Promise<ApprovalRequest>;
|
|
313
|
+
declare function inspectApproval(store: ApprovalStore, token: string, at?: Instant): Promise<ApprovalInspectResult>;
|
|
314
|
+
/** Inspects `token` and, when it is approved, consumes it so it resumes once. */
|
|
315
|
+
declare function consumeApproval(store: ApprovalStore, token: string, at?: Instant): Promise<ApprovalInspectResult>;
|
|
316
|
+
/**
|
|
317
|
+
* Applies a resume token to a decision. The token only matters when the
|
|
318
|
+
* decision is `approval-required` and the token is the one this call was
|
|
319
|
+
* issued; otherwise a new approval is requested. A matching token is consumed
|
|
320
|
+
* unless `consume` is `false`, so an approval resumes exactly one call. Under
|
|
321
|
+
* `staleOn: 'resource-change'`, a token issued for an earlier version of the
|
|
322
|
+
* same row denies with `stale-approval`; the next call without it asks again.
|
|
323
|
+
*/
|
|
324
|
+
declare function resumeDecision(input: {
|
|
325
|
+
readonly decision: Decision;
|
|
326
|
+
readonly permission: Permission | {
|
|
327
|
+
readonly key: string;
|
|
328
|
+
readonly scope: string;
|
|
329
|
+
readonly resource: string;
|
|
330
|
+
};
|
|
331
|
+
readonly subject: Subject;
|
|
332
|
+
readonly store: ApprovalStore | undefined;
|
|
333
|
+
readonly resource: {
|
|
334
|
+
readonly type: string;
|
|
335
|
+
readonly id?: string;
|
|
336
|
+
};
|
|
337
|
+
readonly adapter: string;
|
|
338
|
+
readonly token: string | undefined;
|
|
339
|
+
/** `false` for checks that do not run the action, such as the decision endpoint. */
|
|
340
|
+
readonly consume?: boolean;
|
|
341
|
+
readonly now?: Instant;
|
|
342
|
+
/**
|
|
343
|
+
* Seconds a request this call opens stays open; absent means the
|
|
344
|
+
* store's `ttl`, else `DEFAULT_APPROVAL_TTL`. The grant's `approval.ttl`
|
|
345
|
+
* still caps it.
|
|
346
|
+
*/
|
|
347
|
+
readonly ttl?: number;
|
|
348
|
+
}): Promise<Decision>;
|
|
349
|
+
declare function cancelApprovals(store: ApprovalStore, filter: ApprovalListFilter, meta: ApprovalCancelMeta): Promise<number>;
|
|
350
|
+
/** The token of a `PermDock-Approval` field: one RFC 9651 sf-token Item with no parameters, else `undefined`. */
|
|
351
|
+
declare function readApprovalHeader(headers: Headers | {
|
|
352
|
+
readonly get: (name: string) => string | null;
|
|
353
|
+
}): string | undefined;
|
|
354
|
+
declare function resumeFromHeader(store: ApprovalStore, headers: Headers | {
|
|
355
|
+
readonly get: (name: string) => string | null;
|
|
356
|
+
}, now?: Instant): Promise<ApprovalInspectResult>;
|
|
357
|
+
/**
|
|
358
|
+
* The token to resume `decision` with when the caller carries none: the
|
|
359
|
+
* decision's own token when the store holds an approved or rejected request
|
|
360
|
+
* for it, so `resumeDecision` resumes (or denies) the call without the
|
|
361
|
+
* caller passing the token back. The token already binds permission,
|
|
362
|
+
* resource (or the call's data when there is no row id), subject and actor.
|
|
363
|
+
* A pending request counts only with `denyPending: true`, which makes the
|
|
364
|
+
* call deny with `approval-pending` instead of asking again. `undefined` when
|
|
365
|
+
* the decision needs no approval, there is no store, or the store has no
|
|
366
|
+
* unexpired request for the token; a store that throws counts as none.
|
|
367
|
+
*/
|
|
368
|
+
declare function storedApprovalToken(store: ApprovalStore | undefined, decision: Decision, options?: {
|
|
369
|
+
readonly denyPending?: boolean;
|
|
370
|
+
readonly now?: Instant;
|
|
371
|
+
}): Promise<string | undefined>;
|
|
372
|
+
//#endregion
|
|
373
|
+
//#region src/approvals/page.d.ts
|
|
374
|
+
/** The page size of a query: `limit` within 1 to 200, 50 when absent. */
|
|
375
|
+
declare function approvalPageSize(limit: number | undefined): number;
|
|
376
|
+
/** Where a page starts: the `(createdAt, token)` of the last request before it. */
|
|
377
|
+
type ApprovalCursorPosition = readonly [createdAt: string, token: string];
|
|
378
|
+
/** The `next` cursor after `request`, for a store that pages in its own query. */
|
|
379
|
+
declare function encodeApprovalCursor(request: ApprovalRequest): string;
|
|
380
|
+
/** The `(createdAt, token)` position a `next` cursor names, or `null` for one that does not parse. */
|
|
381
|
+
declare function decodeApprovalCursor(cursor: string): ApprovalCursorPosition | null;
|
|
382
|
+
/**
|
|
383
|
+
* Pages already-filtered requests in `(createdAt, token)` order, as the
|
|
384
|
+
* built-in stores do: `limit` within 1 to 200 (50 when absent), `cursor` from
|
|
385
|
+
* the previous page's `next`, and no items for a cursor that does not parse.
|
|
386
|
+
* A custom `ApprovalStore` that filters in memory returns it from `list`.
|
|
387
|
+
*/
|
|
388
|
+
declare function pageApprovals(matching: readonly ApprovalRequest[], query: ApprovalListQuery): ApprovalPage;
|
|
389
|
+
/** Every matching request of `store`, following `next` until the last page (at most 1000 pages of 200). */
|
|
390
|
+
declare function listAllApprovals(store: ApprovalStore, filter: ApprovalListFilter): Promise<ApprovalRequest[]>;
|
|
391
|
+
//#endregion
|
|
392
|
+
//#region src/approvals/permissions.d.ts
|
|
393
|
+
/**
|
|
394
|
+
* The `holder(permission)` approvers of `request` that `approver` holds, for
|
|
395
|
+
* `ApprovalVerdict.permissions`: each permission key the approver's own
|
|
396
|
+
* instance grants without a row. `approver` must be an instance for the
|
|
397
|
+
* approving principal in the request's tenant; for any other tenant, or an
|
|
398
|
+
* anonymous instance, it holds nothing. A check that throws holds nothing.
|
|
399
|
+
*/
|
|
400
|
+
declare function approverPermissions(request: ApprovalRequest, approver: PermDock): readonly string[];
|
|
401
|
+
//#endregion
|
|
402
|
+
//#region src/approvals/store.d.ts
|
|
403
|
+
/**
|
|
404
|
+
* Refuses `by` as an approver of `request`, or returns the index of the
|
|
405
|
+
* stage the approval counts for (`undefined` without `stages`). Eligibility
|
|
406
|
+
* is `approvers.by` or, under `stages`, the first incomplete stage
|
|
407
|
+
* (`sequential`) or any incomplete stage (`all`); `approvers.escalation.to`
|
|
408
|
+
* is eligible too once the request has waited `escalation.after`. A
|
|
409
|
+
* principal who already approved is refused, so one person never completes
|
|
410
|
+
* two stages. `relations` are the relation approvers `by` holds on the
|
|
411
|
+
* request's resource (see `ApprovalVerdict.relations`).
|
|
412
|
+
*/
|
|
413
|
+
declare function assertApprover(request: ApprovalRequest, by: Subject, requireDistinctApprover: boolean, at?: Instant, relations?: readonly string[], permissions?: readonly string[]): number | undefined;
|
|
414
|
+
/**
|
|
415
|
+
* The request after `verdict`, for a store to persist: a rejection resolves
|
|
416
|
+
* it; an approval is appended to `approvals` and resolves it once there are
|
|
417
|
+
* `approvers.quorum` (default 1). Throws an `ApprovalError` when the request
|
|
418
|
+
* is not pending, has expired or `verdict.by` may not approve it. Stores
|
|
419
|
+
* should write the result only when the stored row is still pending with the
|
|
420
|
+
* same number of approvals, so two approvers racing both count.
|
|
421
|
+
*/
|
|
422
|
+
declare function applyApprovalVerdict(request: ApprovalRequest, verdict: ApprovalVerdict, at?: Instant): ApprovalRequest;
|
|
423
|
+
type MemoryApprovalStore = ApprovalStore & {
|
|
424
|
+
readonly ttl: number;
|
|
425
|
+
};
|
|
426
|
+
declare function memoryApprovalStore(options?: {
|
|
427
|
+
readonly ttl?: number;
|
|
428
|
+
readonly now?: () => Instant;
|
|
429
|
+
}): MemoryApprovalStore;
|
|
430
|
+
//#endregion
|
|
431
|
+
export { AccessReviewVerdict as $, APPROVAL_REQUEST_SCHEMA as A, matchDelegation as B, ApproverRelationsOptions as C, SignApprovalOptions as D, ApprovalSignatureEntry as E, IdempotencyStore as F, pageAccessReviewItems as G, parseApprovalDelegation as H, IdempotentResponse as I, StartAccessReviewInput as J, AccessReviewHolder as K, memoryIdempotencyStore as L, ApprovalView as M, ApprovalsHandlerOptions as N, approvalSignatureClaims as O, approvalsHandler as P, isAccessReviewError as Q, ApprovalDelegationMatch as R, vouchApproval as S, ApprovalSignatureClaims as T, MemoryAccessReviewStore as U, memoryApprovalDelegationSource as V, memoryAccessReviewStore as W, AccessReviewError as X, startAccessReview as Y, AccessReviewErrorCode as Z, resolveApproval as _, approverPermissions as a, storedApprovalToken as b, decodeApprovalCursor as c, pageApprovals as d, accessReviewerEligible as et, cancelApprovals as f, requestApproval as g, readApprovalHeader as h, memoryApprovalStore as i, parseApprovalRequest as j, signApproval as k, encodeApprovalCursor as l, inspectApproval as m, applyApprovalVerdict as n, AccessReviewsHandlerOptions as nt, ApprovalCursorPosition as o, consumeApproval as p, AccessReviewOptions as q, assertApprover as r, accessReviewsHandler as rt, approvalPageSize as s, MemoryApprovalStore as t, decideAccessReviewItem as tt, listAllApprovals as u, resumeDecision as v, approverRelations as w, summarizeSubject as x, resumeFromHeader as y, MatchDelegationOptions as z };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {}
|