permdock 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -35
- package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
- package/dist/a2a/index.d.ts +6 -6
- package/dist/a2a/index.js +14 -17
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-DCYe60Pi.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -35
- package/dist/ai-sdk/index.js +37 -23
- package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-DvSSPQJX.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-p1PGoVjb.js +995 -0
- package/dist/arazzo-41WuzHou.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.js} +20 -14
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-DabClFLQ.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +94 -79
- package/dist/automation-BNM3TtDo.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +9 -8
- package/dist/better-supabase/index.d.ts +357 -30
- package/dist/better-supabase/index.js +936 -194
- package/dist/{bind-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
- package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/{build-instance-DIIV9DbC.js → build-instance-Bu_eDqYw.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-Drg-1YhL.d.ts} +44 -25
- package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/catalog-BoWglDPI.js +1 -0
- package/dist/catalog-DZVbrF-z.js +52 -0
- package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.js} +45 -23
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +24 -27
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +9 -14
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +19 -5
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +239 -340
- package/dist/cloud-ytQ3uviA.js +87 -0
- package/dist/codemod-5mpSpnUY.js +37 -0
- package/dist/codemod-ua2hHy7w.js +2084 -0
- package/dist/collect-Ci6akVwH.js +55 -0
- package/dist/collect-D7eQDffE.js +1 -0
- package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
- package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/completion-BTFrHZhX.js +143 -0
- package/dist/config-Bj2Ixq3d.js +26 -0
- package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- package/dist/create-B30OMUOJ.d.ts +107 -0
- package/dist/create-CBMmFie-.d.ts +138 -0
- package/dist/create-CGm28gyI.js +130 -0
- package/dist/create-CQWIpUG-.js +403 -0
- package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
- package/dist/create-D_NmPOdH.d.ts +110 -0
- package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-j6-rc37o.js +286 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/{denied-text-DfRk15uw.d.ts → denied-text-CiFQNuMV.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/{diff-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
- package/dist/diff-CmuSD3vc.js +37 -0
- package/dist/doctor-3ZqNHX_G.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.js} +245 -50
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +2 -2
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +13 -12
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
- package/dist/evaluate-CNClBvcj.js +1785 -0
- package/dist/evaluations-C_1vdSZc.d.ts +32 -0
- package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.js} +145 -34
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +22 -28
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +12 -11
- package/dist/fastify/index.d.ts +25 -22
- package/dist/fastify/index.js +13 -12
- package/dist/fetch-adapter-DD_gfmrC.js +120 -0
- package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
- package/dist/fields-OYG_JR78.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-CTCMsFZk.js} +55 -52
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.js} +5 -4
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-C9YmyBIa.js → helpers-CBYVMjwh.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-B46-5LYE.js +315 -0
- package/dist/hosted-BPk51-kX.d.ts +78 -0
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
- package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
- package/dist/{import-BFIlhetD.js → import-wyqXUyjm.js} +190 -53
- package/dist/index-B8YjkEZ4.d.ts +210 -0
- package/dist/index-C-6Letxg.d.ts +431 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
- package/dist/index-Cp_ilKi1.d.ts +91 -0
- package/dist/index-CueFnxQc.d.ts +110 -0
- package/dist/index-DuWxc5dt.d.ts +909 -0
- package/dist/index.d.ts +19 -15
- package/dist/index.js +31 -21
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-plkrsAog.d.ts → instance-options-BsVpyGIk.d.ts} +2 -2
- package/dist/instance-snapshot-BOEhcqIF.js +601 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +156 -135
- package/dist/{kernel-CB3LrIJM.js → kernel-D0NVb1cK.js} +52 -24
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +2 -2
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-dvL2XEe1.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
- package/dist/{map-error-BE27PYkE.js → map-error-Dr70oA_3.js} +3 -3
- package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
- package/dist/mcp/index.d.ts +22 -12
- package/dist/mcp/index.js +57 -39
- package/dist/{migrate-BwlB5-Wk.js → migrate-CIq4-E9F.js} +53 -14
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +15 -14
- package/dist/next/index.d.ts +18 -21
- package/dist/next/index.js +13 -11
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +17 -24
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
- package/dist/openapi-C4dDTVEd.js +138 -0
- package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-X0VM7F3m.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +20 -15
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +30 -7
- package/dist/output-1im__-08.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
- package/dist/{permission-keys-B26jeyUv.js → ownership-DqaJNJPn.js} +1045 -153
- package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
- package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
- package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
- package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +45 -26
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-BrAscV28.js +868 -0
- package/dist/permdock-SV8ZINYT.d.ts +502 -0
- package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-CCJ6lmxB.js → permissions-BPxlwVhN.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
- package/dist/policies-DP2nqRoF.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
- package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
- package/dist/postgrest-CEgRbefE.d.ts +100 -0
- package/dist/postgrest-DAjUkF9w.js +575 -0
- package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
- package/dist/powersync-DISt6SUe.js +62 -0
- package/dist/powersync-MMJ2mI2q.js +1 -0
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +2 -2
- package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
- package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-B45V5d2b.d.ts} +1 -1
- package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/{protected-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
- package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
- package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
- package/dist/pull-CvpINcMK.js +1 -0
- package/dist/pull-jEwbf80J.js +256 -0
- package/dist/push-BD4f15co.js +116 -0
- package/dist/pushed-policy-CqtxkV4G.js +238 -0
- package/dist/pushed-policy-DCW91KQU.d.ts +57 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -72
- package/dist/react-native/index.js +29 -25
- package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
- package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-COpmZUfx.d.ts → replay-Bkm-Ne4l.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.js} +3 -3
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
- package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BAqP4q66.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
- package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
- package/dist/run-CUKuz0A8.js +723 -0
- package/dist/run-DDwUaJDU.js +1 -0
- package/dist/run-ticket-DocwaTKn.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DtaA4JuW.js → saas-BCXRuXca.js} +16 -14
- package/dist/scan-qvOe0hS3.js +29 -0
- package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
- package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
- package/dist/server/index.d.ts +12 -143
- package/dist/server/index.js +12 -9
- package/dist/server-C3WXAHZj.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
- package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-4-eQIRWf.d.ts +225 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-B7DkYg6g.js +269 -0
- package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-PXI-vGpY.d.ts} +7 -5
- package/dist/solid/index.d.ts +11 -12
- package/dist/solid/index.js +7 -7
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-Dljy06zL.d.ts → sources-Xc4zkszI.d.ts} +7 -13
- package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
- package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
- package/dist/src-Cu2m75uo.js +1860 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
- package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
- package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
- package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.d.ts} +2 -2
- package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +7 -6
- package/dist/supabase/middleware.js +13 -11
- package/dist/supabase-By_frk3U.js +92 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
- package/dist/supabase-hook-CCw5m35C.js +1 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +4 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +10 -10
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +4 -4
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +23 -287
- package/dist/testing/index.d.ts +311 -38
- package/dist/testing/index.js +3475 -201
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
- package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +16 -14
- package/dist/types-8RnwUAvE.d.ts +107 -0
- package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
- package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
- package/dist/types-BtHtcKMr.d.ts +157 -0
- package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
- package/dist/types-C791HFu9.d.ts +332 -0
- package/dist/types-C863OQiR.d.ts +57 -0
- package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
- package/dist/types-C_IiEs64.d.ts +65 -0
- package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
- package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
- package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CRVl9V3t.js +32 -0
- package/dist/usage-CZpSQP6L.js +1 -0
- package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.d.ts} +1 -1
- package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
- package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
- package/dist/{verify-BztUB3GX.js → verify-BaAKx7t6.js} +645 -50
- package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
- package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-CN8H_9UF.d.ts} +67 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- package/dist/waiter-B986w1oK.d.ts +36 -0
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/watch--ovlPOc0.js +1 -0
- package/dist/{watch-zeucB7eF.js → watch-vea54PRw.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- package/dist/where-scope-C9vfEphl.js +306 -0
- package/dist/who-can-DWBAcaCQ.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/{wrap-Cr93qqdP.d.ts → wrap-C5jC6sKI.d.ts} +2 -1
- package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
- package/package.json +136 -37
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +123 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +10 -9
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
- package/skills/permdock-wire/SKILL.md +17 -11
- package/skills/permdock-wire/references/adapters.md +139 -51
- package/skills/permdock-wire/references/policy-options.md +5 -5
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DZL76lKW.js +0 -240
- package/dist/arazzo-CD8d0WLb.js +0 -54
- package/dist/catalog-6yWAX6Ps.js +0 -2
- package/dist/catalog-WHG4kBq7.js +0 -48
- package/dist/cloud-C7bSDgX4.js +0 -50
- package/dist/cloud-PeBN3IEn.js +0 -118
- package/dist/collect-Bw2Jdq1q.js +0 -2
- package/dist/collect-CQx4hX4N.js +0 -83
- package/dist/commands-Cpip4ULx.js +0 -97
- package/dist/config-DLt6BvV7.js +0 -36
- package/dist/diff-Cnghh_Ip.js +0 -48
- package/dist/doctor-CuVJvhV_.js +0 -53
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-fwfXN01n.js +0 -1016
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-DgM7w96K.d.ts +0 -6
- package/dist/index-Dz7didpC.d.ts +0 -201
- package/dist/index-UdVQgq48.d.ts +0 -550
- package/dist/load-B_shHrmd.js +0 -2
- package/dist/manifest-BngWKryL.js +0 -770
- package/dist/may-use-BOn_dR_w.js +0 -78
- package/dist/openapi-DcQ1Kg40.js +0 -164
- package/dist/ownership-BgnbOJFT.js +0 -851
- package/dist/permdock-L26udHSk.js +0 -3646
- package/dist/powersync-BFSbSElQ.js +0 -62
- package/dist/powersync-DCDgZgfZ.js +0 -2
- package/dist/rls-55DQTuf5.js +0 -250
- package/dist/run-DMcNW_8T.js +0 -174
- package/dist/server-ZYEHtNHS.js +0 -268
- package/dist/sink-BTtmfPnE.js +0 -141
- package/dist/sink-CPN4zLfs.d.ts +0 -104
- package/dist/skills-Dle4ZoLF.js +0 -56
- package/dist/snapshot-Dc9CHPME.js +0 -1078
- package/dist/src-Bb7no-hS.js +0 -639
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-Dbqr141s.js +0 -83
- package/dist/supabase-hook-BULg7Ut_.js +0 -2
- package/dist/thenable-QSmvt-vZ.js +0 -65
- package/dist/types-C0dee0Qf.d.ts +0 -197
- package/dist/types-DvupZE0w.d.ts +0 -9
- package/dist/usage-4G6t643F.js +0 -42
- package/dist/usage-iFLJ0-rr.js +0 -2
- package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
- package/dist/watch-C8TpsAl4.js +0 -2
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { T as Policy } from "./policy-types-n0uRTsW8.js";
|
|
2
|
+
import { r as PermDock } from "./permdock-SV8ZINYT.js";
|
|
3
|
+
import { m as ApprovalStore } from "./types-BdtSDbBO.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,10 +1,13 @@
|
|
|
1
|
-
import { t as compact } from "./compact-CAf557ZB.js";
|
|
1
|
+
import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { t as PROBLEM_BASE } from "./validation-error-ZfUHbKvf.js";
|
|
3
|
-
import {
|
|
4
|
-
import { c as listPermissions, g as formerScopes, h as formerKeys } from "./permission-registry-
|
|
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";
|
|
5
6
|
import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
|
|
6
|
-
import {
|
|
7
|
-
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-CBYVMjwh.js";
|
|
10
|
+
import { t as bodyTooLarge } from "./body-CH5of8Ne.js";
|
|
8
11
|
import { t as timeoutSignal } from "./timeout-D51niuQP.js";
|
|
9
12
|
//#region src/core/decision.ts
|
|
10
13
|
/** The denial for a check that failed or named no declared permission. */
|
|
@@ -47,12 +50,20 @@ function permissionLookup(tree) {
|
|
|
47
50
|
return named(`${type}.${action}`) ?? byPair.get(`${type}\u0000${action}`);
|
|
48
51
|
};
|
|
49
52
|
}
|
|
50
|
-
/**
|
|
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: "*"`. */
|
|
51
62
|
function itemResourceData(resource) {
|
|
52
63
|
const properties = resource?.properties;
|
|
53
64
|
if (properties !== null && typeof properties === "object") return properties;
|
|
54
|
-
const id = resource?.id;
|
|
55
|
-
|
|
65
|
+
const id = wireResourceId(resource?.id);
|
|
66
|
+
return id === void 0 ? void 0 : { id };
|
|
56
67
|
}
|
|
57
68
|
//#endregion
|
|
58
69
|
//#region src/server/web-bot-auth.ts
|
|
@@ -61,6 +72,7 @@ const DIRECTORY_TIMEOUT_MS = 5e3;
|
|
|
61
72
|
const DEFAULT_MAX_AGE = 300;
|
|
62
73
|
const FUTURE_SKEW = 60;
|
|
63
74
|
const DIRECTORY_PATH = "/.well-known/http-message-signatures-directory";
|
|
75
|
+
const WEB_BOT_AUTH_TAG = "web-bot-auth";
|
|
64
76
|
var InvalidSignatureError = class extends Error {
|
|
65
77
|
name = "InvalidSignatureError";
|
|
66
78
|
response;
|
|
@@ -110,7 +122,18 @@ function discoverViaSignatureAgent(options) {
|
|
|
110
122
|
};
|
|
111
123
|
return { lookup };
|
|
112
124
|
}
|
|
113
|
-
|
|
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) {
|
|
114
137
|
if (options === void 0 || options.verify === false) return;
|
|
115
138
|
const signatureInput = request.headers.get("Signature-Input");
|
|
116
139
|
if (signatureInput === null) {
|
|
@@ -122,13 +145,15 @@ async function verifyWebBotAuth(request, options) {
|
|
|
122
145
|
if (parsed === void 0 || signatureHeader === null) throw reject("Signature-Input could not be parsed");
|
|
123
146
|
const signature = parseSignature(signatureHeader, parsed.label);
|
|
124
147
|
if (signature === void 0) throw reject("Signature could not be parsed");
|
|
125
|
-
const now = options.now?.()
|
|
148
|
+
const now = secondsAt(options.now?.());
|
|
126
149
|
const maxAge = options.maxAge ?? DEFAULT_MAX_AGE;
|
|
127
150
|
if (typeof parsed.created !== "number") throw reject("Signature-Input created is required");
|
|
128
151
|
if (parsed.created > now + FUTURE_SKEW) throw reject("Signature-Input created is in the future");
|
|
129
152
|
if (now - parsed.created > maxAge) throw reject("Signature-Input created is too old");
|
|
130
153
|
if (typeof parsed.expires === "number" && parsed.expires < now) throw reject("Signature-Input expires is in the past");
|
|
131
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);
|
|
132
157
|
const agent = parseSignatureAgent(request.headers.get("Signature-Agent"), parsed.label);
|
|
133
158
|
const lookup = typeof options.keys === "function" ? options.keys : options.keys.lookup;
|
|
134
159
|
let key;
|
|
@@ -152,6 +177,11 @@ async function verifyWebBotAuth(request, options) {
|
|
|
152
177
|
kind: "web-bot-auth"
|
|
153
178
|
});
|
|
154
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
|
+
}
|
|
155
185
|
function reject(detail) {
|
|
156
186
|
return new InvalidSignatureError(invalidSignatureProblem(detail));
|
|
157
187
|
}
|
|
@@ -167,6 +197,7 @@ function parseSignatureInput(header) {
|
|
|
167
197
|
expires: inner.expires,
|
|
168
198
|
keyid: inner.keyid,
|
|
169
199
|
alg: inner.alg,
|
|
200
|
+
tag: inner.tag,
|
|
170
201
|
innerListAndParams: member.value.trim()
|
|
171
202
|
});
|
|
172
203
|
}
|
|
@@ -213,7 +244,8 @@ function parseInnerListAndParams(value) {
|
|
|
213
244
|
created: asUnix(params["created"]),
|
|
214
245
|
expires: asUnix(params["expires"]),
|
|
215
246
|
keyid: typeof params["keyid"] === "string" ? params["keyid"] : void 0,
|
|
216
|
-
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
|
|
217
249
|
});
|
|
218
250
|
}
|
|
219
251
|
function parseQuotedList(inner) {
|
|
@@ -367,10 +399,83 @@ function decodeSfBytes(value) {
|
|
|
367
399
|
}
|
|
368
400
|
//#endregion
|
|
369
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
|
+
}
|
|
370
475
|
function permissionOf(lookup, item) {
|
|
371
476
|
return lookup(typeof item.action?.name === "string" ? item.action.name : void 0, item.resource);
|
|
372
477
|
}
|
|
373
|
-
function evaluationRow(decision) {
|
|
478
|
+
function evaluationRow(decision, permission) {
|
|
374
479
|
switch (decision.outcome) {
|
|
375
480
|
case "granted": return {
|
|
376
481
|
decision: true,
|
|
@@ -386,14 +491,16 @@ function evaluationRow(decision) {
|
|
|
386
491
|
permdock: {
|
|
387
492
|
...decision,
|
|
388
493
|
denials: wireDenials(decision.denials)
|
|
389
|
-
}
|
|
494
|
+
},
|
|
495
|
+
...evaluationReasons(decision, permission)
|
|
390
496
|
}
|
|
391
497
|
};
|
|
392
498
|
case "approval-required": return {
|
|
393
499
|
decision: false,
|
|
394
500
|
context: {
|
|
395
501
|
outcome: "approval-required",
|
|
396
|
-
permdock: decision
|
|
502
|
+
permdock: decision,
|
|
503
|
+
...evaluationReasons(decision, permission)
|
|
397
504
|
}
|
|
398
505
|
};
|
|
399
506
|
default: return decision;
|
|
@@ -412,11 +519,14 @@ function applyApprovalResume(decision, permission, permdock, store, request, res
|
|
|
412
519
|
}
|
|
413
520
|
function evaluateOne(lookup, permdock, item, store, header, adapter) {
|
|
414
521
|
const permission = permissionOf(lookup, item);
|
|
415
|
-
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
|
+
});
|
|
416
526
|
const data = itemResourceData(item.resource);
|
|
417
527
|
const decide = permdock.decide;
|
|
418
528
|
const decision = decide(permission, data, compact({
|
|
419
|
-
|
|
529
|
+
call: "endpoint",
|
|
420
530
|
adapter,
|
|
421
531
|
trusted: false,
|
|
422
532
|
boundary: "decision-endpoint"
|
|
@@ -426,11 +536,14 @@ function evaluateOne(lookup, permdock, item, store, header, adapter) {
|
|
|
426
536
|
permission,
|
|
427
537
|
subject: permdock.subject,
|
|
428
538
|
store,
|
|
429
|
-
resource: resourceRef(permission, data, item.resource?.id),
|
|
539
|
+
resource: resourceRef(permission, data, wireResourceId(item.resource?.id)),
|
|
430
540
|
adapter,
|
|
431
541
|
token: header,
|
|
432
542
|
consume: false
|
|
433
|
-
})
|
|
543
|
+
}).then((resumed) => ({
|
|
544
|
+
decision: resumed,
|
|
545
|
+
permission: permission.key
|
|
546
|
+
}));
|
|
434
547
|
}
|
|
435
548
|
async function resolvePermdock(options, request, tenant) {
|
|
436
549
|
if (options.resolve !== void 0) {
|
|
@@ -440,14 +553,16 @@ async function resolvePermdock(options, request, tenant) {
|
|
|
440
553
|
if (options.getPermDock !== void 0) return options.getPermDock(tenant === void 0 ? void 0 : { tenant });
|
|
441
554
|
throw new TypeError("evaluations handler needs resolve or getPermDock");
|
|
442
555
|
}
|
|
443
|
-
function
|
|
556
|
+
function evaluationsHandler(options) {
|
|
444
557
|
const adapter = options.adapter ?? "server";
|
|
445
558
|
const lookup = permissionLookup(options.policy.permissions);
|
|
446
559
|
const maxEvaluations = options.maxEvaluations ?? 256;
|
|
447
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");
|
|
448
563
|
let body;
|
|
449
564
|
try {
|
|
450
|
-
body =
|
|
565
|
+
body = JSON.parse(read.text);
|
|
451
566
|
} catch {
|
|
452
567
|
return validationProblem("evaluations body was not valid JSON");
|
|
453
568
|
}
|
|
@@ -456,6 +571,8 @@ function createEvaluationsHandler(options) {
|
|
|
456
571
|
if (evaluations === void 0) return validationProblem("evaluations array is required");
|
|
457
572
|
if (!Array.isArray(evaluations)) return validationProblem("evaluations must be an array");
|
|
458
573
|
if (evaluations.length > maxEvaluations) return batchTooLarge(maxEvaluations);
|
|
574
|
+
const semantic = evaluationsSemantic(body);
|
|
575
|
+
if (semantic === void 0) return unknownSemanticProblem();
|
|
459
576
|
const header = readApprovalHeader(request.headers);
|
|
460
577
|
let permdock;
|
|
461
578
|
try {
|
|
@@ -464,21 +581,15 @@ function createEvaluationsHandler(options) {
|
|
|
464
581
|
if (error instanceof InvalidSignatureError) return error.response;
|
|
465
582
|
throw error;
|
|
466
583
|
}
|
|
467
|
-
const rows = await
|
|
468
|
-
|
|
469
|
-
|
|
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
|
+
});
|
|
470
588
|
return Response.json({ evaluations: rows });
|
|
471
589
|
};
|
|
472
590
|
const GET = async (request) => {
|
|
473
591
|
const url = new URL(request.url);
|
|
474
|
-
if (url.pathname.includes("authzen-configuration"))
|
|
475
|
-
const origin = url.origin;
|
|
476
|
-
return Response.json({
|
|
477
|
-
policy_decision_point: origin,
|
|
478
|
-
access_evaluation_endpoint: `${origin}/access/v1/evaluation`,
|
|
479
|
-
access_evaluations_endpoint: `${origin}/access/v1/evaluations`
|
|
480
|
-
});
|
|
481
|
-
}
|
|
592
|
+
if (url.pathname.includes("authzen-configuration")) return Response.json(authzenMetadata(url.origin));
|
|
482
593
|
const tenant = url.searchParams.get("tenant") ?? void 0;
|
|
483
594
|
let permdock;
|
|
484
595
|
try {
|
|
@@ -491,9 +602,9 @@ function createEvaluationsHandler(options) {
|
|
|
491
602
|
return Response.json(await Promise.resolve(snapshot));
|
|
492
603
|
};
|
|
493
604
|
return {
|
|
494
|
-
POST,
|
|
495
|
-
GET
|
|
605
|
+
POST: async (request) => withRequestId(request, await POST(request)),
|
|
606
|
+
GET: async (request) => withRequestId(request, await GET(request))
|
|
496
607
|
};
|
|
497
608
|
}
|
|
498
609
|
//#endregion
|
|
499
|
-
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-n0uRTsW8.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-CN8H_9UF.js";
|
|
3
|
+
import { r as PermDock } from "../permdock-SV8ZINYT.js";
|
|
4
|
+
import { u as ApprovalRequest } from "../types-BdtSDbBO.js";
|
|
5
|
+
import { o as AgentAdapterOptions, t as AgentPermDock } from "../create-CBMmFie-.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
1
|
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { o as resolveApproval } from "../helpers-
|
|
5
|
-
import {
|
|
6
|
-
import { n as createAgentKernel } from "../kernel-CB3LrIJM.js";
|
|
2
|
+
import { c as withApp } from "../permdock-BrAscV28.js";
|
|
3
|
+
import { c as isApprovalError } from "../types-DqzsnlSA.js";
|
|
4
|
+
import { o as resolveApproval } from "../helpers-CBYVMjwh.js";
|
|
5
|
+
import { t as agentRuntime } from "../create-CGm28gyI.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-n0uRTsW8.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-CN8H_9UF.js";
|
|
3
|
+
import { r as PermDock } from "../permdock-SV8ZINYT.js";
|
|
4
|
+
import { f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-CKQiCnON.js";
|
|
5
|
+
import { t as ServerAdapterOptions } from "../bind-DOyrv6zi.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 };
|