permdock 0.4.0 → 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/{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-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 -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-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/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.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-Dg8XsRaO.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-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 +9 -8
- package/dist/better-supabase/index.d.ts +357 -30
- package/dist/better-supabase/index.js +936 -194
- package/dist/{bind-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
- package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -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-BMnAudHn.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-BSslw1QV.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-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.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-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- 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-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/{compile-CtTP7eur.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-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- 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-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
- package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-DaXVdDhM.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-D8jDHgsl.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.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-OD_4c__H.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-C9YJsv3H.js → evaluations-DZ2CbV5k.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-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/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-D2lZt4Dd.js} +55 -52
- package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.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-DTcZOzhF.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-BZIAYvon.js +315 -0
- package/dist/hosted-DBDX0M-P.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-DMmOG27O.js} +190 -53
- 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-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
- package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
- 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-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-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-5JatXyND.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-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-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
- package/dist/{map-error-BE27PYkE.js → map-error-TCAdw-eW.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-BShP7Vf4.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-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
- 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 +20 -15
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +30 -7
- package/dist/output-Dyw8fyPF.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-BatFgAA4.js} +1698 -869
- 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-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
- package/dist/{parse-local-manifest-DvYUR0QL.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 +45 -26
- 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-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-CCJ6lmxB.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
- 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-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
- 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-DXlt-vks.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-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
- package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
- package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
- 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 -72
- package/dist/react-native/index.js +24 -22
- 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-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.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-BA8an5Ap.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
- package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
- 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-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DtaA4JuW.js → saas-FO-Q8oj0.js} +16 -14
- package/dist/scan-BOI5tJ-6.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-DqCT4CgZ.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
- package/dist/{shared-JhMeOsDF.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-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.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-DqK9eDmM.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-BV9j0DeZ.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-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- 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-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
- package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
- package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
- package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.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-9pqI57pW.js +92 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
- 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-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
- package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
- package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-CIlTojhq.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-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
- 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-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.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-DbCL9bnB.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-D6lPdb4Z.d.ts} +65 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- 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-zeucB7eF.js → watch-CszoTJMq.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- 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-Cr93qqdP.d.ts → wrap-Bd1Tejur.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 +9 -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 +5 -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/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
package/dist/authzen/index.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { a as getResource, c as listPermissions } from "../permission-registry-
|
|
2
|
+
import { r as ownGet } from "../paths-DXSHAMIa.js";
|
|
3
|
+
import { o as statusProblem } from "../problem-details-cn5X30gZ.js";
|
|
4
|
+
import { a as getResource, c as listPermissions } from "../permission-registry-Br4jSNVi.js";
|
|
5
|
+
import { t as fromWireDelegation } from "../wire-delegation-Cv3W2eaM.js";
|
|
5
6
|
import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
|
|
7
|
+
import { n as readBodyText } from "../body-text-QcXok_SI.js";
|
|
6
8
|
import { r as hasCredentials } from "../http-BBoKefeS.js";
|
|
7
|
-
import { a as methodNotAllowed, c as problemResponse, d as validationProblem, n as batchTooLarge, u as unauthenticatedProblem } from "../problem-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
9
|
+
import { a as methodNotAllowed, c as problemResponse, d as validationProblem, n as batchTooLarge, u as unauthenticatedProblem } from "../problem-CTviyH5L.js";
|
|
10
|
+
import { t as bodyTooLarge } from "../body-CH5of8Ne.js";
|
|
11
|
+
import { n as resolveOrNull, t as buildInstance } from "../build-instance-BMnAudHn.js";
|
|
12
|
+
import { _ as wireResourceId, a as evaluationReasons, c as unknownSemanticProblem, g as permissionLookup, h as itemResourceData, i as evaluateBatch, l as withRequestId, n as applyApprovalResume, r as authzenMetadata, s as evaluationsSemantic, t as EVALUATIONS_SEMANTICS } from "../evaluations-DZ2CbV5k.js";
|
|
10
13
|
//#region src/authzen/map.ts
|
|
11
14
|
const UNKNOWN = {
|
|
12
15
|
outcome: "denied",
|
|
@@ -38,9 +41,9 @@ function permissionOf(lookup, item) {
|
|
|
38
41
|
function resourceData(item) {
|
|
39
42
|
return itemResourceData(item.resource);
|
|
40
43
|
}
|
|
44
|
+
/** The row id an item names; `undefined` for none and for the collection sentinel `id: "*"`. */
|
|
41
45
|
function resourceIdOf(item) {
|
|
42
|
-
|
|
43
|
-
if (typeof id === "string" || typeof id === "number") return String(id);
|
|
46
|
+
return wireResourceId(item.resource?.id);
|
|
44
47
|
}
|
|
45
48
|
function userFromEntity(entity) {
|
|
46
49
|
if (entity === void 0) return null;
|
|
@@ -52,10 +55,11 @@ function userFromEntity(entity) {
|
|
|
52
55
|
}
|
|
53
56
|
return Object.keys(result).length === 0 ? null : result;
|
|
54
57
|
}
|
|
58
|
+
function contextOrSubject(item, name) {
|
|
59
|
+
return (isRecord(item.context) ? item.context[name] : void 0) ?? (isRecord(item.subject?.properties) ? item.subject.properties[name] : void 0);
|
|
60
|
+
}
|
|
55
61
|
function actorOf(item) {
|
|
56
|
-
const
|
|
57
|
-
const fromSubject = isRecord(item.subject?.properties) ? item.subject.properties["actor"] : void 0;
|
|
58
|
-
const raw = context["actor"] ?? fromSubject;
|
|
62
|
+
const raw = contextOrSubject(item, "actor");
|
|
59
63
|
if (!isRecord(raw) || typeof raw["id"] !== "string") return;
|
|
60
64
|
const kind = typeof raw["kind"] === "string" ? raw["kind"] : "oauth-client";
|
|
61
65
|
return {
|
|
@@ -64,16 +68,7 @@ function actorOf(item) {
|
|
|
64
68
|
};
|
|
65
69
|
}
|
|
66
70
|
function delegationOf(item) {
|
|
67
|
-
|
|
68
|
-
const fromSubject = isRecord(item.subject?.properties) ? item.subject.properties["delegation"] : void 0;
|
|
69
|
-
const raw = context["delegation"] ?? fromSubject;
|
|
70
|
-
if (!isRecord(raw)) return;
|
|
71
|
-
const scopes = raw["scopes"];
|
|
72
|
-
const authorizationDetails = raw["authorizationDetails"];
|
|
73
|
-
return compact({
|
|
74
|
-
scopes: Array.isArray(scopes) ? scopes.filter((scope) => typeof scope === "string") : void 0,
|
|
75
|
-
authorizationDetails: Array.isArray(authorizationDetails) ? authorizationDetails : void 0
|
|
76
|
-
});
|
|
71
|
+
return fromWireDelegation(contextOrSubject(item, "delegation"));
|
|
77
72
|
}
|
|
78
73
|
function tenantOf(item) {
|
|
79
74
|
if (!isRecord(item.context) || typeof item.context["tenant"] !== "string") return;
|
|
@@ -100,13 +95,13 @@ function permdockContext(decision) {
|
|
|
100
95
|
default: return decision;
|
|
101
96
|
}
|
|
102
97
|
}
|
|
103
|
-
function
|
|
104
|
-
return { permdock: permdockContext(decision) };
|
|
105
|
-
}
|
|
106
|
-
function evaluationRow(decision) {
|
|
98
|
+
function evaluationRow(decision, permission) {
|
|
107
99
|
return {
|
|
108
100
|
decision: decision.outcome === "granted",
|
|
109
|
-
context:
|
|
101
|
+
context: {
|
|
102
|
+
permdock: permdockContext(decision),
|
|
103
|
+
...evaluationReasons(decision, permission)
|
|
104
|
+
}
|
|
110
105
|
};
|
|
111
106
|
}
|
|
112
107
|
function pathnameOf(request) {
|
|
@@ -115,7 +110,11 @@ function pathnameOf(request) {
|
|
|
115
110
|
function endsWithPath(pathname, suffix) {
|
|
116
111
|
return pathname === suffix || pathname.endsWith(suffix);
|
|
117
112
|
}
|
|
118
|
-
|
|
113
|
+
/**
|
|
114
|
+
* One item of an `evaluations` batch with the request's top-level `subject`,
|
|
115
|
+
* `action`, `resource` and `context` filled in where the item omits them.
|
|
116
|
+
*/
|
|
117
|
+
function mergeEvaluationItem(shared, item) {
|
|
119
118
|
if (!isRecord(item)) return shared;
|
|
120
119
|
return compact({
|
|
121
120
|
subject: isRecord(item["subject"]) ? item["subject"] : shared.subject,
|
|
@@ -150,36 +149,44 @@ function paged(items, offset, size) {
|
|
|
150
149
|
//#endregion
|
|
151
150
|
//#region src/authzen/create.ts
|
|
152
151
|
function notFound(detail) {
|
|
153
|
-
return problemResponse(
|
|
154
|
-
type: `${PROBLEM_BASE}/not-found`,
|
|
155
|
-
title: "Not found",
|
|
156
|
-
status: 404,
|
|
157
|
-
detail
|
|
158
|
-
});
|
|
152
|
+
return problemResponse(statusProblem(404, detail));
|
|
159
153
|
}
|
|
160
154
|
async function readJson(request) {
|
|
155
|
+
if (request.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() !== "application/json") return validationProblem("AuthZEN requests must use Content-Type: application/json");
|
|
156
|
+
const read = await readBodyText(request);
|
|
157
|
+
if (!read.ok) return read.cause === "too-large" ? bodyTooLarge() : validationProblem("AuthZEN body was not valid JSON");
|
|
161
158
|
try {
|
|
162
|
-
return
|
|
159
|
+
return JSON.parse(read.text);
|
|
163
160
|
} catch {
|
|
164
161
|
return validationProblem("AuthZEN body was not valid JSON");
|
|
165
162
|
}
|
|
166
163
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
164
|
+
/**
|
|
165
|
+
* The 400 for a request missing a required entity or one of its required
|
|
166
|
+
* fields (AuthZEN 1.0 sections 5, 6.1 and 10.1.1), or `undefined`.
|
|
167
|
+
*/
|
|
168
|
+
function missingProblem(body, required) {
|
|
169
|
+
for (const name of ["subject", "resource"]) {
|
|
170
|
+
const needs = required[name];
|
|
171
|
+
if (needs === void 0) continue;
|
|
172
|
+
const entity = body[name];
|
|
173
|
+
if (!isRecord(entity) || typeof entity["type"] !== "string") return validationProblem(`${name}.type is required`);
|
|
174
|
+
if (needs === "type-id" && typeof entity["id"] !== "string") return validationProblem(`${name}.id is required`);
|
|
175
|
+
}
|
|
176
|
+
if (required.action === true) {
|
|
177
|
+
const action = body["action"];
|
|
178
|
+
if (!isRecord(action) || typeof action["name"] !== "string") return validationProblem("action.name is required");
|
|
179
|
+
}
|
|
177
180
|
}
|
|
181
|
+
const EVALUATION = {
|
|
182
|
+
subject: "type-id",
|
|
183
|
+
action: true,
|
|
184
|
+
resource: "type-id"
|
|
185
|
+
};
|
|
178
186
|
const WELL_KNOWN = "/.well-known/authzen-configuration";
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
return response;
|
|
187
|
+
/** The name an item's action gives, for the reasons of an unknown permission. */
|
|
188
|
+
function actionName(item) {
|
|
189
|
+
return typeof item.action?.name === "string" ? item.action.name : "unknown";
|
|
183
190
|
}
|
|
184
191
|
const createPermDock = (policy, options) => {
|
|
185
192
|
const maxEvaluations = options.maxEvaluations ?? 256;
|
|
@@ -221,7 +228,7 @@ const createPermDock = (policy, options) => {
|
|
|
221
228
|
};
|
|
222
229
|
const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
|
|
223
230
|
const id = resourceIdOf(item);
|
|
224
|
-
const load = type !== void 0 && options.resources !== void 0 ? options.resources[type]?.
|
|
231
|
+
const load = type !== void 0 && options.resources !== void 0 ? options.resources[type]?.data : void 0;
|
|
225
232
|
if (id !== void 0 && load !== void 0) try {
|
|
226
233
|
return {
|
|
227
234
|
data: await load(id),
|
|
@@ -244,22 +251,27 @@ const createPermDock = (policy, options) => {
|
|
|
244
251
|
const permdock = await instantiate(pep, item);
|
|
245
252
|
const decide = permdock.decide;
|
|
246
253
|
const decision = decide(permission, data, trusted ? {
|
|
247
|
-
|
|
254
|
+
call: "endpoint",
|
|
248
255
|
adapter: "authzen",
|
|
249
256
|
trusted: true
|
|
250
257
|
} : {
|
|
251
|
-
|
|
258
|
+
call: "endpoint",
|
|
252
259
|
adapter: "authzen",
|
|
253
260
|
trusted: false,
|
|
254
261
|
boundary: "decision-endpoint"
|
|
255
262
|
});
|
|
256
|
-
return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, item
|
|
263
|
+
return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, resourceIdOf(item)), "authzen");
|
|
264
|
+
}
|
|
265
|
+
async function rowOf(request, pep, item) {
|
|
266
|
+
return evaluationRow(await decideItem(request, pep, item), permissionOf(lookup, item)?.key ?? actionName(item));
|
|
257
267
|
}
|
|
258
268
|
async function evaluation(request, pep) {
|
|
259
269
|
const body = await readJson(request);
|
|
260
270
|
if (body instanceof Response) return body;
|
|
261
271
|
if (!isRecord(body)) return validationProblem("evaluation body must be an object");
|
|
262
|
-
|
|
272
|
+
const missing = missingProblem(body, EVALUATION);
|
|
273
|
+
if (missing !== void 0) return missing;
|
|
274
|
+
return Response.json(await rowOf(request, pep, body));
|
|
263
275
|
}
|
|
264
276
|
async function evaluations(request, pep) {
|
|
265
277
|
const body = await readJson(request);
|
|
@@ -267,31 +279,27 @@ const createPermDock = (policy, options) => {
|
|
|
267
279
|
if (!isRecord(body)) return validationProblem("evaluations body must be an object");
|
|
268
280
|
const items = body["evaluations"] ?? [];
|
|
269
281
|
if (!Array.isArray(items)) return validationProblem("evaluations must be an array");
|
|
270
|
-
if (items.length === 0) return Response.json(
|
|
282
|
+
if (items.length === 0) return missingProblem(body, EVALUATION) ?? Response.json(await rowOf(request, pep, body));
|
|
271
283
|
if (items.length > maxEvaluations) return batchTooLarge(maxEvaluations);
|
|
272
|
-
const semantic =
|
|
273
|
-
if (semantic === void 0) return
|
|
284
|
+
const semantic = evaluationsSemantic(body);
|
|
285
|
+
if (semantic === void 0) return unknownSemanticProblem();
|
|
274
286
|
const shared = compact({
|
|
275
287
|
subject: isRecord(body["subject"]) ? body["subject"] : void 0,
|
|
276
288
|
action: isRecord(body["action"]) ? body["action"] : void 0,
|
|
277
289
|
resource: isRecord(body["resource"]) ? body["resource"] : void 0,
|
|
278
290
|
context: body["context"]
|
|
279
291
|
});
|
|
280
|
-
|
|
281
|
-
if (semantic === "execute_all") return Response.json({ evaluations: await Promise.all(items.map(rowOf)) });
|
|
282
|
-
const stopOn = semantic === "permit_on_first_permit";
|
|
283
|
-
const rows = [];
|
|
284
|
-
for (const item of items) {
|
|
285
|
-
const row = await rowOf(item);
|
|
286
|
-
rows.push(row);
|
|
287
|
-
if (row.decision === stopOn) break;
|
|
288
|
-
}
|
|
289
|
-
return Response.json({ evaluations: rows });
|
|
292
|
+
return Response.json({ evaluations: await evaluateBatch(items, semantic, (item) => rowOf(request, pep, mergeEvaluationItem(shared, item))) });
|
|
290
293
|
}
|
|
291
294
|
async function searchAction(request, pep) {
|
|
292
295
|
const body = await readJson(request);
|
|
293
296
|
if (body instanceof Response) return body;
|
|
294
297
|
if (!isRecord(body)) return validationProblem("search/action body must be an object");
|
|
298
|
+
const missingAction = missingProblem(body, {
|
|
299
|
+
subject: "type-id",
|
|
300
|
+
resource: "type-id"
|
|
301
|
+
});
|
|
302
|
+
if (missingAction !== void 0) return missingAction;
|
|
295
303
|
const item = body;
|
|
296
304
|
const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
|
|
297
305
|
const leaves = listPermissions(policy.permissions).filter((leaf) => type === void 0 || leaf.resource === type);
|
|
@@ -322,6 +330,12 @@ const createPermDock = (policy, options) => {
|
|
|
322
330
|
const body = await readJson(request);
|
|
323
331
|
if (body instanceof Response) return body;
|
|
324
332
|
if (!isRecord(body)) return validationProblem("search/resource body must be an object");
|
|
333
|
+
const missingResource = missingProblem(body, {
|
|
334
|
+
subject: "type-id",
|
|
335
|
+
action: true,
|
|
336
|
+
resource: "type"
|
|
337
|
+
});
|
|
338
|
+
if (missingResource !== void 0) return missingResource;
|
|
325
339
|
const item = body;
|
|
326
340
|
const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
|
|
327
341
|
const permission = permissionOf(lookup, item);
|
|
@@ -347,6 +361,12 @@ const createPermDock = (policy, options) => {
|
|
|
347
361
|
const body = await readJson(request);
|
|
348
362
|
if (body instanceof Response) return body;
|
|
349
363
|
if (!isRecord(body)) return validationProblem("search/subject body must be an object");
|
|
364
|
+
const missingSubject = missingProblem(body, {
|
|
365
|
+
subject: "type",
|
|
366
|
+
action: true,
|
|
367
|
+
resource: "type-id"
|
|
368
|
+
});
|
|
369
|
+
if (missingSubject !== void 0) return missingSubject;
|
|
350
370
|
let records;
|
|
351
371
|
try {
|
|
352
372
|
records = await options.subjects.list();
|
|
@@ -381,15 +401,11 @@ const createPermDock = (policy, options) => {
|
|
|
381
401
|
}
|
|
382
402
|
function discovery(request, pathname) {
|
|
383
403
|
const pdp = `${new URL(request.url).origin}${pathname.slice(pathname.indexOf(WELL_KNOWN) + 34).replace(/\/+$/u, "")}`;
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
search_resource_endpoint: `${pdp}/access/v1/search/resource`
|
|
390
|
-
};
|
|
391
|
-
if (options.subjects?.list !== void 0) document["search_subject_endpoint"] = `${pdp}/access/v1/search/subject`;
|
|
392
|
-
return Response.json(document);
|
|
404
|
+
return Response.json(authzenMetadata(pdp, {
|
|
405
|
+
action: true,
|
|
406
|
+
resource: true,
|
|
407
|
+
subject: options.subjects?.list !== void 0
|
|
408
|
+
}));
|
|
393
409
|
}
|
|
394
410
|
async function route(request) {
|
|
395
411
|
const pathname = pathnameOf(request);
|
|
@@ -432,9 +448,8 @@ const createPermDock = (policy, options) => {
|
|
|
432
448
|
}
|
|
433
449
|
return notFound("unknown AuthZEN path");
|
|
434
450
|
}
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
} };
|
|
451
|
+
const handler = async (request) => withRequestId(request, await route(request));
|
|
452
|
+
return { permdockHandler: () => handler };
|
|
438
453
|
};
|
|
439
454
|
//#endregion
|
|
440
|
-
export { createPermDock };
|
|
455
|
+
export { EVALUATIONS_SEMANTICS, createPermDock, evaluateBatch, evaluationsSemantic, mergeEvaluationItem };
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Lt as InstanceHandle, Pn as Denial, Rt as Instant } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "./vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { t as Operation } from "./operations-CxybZErY.js";
|
|
4
|
+
//#region src/core/automation.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Who an automation runs as. `publisher`: the person who published it, with
|
|
7
|
+
* their rights as of each run. `service`: a `kind: 'service'` principal
|
|
8
|
+
* holding `roles` in `tenant`, capped at what the publisher could assign.
|
|
9
|
+
*/
|
|
10
|
+
type AutomationMode = "publisher" | "service";
|
|
11
|
+
/**
|
|
12
|
+
* Automation v1: a published, versioned run of operations. Every run acts
|
|
13
|
+
* as `principal` with live rights, narrowed to `permissions` (the
|
|
14
|
+
* operations' permissions) and to any policy delegation to
|
|
15
|
+
* `actor('automation')`. The event that triggers a run never grants.
|
|
16
|
+
*/
|
|
17
|
+
type Automation = {
|
|
18
|
+
readonly v: 1;
|
|
19
|
+
readonly id: string;
|
|
20
|
+
/** Changes on every edit; a run ticket for another version is refused. */
|
|
21
|
+
readonly version: number | string;
|
|
22
|
+
readonly mode: AutomationMode;
|
|
23
|
+
/** The principal each run acts as: the publisher, or the service principal. */
|
|
24
|
+
readonly principal: string;
|
|
25
|
+
readonly publishedBy: string;
|
|
26
|
+
/** RFC 3339. */
|
|
27
|
+
readonly publishedAt: string;
|
|
28
|
+
readonly tenant?: string;
|
|
29
|
+
/** Service mode only: the roles the service principal holds in `tenant`. */
|
|
30
|
+
readonly roles?: readonly string[];
|
|
31
|
+
/** The operation names the automation runs. */
|
|
32
|
+
readonly operations: readonly string[];
|
|
33
|
+
/** The delegation: the permission keys of `operations`. */
|
|
34
|
+
readonly permissions: readonly string[];
|
|
35
|
+
/** The permission key a caller needs to start a run; absent, only server code starts one. */
|
|
36
|
+
readonly run?: string;
|
|
37
|
+
readonly revoked?: boolean;
|
|
38
|
+
readonly name?: string;
|
|
39
|
+
};
|
|
40
|
+
/** The live record of each automation, read on every run. */
|
|
41
|
+
type AutomationSource = {
|
|
42
|
+
/** Names the implementation in errors and events. */
|
|
43
|
+
readonly name?: string;
|
|
44
|
+
/** The automation as of now, or `null` for an unknown one. A throw is no automation. */
|
|
45
|
+
automation(id: string, options?: {
|
|
46
|
+
readonly tenant?: string;
|
|
47
|
+
}): Automation | null | Promise<Automation | null>;
|
|
48
|
+
};
|
|
49
|
+
type OperationRef = Pick<Operation, "name" | "permission">;
|
|
50
|
+
type AutomationRequest = {
|
|
51
|
+
readonly id: string;
|
|
52
|
+
readonly version: number | string;
|
|
53
|
+
/** The operations the automation runs: entries of an `OperationMap`, or the map itself. */
|
|
54
|
+
readonly operations: readonly OperationRef[] | Readonly<Record<string, OperationRef>>;
|
|
55
|
+
/** Defaults to `'publisher'`. */
|
|
56
|
+
readonly mode?: AutomationMode;
|
|
57
|
+
/** Defaults to the publisher's active tenant; required for `service`. */
|
|
58
|
+
readonly tenant?: string;
|
|
59
|
+
/** Service mode: the service principal's id; defaults to `automation:<id>`. */
|
|
60
|
+
readonly principal?: string;
|
|
61
|
+
/** Service mode: the roles the service principal holds in `tenant`. */
|
|
62
|
+
readonly roles?: readonly string[];
|
|
63
|
+
/** The permission a caller needs to start a run. */
|
|
64
|
+
readonly run?: Permission;
|
|
65
|
+
readonly name?: string;
|
|
66
|
+
};
|
|
67
|
+
type AutomationDecision = {
|
|
68
|
+
readonly outcome: "granted";
|
|
69
|
+
readonly automation: Automation;
|
|
70
|
+
} | {
|
|
71
|
+
readonly outcome: "denied";
|
|
72
|
+
readonly denials: readonly Denial[];
|
|
73
|
+
};
|
|
74
|
+
type DecideAutomationOptions = {
|
|
75
|
+
/** The publication time; defaults to the clock. */
|
|
76
|
+
readonly now?: Instant;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Validates an untrusted automation record and returns a frozen copy with
|
|
80
|
+
* only the v1 fields, or `undefined`. A service automation needs `tenant`
|
|
81
|
+
* and `roles`; a publisher automation runs as `publishedBy` and has no
|
|
82
|
+
* `roles`.
|
|
83
|
+
*/
|
|
84
|
+
declare function parseAutomation(input: unknown): Automation | undefined;
|
|
85
|
+
type MemoryAutomationSource = {
|
|
86
|
+
automation(id: string, options?: {
|
|
87
|
+
readonly tenant?: string;
|
|
88
|
+
}): Automation | null;
|
|
89
|
+
/** Adds or replaces a record by id; an invalid record throws. */
|
|
90
|
+
put(automation: Automation): void;
|
|
91
|
+
};
|
|
92
|
+
/** An in-process `AutomationSource`; records are kept by id and checked with `parseAutomation`. */
|
|
93
|
+
declare function memoryAutomationSource(automations?: readonly Automation[]): MemoryAutomationSource;
|
|
94
|
+
/**
|
|
95
|
+
* Decides whether the subject of `permdock` may publish the automation in
|
|
96
|
+
* `request`, and returns the record to store. The publisher must be a
|
|
97
|
+
* signed-in user or service that is not a link, a feed, a contact, a
|
|
98
|
+
* credential or a run, and must be able to use every operation's permission
|
|
99
|
+
* now (`exceeds-creator`); each run re-checks their live rights. A
|
|
100
|
+
* `service` automation's tenant must be one the publisher is a member of,
|
|
101
|
+
* its roles among their `assignableRoles` there and its permissions within
|
|
102
|
+
* `assignablePermissions`. PermDock never stores the record; the
|
|
103
|
+
* application does, after a `granted` result.
|
|
104
|
+
*/
|
|
105
|
+
/**
|
|
106
|
+
* Decides whether the subject of `permdock` may publish the automation in
|
|
107
|
+
* `request` and returns the record to store: the publisher's own reach over
|
|
108
|
+
* every operation's permission and, for a `service` automation, their
|
|
109
|
+
* assignable ceiling. Each run re-checks the publisher live. An instance
|
|
110
|
+
* built from a snapshot denies with `unsupported`.
|
|
111
|
+
*/
|
|
112
|
+
declare function decideAutomation(permdock: InstanceHandle, request: AutomationRequest, options?: DecideAutomationOptions): Promise<AutomationDecision>;
|
|
113
|
+
//#endregion
|
|
114
|
+
export { AutomationSource as a, decideAutomation as c, AutomationRequest as i, memoryAutomationSource as l, AutomationDecision as n, DecideAutomationOptions as o, AutomationMode as r, MemoryAutomationSource as s, Automation as t, parseAutomation as u };
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
+
import { a as ownRecord } from "./paths-DXSHAMIa.js";
|
|
4
|
+
import { a as isId, r as idList } from "./expiry-D4_YKRKD.js";
|
|
5
|
+
import { n as internalsOf } from "./internals-Dk8A8fX3.js";
|
|
6
|
+
import { n as findPermission } from "./permission-registry-Br4jSNVi.js";
|
|
7
|
+
import { l as isRfc3339, m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
8
|
+
//#region src/core/automation.ts
|
|
9
|
+
const MAX_NAME = 256;
|
|
10
|
+
function isVersion(value) {
|
|
11
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 || isId(value);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Validates an untrusted automation record and returns a frozen copy with
|
|
15
|
+
* only the v1 fields, or `undefined`. A service automation needs `tenant`
|
|
16
|
+
* and `roles`; a publisher automation runs as `publishedBy` and has no
|
|
17
|
+
* `roles`.
|
|
18
|
+
*/
|
|
19
|
+
function parseAutomation(input) {
|
|
20
|
+
const value = ownRecord(input);
|
|
21
|
+
if (value === void 0 || value["v"] !== 1 || !isId(value["id"]) || !isVersion(value["version"]) || value["mode"] !== "publisher" && value["mode"] !== "service" || !isId(value["principal"]) || !isId(value["publishedBy"]) || !isRfc3339(value["publishedAt"])) return;
|
|
22
|
+
const operations = idList(value["operations"]);
|
|
23
|
+
const permissions = idList(value["permissions"]);
|
|
24
|
+
const roles = value["roles"] === void 0 ? void 0 : idList(value["roles"]);
|
|
25
|
+
const { tenant, run, revoked, name } = value;
|
|
26
|
+
if (operations === void 0 || permissions === void 0 || value["roles"] !== void 0 && roles === void 0 || tenant !== void 0 && !isId(tenant) || run !== void 0 && !isId(run) || revoked !== void 0 && typeof revoked !== "boolean" || name !== void 0 && (typeof name !== "string" || name.length > MAX_NAME)) return;
|
|
27
|
+
if (value["mode"] === "service") {
|
|
28
|
+
if (tenant === void 0 || roles === void 0) return;
|
|
29
|
+
} else if (roles !== void 0 || value["principal"] !== value["publishedBy"]) return;
|
|
30
|
+
return freezeDeep(compact({
|
|
31
|
+
v: 1,
|
|
32
|
+
id: value["id"],
|
|
33
|
+
version: value["version"],
|
|
34
|
+
mode: value["mode"],
|
|
35
|
+
principal: value["principal"],
|
|
36
|
+
publishedBy: value["publishedBy"],
|
|
37
|
+
publishedAt: value["publishedAt"],
|
|
38
|
+
tenant,
|
|
39
|
+
roles,
|
|
40
|
+
operations,
|
|
41
|
+
permissions,
|
|
42
|
+
run,
|
|
43
|
+
revoked: revoked === true ? true : void 0,
|
|
44
|
+
name
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
/** An in-process `AutomationSource`; records are kept by id and checked with `parseAutomation`. */
|
|
48
|
+
function memoryAutomationSource(automations = []) {
|
|
49
|
+
const byId = /* @__PURE__ */ new Map();
|
|
50
|
+
const put = (automation) => {
|
|
51
|
+
const parsed = parseAutomation(automation);
|
|
52
|
+
if (parsed === void 0) throw new TypeError("PermDock: invalid automation record");
|
|
53
|
+
byId.set(parsed.id, parsed);
|
|
54
|
+
};
|
|
55
|
+
for (const automation of automations) put(automation);
|
|
56
|
+
return Object.freeze({
|
|
57
|
+
automation(id, options) {
|
|
58
|
+
const found = byId.get(id);
|
|
59
|
+
if (found === void 0 || options?.tenant !== void 0 && found.tenant !== void 0 && found.tenant !== options.tenant) return null;
|
|
60
|
+
return found;
|
|
61
|
+
},
|
|
62
|
+
put
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function denied(reason, detail) {
|
|
66
|
+
return freezeDeep({
|
|
67
|
+
outcome: "denied",
|
|
68
|
+
denials: [compact({
|
|
69
|
+
role: null,
|
|
70
|
+
reason,
|
|
71
|
+
detail
|
|
72
|
+
})]
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function operationList(operations) {
|
|
76
|
+
return isReadonlyArray(operations) ? operations : Object.values(operations);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Decides whether the subject of `permdock` may publish the automation in
|
|
80
|
+
* `request`, and returns the record to store. The publisher must be a
|
|
81
|
+
* signed-in user or service that is not a link, a feed, a contact, a
|
|
82
|
+
* credential or a run, and must be able to use every operation's permission
|
|
83
|
+
* now (`exceeds-creator`); each run re-checks their live rights. A
|
|
84
|
+
* `service` automation's tenant must be one the publisher is a member of,
|
|
85
|
+
* its roles among their `assignableRoles` there and its permissions within
|
|
86
|
+
* `assignablePermissions`. PermDock never stores the record; the
|
|
87
|
+
* application does, after a `granted` result.
|
|
88
|
+
*/
|
|
89
|
+
/**
|
|
90
|
+
* Decides whether the subject of `permdock` may publish the automation in
|
|
91
|
+
* `request` and returns the record to store: the publisher's own reach over
|
|
92
|
+
* every operation's permission and, for a `service` automation, their
|
|
93
|
+
* assignable ceiling. Each run re-checks the publisher live. An instance
|
|
94
|
+
* built from a snapshot denies with `unsupported`.
|
|
95
|
+
*/
|
|
96
|
+
function decideAutomation(permdock, request, options = {}) {
|
|
97
|
+
const internals = internalsOf(permdock);
|
|
98
|
+
if (internals === void 0) return Promise.resolve(freezeDeep({
|
|
99
|
+
outcome: "denied",
|
|
100
|
+
denials: [{
|
|
101
|
+
role: null,
|
|
102
|
+
reason: "unsupported"
|
|
103
|
+
}]
|
|
104
|
+
}));
|
|
105
|
+
return Promise.resolve().then(() => decideAutomationWith(internals.instance, request, options));
|
|
106
|
+
}
|
|
107
|
+
function decideAutomationWith(permdock, request, options) {
|
|
108
|
+
const publisher = permdock.subject.principal;
|
|
109
|
+
if (publisher === null) return denied("anonymous");
|
|
110
|
+
if (publisher.kind === "link" || publisher.kind === "feed" || publisher.kind === "contact") return denied("exceeds-creator", { creator: publisher.kind });
|
|
111
|
+
if ("credential" in publisher || "runTicket" in publisher) return denied("exceeds-creator", { creator: "credential" in publisher ? "credential" : "run" });
|
|
112
|
+
const mode = request.mode ?? "publisher";
|
|
113
|
+
const refs = operationList(request.operations);
|
|
114
|
+
if (!isId(request.id) || !isVersion(request.version) || refs.length === 0 || mode !== "publisher" && mode !== "service") return denied("validation");
|
|
115
|
+
const names = [];
|
|
116
|
+
const keys = [];
|
|
117
|
+
for (const ref of refs) {
|
|
118
|
+
const leaf = findPermission(permdock.permissions, ref.permission.key);
|
|
119
|
+
if (!isId(ref.name) || leaf === void 0 || names.includes(ref.name)) return denied("validation");
|
|
120
|
+
names.push(ref.name);
|
|
121
|
+
if (!keys.includes(leaf.key)) keys.push(leaf.key);
|
|
122
|
+
if (!permdock.mayUse(leaf)) return denied("exceeds-creator", { permission: leaf.key });
|
|
123
|
+
}
|
|
124
|
+
const run = request.run === void 0 ? void 0 : findPermission(permdock.permissions, request.run.key);
|
|
125
|
+
if (request.run !== void 0 && run === void 0) return denied("validation");
|
|
126
|
+
const tenant = request.tenant ?? publisher.tenant;
|
|
127
|
+
if (tenant !== void 0 && !permdock.tenants().includes(tenant)) return denied("exceeds-creator", { tenant });
|
|
128
|
+
if (mode === "service") {
|
|
129
|
+
if (tenant === void 0 || request.roles === void 0) return denied("validation");
|
|
130
|
+
const assignable = new Set(permdock.assignableRoles({ tenant }).map((role) => role.key));
|
|
131
|
+
for (const role of request.roles) if (!assignable.has(role)) return denied("exceeds-creator", { role });
|
|
132
|
+
const ceiling = new Set(permdock.assignablePermissions({ tenant }).map((leaf) => leaf.key));
|
|
133
|
+
for (const key of keys) if (!ceiling.has(key)) return denied("exceeds-creator", { permission: key });
|
|
134
|
+
}
|
|
135
|
+
const automation = parseAutomation(compact({
|
|
136
|
+
v: 1,
|
|
137
|
+
id: request.id,
|
|
138
|
+
version: request.version,
|
|
139
|
+
mode,
|
|
140
|
+
principal: mode === "service" ? request.principal ?? `automation:${request.id}` : publisher.id,
|
|
141
|
+
publishedBy: publisher.id,
|
|
142
|
+
publishedAt: rfc3339(nowSeconds(options.now)),
|
|
143
|
+
tenant,
|
|
144
|
+
roles: mode === "service" ? request.roles : void 0,
|
|
145
|
+
operations: names,
|
|
146
|
+
permissions: keys,
|
|
147
|
+
run: run?.key,
|
|
148
|
+
name: request.name
|
|
149
|
+
}));
|
|
150
|
+
if (automation === void 0) return denied("validation");
|
|
151
|
+
return freezeDeep({
|
|
152
|
+
outcome: "granted",
|
|
153
|
+
automation
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
//#endregion
|
|
157
|
+
export { memoryAutomationSource as n, parseAutomation as r, decideAutomation as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { N as RoleBinding,
|
|
2
|
-
import {
|
|
1
|
+
import { N as RoleBinding, W as CustomRoleSource, ir as Subject, q as DecisionSink, rr as Principal } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { E as PermissionTree } from "../vocabulary-D6lPdb4Z.js";
|
|
3
3
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
4
|
//#region src/better-auth/types.d.ts
|
|
5
5
|
type BetterAuthPrincipal = Principal & {
|
|
@@ -61,6 +61,8 @@ type BetterAuthLike = {
|
|
|
61
61
|
};
|
|
62
62
|
};
|
|
63
63
|
type BetterAuthSubjectOptions = {
|
|
64
|
+
/** The Better Auth instance, read for member, team and organization rows. */
|
|
65
|
+
readonly auth: BetterAuthLike;
|
|
64
66
|
readonly memberships?: "all" | "active";
|
|
65
67
|
/**
|
|
66
68
|
* Parses the user's additional fields into `principal.claims`. Without it no
|
|
@@ -70,7 +72,7 @@ type BetterAuthSubjectOptions = {
|
|
|
70
72
|
readonly headers?: unknown;
|
|
71
73
|
readonly declared?: readonly string[];
|
|
72
74
|
};
|
|
73
|
-
type
|
|
75
|
+
type BetterAuthCustomRoleSourceOptions = {
|
|
74
76
|
readonly assignable?: readonly BetterAuthAssignableRole[];
|
|
75
77
|
readonly headers?: unknown;
|
|
76
78
|
};
|
|
@@ -98,12 +100,12 @@ type SeededRoles = RoleBinding<"tenant">[] & {
|
|
|
98
100
|
export declare function rolesFromAccessControl(access: BetterAuthAccessControl, permissions: PermissionTree, options?: {
|
|
99
101
|
readonly on?: "tenant" | "global";
|
|
100
102
|
}): SeededRoles;
|
|
101
|
-
export declare function
|
|
103
|
+
export declare function betterAuthCustomRoleSource(auth: BetterAuthLike, options?: BetterAuthCustomRoleSourceOptions): CustomRoleSource;
|
|
102
104
|
export declare function onRoleChange(refresh: (event: BetterAuthRoleChangeEvent) => void | Promise<void>, options?: {
|
|
103
105
|
readonly sink?: DecisionSink;
|
|
104
106
|
}): (event: BetterAuthRoleChangeEvent) => Promise<void>;
|
|
105
107
|
//#endregion
|
|
106
108
|
//#region src/better-auth/subject.d.ts
|
|
107
|
-
export declare function subjectFromBetterAuth(
|
|
109
|
+
export declare function subjectFromBetterAuth(session: unknown, options: BetterAuthSubjectOptions): Promise<Subject<BetterAuthPrincipal>>;
|
|
108
110
|
//#endregion
|
|
109
|
-
export type { BetterAuthAccessControl, BetterAuthAccessRole, BetterAuthAssignableRole, BetterAuthLike, BetterAuthMemberQuery, BetterAuthPrincipal, BetterAuthRoleChangeEvent,
|
|
111
|
+
export type { BetterAuthAccessControl, BetterAuthAccessRole, BetterAuthAssignableRole, BetterAuthCustomRoleSourceOptions, BetterAuthLike, BetterAuthMemberQuery, BetterAuthPrincipal, BetterAuthRoleChangeEvent, BetterAuthStatements, BetterAuthSubjectOptions, BetterAuthUnmatchedStatement, SeededRoles };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { n as isReadonlyArray, r as isRecord, t as compact } from "../compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
|
|
3
|
-
import { r as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { t as anonymousSubject } from "../subject-
|
|
7
|
-
import {
|
|
3
|
+
import { n as role, r as allow } from "../role-builder-CXbis5-X.js";
|
|
4
|
+
import { c as listPermissions } from "../permission-registry-Br4jSNVi.js";
|
|
5
|
+
import { r as validateRecord } from "../thenable-yD7SabqG.js";
|
|
6
|
+
import { t as anonymousSubject } from "../subject-BGoM5o8B.js";
|
|
7
|
+
import { d as membershipEvent } from "../sink-BEZSlMS_.js";
|
|
8
8
|
//#region src/better-auth/parse.ts
|
|
9
9
|
function asRoles(value) {
|
|
10
10
|
if (typeof value === "string") return value === "" ? [] : value.split(",").map((item) => item.trim()).filter((item) => item !== "");
|
|
@@ -137,7 +137,7 @@ function rolesFromAccessControl(access, permissions, options = {}) {
|
|
|
137
137
|
}
|
|
138
138
|
return Object.assign(roles, { unmatched });
|
|
139
139
|
}
|
|
140
|
-
function
|
|
140
|
+
function betterAuthCustomRoleSource(auth, options = {}) {
|
|
141
141
|
const assignableRoles = options.assignable ?? [];
|
|
142
142
|
return {
|
|
143
143
|
async rolesFor(tenant) {
|
|
@@ -294,8 +294,9 @@ async function loadMemberships(auth, session, user, userId, tenant, options) {
|
|
|
294
294
|
}
|
|
295
295
|
return [...members, ...teams];
|
|
296
296
|
}
|
|
297
|
-
async function subjectFromBetterAuth(
|
|
297
|
+
async function subjectFromBetterAuth(session, options) {
|
|
298
298
|
try {
|
|
299
|
+
const auth = options.auth;
|
|
299
300
|
if (session === null || session === void 0 || !isTrustedSession(session)) return anonymousSubject();
|
|
300
301
|
if (!isRecord(session["user"])) return anonymousSubject();
|
|
301
302
|
const user = session["user"];
|
|
@@ -328,4 +329,4 @@ async function subjectFromBetterAuth(auth, session, options = {}) {
|
|
|
328
329
|
}
|
|
329
330
|
}
|
|
330
331
|
//#endregion
|
|
331
|
-
export {
|
|
332
|
+
export { betterAuthCustomRoleSource, onRoleChange, rolesFromAccessControl, subjectFromBetterAuth };
|