permdock 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -35
- package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
- package/dist/a2a/index.d.ts +8 -6
- package/dist/a2a/index.js +21 -31
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-B4R5fnMU.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -23
- package/dist/ai-sdk/index.js +38 -21
- package/dist/app-data-MuyzVqX8.js +60 -0
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-Dg8XsRaO.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +228 -75
- package/dist/automation-BMZPIVUM.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +11 -23
- package/dist/better-supabase/index.d.ts +438 -86
- package/dist/better-supabase/index.js +1027 -184
- package/dist/bind--9EFVYWF.d.ts +38 -0
- package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/build-instance-BMnAudHn.js +52 -0
- package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
- package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/catalog-BECMPrwc.js +100 -0
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +26 -30
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +15 -45
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +20 -6
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +240 -347
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
- package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
- package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
- package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
- package/dist/constants-DcJABbLW.js +20 -0
- package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +18 -18
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/create-DnrmLnLW.js +323 -0
- package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/deciding-columns-Sq12mEA6.js +123 -0
- package/dist/delegation-DaXVdDhM.js +286 -0
- package/dist/delegation-input-FTxMK3ji.js +19 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/denied-text-D8jDHgsl.d.ts +19 -0
- package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
- package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/doctor-DFjUxf2f.js +2361 -0
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +6 -14
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +14 -13
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +23 -29
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +14 -12
- package/dist/fastify/index.d.ts +26 -13
- package/dist/fastify/index.js +17 -36
- package/dist/fetch-adapter-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
- package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
- package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
- package/dist/grantee-Cn1HyUsI.js +254 -0
- package/dist/grantee-conditions-CcXf8hMM.js +271 -0
- package/dist/grantee-match-DHArqY82.js +142 -0
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +14 -13
- package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
- package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
- package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/index-DOVf7RJv.d.ts +900 -0
- package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +20 -14
- package/dist/index.js +33 -23
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +166 -145
- package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +6 -14
- package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-CtKR3GXL.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
- package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
- package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
- package/dist/mcp/index.d.ts +36 -9
- package/dist/mcp/index.js +476 -448
- package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +20 -20
- package/dist/next/index.d.ts +40 -20
- package/dist/next/index.js +37 -39
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/ocsf-BFp-PZZA.js +126 -0
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +18 -25
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
- package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +23 -20
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +53 -27
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/output-files-DhRBBE4n.js +138 -0
- package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
- package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
- package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
- package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
- package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +47 -29
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.d.ts +502 -0
- package/dist/permission-registry-Br4jSNVi.js +385 -0
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/policy-DLZJ5gAp.js +399 -0
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +6 -12
- package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
- package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/protected-DEPHc2xV.d.ts +38 -0
- package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
- package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
- package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -63
- package/dist/react-native/index.js +45 -27
- package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/relation-walk-3OyDBF0S.js +186 -0
- package/dist/relations-BnCWnJGI.js +163 -0
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/request-context-BTRTG7OT.js +71 -0
- package/dist/request-context-C2_1lchh.d.ts +5 -0
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/resource-relations-D_jw0BFx.js +243 -0
- package/dist/retire-CALjIQ7e.js +240 -0
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
- package/dist/role-builder-CXbis5-X.js +623 -0
- package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
- package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
- package/dist/server/index.d.ts +13 -134
- package/dist/server/index.js +13 -10
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/shared-CD11nBbC.js +304 -0
- package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +24 -25
- package/dist/solid/index.js +41 -11
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
- package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
- package/dist/sql-B5T1IL83.js +55 -0
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +440 -106
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
- package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
- package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
- package/dist/stores-ClZUgeoP.d.ts +30 -0
- package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +13 -6
- package/dist/supabase/middleware.js +16 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
- package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +11 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +26 -12
- package/dist/svelte/runtime.d.ts +10 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +5 -5
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +36 -316
- package/dist/testing/index.d.ts +391 -106
- package/dist/testing/index.js +4574 -1286
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
- package/dist/tool-refusal-CMLN5xhn.js +41 -0
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +18 -17
- package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
- package/dist/types-BNORmDM8.d.ts +172 -0
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
- package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/types-fbZ7JEXr.d.ts +89 -0
- package/dist/types-tIgIeIKJ.d.ts +66 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
- package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
- package/dist/validity-CZ7-y0Cj.js +79 -0
- package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
- package/dist/verify-DbCL9bnB.js +1770 -0
- package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
- package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
- package/dist/vue/index.d.ts +25 -21
- package/dist/vue/index.js +25 -9
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +13 -37
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/wrap-Bd1Tejur.d.ts +15 -0
- package/dist/wrap-gX61EtpB.js +27 -0
- package/package.json +140 -41
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +129 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +13 -8
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
- package/skills/permdock-wire/SKILL.md +18 -12
- package/skills/permdock-wire/references/adapters.md +146 -50
- package/skills/permdock-wire/references/policy-options.md +15 -6
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DbYAuNkG.js +0 -224
- package/dist/arazzo-C9chp3ST.js +0 -54
- package/dist/bind-C_ob3LKa.d.ts +0 -25
- package/dist/catalog-CRW5Mx_B.js +0 -2
- package/dist/catalog-CYj-mX2O.js +0 -48
- package/dist/catalog-DWF5cYqB.js +0 -55
- package/dist/cloud-CfwZ39Rl.js +0 -50
- package/dist/cloud-DWLXO2af.js +0 -118
- package/dist/collect-CHB22Sx4.js +0 -83
- package/dist/collect-DSWOk19R.js +0 -2
- package/dist/commands-BeaGNj_o.js +0 -97
- package/dist/config-ir40y8m0.js +0 -36
- package/dist/create-CMwIl-w2.js +0 -253
- package/dist/delegation-D8pUEuce.js +0 -103
- package/dist/diff-C9RDjjhs.js +0 -48
- package/dist/doctor-Djh6JDEk.js +0 -53
- package/dist/doctor-DvH0IQff.js +0 -1194
- package/dist/doctor-collect-CjdO0wQX.js +0 -665
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/evaluation-items-CfCCejQd.js +0 -40
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-BMl1RxoX.js +0 -26
- package/dist/grantee-Cv5Sogfv.js +0 -602
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-0nNqHspG.d.ts +0 -6
- package/dist/index-BNc7Wer_.d.ts +0 -483
- package/dist/index-C7Tw7MaW.d.ts +0 -201
- package/dist/instance-options-Dhhcnm3y.js +0 -22
- package/dist/load-DwJUafYN.js +0 -2
- package/dist/manifest-iaoBXHKc.js +0 -783
- package/dist/map-AcxK9o_D.js +0 -147
- package/dist/may-use-DndQ5tQ-.js +0 -77
- package/dist/openapi-CQTsgKoB.js +0 -164
- package/dist/permdock-CbgvLnuo.js +0 -3479
- package/dist/permissions-DVoF6dMt.js +0 -662
- package/dist/policy-xyWg7QdR.js +0 -1122
- package/dist/powersync-CrBX8hY6.js +0 -2
- package/dist/powersync-DE19b9dT.js +0 -62
- package/dist/protected-BdnIEFkY.d.ts +0 -27
- package/dist/protected-xAr24FEC.d.ts +0 -40
- package/dist/relations-cjOL01hZ.js +0 -505
- package/dist/rls-P-BeBx0n.js +0 -238
- package/dist/rls-graph-CHwx0V8q.js +0 -435
- package/dist/rls-ownership-DcYlZ09B.js +0 -843
- package/dist/rls-shared-Cewd_-zI.js +0 -495
- package/dist/rls-verify-CMv9H3wV.js +0 -746
- package/dist/run-BWc9qqvE.js +0 -174
- package/dist/server-DlZ28Oz5.js +0 -268
- package/dist/sink-B1fZzIMf.d.ts +0 -104
- package/dist/sink-Bd9PSyfq.js +0 -141
- package/dist/skills-C5CbhhpG.js +0 -56
- package/dist/snapshot-Enxd0n-s.js +0 -975
- package/dist/sql-xdg5f4Fi.js +0 -27
- package/dist/src-BDwEZWrZ.js +0 -568
- package/dist/store-jOBYpiXC.d.ts +0 -36
- package/dist/stores-C0IMQrGI.d.ts +0 -52
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-config-Bj3iDH2I.js +0 -472
- package/dist/supabase-hook-gd3s8bxB.js +0 -2
- package/dist/supabase-s4o9s1O1.js +0 -83
- package/dist/thenable-okc2xDsj.js +0 -10
- package/dist/types-BnIEz1sU.d.ts +0 -48
- package/dist/types-Bvc4oWT6.d.ts +0 -9
- package/dist/types-CKNSyIf_.d.ts +0 -52
- package/dist/types-Cq_H8N_X.d.ts +0 -197
- package/dist/usage-B0YuTQRO.js +0 -42
- package/dist/usage-DorAJiU_.js +0 -2
- package/dist/vocabulary-DA8a8zif.d.ts +0 -56
- package/dist/watch-BwxLTYMZ.js +0 -2
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { T as Policy } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { r as PermDock } from "./permdock-D7eeLJER.js";
|
|
3
|
+
import { m as ApprovalStore } from "./types-CCpc2Dcv.js";
|
|
4
|
+
//#region src/server/evaluations.d.ts
|
|
5
|
+
/** AuthZEN 1.0 section 7.1.2.1 `options.evaluations_semantic` values. */
|
|
6
|
+
declare const EVALUATIONS_SEMANTICS: readonly ["execute_all", "deny_on_first_deny", "permit_on_first_permit"];
|
|
7
|
+
type EvaluationsSemantic = (typeof EVALUATIONS_SEMANTICS)[number];
|
|
8
|
+
/** The batch's `evaluations_semantic`: `execute_all` when absent, `undefined` for an unknown value. */
|
|
9
|
+
declare function evaluationsSemantic(body: Readonly<Record<string, unknown>>): EvaluationsSemantic | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Evaluates `items` under `semantic`: all at once for `execute_all`, else in
|
|
12
|
+
* order, stopping after the first deny or permit.
|
|
13
|
+
*/
|
|
14
|
+
declare function evaluateBatch<T extends {
|
|
15
|
+
readonly decision: boolean;
|
|
16
|
+
}>(items: readonly unknown[], semantic: EvaluationsSemantic, rowOf: (item: unknown) => Promise<T>): Promise<T[]>;
|
|
17
|
+
declare function evaluationsHandler(options: {
|
|
18
|
+
readonly policy: Policy;
|
|
19
|
+
readonly resolve?: (request: Request) => Promise<PermDock>;
|
|
20
|
+
readonly getPermDock?: (query?: {
|
|
21
|
+
readonly tenant?: string;
|
|
22
|
+
}) => Promise<PermDock>;
|
|
23
|
+
readonly store?: ApprovalStore;
|
|
24
|
+
readonly adapter?: string;
|
|
25
|
+
/** The most evaluations one POST may carry; a larger batch is a 413 before any instance is resolved. */
|
|
26
|
+
readonly maxEvaluations?: number;
|
|
27
|
+
}): {
|
|
28
|
+
readonly POST: (request: Request) => Promise<Response>;
|
|
29
|
+
readonly GET: (request: Request) => Promise<Response>;
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
export { evaluationsSemantic as a, evaluationsHandler as i, EvaluationsSemantic as n, evaluateBatch as r, EVALUATIONS_SEMANTICS as t };
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
2
|
-
import { t as PROBLEM_BASE } from "./validation-error-
|
|
3
|
-
import {
|
|
1
|
+
import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { t as PROBLEM_BASE } from "./validation-error-ZfUHbKvf.js";
|
|
3
|
+
import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
|
|
4
|
+
import { c as listPermissions, g as formerScopes, h as formerKeys } from "./permission-registry-Br4jSNVi.js";
|
|
5
|
+
import { h as secondsAt } from "./time-DkWjdL98.js";
|
|
4
6
|
import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
+
import { n as readBodyText } from "./body-text-QcXok_SI.js";
|
|
8
|
+
import { c as problemResponse, d as validationProblem, n as batchTooLarge } from "./problem-CTviyH5L.js";
|
|
9
|
+
import { i as readApprovalHeader, s as resumeDecision } from "./helpers-DTcZOzhF.js";
|
|
10
|
+
import { t as bodyTooLarge } from "./body-CH5of8Ne.js";
|
|
7
11
|
import { t as timeoutSignal } from "./timeout-D51niuQP.js";
|
|
8
|
-
import { n as permissionLookup, t as itemResourceData } from "./evaluation-items-CfCCejQd.js";
|
|
9
12
|
//#region src/core/decision.ts
|
|
10
13
|
/** The denial for a check that failed or named no declared permission. */
|
|
11
14
|
const NO_GRANT = Object.freeze({
|
|
@@ -17,12 +20,59 @@ const NO_GRANT = Object.freeze({
|
|
|
17
20
|
alternatives: Object.freeze([])
|
|
18
21
|
});
|
|
19
22
|
//#endregion
|
|
23
|
+
//#region src/server/evaluation-items.ts
|
|
24
|
+
function firstWins(map, name, leaf) {
|
|
25
|
+
if (!map.has(name)) map.set(name, leaf);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Indexes `tree` once. The lookup tries `action` as a permission key or
|
|
29
|
+
* scope, then `<resource.type>.<action>`, then the leaf with that resource
|
|
30
|
+
* and action; current names win over former ones and earlier leaves over
|
|
31
|
+
* later ones. Anything else is `undefined`, which the caller denies.
|
|
32
|
+
*/
|
|
33
|
+
function permissionLookup(tree) {
|
|
34
|
+
const current = /* @__PURE__ */ new Map();
|
|
35
|
+
const former = /* @__PURE__ */ new Map();
|
|
36
|
+
const byPair = /* @__PURE__ */ new Map();
|
|
37
|
+
for (const leaf of listPermissions(tree)) {
|
|
38
|
+
firstWins(current, leaf.key, leaf);
|
|
39
|
+
firstWins(current, leaf.scope, leaf);
|
|
40
|
+
for (const name of [...formerKeys(leaf), ...formerScopes(leaf)]) firstWins(former, name, leaf);
|
|
41
|
+
firstWins(byPair, `${leaf.resource}\u0000${leaf.action}`, leaf);
|
|
42
|
+
}
|
|
43
|
+
const named = (name) => current.get(name) ?? former.get(name);
|
|
44
|
+
return (action, resource) => {
|
|
45
|
+
if (action === void 0) return;
|
|
46
|
+
const byKey = named(action);
|
|
47
|
+
if (byKey !== void 0) return byKey;
|
|
48
|
+
const type = typeof resource?.type === "string" ? resource.type : void 0;
|
|
49
|
+
if (type === void 0) return;
|
|
50
|
+
return named(`${type}.${action}`) ?? byPair.get(`${type}\u0000${action}`);
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** AuthZEN's sentinel resource id for a collection: the type as a whole, no row. */
|
|
54
|
+
const COLLECTION_ID = "*";
|
|
55
|
+
/** A resource id as a row id: `undefined` for none, a non-scalar or the collection sentinel `*`. */
|
|
56
|
+
function wireResourceId(id) {
|
|
57
|
+
if (typeof id !== "string" && typeof id !== "number") return;
|
|
58
|
+
const text = String(id);
|
|
59
|
+
return text === COLLECTION_ID ? void 0 : text;
|
|
60
|
+
}
|
|
61
|
+
/** The row an item's resource describes: its `properties`, else `{ id }`, else none for `id: "*"`. */
|
|
62
|
+
function itemResourceData(resource) {
|
|
63
|
+
const properties = resource?.properties;
|
|
64
|
+
if (properties !== null && typeof properties === "object") return properties;
|
|
65
|
+
const id = wireResourceId(resource?.id);
|
|
66
|
+
return id === void 0 ? void 0 : { id };
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
20
69
|
//#region src/server/web-bot-auth.ts
|
|
21
70
|
/** Milliseconds a key directory fetch may take before the signature counts as unverifiable. */
|
|
22
71
|
const DIRECTORY_TIMEOUT_MS = 5e3;
|
|
23
72
|
const DEFAULT_MAX_AGE = 300;
|
|
24
73
|
const FUTURE_SKEW = 60;
|
|
25
74
|
const DIRECTORY_PATH = "/.well-known/http-message-signatures-directory";
|
|
75
|
+
const WEB_BOT_AUTH_TAG = "web-bot-auth";
|
|
26
76
|
var InvalidSignatureError = class extends Error {
|
|
27
77
|
name = "InvalidSignatureError";
|
|
28
78
|
response;
|
|
@@ -72,7 +122,18 @@ function discoverViaSignatureAgent(options) {
|
|
|
72
122
|
};
|
|
73
123
|
return { lookup };
|
|
74
124
|
}
|
|
75
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Verifies Web Bot Auth requests: an RFC 9421 signature tagged `web-bot-auth`
|
|
127
|
+
* that covers `@authority`, and `signature-agent` when the request sends
|
|
128
|
+
* `Signature-Agent` (draft-meunier-webbotauth-httpsig-protocol).
|
|
129
|
+
*/
|
|
130
|
+
function webBotAuthVerifier(options) {
|
|
131
|
+
return Object.freeze({
|
|
132
|
+
name: "web-bot-auth",
|
|
133
|
+
verify: (request) => verifySignature(request, options, true)
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
async function verifySignature(request, options, profile) {
|
|
76
137
|
if (options === void 0 || options.verify === false) return;
|
|
77
138
|
const signatureInput = request.headers.get("Signature-Input");
|
|
78
139
|
if (signatureInput === null) {
|
|
@@ -84,13 +145,15 @@ async function verifyWebBotAuth(request, options) {
|
|
|
84
145
|
if (parsed === void 0 || signatureHeader === null) throw reject("Signature-Input could not be parsed");
|
|
85
146
|
const signature = parseSignature(signatureHeader, parsed.label);
|
|
86
147
|
if (signature === void 0) throw reject("Signature could not be parsed");
|
|
87
|
-
const now = options.now?.()
|
|
148
|
+
const now = secondsAt(options.now?.());
|
|
88
149
|
const maxAge = options.maxAge ?? DEFAULT_MAX_AGE;
|
|
89
150
|
if (typeof parsed.created !== "number") throw reject("Signature-Input created is required");
|
|
90
151
|
if (parsed.created > now + FUTURE_SKEW) throw reject("Signature-Input created is in the future");
|
|
91
152
|
if (now - parsed.created > maxAge) throw reject("Signature-Input created is too old");
|
|
92
153
|
if (typeof parsed.expires === "number" && parsed.expires < now) throw reject("Signature-Input expires is in the past");
|
|
93
154
|
if (parsed.keyid === void 0) throw reject("Signature-Input keyid is required");
|
|
155
|
+
const violation = profile ? profileViolation(request, parsed) : void 0;
|
|
156
|
+
if (violation !== void 0) throw reject(violation);
|
|
94
157
|
const agent = parseSignatureAgent(request.headers.get("Signature-Agent"), parsed.label);
|
|
95
158
|
const lookup = typeof options.keys === "function" ? options.keys : options.keys.lookup;
|
|
96
159
|
let key;
|
|
@@ -114,6 +177,11 @@ async function verifyWebBotAuth(request, options) {
|
|
|
114
177
|
kind: "web-bot-auth"
|
|
115
178
|
});
|
|
116
179
|
}
|
|
180
|
+
function profileViolation(request, parsed) {
|
|
181
|
+
if (parsed.tag !== WEB_BOT_AUTH_TAG) return `Signature-Input tag must be "${WEB_BOT_AUTH_TAG}"`;
|
|
182
|
+
if (!parsed.components.includes("@authority")) return "Signature-Input must cover @authority";
|
|
183
|
+
if (request.headers.has("Signature-Agent") && !parsed.components.includes("signature-agent")) return "Signature-Input must cover signature-agent";
|
|
184
|
+
}
|
|
117
185
|
function reject(detail) {
|
|
118
186
|
return new InvalidSignatureError(invalidSignatureProblem(detail));
|
|
119
187
|
}
|
|
@@ -129,6 +197,7 @@ function parseSignatureInput(header) {
|
|
|
129
197
|
expires: inner.expires,
|
|
130
198
|
keyid: inner.keyid,
|
|
131
199
|
alg: inner.alg,
|
|
200
|
+
tag: inner.tag,
|
|
132
201
|
innerListAndParams: member.value.trim()
|
|
133
202
|
});
|
|
134
203
|
}
|
|
@@ -175,7 +244,8 @@ function parseInnerListAndParams(value) {
|
|
|
175
244
|
created: asUnix(params["created"]),
|
|
176
245
|
expires: asUnix(params["expires"]),
|
|
177
246
|
keyid: typeof params["keyid"] === "string" ? params["keyid"] : void 0,
|
|
178
|
-
alg: typeof params["alg"] === "string" ? params["alg"] : void 0
|
|
247
|
+
alg: typeof params["alg"] === "string" ? params["alg"] : void 0,
|
|
248
|
+
tag: typeof params["tag"] === "string" ? params["tag"] : void 0
|
|
179
249
|
});
|
|
180
250
|
}
|
|
181
251
|
function parseQuotedList(inner) {
|
|
@@ -329,10 +399,83 @@ function decodeSfBytes(value) {
|
|
|
329
399
|
}
|
|
330
400
|
//#endregion
|
|
331
401
|
//#region src/server/evaluations.ts
|
|
402
|
+
/** AuthZEN 1.0 section 7.1.2.1 `options.evaluations_semantic` values. */
|
|
403
|
+
const EVALUATIONS_SEMANTICS = [
|
|
404
|
+
"execute_all",
|
|
405
|
+
"deny_on_first_deny",
|
|
406
|
+
"permit_on_first_permit"
|
|
407
|
+
];
|
|
408
|
+
/** The batch's `evaluations_semantic`: `execute_all` when absent, `undefined` for an unknown value. */
|
|
409
|
+
function evaluationsSemantic(body) {
|
|
410
|
+
const options = body["options"];
|
|
411
|
+
const value = isRecord(options) ? options["evaluations_semantic"] : void 0;
|
|
412
|
+
if (value === void 0) return "execute_all";
|
|
413
|
+
return EVALUATIONS_SEMANTICS.find((semantic) => semantic === value);
|
|
414
|
+
}
|
|
415
|
+
function unknownSemanticProblem() {
|
|
416
|
+
return validationProblem(`options.evaluations_semantic must be one of ${EVALUATIONS_SEMANTICS.join(", ")}`);
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Evaluates `items` under `semantic`: all at once for `execute_all`, else in
|
|
420
|
+
* order, stopping after the first deny or permit.
|
|
421
|
+
*/
|
|
422
|
+
async function evaluateBatch(items, semantic, rowOf) {
|
|
423
|
+
if (semantic === "execute_all") return Promise.all(items.map(rowOf));
|
|
424
|
+
const stopOn = semantic === "permit_on_first_permit";
|
|
425
|
+
const rows = [];
|
|
426
|
+
for (const item of items) {
|
|
427
|
+
const row = await rowOf(item);
|
|
428
|
+
rows.push(row);
|
|
429
|
+
if (row.decision === stopOn) break;
|
|
430
|
+
}
|
|
431
|
+
return rows;
|
|
432
|
+
}
|
|
433
|
+
/** AuthZEN 1.0 section 10.1.1: a response echoes the request's `X-Request-ID`. */
|
|
434
|
+
function withRequestId(request, response) {
|
|
435
|
+
const id = request.headers.get("x-request-id");
|
|
436
|
+
if (id === null || id === "") return response;
|
|
437
|
+
const headers = new Headers(response.headers);
|
|
438
|
+
headers.set("X-Request-ID", id);
|
|
439
|
+
return new Response(response.body, {
|
|
440
|
+
status: response.status,
|
|
441
|
+
statusText: response.statusText,
|
|
442
|
+
headers
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
/** AuthZEN 1.0 section 9.1 PDP metadata for the PDP at `pdp`. */
|
|
446
|
+
function authzenMetadata(pdp, search = {}) {
|
|
447
|
+
return compact({
|
|
448
|
+
policy_decision_point: pdp,
|
|
449
|
+
access_evaluation_endpoint: `${pdp}/access/v1/evaluation`,
|
|
450
|
+
access_evaluations_endpoint: `${pdp}/access/v1/evaluations`,
|
|
451
|
+
search_subject_endpoint: search.subject === true ? `${pdp}/access/v1/search/subject` : void 0,
|
|
452
|
+
search_resource_endpoint: search.resource === true ? `${pdp}/access/v1/search/resource` : void 0,
|
|
453
|
+
search_action_endpoint: search.action === true ? `${pdp}/access/v1/search/action` : void 0
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* `reason_admin` and `reason_user` for a decision that is not granted, from
|
|
458
|
+
* the denial roles and reasons the context already carries. The user reason
|
|
459
|
+
* names no role, grant or subject.
|
|
460
|
+
*/
|
|
461
|
+
function evaluationReasons(decision, permission) {
|
|
462
|
+
switch (decision.outcome) {
|
|
463
|
+
case "granted": return {};
|
|
464
|
+
case "denied": return {
|
|
465
|
+
reason_admin: { en: `${permission} denied: ${decision.denials.map((denial) => `${denial.role ?? "none"} (${denial.reason})`).join(", ")}.` },
|
|
466
|
+
reason_user: { en: `${permission} is not permitted.` }
|
|
467
|
+
};
|
|
468
|
+
case "approval-required": return {
|
|
469
|
+
reason_admin: { en: `${permission} requires human approval (${decision.reason}).` },
|
|
470
|
+
reason_user: { en: `${permission} requires approval.` }
|
|
471
|
+
};
|
|
472
|
+
default: return decision;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
332
475
|
function permissionOf(lookup, item) {
|
|
333
476
|
return lookup(typeof item.action?.name === "string" ? item.action.name : void 0, item.resource);
|
|
334
477
|
}
|
|
335
|
-
function evaluationRow(decision) {
|
|
478
|
+
function evaluationRow(decision, permission) {
|
|
336
479
|
switch (decision.outcome) {
|
|
337
480
|
case "granted": return {
|
|
338
481
|
decision: true,
|
|
@@ -348,14 +491,16 @@ function evaluationRow(decision) {
|
|
|
348
491
|
permdock: {
|
|
349
492
|
...decision,
|
|
350
493
|
denials: wireDenials(decision.denials)
|
|
351
|
-
}
|
|
494
|
+
},
|
|
495
|
+
...evaluationReasons(decision, permission)
|
|
352
496
|
}
|
|
353
497
|
};
|
|
354
498
|
case "approval-required": return {
|
|
355
499
|
decision: false,
|
|
356
500
|
context: {
|
|
357
501
|
outcome: "approval-required",
|
|
358
|
-
permdock: decision
|
|
502
|
+
permdock: decision,
|
|
503
|
+
...evaluationReasons(decision, permission)
|
|
359
504
|
}
|
|
360
505
|
};
|
|
361
506
|
default: return decision;
|
|
@@ -374,11 +519,14 @@ function applyApprovalResume(decision, permission, permdock, store, request, res
|
|
|
374
519
|
}
|
|
375
520
|
function evaluateOne(lookup, permdock, item, store, header, adapter) {
|
|
376
521
|
const permission = permissionOf(lookup, item);
|
|
377
|
-
if (permission === void 0) return Promise.resolve(
|
|
522
|
+
if (permission === void 0) return Promise.resolve({
|
|
523
|
+
decision: NO_GRANT,
|
|
524
|
+
permission: typeof item.action?.name === "string" ? item.action.name : "unknown"
|
|
525
|
+
});
|
|
378
526
|
const data = itemResourceData(item.resource);
|
|
379
527
|
const decide = permdock.decide;
|
|
380
528
|
const decision = decide(permission, data, compact({
|
|
381
|
-
|
|
529
|
+
call: "endpoint",
|
|
382
530
|
adapter,
|
|
383
531
|
trusted: false,
|
|
384
532
|
boundary: "decision-endpoint"
|
|
@@ -388,11 +536,14 @@ function evaluateOne(lookup, permdock, item, store, header, adapter) {
|
|
|
388
536
|
permission,
|
|
389
537
|
subject: permdock.subject,
|
|
390
538
|
store,
|
|
391
|
-
resource: resourceRef(permission, data, item.resource?.id),
|
|
539
|
+
resource: resourceRef(permission, data, wireResourceId(item.resource?.id)),
|
|
392
540
|
adapter,
|
|
393
541
|
token: header,
|
|
394
542
|
consume: false
|
|
395
|
-
})
|
|
543
|
+
}).then((resumed) => ({
|
|
544
|
+
decision: resumed,
|
|
545
|
+
permission: permission.key
|
|
546
|
+
}));
|
|
396
547
|
}
|
|
397
548
|
async function resolvePermdock(options, request, tenant) {
|
|
398
549
|
if (options.resolve !== void 0) {
|
|
@@ -402,14 +553,16 @@ async function resolvePermdock(options, request, tenant) {
|
|
|
402
553
|
if (options.getPermDock !== void 0) return options.getPermDock(tenant === void 0 ? void 0 : { tenant });
|
|
403
554
|
throw new TypeError("evaluations handler needs resolve or getPermDock");
|
|
404
555
|
}
|
|
405
|
-
function
|
|
556
|
+
function evaluationsHandler(options) {
|
|
406
557
|
const adapter = options.adapter ?? "server";
|
|
407
558
|
const lookup = permissionLookup(options.policy.permissions);
|
|
408
559
|
const maxEvaluations = options.maxEvaluations ?? 256;
|
|
409
560
|
const POST = async (request) => {
|
|
561
|
+
const read = await readBodyText(request);
|
|
562
|
+
if (!read.ok) return read.cause === "too-large" ? bodyTooLarge() : validationProblem("evaluations body was not valid JSON");
|
|
410
563
|
let body;
|
|
411
564
|
try {
|
|
412
|
-
body =
|
|
565
|
+
body = JSON.parse(read.text);
|
|
413
566
|
} catch {
|
|
414
567
|
return validationProblem("evaluations body was not valid JSON");
|
|
415
568
|
}
|
|
@@ -418,6 +571,8 @@ function createEvaluationsHandler(options) {
|
|
|
418
571
|
if (evaluations === void 0) return validationProblem("evaluations array is required");
|
|
419
572
|
if (!Array.isArray(evaluations)) return validationProblem("evaluations must be an array");
|
|
420
573
|
if (evaluations.length > maxEvaluations) return batchTooLarge(maxEvaluations);
|
|
574
|
+
const semantic = evaluationsSemantic(body);
|
|
575
|
+
if (semantic === void 0) return unknownSemanticProblem();
|
|
421
576
|
const header = readApprovalHeader(request.headers);
|
|
422
577
|
let permdock;
|
|
423
578
|
try {
|
|
@@ -426,21 +581,15 @@ function createEvaluationsHandler(options) {
|
|
|
426
581
|
if (error instanceof InvalidSignatureError) return error.response;
|
|
427
582
|
throw error;
|
|
428
583
|
}
|
|
429
|
-
const rows = await
|
|
430
|
-
|
|
431
|
-
|
|
584
|
+
const rows = await evaluateBatch(evaluations, semantic, async (item) => {
|
|
585
|
+
const evaluated = await evaluateOne(lookup, permdock, item !== null && typeof item === "object" ? item : {}, options.store, header, adapter);
|
|
586
|
+
return evaluationRow(evaluated.decision, evaluated.permission);
|
|
587
|
+
});
|
|
432
588
|
return Response.json({ evaluations: rows });
|
|
433
589
|
};
|
|
434
590
|
const GET = async (request) => {
|
|
435
591
|
const url = new URL(request.url);
|
|
436
|
-
if (url.pathname.includes("authzen-configuration"))
|
|
437
|
-
const origin = url.origin;
|
|
438
|
-
return Response.json({
|
|
439
|
-
policy_decision_point: origin,
|
|
440
|
-
access_evaluation_endpoint: `${origin}/access/v1/evaluation`,
|
|
441
|
-
access_evaluations_endpoint: `${origin}/access/v1/evaluations`
|
|
442
|
-
});
|
|
443
|
-
}
|
|
592
|
+
if (url.pathname.includes("authzen-configuration")) return Response.json(authzenMetadata(url.origin));
|
|
444
593
|
const tenant = url.searchParams.get("tenant") ?? void 0;
|
|
445
594
|
let permdock;
|
|
446
595
|
try {
|
|
@@ -453,9 +602,9 @@ function createEvaluationsHandler(options) {
|
|
|
453
602
|
return Response.json(await Promise.resolve(snapshot));
|
|
454
603
|
};
|
|
455
604
|
return {
|
|
456
|
-
POST,
|
|
457
|
-
GET
|
|
605
|
+
POST: async (request) => withRequestId(request, await POST(request)),
|
|
606
|
+
GET: async (request) => withRequestId(request, await GET(request))
|
|
458
607
|
};
|
|
459
608
|
}
|
|
460
609
|
//#endregion
|
|
461
|
-
export {
|
|
610
|
+
export { wireResourceId as _, evaluationReasons as a, unknownSemanticProblem as c, discoverViaSignatureAgent as d, invalidSignatureProblem as f, permissionLookup as g, itemResourceData as h, evaluateBatch as i, withRequestId as l, webBotAuthVerifier as m, applyApprovalResume as n, evaluationsHandler as o, invalidSignatureResponse as p, authzenMetadata as r, evaluationsSemantic as s, EVALUATIONS_SEMANTICS as t, InvalidSignatureError as u, NO_GRANT as v };
|
package/dist/eve/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { t as
|
|
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 { u as ApprovalRequest } from "../types-CCpc2Dcv.js";
|
|
5
|
+
import { o as AgentAdapterOptions, t as AgentPermDock } from "../create-BDS7wc3y.js";
|
|
6
6
|
//#region src/eve/create.d.ts
|
|
7
7
|
/** Structural `SessionAuthContext` from `eve`. */
|
|
8
8
|
type EvePrincipal = {
|
|
@@ -49,14 +49,10 @@ type EveContext = Pick<EveApprovalContext, "session" | "callId">;
|
|
|
49
49
|
type EveApprovers = {
|
|
50
50
|
readonly roles: readonly string[];
|
|
51
51
|
} | ((responder: EvePrincipal, request: ApprovalRequest) => boolean);
|
|
52
|
-
type EvePermDockOptions<TUser = unknown> =
|
|
52
|
+
type EvePermDockOptions<TUser = unknown> = Omit<AgentAdapterOptions<EveContext, TUser>, "subject"> & {
|
|
53
|
+
/** Defaults to `subjectFromEve`: the session initiator's id and `roles` attribute. */
|
|
53
54
|
readonly subject?: (context: EveContext) => TUser | Promise<TUser>;
|
|
54
|
-
readonly actor?: (context: EveContext) => unknown;
|
|
55
|
-
readonly delegation?: (context: EveContext) => Delegation | undefined | Promise<Delegation | undefined>;
|
|
56
|
-
readonly tenant?: string | ((context: EveContext) => string | undefined | Promise<string | undefined>);
|
|
57
|
-
readonly tools: ToolMap;
|
|
58
55
|
readonly approvers?: EveApprovers;
|
|
59
|
-
readonly store?: ApprovalStore;
|
|
60
56
|
};
|
|
61
57
|
type EveRequestResult = "not-applicable" | "user-approval" | {
|
|
62
58
|
readonly type: "denied";
|
|
@@ -73,14 +69,14 @@ type EveApprovalPair = {
|
|
|
73
69
|
readonly request: (ctx: EveApprovalContext) => Promise<EveRequestResult>;
|
|
74
70
|
readonly response: (ctx: EveResponseContext) => Promise<EveResponseResult>;
|
|
75
71
|
};
|
|
76
|
-
type EvePermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
72
|
+
type EvePermDock<V extends PolicyVocabulary = PolicyVocabulary> = AgentPermDock<EveContext, V> & {
|
|
77
73
|
readonly approval: EveApprovalPair;
|
|
78
74
|
readonly approvalFor: (permission: Permission, data?: (input: unknown) => unknown) => EveApprovalPair;
|
|
79
|
-
readonly
|
|
75
|
+
readonly getPermDock: (ctx: EveContext) => Promise<PermDock<V>>;
|
|
80
76
|
};
|
|
81
77
|
export declare function rolesOf(principal: EvePrincipal | null | undefined): string[];
|
|
82
|
-
export declare function
|
|
83
|
-
export declare function
|
|
84
|
-
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>,
|
|
78
|
+
export declare function subjectFromEve(context: EveContext): unknown;
|
|
79
|
+
export declare function actorFromEve(context: EveContext): unknown;
|
|
80
|
+
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: EvePermDockOptions<TUser>): EvePermDock<V>;
|
|
85
81
|
//#endregion
|
|
86
82
|
export type { EveApprovalContext, EveApprovalPair, EveApprovers, EveContext, EvePermDock, EvePermDockOptions, EvePrincipal, EveRequestResult, EveResponseContext, EveResponseResult };
|
package/dist/eve/index.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { t as compact } from "../compact-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { o as resolveApproval } from "../helpers-
|
|
5
|
-
import { t as
|
|
6
|
-
import { n as createAgentKernel } from "../kernel-_RRHmnMY.js";
|
|
1
|
+
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
+
import { c as withApp } from "../permdock-B9JxkBwC.js";
|
|
3
|
+
import { c as isApprovalError } from "../types-DqzsnlSA.js";
|
|
4
|
+
import { o as resolveApproval } from "../helpers-DTcZOzhF.js";
|
|
5
|
+
import { t as agentRuntime } from "../create-C3b4B5eF.js";
|
|
7
6
|
import { t as boundedMap } from "../lru-8q4WZjBV.js";
|
|
8
7
|
//#region src/eve/create.ts
|
|
9
8
|
const TOKENS_PER_PROCESS = 1e3;
|
|
@@ -13,7 +12,7 @@ function rolesOf(principal) {
|
|
|
13
12
|
if (!Array.isArray(roles)) return [];
|
|
14
13
|
return roles.filter((role) => typeof role === "string");
|
|
15
14
|
}
|
|
16
|
-
function
|
|
15
|
+
function subjectFromEve(context) {
|
|
17
16
|
const initiator = context.session?.auth?.initiator;
|
|
18
17
|
if (initiator === void 0 || initiator === null) return null;
|
|
19
18
|
return {
|
|
@@ -21,7 +20,7 @@ function subjectFromSession(context) {
|
|
|
21
20
|
roles: rolesOf(initiator)
|
|
22
21
|
};
|
|
23
22
|
}
|
|
24
|
-
function
|
|
23
|
+
function actorFromEve(context) {
|
|
25
24
|
const auth = context.session?.auth;
|
|
26
25
|
const initiator = auth?.initiator;
|
|
27
26
|
const current = auth?.current;
|
|
@@ -51,21 +50,15 @@ function mayApprove(approvers, responder, request) {
|
|
|
51
50
|
function callKey(sessionId, callId) {
|
|
52
51
|
return JSON.stringify([sessionId ?? null, callId]);
|
|
53
52
|
}
|
|
54
|
-
function createPermDock(policy,
|
|
55
|
-
const
|
|
53
|
+
function createPermDock(policy, given) {
|
|
54
|
+
const options = withApp(policy, given);
|
|
55
|
+
const store = options.store;
|
|
56
56
|
const tokensByCall = boundedMap(TOKENS_PER_PROCESS);
|
|
57
|
-
const kernel =
|
|
58
|
-
...
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
...instanceOptions(options),
|
|
63
|
-
subject: options.subject ?? subjectFromSession,
|
|
64
|
-
actor: options.actor ?? actorFromSession,
|
|
65
|
-
tools: options.tools,
|
|
66
|
-
store,
|
|
67
|
-
adapter: "eve"
|
|
68
|
-
});
|
|
57
|
+
const { agent, kernel } = agentRuntime(policy, {
|
|
58
|
+
...options,
|
|
59
|
+
subject: options.subject ?? subjectFromEve,
|
|
60
|
+
actor: options.actor ?? actorFromEve
|
|
61
|
+
}, "eve");
|
|
69
62
|
const approverOf = async (responder, sessionId) => {
|
|
70
63
|
try {
|
|
71
64
|
return (await kernel.instance({ session: {
|
|
@@ -82,6 +75,7 @@ function createPermDock(policy, options) {
|
|
|
82
75
|
const pairFor = (bindingFor) => {
|
|
83
76
|
const request = async (ctx) => {
|
|
84
77
|
const binding = bindingFor(ctx.toolName);
|
|
78
|
+
if (binding === void 0 && options.unmapped === "allow") return "not-applicable";
|
|
85
79
|
const verdict = binding === void 0 ? await kernel.decideTool(ctx.toolName, ctx.toolInput, ctx) : await kernel.evaluate(binding, ctx.toolName, ctx.toolInput, ctx, { denyPending: true });
|
|
86
80
|
if (verdict.outcome === "approval-required" && ctx.callId !== void 0) tokensByCall.set(callKey(ctx.session?.id, ctx.callId), verdict.token);
|
|
87
81
|
return mapVerdict(verdict);
|
|
@@ -105,7 +99,7 @@ function createPermDock(policy, options) {
|
|
|
105
99
|
};
|
|
106
100
|
const response = async (ctx) => {
|
|
107
101
|
const token = await tokenOf(ctx);
|
|
108
|
-
if (token === void 0) return {
|
|
102
|
+
if (token === void 0 || store === void 0) return {
|
|
109
103
|
status: "rejected",
|
|
110
104
|
reason: "approval-not-found"
|
|
111
105
|
};
|
|
@@ -158,7 +152,7 @@ function createPermDock(policy, options) {
|
|
|
158
152
|
response
|
|
159
153
|
};
|
|
160
154
|
};
|
|
161
|
-
const approval = pairFor((toolName) => Object.hasOwn(options.
|
|
155
|
+
const approval = pairFor((toolName) => Object.hasOwn(options.operations, toolName) ? options.operations[toolName] : void 0);
|
|
162
156
|
const approvalFor = (permission, data) => {
|
|
163
157
|
const binding = compact({
|
|
164
158
|
permission,
|
|
@@ -166,11 +160,11 @@ function createPermDock(policy, options) {
|
|
|
166
160
|
});
|
|
167
161
|
return pairFor(() => binding);
|
|
168
162
|
};
|
|
169
|
-
return {
|
|
163
|
+
return Object.freeze({
|
|
164
|
+
...agent,
|
|
170
165
|
approval,
|
|
171
|
-
approvalFor
|
|
172
|
-
|
|
173
|
-
};
|
|
166
|
+
approvalFor
|
|
167
|
+
});
|
|
174
168
|
}
|
|
175
169
|
//#endregion
|
|
176
|
-
export {
|
|
170
|
+
export { actorFromEve, createPermDock, rolesOf, subjectFromEve };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { l as isRfc3339, u as isoAt } from "./time-DkWjdL98.js";
|
|
2
|
+
//#region src/core/event-time.ts
|
|
3
|
+
const MAX_TIME_VALUE = 864e13;
|
|
4
|
+
/**
|
|
5
|
+
* An event time as RFC 3339, or `undefined` when there is none or it is not a
|
|
6
|
+
* time: NumericDate seconds are converted and an RFC 3339 string passes through.
|
|
7
|
+
* Never throws, so a decision event never fails on a malformed expiry.
|
|
8
|
+
*/
|
|
9
|
+
function eventInstant(value) {
|
|
10
|
+
if (typeof value === "string") return isRfc3339(value) ? value : void 0;
|
|
11
|
+
if (typeof value !== "number") return;
|
|
12
|
+
const millis = value * 1e3;
|
|
13
|
+
return Math.abs(millis) <= MAX_TIME_VALUE ? isoAt(millis) : void 0;
|
|
14
|
+
}
|
|
15
|
+
/** `eventInstant` for a builder input, where a malformed time is the caller's error. */
|
|
16
|
+
function requireEventInstant(value, field) {
|
|
17
|
+
if (value === void 0) return;
|
|
18
|
+
const instant = eventInstant(value);
|
|
19
|
+
if (instant === void 0) throw new RangeError(`PermDock: ${field} is not an RFC 3339 instant`);
|
|
20
|
+
return instant;
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { requireEventInstant as n, eventInstant as t };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { c as instantOf } from "./time-DkWjdL98.js";
|
|
2
|
+
//#region src/core/ids.ts
|
|
3
|
+
/**
|
|
4
|
+
* The canonical text of a scope or object id: a non-empty string as is, a
|
|
5
|
+
* finite number or a bigint as its decimal text (a `bigint` key column read
|
|
6
|
+
* through supabase-js arrives as a number), anything else none.
|
|
7
|
+
*/
|
|
8
|
+
function idText(value) {
|
|
9
|
+
if (typeof value === "string") return value === "" ? void 0 : value;
|
|
10
|
+
if (typeof value === "number" && Number.isFinite(value)) return String(value);
|
|
11
|
+
if (typeof value === "bigint") return String(value);
|
|
12
|
+
}
|
|
13
|
+
const MAX_ID = 256;
|
|
14
|
+
const MAX_ENTRIES = 64;
|
|
15
|
+
/** A wire id: a non-empty string of at most 256 characters. */
|
|
16
|
+
function isId(value) {
|
|
17
|
+
return typeof value === "string" && value.length > 0 && value.length <= MAX_ID;
|
|
18
|
+
}
|
|
19
|
+
/** A non-empty list of at most 64 wire ids, deduplicated, else `undefined`. */
|
|
20
|
+
function idList(value) {
|
|
21
|
+
if (!Array.isArray(value) || value.length === 0 || value.length > MAX_ENTRIES || !value.every(isId)) return;
|
|
22
|
+
return [...new Set(value)];
|
|
23
|
+
}
|
|
24
|
+
/** Whether two ids are the same id once both are read as text; a missing id matches nothing. */
|
|
25
|
+
function sameId(left, right) {
|
|
26
|
+
const text = idText(left);
|
|
27
|
+
return text !== void 0 && text === idText(right);
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/core/expiry.ts
|
|
31
|
+
/**
|
|
32
|
+
* `expiresAt` is Unix seconds; a membership with none never expires. One that
|
|
33
|
+
* is not a number below infinity (`NaN`) has already expired: fail closed.
|
|
34
|
+
*/
|
|
35
|
+
function expiredAt(item, now) {
|
|
36
|
+
return item.expiresAt !== void 0 && !(item.expiresAt > now);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Unix seconds of a stored expiry: finite Unix seconds, an RFC 3339 string
|
|
40
|
+
* (the Postgres `timestamptz` JSON form), a `Date` or an `Instant`.
|
|
41
|
+
* `undefined` for anything else, which the caller treats as already expired.
|
|
42
|
+
*/
|
|
43
|
+
function expirySeconds(value) {
|
|
44
|
+
if (typeof value === "number") return Number.isFinite(value) ? value : void 0;
|
|
45
|
+
if (value instanceof Date) {
|
|
46
|
+
const millis = value.getTime();
|
|
47
|
+
return Number.isFinite(millis) ? Math.floor(millis / 1e3) : void 0;
|
|
48
|
+
}
|
|
49
|
+
return instantOf(value);
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { isId as a, idText as i, expirySeconds as n, sameId as o, idList as r, expiredAt as t };
|
package/dist/express/index.d.ts
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
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 { f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-BLd4MnBX.js";
|
|
5
|
+
import { t as ServerAdapterOptions } from "../bind--9EFVYWF.js";
|
|
6
|
+
import { i as toRequest, r as sendResponse } from "../http-B_LphE5Y.js";
|
|
6
7
|
import { ErrorRequestHandler, Request, RequestHandler, Response, Router } from "express";
|
|
7
8
|
//#region src/express/create.d.ts
|
|
8
9
|
type ExpressPermDockOptions<TUser = unknown> = ServerAdapterOptions<Request, TUser>;
|
|
9
|
-
type
|
|
10
|
+
type ExpressPermDockRequest<T = unknown, V extends PolicyVocabulary = PolicyVocabulary> = Request & {
|
|
10
11
|
permdock: PermDock<V>;
|
|
11
12
|
permdockData?: T;
|
|
12
13
|
};
|
|
13
14
|
type ExpressPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
14
|
-
|
|
15
|
-
readonly
|
|
15
|
+
/** The `PermDock` for one request, for code the middleware does not run before. */
|
|
16
|
+
readonly getPermDock: (req: Request) => Promise<PermDock<V>>;
|
|
17
|
+
readonly middleware: () => RequestHandler;
|
|
18
|
+
readonly protect: (permission: Permission | null, data?: (req: Request) => unknown, protectOptions?: ProtectOptions) => RequestHandler;
|
|
16
19
|
readonly errorHandler: () => ErrorRequestHandler;
|
|
17
20
|
readonly permdockHandler: () => Router;
|
|
18
|
-
readonly withPermDock: (fn: (req:
|
|
21
|
+
readonly withPermDock: (fn: (req: ExpressPermDockRequest<unknown, V>, res: Response) => unknown) => RequestHandler;
|
|
19
22
|
readonly openapi: OpenApiHooks;
|
|
20
23
|
};
|
|
21
24
|
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: ExpressPermDockOptions<TUser>): ExpressPermDock<V>;
|
|
22
25
|
//#endregion
|
|
23
|
-
export { type ExpressPermDock, type ExpressPermDockOptions,
|
|
26
|
+
export { type ExpressPermDock, type ExpressPermDockOptions, type ExpressPermDockRequest, InvalidSignatureError, discoverViaSignatureAgent, sendResponse, toRequest, webBotAuthVerifier };
|