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/h3/index.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { d as discoverViaSignatureAgent, m as webBotAuthVerifier, u as InvalidSignatureError } from "../evaluations-DZ2CbV5k.js";
|
|
2
|
+
import { i as decorate } from "../bind-CZzhx-Vj.js";
|
|
3
|
+
import { t as fetchAdapter } from "../fetch-adapter-g0ypLkID.js";
|
|
4
|
+
//#region src/h3/create.ts
|
|
5
|
+
function createPermDock(policy, options) {
|
|
6
|
+
const adapter = fetchAdapter(policy, options, "h3", (event) => event.req);
|
|
7
|
+
const middleware = () => async (event, next) => {
|
|
8
|
+
const attached = await adapter.ensure(event.context, event);
|
|
9
|
+
if (!attached.ok) return attached.response;
|
|
10
|
+
return adapter.mapErrors(event, next);
|
|
11
|
+
};
|
|
12
|
+
const protect = ((target, data, protectOptions) => async (event, next) => {
|
|
13
|
+
const guard = await adapter.guard(target, data, event, protectOptions);
|
|
14
|
+
if (!guard.ok) return guard.response;
|
|
15
|
+
decorate(event.context, guard.permdock, guard.data);
|
|
16
|
+
return adapter.mapErrors(event, next);
|
|
17
|
+
});
|
|
18
|
+
const withPermDock = (handler) => async (event) => {
|
|
19
|
+
const attached = await adapter.ensure(event.context, event);
|
|
20
|
+
if (!attached.ok) return attached.response;
|
|
21
|
+
return adapter.mapErrors(event, () => handler(event));
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
middleware,
|
|
25
|
+
protect,
|
|
26
|
+
getPermDock: adapter.getPermDock,
|
|
27
|
+
getSnapshot: adapter.getSnapshot,
|
|
28
|
+
withPermDock,
|
|
29
|
+
connection: adapter.connection,
|
|
30
|
+
permdockHandler: () => adapter.handler(),
|
|
31
|
+
openapi: adapter.kernel.openapi
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent, webBotAuthVerifier };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as approvalHeaderValue } from "./approval-header-CJACtHkv.js";
|
|
2
|
+
//#region src/client/headers.ts
|
|
3
|
+
/** The `PermDock-Approval` header for a resume; a `TypeError` for a token that is not an RFC 9651 sf-token. */
|
|
4
|
+
function approvalHeaders(token) {
|
|
5
|
+
return { "PermDock-Approval": approvalHeaderValue(token) };
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { approvalHeaders as t };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region src/client/headers.d.ts
|
|
2
|
+
/** The `PermDock-Approval` header for a resume; a `TypeError` for a token that is not an RFC 9651 sf-token. */
|
|
3
|
+
declare function approvalHeaders(token: string): {
|
|
4
|
+
readonly "PermDock-Approval": string;
|
|
5
|
+
};
|
|
6
|
+
//#endregion
|
|
7
|
+
export { approvalHeaders as t };
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { t as
|
|
7
|
-
import {
|
|
8
|
-
import { t as
|
|
9
|
-
import {
|
|
3
|
+
import { r as approverLeaves } from "./approvers-CqPOLD-o.js";
|
|
4
|
+
import { t as describe } from "./describe-BybMRY7A.js";
|
|
5
|
+
import { i as getRegistry, n as findPermission } from "./permission-registry-Br4jSNVi.js";
|
|
6
|
+
import { t as assertAppData } from "./app-data-MuyzVqX8.js";
|
|
7
|
+
import { a as durationOf, i as dateAt, u as isoAt } from "./time-DkWjdL98.js";
|
|
8
|
+
import { r as relationReader, t as pendingRelations } from "./relations-BnCWnJGI.js";
|
|
9
|
+
import { n as resolveRelated } from "./relation-walk-3OyDBF0S.js";
|
|
10
|
+
import { n as toWireDelegation } from "./wire-delegation-Cv3W2eaM.js";
|
|
11
|
+
import { i as approverRelationKey, s as ApprovalError, t as APPROVAL_HEADER } from "./types-DqzsnlSA.js";
|
|
12
|
+
import { c as listAllApprovals, n as assertApprover } from "./store-4u_hxjWa.js";
|
|
13
|
+
import { n as parseApprovalHeader } from "./approval-header-CJACtHkv.js";
|
|
10
14
|
//#region src/approvals/relations.ts
|
|
11
15
|
const DEFAULT_PARENT_DEPTH = 16;
|
|
12
16
|
/** Every approver a request names: `by`, each stage and its escalation, and `escalation.to`, inside `anyOf` groups too. */
|
|
@@ -70,7 +74,7 @@ async function approverRelations(request, subject, options) {
|
|
|
70
74
|
const registry = getRegistry(options.permissions);
|
|
71
75
|
const cache = /* @__PURE__ */ new Map();
|
|
72
76
|
const reader = relationReader(options.relations, cache, registry);
|
|
73
|
-
const now = (options.now
|
|
77
|
+
const now = dateAt(options.now).getTime() / 1e3;
|
|
74
78
|
const holds = async (item) => {
|
|
75
79
|
const start = await startOf(item, request.resource.type, id, reader, cache, registry);
|
|
76
80
|
if (start === void 0) return false;
|
|
@@ -132,7 +136,7 @@ function permissionMeta(permission) {
|
|
|
132
136
|
resource: permission.resource
|
|
133
137
|
};
|
|
134
138
|
}
|
|
135
|
-
function
|
|
139
|
+
function summarizeSubject(subject) {
|
|
136
140
|
const principal = subject.principal;
|
|
137
141
|
return compact({
|
|
138
142
|
principal: principal === null ? null : compact({
|
|
@@ -145,10 +149,10 @@ function summariseSubject(subject) {
|
|
|
145
149
|
kind: subject.actor.kind
|
|
146
150
|
},
|
|
147
151
|
session: subject.session,
|
|
148
|
-
delegation: subject.delegation === void 0 ? void 0 : compact({
|
|
152
|
+
delegation: toWireDelegation(subject.delegation === void 0 ? void 0 : compact({
|
|
149
153
|
scopes: subject.delegation.scopes,
|
|
150
154
|
authorizationDetails: subject.delegation.authorizationDetails
|
|
151
|
-
})
|
|
155
|
+
}))
|
|
152
156
|
});
|
|
153
157
|
}
|
|
154
158
|
/**
|
|
@@ -157,13 +161,14 @@ function summariseSubject(subject) {
|
|
|
157
161
|
* extends it.
|
|
158
162
|
*/
|
|
159
163
|
function approvalTtl(storeTtl, approval) {
|
|
160
|
-
if (storeTtl !== void 0 && (
|
|
161
|
-
const base = storeTtl ??
|
|
162
|
-
const grant = approval === void 0 || approval === "human" ? void 0 :
|
|
163
|
-
return grant === void 0 ? base : Math.min(base, grant
|
|
164
|
+
if (storeTtl !== void 0 && durationOf(storeTtl) === void 0) throw new RangeError(`PermDock: approval ttl must be a whole number of seconds above 0, got ${String(storeTtl)}`);
|
|
165
|
+
const base = storeTtl ?? 3600;
|
|
166
|
+
const grant = approval === void 0 || approval === "human" ? void 0 : durationOf(approval.ttl);
|
|
167
|
+
return grant === void 0 ? base : Math.min(base, grant);
|
|
164
168
|
}
|
|
165
169
|
async function requestApproval(store, decision, meta) {
|
|
166
|
-
|
|
170
|
+
if (meta.x !== void 0) assertAppData(meta.x, "x of an approval request");
|
|
171
|
+
const now = dateAt(meta.now);
|
|
167
172
|
const leaf = permissionMeta(meta.permission);
|
|
168
173
|
const approval = decision.grant.approval;
|
|
169
174
|
const approvers = approval === void 0 || approval === "human" ? void 0 : compact({
|
|
@@ -178,18 +183,20 @@ async function requestApproval(store, decision, meta) {
|
|
|
178
183
|
const ttl = approvalTtl(meta.ttl ?? store.ttl, approval);
|
|
179
184
|
const request = freezeDeep(compact({
|
|
180
185
|
v: 1,
|
|
186
|
+
id: globalThis.crypto.randomUUID(),
|
|
181
187
|
token: decision.token,
|
|
182
188
|
permission: leaf.key,
|
|
183
189
|
scope: leaf.scope,
|
|
184
190
|
resource: meta.resource ?? { type: leaf.resource },
|
|
185
|
-
subject:
|
|
191
|
+
subject: summarizeSubject(meta.subject),
|
|
186
192
|
membership: meta.membership,
|
|
187
193
|
approvers,
|
|
188
194
|
detail: meta.detail ?? describe(decision).detail,
|
|
189
195
|
adapter: meta.adapter,
|
|
190
196
|
createdAt: now.toISOString(),
|
|
191
|
-
expiresAt:
|
|
192
|
-
status: "pending"
|
|
197
|
+
expiresAt: isoAt(now.getTime() + ttl * 1e3),
|
|
198
|
+
status: "pending",
|
|
199
|
+
x: meta.x
|
|
193
200
|
}));
|
|
194
201
|
await store.create(request);
|
|
195
202
|
return request;
|
|
@@ -219,28 +226,29 @@ async function vouchApproval(store, token, verdict) {
|
|
|
219
226
|
vouched: verdict.rule
|
|
220
227
|
}));
|
|
221
228
|
}
|
|
222
|
-
async function inspectApproval(store, token,
|
|
223
|
-
|
|
229
|
+
async function inspectApproval(store, token, at) {
|
|
230
|
+
const now = dateAt(at).getTime();
|
|
231
|
+
await store.expire({ epochMilliseconds: now });
|
|
224
232
|
const request = await store.get(token);
|
|
225
233
|
if (request === null) return {
|
|
226
234
|
ok: false,
|
|
227
|
-
|
|
235
|
+
cause: "approval-not-found"
|
|
228
236
|
};
|
|
229
237
|
if (request.status === "pending") return {
|
|
230
238
|
ok: false,
|
|
231
|
-
|
|
239
|
+
cause: "approval-pending"
|
|
232
240
|
};
|
|
233
241
|
if (request.status === "rejected") return {
|
|
234
242
|
ok: false,
|
|
235
|
-
|
|
243
|
+
cause: "approval-rejected"
|
|
236
244
|
};
|
|
237
245
|
if (request.consumedAt !== void 0) return {
|
|
238
246
|
ok: false,
|
|
239
|
-
|
|
247
|
+
cause: "approval-consumed"
|
|
240
248
|
};
|
|
241
|
-
if (request.status === "expired" || Date.parse(request.expiresAt) <= now
|
|
249
|
+
if (request.status === "expired" || Date.parse(request.expiresAt) <= now) return {
|
|
242
250
|
ok: false,
|
|
243
|
-
|
|
251
|
+
cause: "approval-expired"
|
|
244
252
|
};
|
|
245
253
|
return {
|
|
246
254
|
ok: true,
|
|
@@ -248,17 +256,18 @@ async function inspectApproval(store, token, now = /* @__PURE__ */ new Date()) {
|
|
|
248
256
|
};
|
|
249
257
|
}
|
|
250
258
|
/** Inspects `token` and, when it is approved, consumes it so it resumes once. */
|
|
251
|
-
async function consumeApproval(store, token,
|
|
259
|
+
async function consumeApproval(store, token, at) {
|
|
260
|
+
const now = { epochMilliseconds: dateAt(at).getTime() };
|
|
252
261
|
const inspected = await inspectApproval(store, token, now);
|
|
253
262
|
if (!inspected.ok) return inspected;
|
|
254
263
|
if (typeof store.consume !== "function") return {
|
|
255
264
|
ok: false,
|
|
256
|
-
|
|
265
|
+
cause: "approval-not-found"
|
|
257
266
|
};
|
|
258
267
|
const consumed = await store.consume(token, now);
|
|
259
268
|
if (consumed === null) return {
|
|
260
269
|
ok: false,
|
|
261
|
-
|
|
270
|
+
cause: "approval-consumed"
|
|
262
271
|
};
|
|
263
272
|
return {
|
|
264
273
|
ok: true,
|
|
@@ -331,13 +340,13 @@ async function resumeDecision(input) {
|
|
|
331
340
|
inspected = await inspectApproval(store, token, input.now);
|
|
332
341
|
if (inspected.ok) {
|
|
333
342
|
const { request } = inspected;
|
|
334
|
-
if (request.permission !== input.permission.key || request.resource.id !== void 0 && request.resource.id !== input.resource.id) return approvalDenied("approval-mismatch");
|
|
343
|
+
if (request.permission !== input.permission.key || request.resource.id !== void 0 && request.resource.id !== input.resource.id || request.subject.principal?.id !== input.subject.principal?.id) return approvalDenied("approval-mismatch");
|
|
335
344
|
if (input.consume !== false) inspected = await consumeApproval(store, token, input.now);
|
|
336
345
|
}
|
|
337
346
|
} catch {
|
|
338
347
|
return approvalDenied("approval-not-found");
|
|
339
348
|
}
|
|
340
|
-
if (!inspected.ok) return approvalDenied(inspected.
|
|
349
|
+
if (!inspected.ok) return approvalDenied(inspected.cause);
|
|
341
350
|
const principal = input.subject.principal;
|
|
342
351
|
if (principal === null) return approvalDenied("approval-mismatch");
|
|
343
352
|
return {
|
|
@@ -382,16 +391,15 @@ async function cancelApprovals(store, filter, meta) {
|
|
|
382
391
|
}
|
|
383
392
|
}))).filter(Boolean).length;
|
|
384
393
|
}
|
|
394
|
+
/** The token of a `PermDock-Approval` field: one RFC 9651 sf-token Item with no parameters, else `undefined`. */
|
|
385
395
|
function readApprovalHeader(headers) {
|
|
386
|
-
|
|
387
|
-
if (value === null || value.trim() === "") return;
|
|
388
|
-
return value.trim();
|
|
396
|
+
return parseApprovalHeader(headers.get(APPROVAL_HEADER));
|
|
389
397
|
}
|
|
390
398
|
function resumeFromHeader(store, headers, now) {
|
|
391
399
|
const token = readApprovalHeader(headers);
|
|
392
400
|
if (token === void 0) return Promise.resolve({
|
|
393
401
|
ok: false,
|
|
394
|
-
|
|
402
|
+
cause: "approval-not-found"
|
|
395
403
|
});
|
|
396
404
|
return inspectApproval(store, token, now);
|
|
397
405
|
}
|
|
@@ -408,7 +416,7 @@ function resumeFromHeader(store, headers, now) {
|
|
|
408
416
|
*/
|
|
409
417
|
async function storedApprovalToken(store, decision, options = {}) {
|
|
410
418
|
if (store === void 0 || decision.outcome !== "approval-required") return;
|
|
411
|
-
const now = (options.now
|
|
419
|
+
const now = dateAt(options.now).getTime();
|
|
412
420
|
try {
|
|
413
421
|
const record = await store.get(decision.token);
|
|
414
422
|
if (record === null || record.status === "pending" && options.denyPending !== true || record.status === "expired" || Date.parse(record.expiresAt) <= now) return;
|
|
@@ -418,4 +426,4 @@ async function storedApprovalToken(store, decision, options = {}) {
|
|
|
418
426
|
}
|
|
419
427
|
}
|
|
420
428
|
//#endregion
|
|
421
|
-
export { requestApproval as a, resumeFromHeader as c, vouchApproval as d, approverPermissions as f, readApprovalHeader as i, storedApprovalToken as l, approverRelations as m, consumeApproval as n, resolveApproval as o, heldPermissions as p, inspectApproval as r, resumeDecision as s, cancelApprovals as t,
|
|
429
|
+
export { requestApproval as a, resumeFromHeader as c, vouchApproval as d, approverPermissions as f, readApprovalHeader as i, storedApprovalToken as l, approverRelations as m, consumeApproval as n, resolveApproval as o, heldPermissions as p, inspectApproval as r, resumeDecision as s, cancelApprovals as t, summarizeSubject as u };
|
package/dist/hono/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { T as Policy, j as PolicyVocabulary, rr as Principal } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { r as PermDock } from "../permdock-D7eeLJER.js";
|
|
4
|
+
import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
|
|
5
|
+
import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-BLd4MnBX.js";
|
|
6
|
+
import { t as ServerAdapterOptions } from "../bind--9EFVYWF.js";
|
|
6
7
|
import { Context, Hono, MiddlewareHandler } from "hono";
|
|
7
8
|
import { SSEMessage, SSEStreamingApi } from "hono/streaming";
|
|
8
9
|
import { WSEvents } from "hono/ws";
|
|
@@ -12,15 +13,17 @@ type HonoPermDockOptions<TUser = unknown> = ServerAdapterOptions<Context, TUser>
|
|
|
12
13
|
readonly revocations?: RevocationFeed;
|
|
13
14
|
};
|
|
14
15
|
/** The `Variables` both middlewares set; Hono merges them into the route's Env. */
|
|
15
|
-
type
|
|
16
|
+
type HonoPermDockEnv<TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
16
17
|
readonly Variables: {
|
|
17
18
|
readonly permdock: PermDock<V>;
|
|
18
19
|
readonly permdockData: TData;
|
|
19
20
|
};
|
|
20
21
|
};
|
|
21
22
|
type HonoPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
22
|
-
|
|
23
|
-
readonly
|
|
23
|
+
/** The `PermDock` for one request, for code the middleware does not run before. */
|
|
24
|
+
readonly getPermDock: (c: Context) => Promise<PermDock<V>>;
|
|
25
|
+
readonly middleware: () => MiddlewareHandler<HonoPermDockEnv<unknown, V>>;
|
|
26
|
+
readonly protect: <TData = unknown>(permission: Permission | null, data?: (c: Context) => TData | Promise<TData>, protectOptions?: ProtectOptions) => MiddlewareHandler<HonoPermDockEnv<NonNullable<TData>, V>>;
|
|
24
27
|
/** A long-lived connection for the request behind `c`. */
|
|
25
28
|
readonly connection: (c: Context, connectionOptions?: ConnectionOptions) => Promise<Connection>;
|
|
26
29
|
/** `upgradeWebSocket` events that close with `1008` when the connection aborts. */
|
|
@@ -45,4 +48,4 @@ type SseOptions<T> = {
|
|
|
45
48
|
};
|
|
46
49
|
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: HonoPermDockOptions<TUser>): HonoPermDock<V>;
|
|
47
50
|
//#endregion
|
|
48
|
-
export { type HonoPermDock, type HonoPermDockOptions, InvalidSignatureError, type
|
|
51
|
+
export { type HonoPermDock, type HonoPermDockEnv, type HonoPermDockOptions, InvalidSignatureError, type SseOptions, discoverViaSignatureAgent, webBotAuthVerifier };
|
package/dist/hono/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { t as compact } from "../compact-
|
|
2
|
-
import { r as PermDockRevokedError } from "../errors-
|
|
3
|
-
import {
|
|
4
|
-
import { t as problemFromError } from "../map-error-
|
|
5
|
-
import { r as bindKernel } from "../bind-
|
|
6
|
-
import {
|
|
1
|
+
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
+
import { r as PermDockRevokedError } from "../errors-BKy0EfhN.js";
|
|
3
|
+
import { d as discoverViaSignatureAgent, m as webBotAuthVerifier, u as InvalidSignatureError } from "../evaluations-DZ2CbV5k.js";
|
|
4
|
+
import { t as problemFromError } from "../map-error-TCAdw-eW.js";
|
|
5
|
+
import { r as bindKernel } from "../bind-CZzhx-Vj.js";
|
|
6
|
+
import { a as onRevoked, n as closeReason, r as guardIterable, t as POLICY_VIOLATION } from "../stream-CvdUS9V1.js";
|
|
7
7
|
import { Hono } from "hono";
|
|
8
8
|
//#region src/hono/create.ts
|
|
9
9
|
function socket(connection, events) {
|
|
@@ -11,7 +11,7 @@ function socket(connection, events) {
|
|
|
11
11
|
...events,
|
|
12
12
|
onOpen: (evt, ws) => {
|
|
13
13
|
onRevoked(connection, (problem) => {
|
|
14
|
-
ws.close(POLICY_VIOLATION, problem
|
|
14
|
+
ws.close(POLICY_VIOLATION, closeReason(problem));
|
|
15
15
|
});
|
|
16
16
|
if (!connection.signal.aborted) events.onOpen?.(evt, ws);
|
|
17
17
|
},
|
|
@@ -61,16 +61,16 @@ function mapDownstream(c) {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
function createPermDock(policy, options) {
|
|
64
|
-
const { kernel, bind, scopeOf, handlerScope, attach } = bindKernel(policy, options, "hono", (c) => c.req.raw);
|
|
65
|
-
const
|
|
64
|
+
const { kernel, bind, scopeOf, handlerScope, getPermDock, attach, guard: runGuard } = bindKernel(policy, options, "hono", (c) => c.req.raw);
|
|
65
|
+
const middleware = () => async (c, next) => {
|
|
66
66
|
const attached = await attach(c);
|
|
67
67
|
if (!attached.ok) return attached.response;
|
|
68
68
|
c.set("permdock", attached.permdock);
|
|
69
69
|
await next();
|
|
70
70
|
mapDownstream(c);
|
|
71
71
|
};
|
|
72
|
-
const protect = (permission,
|
|
73
|
-
const guard = await
|
|
72
|
+
const protect = (permission, data, protectOptions) => async (c, next) => {
|
|
73
|
+
const guard = await runGuard(permission, data, c, protectOptions);
|
|
74
74
|
if (!guard.ok) return guard.response;
|
|
75
75
|
c.set("permdock", guard.permdock);
|
|
76
76
|
c.set("permdockData", guard.data);
|
|
@@ -86,7 +86,8 @@ function createPermDock(policy, options) {
|
|
|
86
86
|
return app;
|
|
87
87
|
};
|
|
88
88
|
return {
|
|
89
|
-
|
|
89
|
+
getPermDock,
|
|
90
|
+
middleware,
|
|
90
91
|
protect,
|
|
91
92
|
connection,
|
|
92
93
|
socket,
|
|
@@ -96,4 +97,4 @@ function createPermDock(policy, options) {
|
|
|
96
97
|
};
|
|
97
98
|
}
|
|
98
99
|
//#endregion
|
|
99
|
-
export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent,
|
|
100
|
+
export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent, webBotAuthVerifier };
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
1
|
+
import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import { n as isForbiddenKey, s as splitPath } from "./paths-DXSHAMIa.js";
|
|
4
|
+
import { a as deny, i as completeGrant, n as role, p as normalizeWhere, r as allow } from "./role-builder-CXbis5-X.js";
|
|
5
|
+
import { a as getResource, n as findPermission } from "./permission-registry-Br4jSNVi.js";
|
|
6
|
+
import { d as isSelfParented } from "./resource-relations-D_jw0BFx.js";
|
|
7
|
+
import { a as durationOf, l as isRfc3339, m as rfc3339 } from "./time-DkWjdL98.js";
|
|
8
|
+
import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
|
|
9
|
+
import { _ as listPlans, m as findRole, o as flattenGrantee } from "./grantee-Cn1HyUsI.js";
|
|
10
|
+
import { i as indexPolicy, t as declaredRoleNames } from "./policy-DLZJ5gAp.js";
|
|
8
11
|
//#region src/core/hosted.ts
|
|
9
12
|
function memoryPolicySource(document = null) {
|
|
10
13
|
const current = document === null ? null : parsePolicyDocument(document);
|
|
@@ -13,9 +16,6 @@ function memoryPolicySource(document = null) {
|
|
|
13
16
|
refresh: () => Promise.resolve()
|
|
14
17
|
});
|
|
15
18
|
}
|
|
16
|
-
function isRecord(value) {
|
|
17
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
18
|
-
}
|
|
19
19
|
function rejectUnsafe(value) {
|
|
20
20
|
if (value === null || typeof value !== "object") return;
|
|
21
21
|
if (Array.isArray(value)) {
|
|
@@ -34,9 +34,21 @@ function parsePolicyDocument(json) {
|
|
|
34
34
|
const copy = JSON.parse(JSON.stringify(input));
|
|
35
35
|
rejectUnsafe(copy);
|
|
36
36
|
if (copy["v"] !== 1) throw new Error(`PermDock: unsupported policy document version '${String(copy["v"])}'`);
|
|
37
|
-
if (typeof copy["id"] !== "string" || typeof copy["fingerprint"] !== "string" || typeof copy["catalog"] !== "string" ||
|
|
37
|
+
if (typeof copy["id"] !== "string" || typeof copy["fingerprint"] !== "string" || typeof copy["catalog"] !== "string" || !isRfc3339(copy["issuedAt"]) || !Array.isArray(copy["grants"])) throw new TypeError("PermDock: malformed policy document");
|
|
38
38
|
return freezeDeep(copy);
|
|
39
39
|
}
|
|
40
|
+
/** The document verified `vnd.permdock.policy+jwt` claims carry: `policy`, with `jti` as `id` and `iat` as `issuedAt`. Throws like `parsePolicyDocument`. */
|
|
41
|
+
function policyDocumentFromClaims(claims) {
|
|
42
|
+
const claim = claims["policy"];
|
|
43
|
+
const jti = claims["jti"];
|
|
44
|
+
const iat = claims["iat"];
|
|
45
|
+
if (!isRecord(claim) || typeof jti !== "string" || typeof iat !== "number") throw new TypeError("PermDock: malformed policy document");
|
|
46
|
+
return parsePolicyDocument({
|
|
47
|
+
...claim,
|
|
48
|
+
id: jti,
|
|
49
|
+
issuedAt: rfc3339(iat)
|
|
50
|
+
});
|
|
51
|
+
}
|
|
40
52
|
const COMPARISONS = /* @__PURE__ */ new Set([
|
|
41
53
|
"eq",
|
|
42
54
|
"ne",
|
|
@@ -89,7 +101,7 @@ function approvalRank(approval) {
|
|
|
89
101
|
distinct: approval.distinct !== false,
|
|
90
102
|
stale: approval.staleOn === "resource-change",
|
|
91
103
|
quorum: approval.quorum ?? 1,
|
|
92
|
-
ttl:
|
|
104
|
+
ttl: durationOf(approval.ttl) ?? Number.POSITIVE_INFINITY,
|
|
93
105
|
escalates: approval.escalation !== void 0
|
|
94
106
|
};
|
|
95
107
|
}
|
|
@@ -133,9 +145,9 @@ function approvalAcceptable(policy, approval, permissionResource) {
|
|
|
133
145
|
if (approval["distinct"] !== void 0 && typeof approval["distinct"] !== "boolean") return false;
|
|
134
146
|
if (approval["staleOn"] !== void 0 && (approval["staleOn"] !== "resource-change" || getResource(policy.permissions, permissionResource)?.version === void 0)) return false;
|
|
135
147
|
if (approval["quorum"] !== void 0 && (!Number.isInteger(approval["quorum"]) || approval["quorum"] < 1)) return false;
|
|
136
|
-
if (approval["ttl"] !== void 0 && (
|
|
148
|
+
if (approval["ttl"] !== void 0 && durationOf(approval["ttl"]) === void 0) return false;
|
|
137
149
|
const escalation = approval["escalation"];
|
|
138
|
-
if (escalation !== void 0 && (!isRecord(escalation) ||
|
|
150
|
+
if (escalation !== void 0 && (!isRecord(escalation) || durationOf(escalation["after"]) === void 0 || !granteesAcceptable(policy, escalation["to"], permissionResource))) return false;
|
|
139
151
|
if (approval["by"] === void 0) return true;
|
|
140
152
|
return granteesAcceptable(policy, approval["by"], permissionResource);
|
|
141
153
|
}
|
|
@@ -222,6 +234,18 @@ function buildGrant(policy, document, raw) {
|
|
|
222
234
|
})
|
|
223
235
|
};
|
|
224
236
|
}
|
|
237
|
+
/** The grants of `document` that `policy` drops, in document order; `permdock/catalog` turns them into drift findings. */
|
|
238
|
+
function hostedGrantDrops(policy, document) {
|
|
239
|
+
return document.grants.flatMap((raw) => {
|
|
240
|
+
const result = buildGrant(policy, document, raw);
|
|
241
|
+
if (result.ok) return [];
|
|
242
|
+
return [freezeDeep({
|
|
243
|
+
grant: isRecord(raw) && typeof raw.id === "string" ? raw.id : "",
|
|
244
|
+
permission: isRecord(raw) && typeof raw.permission === "string" ? raw.permission : "",
|
|
245
|
+
reason: result.reason
|
|
246
|
+
})];
|
|
247
|
+
});
|
|
248
|
+
}
|
|
225
249
|
/**
|
|
226
250
|
* The code policy plus the hosted grants that pass every rule. Hosted
|
|
227
251
|
* allows OR with code allows and any deny still wins, so a hosted grant can
|
|
@@ -257,10 +281,35 @@ function mergeHostedGrants(policy, document) {
|
|
|
257
281
|
...policy,
|
|
258
282
|
grants,
|
|
259
283
|
index: indexPolicy(policy.roles, grants, policy.vocabulary),
|
|
260
|
-
fingerprint:
|
|
284
|
+
fingerprint: sha256Digest(`${policy.fingerprint}:${document.fingerprint}`)
|
|
261
285
|
}),
|
|
262
286
|
dropped
|
|
263
287
|
};
|
|
264
288
|
}
|
|
289
|
+
function hostedPolicies(source) {
|
|
290
|
+
return Object.freeze({
|
|
291
|
+
feature: "hosted-policies",
|
|
292
|
+
apply(policy) {
|
|
293
|
+
if (policy.hostable.length === 0) return {
|
|
294
|
+
policy,
|
|
295
|
+
errors: []
|
|
296
|
+
};
|
|
297
|
+
let document;
|
|
298
|
+
try {
|
|
299
|
+
document = source.current();
|
|
300
|
+
} catch (error) {
|
|
301
|
+
return {
|
|
302
|
+
policy,
|
|
303
|
+
errors: [error]
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
const merged = mergeHostedGrants(policy, document);
|
|
307
|
+
return {
|
|
308
|
+
policy: merged.policy,
|
|
309
|
+
errors: merged.dropped
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
}
|
|
265
314
|
//#endregion
|
|
266
|
-
export {
|
|
315
|
+
export { mergeHostedGrants as a, memoryPolicySource as i, hostedPolicies as n, parsePolicyDocument as o, isPortableCondition as r, policyDocumentFromClaims as s, hostedGrantDrops as t };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { T as Policy, a as ApprovalRequirement, bn as Grantee, lr as Condition } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
//#region src/core/hosted.d.ts
|
|
3
|
+
/** One grant authored in PermDock Cloud; its grantee is a declared role, plan or relation. */
|
|
4
|
+
type HostedGrant = {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
readonly permission: string;
|
|
7
|
+
readonly effect?: "allow" | "deny";
|
|
8
|
+
readonly to: Grantee | readonly Grantee[];
|
|
9
|
+
readonly where?: Condition;
|
|
10
|
+
readonly check?: Condition;
|
|
11
|
+
readonly approval?: "human" | ApprovalRequirement;
|
|
12
|
+
readonly fields?: readonly string[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* PolicyDocument v1. Signed as a `vnd.permdock.policy+jwt`, the `policy`
|
|
16
|
+
* claim carries every field but `id` and `issuedAt`, which are the token's
|
|
17
|
+
* `jti` and `iat` (`policyDocumentFromClaims`).
|
|
18
|
+
*/
|
|
19
|
+
type PolicyDocument = {
|
|
20
|
+
readonly v: 1;
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly fingerprint: string;
|
|
23
|
+
/** The catalog fingerprint the document was authored against. */
|
|
24
|
+
readonly catalog: string;
|
|
25
|
+
/** RFC 3339. */
|
|
26
|
+
readonly issuedAt: string;
|
|
27
|
+
readonly grants: readonly HostedGrant[];
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The channel for hosted grants. `getPermDock` reads `current()` once;
|
|
31
|
+
* the application calls `refresh()` on its own schedule, never a check.
|
|
32
|
+
*/
|
|
33
|
+
type PolicySource = {
|
|
34
|
+
/** Names the implementation in errors and events. */
|
|
35
|
+
readonly name?: string;
|
|
36
|
+
current(): PolicyDocument | null;
|
|
37
|
+
refresh(): Promise<void>;
|
|
38
|
+
};
|
|
39
|
+
type HostedGrantDropReason = "not-hostable" | "unknown-permission" | "unknown-grantee" | "non-portable" | "weaker-approval" | "invalid";
|
|
40
|
+
/** Reported through `on('error')` when a hosted grant is not merged; never thrown. */
|
|
41
|
+
type HostedGrantDropped = {
|
|
42
|
+
readonly kind: "hosted-grant-dropped";
|
|
43
|
+
readonly document: string;
|
|
44
|
+
readonly grant: string;
|
|
45
|
+
readonly reason: HostedGrantDropReason;
|
|
46
|
+
};
|
|
47
|
+
declare function memoryPolicySource(document?: PolicyDocument | null): PolicySource;
|
|
48
|
+
/** Validates the document envelope; per-grant checks happen at merge time. */
|
|
49
|
+
declare function parsePolicyDocument(json: unknown): PolicyDocument;
|
|
50
|
+
/** The document verified `vnd.permdock.policy+jwt` claims carry: `policy`, with `jti` as `id` and `iat` as `issuedAt`. Throws like `parsePolicyDocument`. */
|
|
51
|
+
declare function policyDocumentFromClaims(claims: Readonly<Record<string, unknown>>): PolicyDocument;
|
|
52
|
+
/** True for the portable subset only: no `opaque`, no `sqlFunction`, no unknown op. */
|
|
53
|
+
declare function isPortableCondition(value: unknown): value is Condition;
|
|
54
|
+
/**
|
|
55
|
+
* The code policy plus the hosted grants that pass every rule. Hosted
|
|
56
|
+
* allows OR with code allows and any deny still wins, so a hosted grant can
|
|
57
|
+
* never override a code deny; one that fails a rule is dropped, not thrown.
|
|
58
|
+
*/
|
|
59
|
+
declare function mergeHostedGrants(policy: Policy, document: PolicyDocument | null): {
|
|
60
|
+
readonly policy: Policy;
|
|
61
|
+
readonly dropped: readonly HostedGrantDropped[];
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Hosted grants as an instance option: `policies: hostedPolicies(source)`.
|
|
65
|
+
* The merge code ships only with an app that imports this function.
|
|
66
|
+
* `source.current()` is read once per instance; a throw keeps the code
|
|
67
|
+
* policy and is reported as an error event.
|
|
68
|
+
*/
|
|
69
|
+
type HostedPolicies = {
|
|
70
|
+
readonly feature: "hosted-policies";
|
|
71
|
+
readonly apply: (policy: Policy) => {
|
|
72
|
+
readonly policy: Policy;
|
|
73
|
+
readonly errors: readonly unknown[];
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
declare function hostedPolicies(source: PolicySource): HostedPolicies;
|
|
77
|
+
//#endregion
|
|
78
|
+
export { PolicyDocument as a, isPortableCondition as c, parsePolicyDocument as d, policyDocumentFromClaims as f, HostedPolicies as i, memoryPolicySource as l, HostedGrantDropReason as n, PolicySource as o, HostedGrantDropped as r, hostedPolicies as s, HostedGrant as t, mergeHostedGrants as u };
|
|
@@ -26,6 +26,39 @@ function parsedBody(body, headers) {
|
|
|
26
26
|
if (!headers.has("content-type")) headers.set("content-type", "application/json");
|
|
27
27
|
return JSON.stringify(body);
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* A Fetch `Request` for a framework request. A `GET` or `HEAD` carries no
|
|
31
|
+
* body; otherwise the body the framework parsed, or else `stream()`.
|
|
32
|
+
*/
|
|
33
|
+
function fetchRequest(url, method, headers, body, stream) {
|
|
34
|
+
if (method === "GET" || method === "HEAD") return new Request(url, {
|
|
35
|
+
method,
|
|
36
|
+
headers
|
|
37
|
+
});
|
|
38
|
+
const parsed = parsedBody(body, headers);
|
|
39
|
+
if (parsed !== void 0) return new Request(url, {
|
|
40
|
+
method,
|
|
41
|
+
headers,
|
|
42
|
+
body: parsed
|
|
43
|
+
});
|
|
44
|
+
if (stream === void 0) return new Request(url, {
|
|
45
|
+
method,
|
|
46
|
+
headers
|
|
47
|
+
});
|
|
48
|
+
const init = {
|
|
49
|
+
method,
|
|
50
|
+
headers,
|
|
51
|
+
body: stream(),
|
|
52
|
+
duplex: "half"
|
|
53
|
+
};
|
|
54
|
+
return new Request(url, init);
|
|
55
|
+
}
|
|
56
|
+
/** Writes `response` to a Fastify-style reply. */
|
|
57
|
+
async function writeReply(reply, response) {
|
|
58
|
+
reply.code(response.status);
|
|
59
|
+
for (const [key, value] of response.headers.entries()) reply.header(key, value);
|
|
60
|
+
await reply.send(await response.text());
|
|
61
|
+
}
|
|
29
62
|
/** The Fetch `Request` an RPC context carries as `request` or `req`. */
|
|
30
63
|
function requestFromContext(context) {
|
|
31
64
|
if ("request" in context && context.request instanceof Request) return context.request;
|
|
@@ -33,7 +66,7 @@ function requestFromContext(context) {
|
|
|
33
66
|
}
|
|
34
67
|
/** Whether the caller sent credentials, which turns a `401` into a `WWW-Authenticate` challenge. */
|
|
35
68
|
function hasCredentials(request) {
|
|
36
|
-
return request.headers.has("authorization");
|
|
69
|
+
return request instanceof Request ? request.headers.has("authorization") : request.headers.authorization !== void 0;
|
|
37
70
|
}
|
|
38
71
|
/** The Problem Details `detail` of `cause`, or `fallback` when it has none. */
|
|
39
72
|
function problemMessage(cause, fallback) {
|
|
@@ -41,4 +74,4 @@ function problemMessage(cause, fallback) {
|
|
|
41
74
|
return fallback;
|
|
42
75
|
}
|
|
43
76
|
//#endregion
|
|
44
|
-
export {
|
|
77
|
+
export { parsedBody as a, writeReply as c, headersFrom as i, firstHeader as n, problemMessage as o, hasCredentials as r, requestFromContext as s, fetchRequest as t };
|
|
@@ -7,7 +7,6 @@ type NodeRequest = IncomingMessage & {
|
|
|
7
7
|
};
|
|
8
8
|
declare function toRequest(req: NodeRequest, stream?: IncomingMessage | null): Request;
|
|
9
9
|
declare function sendResponse(res: ServerResponse, response: Response): Promise<void>;
|
|
10
|
-
declare const fromResponse: typeof sendResponse;
|
|
11
10
|
declare function isServerResponse(value: unknown): value is ServerResponse;
|
|
12
11
|
//#endregion
|
|
13
|
-
export { toRequest as
|
|
12
|
+
export { toRequest as i, isServerResponse as n, sendResponse as r, NodeRequest as t };
|