permdock 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -35
- package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
- package/dist/a2a/index.d.ts +8 -6
- package/dist/a2a/index.js +21 -31
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-B4R5fnMU.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -23
- package/dist/ai-sdk/index.js +38 -21
- package/dist/app-data-MuyzVqX8.js +60 -0
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-Dg8XsRaO.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +228 -75
- package/dist/automation-BMZPIVUM.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +11 -23
- package/dist/better-supabase/index.d.ts +438 -86
- package/dist/better-supabase/index.js +1027 -184
- package/dist/bind--9EFVYWF.d.ts +38 -0
- package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/build-instance-BMnAudHn.js +52 -0
- package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
- package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/catalog-BECMPrwc.js +100 -0
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +26 -30
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +15 -45
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +20 -6
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +240 -347
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
- package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
- package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
- package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
- package/dist/constants-DcJABbLW.js +20 -0
- package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +18 -18
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/create-DnrmLnLW.js +323 -0
- package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/deciding-columns-Sq12mEA6.js +123 -0
- package/dist/delegation-DaXVdDhM.js +286 -0
- package/dist/delegation-input-FTxMK3ji.js +19 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/denied-text-D8jDHgsl.d.ts +19 -0
- package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
- package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/doctor-DFjUxf2f.js +2361 -0
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +6 -14
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +14 -13
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +23 -29
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +14 -12
- package/dist/fastify/index.d.ts +26 -13
- package/dist/fastify/index.js +17 -36
- package/dist/fetch-adapter-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
- package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
- package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
- package/dist/grantee-Cn1HyUsI.js +254 -0
- package/dist/grantee-conditions-CcXf8hMM.js +271 -0
- package/dist/grantee-match-DHArqY82.js +142 -0
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +14 -13
- package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
- package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
- package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/index-DOVf7RJv.d.ts +900 -0
- package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +20 -14
- package/dist/index.js +33 -23
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +166 -145
- package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +6 -14
- package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-CtKR3GXL.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
- package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
- package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
- package/dist/mcp/index.d.ts +36 -9
- package/dist/mcp/index.js +476 -448
- package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +20 -20
- package/dist/next/index.d.ts +40 -20
- package/dist/next/index.js +37 -39
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/ocsf-BFp-PZZA.js +126 -0
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +18 -25
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
- package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +23 -20
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +53 -27
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/output-files-DhRBBE4n.js +138 -0
- package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
- package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
- package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
- package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
- package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +47 -29
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.d.ts +502 -0
- package/dist/permission-registry-Br4jSNVi.js +385 -0
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/policy-DLZJ5gAp.js +399 -0
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +6 -12
- package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
- package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/protected-DEPHc2xV.d.ts +38 -0
- package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
- package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
- package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -63
- package/dist/react-native/index.js +45 -27
- package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/relation-walk-3OyDBF0S.js +186 -0
- package/dist/relations-BnCWnJGI.js +163 -0
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/request-context-BTRTG7OT.js +71 -0
- package/dist/request-context-C2_1lchh.d.ts +5 -0
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/resource-relations-D_jw0BFx.js +243 -0
- package/dist/retire-CALjIQ7e.js +240 -0
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
- package/dist/role-builder-CXbis5-X.js +623 -0
- package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
- package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
- package/dist/server/index.d.ts +13 -134
- package/dist/server/index.js +13 -10
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/shared-CD11nBbC.js +304 -0
- package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +24 -25
- package/dist/solid/index.js +41 -11
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
- package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
- package/dist/sql-B5T1IL83.js +55 -0
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +440 -106
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
- package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
- package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
- package/dist/stores-ClZUgeoP.d.ts +30 -0
- package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +13 -6
- package/dist/supabase/middleware.js +16 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
- package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +11 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +26 -12
- package/dist/svelte/runtime.d.ts +10 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +5 -5
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +36 -316
- package/dist/testing/index.d.ts +391 -106
- package/dist/testing/index.js +4574 -1286
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
- package/dist/tool-refusal-CMLN5xhn.js +41 -0
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +18 -17
- package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
- package/dist/types-BNORmDM8.d.ts +172 -0
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
- package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/types-fbZ7JEXr.d.ts +89 -0
- package/dist/types-tIgIeIKJ.d.ts +66 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
- package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
- package/dist/validity-CZ7-y0Cj.js +79 -0
- package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
- package/dist/verify-DbCL9bnB.js +1770 -0
- package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
- package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
- package/dist/vue/index.d.ts +25 -21
- package/dist/vue/index.js +25 -9
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +13 -37
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/wrap-Bd1Tejur.d.ts +15 -0
- package/dist/wrap-gX61EtpB.js +27 -0
- package/package.json +140 -41
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +129 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +13 -8
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
- package/skills/permdock-wire/SKILL.md +18 -12
- package/skills/permdock-wire/references/adapters.md +146 -50
- package/skills/permdock-wire/references/policy-options.md +15 -6
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DbYAuNkG.js +0 -224
- package/dist/arazzo-C9chp3ST.js +0 -54
- package/dist/bind-C_ob3LKa.d.ts +0 -25
- package/dist/catalog-CRW5Mx_B.js +0 -2
- package/dist/catalog-CYj-mX2O.js +0 -48
- package/dist/catalog-DWF5cYqB.js +0 -55
- package/dist/cloud-CfwZ39Rl.js +0 -50
- package/dist/cloud-DWLXO2af.js +0 -118
- package/dist/collect-CHB22Sx4.js +0 -83
- package/dist/collect-DSWOk19R.js +0 -2
- package/dist/commands-BeaGNj_o.js +0 -97
- package/dist/config-ir40y8m0.js +0 -36
- package/dist/create-CMwIl-w2.js +0 -253
- package/dist/delegation-D8pUEuce.js +0 -103
- package/dist/diff-C9RDjjhs.js +0 -48
- package/dist/doctor-Djh6JDEk.js +0 -53
- package/dist/doctor-DvH0IQff.js +0 -1194
- package/dist/doctor-collect-CjdO0wQX.js +0 -665
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/evaluation-items-CfCCejQd.js +0 -40
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-BMl1RxoX.js +0 -26
- package/dist/grantee-Cv5Sogfv.js +0 -602
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-0nNqHspG.d.ts +0 -6
- package/dist/index-BNc7Wer_.d.ts +0 -483
- package/dist/index-C7Tw7MaW.d.ts +0 -201
- package/dist/instance-options-Dhhcnm3y.js +0 -22
- package/dist/load-DwJUafYN.js +0 -2
- package/dist/manifest-iaoBXHKc.js +0 -783
- package/dist/map-AcxK9o_D.js +0 -147
- package/dist/may-use-DndQ5tQ-.js +0 -77
- package/dist/openapi-CQTsgKoB.js +0 -164
- package/dist/permdock-CbgvLnuo.js +0 -3479
- package/dist/permissions-DVoF6dMt.js +0 -662
- package/dist/policy-xyWg7QdR.js +0 -1122
- package/dist/powersync-CrBX8hY6.js +0 -2
- package/dist/powersync-DE19b9dT.js +0 -62
- package/dist/protected-BdnIEFkY.d.ts +0 -27
- package/dist/protected-xAr24FEC.d.ts +0 -40
- package/dist/relations-cjOL01hZ.js +0 -505
- package/dist/rls-P-BeBx0n.js +0 -238
- package/dist/rls-graph-CHwx0V8q.js +0 -435
- package/dist/rls-ownership-DcYlZ09B.js +0 -843
- package/dist/rls-shared-Cewd_-zI.js +0 -495
- package/dist/rls-verify-CMv9H3wV.js +0 -746
- package/dist/run-BWc9qqvE.js +0 -174
- package/dist/server-DlZ28Oz5.js +0 -268
- package/dist/sink-B1fZzIMf.d.ts +0 -104
- package/dist/sink-Bd9PSyfq.js +0 -141
- package/dist/skills-C5CbhhpG.js +0 -56
- package/dist/snapshot-Enxd0n-s.js +0 -975
- package/dist/sql-xdg5f4Fi.js +0 -27
- package/dist/src-BDwEZWrZ.js +0 -568
- package/dist/store-jOBYpiXC.d.ts +0 -36
- package/dist/stores-C0IMQrGI.d.ts +0 -52
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-config-Bj3iDH2I.js +0 -472
- package/dist/supabase-hook-gd3s8bxB.js +0 -2
- package/dist/supabase-s4o9s1O1.js +0 -83
- package/dist/thenable-okc2xDsj.js +0 -10
- package/dist/types-BnIEz1sU.d.ts +0 -48
- package/dist/types-Bvc4oWT6.d.ts +0 -9
- package/dist/types-CKNSyIf_.d.ts +0 -52
- package/dist/types-Cq_H8N_X.d.ts +0 -197
- package/dist/usage-B0YuTQRO.js +0 -42
- package/dist/usage-DorAJiU_.js +0 -2
- package/dist/vocabulary-DA8a8zif.d.ts +0 -56
- package/dist/watch-BwxLTYMZ.js +0 -2
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ir as Subject } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { m as ApprovalStore } from "./types-CCpc2Dcv.js";
|
|
3
|
+
import { t as InstanceOptions } from "./instance-options-Omfd793B.js";
|
|
4
|
+
import { t as RequestContext } from "./request-context-C2_1lchh.js";
|
|
5
|
+
import { n as PermDockWrap } from "./wrap-Bd1Tejur.js";
|
|
6
|
+
import { o as OtelWrap } from "./types-BqAKcRNW.js";
|
|
7
|
+
import { r as PdpFactory } from "./types-ClZaWzfb.js";
|
|
8
|
+
import { S as TenantOption, _ as WebBotAuthVerifier, t as DeniedResponse } from "./server-types-BLd4MnBX.js";
|
|
9
|
+
//#region src/server/bind.d.ts
|
|
10
|
+
/** The options of every framework adapter; `TContext` is what its callbacks receive. */
|
|
11
|
+
type ServerAdapterOptions<TContext, TUser = unknown> = InstanceOptions & ServerAdapterServices & {
|
|
12
|
+
/** The user, or a full `Subject` (core then skips `policy.subject`). */
|
|
13
|
+
readonly subject: (context: TContext) => TUser | Subject | Promise<TUser | Subject>;
|
|
14
|
+
/** The agent or service acting for the subject; anything but an `Actor` is ignored. */
|
|
15
|
+
readonly actor?: (context: TContext) => unknown;
|
|
16
|
+
readonly tenant?: TenantOption<TContext>;
|
|
17
|
+
/**
|
|
18
|
+
* Request values merged into `subject.context`, under `policy.context`.
|
|
19
|
+
* Only values the server derived belong here, never client input.
|
|
20
|
+
*/
|
|
21
|
+
readonly context?: (context: TContext) => RequestContext | undefined | Promise<RequestContext | undefined>;
|
|
22
|
+
};
|
|
23
|
+
/** The services an adapter hands to its kernel unchanged. */
|
|
24
|
+
type ServerAdapterServices = {
|
|
25
|
+
readonly store?: ApprovalStore;
|
|
26
|
+
/** `getPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
|
|
27
|
+
readonly pdp?: PdpFactory;
|
|
28
|
+
/** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
|
|
29
|
+
readonly otel?: OtelWrap;
|
|
30
|
+
/** `webBotAuthVerifier(options)`; a verified bot becomes the actor. */
|
|
31
|
+
readonly webBotAuth?: WebBotAuthVerifier;
|
|
32
|
+
/** Wraps each instance after `otel`; build it with `wrapPermDock` to cover derived instances. */
|
|
33
|
+
readonly wrap?: PermDockWrap;
|
|
34
|
+
/** Replaces the response of a refused guard; it can never turn a refusal into a grant. */
|
|
35
|
+
readonly deniedResponse?: DeniedResponse;
|
|
36
|
+
};
|
|
37
|
+
//#endregion
|
|
38
|
+
export { ServerAdapterServices as n, ServerAdapterOptions as t };
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { c as withApp } from "./permdock-B9JxkBwC.js";
|
|
3
|
+
import { t as composeWraps } from "./wrap-gX61EtpB.js";
|
|
4
|
+
import { r as instanceOptions } from "./build-instance-BMnAudHn.js";
|
|
5
|
+
import { p as invalidSignatureResponse } from "./evaluations-DZ2CbV5k.js";
|
|
6
|
+
import { n as tenantScope } from "./adapter-context-CRhqyzCk.js";
|
|
7
|
+
import { t as createPermDock } from "./create-DnrmLnLW.js";
|
|
6
8
|
//#region src/server/bind.ts
|
|
7
9
|
/** The server kernel with the subject and actor callbacks reading the context `contextOf` maps a `Request` to. */
|
|
8
10
|
function adapterKernel(policy, options, adapter, contextOf) {
|
|
9
|
-
return
|
|
11
|
+
return createPermDock(policy, compact({
|
|
10
12
|
subject: (request) => {
|
|
11
13
|
const context = contextOf(request);
|
|
12
14
|
return context === void 0 ? null : options.subject(context);
|
|
@@ -15,20 +17,26 @@ function adapterKernel(policy, options, adapter, contextOf) {
|
|
|
15
17
|
const context = contextOf(request);
|
|
16
18
|
return context === void 0 ? void 0 : options.actor?.(context);
|
|
17
19
|
},
|
|
20
|
+
context: options.context === void 0 ? void 0 : (request) => {
|
|
21
|
+
const context = contextOf(request);
|
|
22
|
+
return context === void 0 ? void 0 : options.context?.(context);
|
|
23
|
+
},
|
|
18
24
|
...instanceOptions(options),
|
|
19
25
|
store: options.store,
|
|
20
26
|
pdp: options.pdp,
|
|
21
27
|
webBotAuth: options.webBotAuth,
|
|
22
28
|
revocations: options.revocations,
|
|
23
29
|
adapter,
|
|
24
|
-
wrap: options.otel
|
|
30
|
+
wrap: composeWraps(options.otel, options.wrap),
|
|
31
|
+
deniedResponse: options.deniedResponse
|
|
25
32
|
}));
|
|
26
33
|
}
|
|
27
34
|
/**
|
|
28
35
|
* The kernel of a framework adapter, with the subject, actor and tenant
|
|
29
36
|
* callbacks reading the framework context each `Request` was built from.
|
|
30
37
|
*/
|
|
31
|
-
function bindKernel(policy,
|
|
38
|
+
function bindKernel(policy, given, adapter, toRequest) {
|
|
39
|
+
const options = withApp(policy, given);
|
|
32
40
|
const contexts = /* @__PURE__ */ new WeakMap();
|
|
33
41
|
const bound = /* @__PURE__ */ new WeakMap();
|
|
34
42
|
const kernel = adapterKernel(policy, options, adapter, (request) => contexts.get(request));
|
|
@@ -52,14 +60,18 @@ function bindKernel(policy, options, adapter, toRequest) {
|
|
|
52
60
|
const context = contexts.get(request);
|
|
53
61
|
return context === void 0 ? Promise.resolve({ tenant: void 0 }) : scopeOf(context);
|
|
54
62
|
};
|
|
55
|
-
const
|
|
63
|
+
const getPermDock = async (context) => kernel.getPermDock(bind(context), await scopeOf(context));
|
|
64
|
+
const attach = (context) => attached(() => getPermDock(context));
|
|
65
|
+
const guard = async (permission, data, context, protectOptions) => kernel.protect(permission, data === void 0 ? void 0 : () => data(context), protectOptions)(bind(context), await scopeOf(context));
|
|
56
66
|
return {
|
|
57
67
|
kernel,
|
|
58
68
|
bind,
|
|
59
69
|
rebind,
|
|
60
70
|
scopeOf,
|
|
61
71
|
handlerScope,
|
|
62
|
-
|
|
72
|
+
getPermDock,
|
|
73
|
+
attach,
|
|
74
|
+
guard
|
|
63
75
|
};
|
|
64
76
|
}
|
|
65
77
|
/** The instance `build` resolves; an invalid Web Bot Auth signature is its `401` response. */
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { o as statusProblem } from "./problem-details-cn5X30gZ.js";
|
|
2
|
+
import { t as MAX_BODY_BYTES } from "./body-text-QcXok_SI.js";
|
|
3
|
+
import { c as problemResponse } from "./problem-CTviyH5L.js";
|
|
4
|
+
//#region src/server/body.ts
|
|
5
|
+
/** The 413 Problem Details for a body over `maxBytes`. */
|
|
6
|
+
function bodyTooLarge(maxBytes = MAX_BODY_BYTES) {
|
|
7
|
+
return problemResponse(statusProblem(413, `request body exceeds ${String(maxBytes)} bytes`));
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { bodyTooLarge as t };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
//#region src/server/body-text.ts
|
|
2
|
+
/** The largest request body PermDock reads when a handler sets no smaller cap: 1 MiB. */
|
|
3
|
+
const MAX_BODY_BYTES = 1048576;
|
|
4
|
+
/**
|
|
5
|
+
* The request or response body as UTF-8 text, read until `maxBytes` and no further. A
|
|
6
|
+
* `Content-Length` above the cap is refused before the body is touched; a body
|
|
7
|
+
* that runs past the cap whatever its header says is cancelled mid-stream.
|
|
8
|
+
*/
|
|
9
|
+
async function readBodyText(request, maxBytes = MAX_BODY_BYTES) {
|
|
10
|
+
const declared = request.headers.get("content-length");
|
|
11
|
+
if (declared !== null && Number(declared) > maxBytes) return {
|
|
12
|
+
ok: false,
|
|
13
|
+
cause: "too-large"
|
|
14
|
+
};
|
|
15
|
+
if (request.bodyUsed) return {
|
|
16
|
+
ok: false,
|
|
17
|
+
cause: "unreadable"
|
|
18
|
+
};
|
|
19
|
+
if (request.body === null) return {
|
|
20
|
+
ok: true,
|
|
21
|
+
text: ""
|
|
22
|
+
};
|
|
23
|
+
const decoder = new TextDecoder();
|
|
24
|
+
let size = 0;
|
|
25
|
+
let text = "";
|
|
26
|
+
try {
|
|
27
|
+
const reader = request.body.getReader();
|
|
28
|
+
for (;;) {
|
|
29
|
+
const chunk = await reader.read();
|
|
30
|
+
if (chunk.done) return {
|
|
31
|
+
ok: true,
|
|
32
|
+
text: text + decoder.decode()
|
|
33
|
+
};
|
|
34
|
+
size += chunk.value.byteLength;
|
|
35
|
+
if (size > maxBytes) {
|
|
36
|
+
await reader.cancel();
|
|
37
|
+
return {
|
|
38
|
+
ok: false,
|
|
39
|
+
cause: "too-large"
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
text += decoder.decode(chunk.value, { stream: true });
|
|
43
|
+
}
|
|
44
|
+
} catch {
|
|
45
|
+
return {
|
|
46
|
+
ok: false,
|
|
47
|
+
cause: "unreadable"
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { readBodyText as n, MAX_BODY_BYTES as t };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { t as getPermDock } from "./permdock-B9JxkBwC.js";
|
|
3
|
+
//#region src/core/instance-options.ts
|
|
4
|
+
const INSTANCE_KEYS = {
|
|
5
|
+
memberships: true,
|
|
6
|
+
relations: true,
|
|
7
|
+
entitlements: true,
|
|
8
|
+
customRoles: true,
|
|
9
|
+
policies: true,
|
|
10
|
+
approvalPolicies: true,
|
|
11
|
+
sink: true,
|
|
12
|
+
limits: true,
|
|
13
|
+
principals: true
|
|
14
|
+
};
|
|
15
|
+
/** The `InstanceOptions` set on `options`, without the adapter's own keys. */
|
|
16
|
+
function instanceOptions(options) {
|
|
17
|
+
const picked = {};
|
|
18
|
+
for (const key of Object.keys(INSTANCE_KEYS)) {
|
|
19
|
+
const name = key;
|
|
20
|
+
if (options[name] !== void 0) picked[name] = options[name];
|
|
21
|
+
}
|
|
22
|
+
return picked;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/core/build-instance.ts
|
|
26
|
+
/**
|
|
27
|
+
* `resolve()`, or `null` when it throws: a subject or delegation that cannot
|
|
28
|
+
* be resolved is absent. `rethrow` sees the error first, so a framework's
|
|
29
|
+
* control-flow throws (Next.js `redirect`, `notFound`) pass through.
|
|
30
|
+
*/
|
|
31
|
+
async function resolveOrNull(resolve, rethrow) {
|
|
32
|
+
try {
|
|
33
|
+
return await resolve();
|
|
34
|
+
} catch (error) {
|
|
35
|
+
rethrow?.(error);
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** The one path every server adapter creates a request's instance through. */
|
|
40
|
+
async function buildInstance(input) {
|
|
41
|
+
const options = compact({
|
|
42
|
+
...instanceOptions(input.sources),
|
|
43
|
+
...input.scope
|
|
44
|
+
});
|
|
45
|
+
const created = await getPermDock(input.policy, input.user, options);
|
|
46
|
+
return {
|
|
47
|
+
permdock: input.wrap === void 0 ? created : input.wrap(created),
|
|
48
|
+
options
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { resolveOrNull as n, instanceOptions as r, buildInstance as t };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
1
2
|
//#region src/core/canonical-json.ts
|
|
2
|
-
function isRecord(value) {
|
|
3
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
4
|
-
}
|
|
5
3
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* RFC 8785 (JCS) output for I-JSON input: keys sorted by UTF-16 code units,
|
|
5
|
+
* ECMAScript number and string serialisation, no whitespace. `undefined`
|
|
6
|
+
* members are dropped. Outside I-JSON, Dates become ISO strings, bigints
|
|
7
|
+
* `"<n>n"`, and a repeated object on the current path `"[Circular]"`, so any
|
|
8
|
+
* validated row serialises.
|
|
9
9
|
*/
|
|
10
10
|
function canonicalJson(value, path = /* @__PURE__ */ new Set()) {
|
|
11
11
|
if (typeof value === "bigint") return JSON.stringify(`${value}n`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Rt as Instant, rr as Principal, ut as TokenSigner } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { E as PermissionTree, w as Permission } from "./vocabulary-D6lPdb4Z.js";
|
|
3
3
|
//#region src/core/capability.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Who may redeem a capability: anyone holding it, any signed-in principal,
|
|
@@ -12,15 +12,18 @@ type CapabilityRedeemer = "anyone" | "signed-in" | {
|
|
|
12
12
|
readonly scope: string;
|
|
13
13
|
readonly id: string;
|
|
14
14
|
};
|
|
15
|
+
/** RFC 7800 confirmation: the SHA-256 JWK thumbprint (RFC 7638) of the key that must redeem it. */
|
|
16
|
+
type CapabilityConfirmation = {
|
|
17
|
+
readonly jkt: string;
|
|
18
|
+
};
|
|
15
19
|
/**
|
|
16
|
-
* Capability v1: the `capability` claim of a `permdock
|
|
17
|
-
* holds `roles` on one resource instance (`on`, the `Membership.on`
|
|
18
|
-
* optionally narrowed to `permissions` (keys).
|
|
19
|
-
* token's `sub` and the
|
|
20
|
+
* Capability v1: the `capability` claim of a `vnd.permdock.capability+jwt`.
|
|
21
|
+
* It holds `roles` on one resource instance (`on`, the `Membership.on`
|
|
22
|
+
* shape), optionally narrowed to `permissions` (keys). The link id is the
|
|
23
|
+
* token's `sub` and its expiry the token's `exp`; neither repeats here.
|
|
20
24
|
*/
|
|
21
|
-
type
|
|
25
|
+
type CapabilityClaim = {
|
|
22
26
|
readonly v: 1;
|
|
23
|
-
readonly id: string;
|
|
24
27
|
/** `key` is reserved for user-bound credentials and resolves to no subject. */
|
|
25
28
|
readonly holder: "link" | "key";
|
|
26
29
|
readonly on: {
|
|
@@ -32,10 +35,18 @@ type Capability = {
|
|
|
32
35
|
readonly redeemer?: CapabilityRedeemer;
|
|
33
36
|
/** One request per token: the resolver claims the token's `jti` in a `ReplayStore`. */
|
|
34
37
|
readonly once?: true;
|
|
35
|
-
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* A verified capability: the claim plus `id` (the token's `sub`, the handle
|
|
41
|
+
* an application revokes), `expiresAt` (its `exp`, Unix seconds, also the
|
|
42
|
+
* membership's `expiresAt`) and `cnf` when the token binds a redeemer key.
|
|
43
|
+
*/
|
|
44
|
+
type Capability = CapabilityClaim & {
|
|
45
|
+
readonly id: string;
|
|
36
46
|
readonly expiresAt: number;
|
|
47
|
+
readonly cnf?: CapabilityConfirmation;
|
|
37
48
|
};
|
|
38
|
-
type
|
|
49
|
+
type CapabilityPrincipal = Principal & {
|
|
39
50
|
readonly kind: "link";
|
|
40
51
|
readonly capability: Capability;
|
|
41
52
|
};
|
|
@@ -49,7 +60,10 @@ type CapabilityInput = {
|
|
|
49
60
|
readonly permissions?: readonly Permission[];
|
|
50
61
|
readonly redeemer?: CapabilityRedeemer;
|
|
51
62
|
readonly once?: boolean;
|
|
63
|
+
/** `exp`, Unix seconds. */
|
|
52
64
|
readonly expiresAt: number;
|
|
65
|
+
/** Binds the link to the key with this RFC 7638 thumbprint; redeeming it then needs a DPoP proof from that key. */
|
|
66
|
+
readonly cnf?: CapabilityConfirmation;
|
|
53
67
|
};
|
|
54
68
|
/**
|
|
55
69
|
* What one scope instance (a tenant, a customer) allows for links on its
|
|
@@ -64,8 +78,10 @@ type LinkPolicy = {
|
|
|
64
78
|
readonly once?: boolean;
|
|
65
79
|
};
|
|
66
80
|
type LinkPolicyViolation = "lifetime" | "redeemer" | "once";
|
|
67
|
-
type
|
|
81
|
+
type CapabilityOptions = {
|
|
68
82
|
readonly audience?: string | readonly string[];
|
|
83
|
+
/** `iat`; the clock when absent. */
|
|
84
|
+
readonly issuedAt?: Instant;
|
|
69
85
|
/** Refuse to sign a link these policies would refuse at resolution. */
|
|
70
86
|
readonly linkPolicy?: LinkPolicy | readonly LinkPolicy[];
|
|
71
87
|
};
|
|
@@ -76,24 +92,27 @@ type SignCapabilityOptions = {
|
|
|
76
92
|
*/
|
|
77
93
|
declare function linkPolicyViolation(capability: Capability, policy: LinkPolicy | readonly LinkPolicy[], issuedAt: number | undefined): LinkPolicyViolation | undefined;
|
|
78
94
|
/**
|
|
79
|
-
* Validates
|
|
80
|
-
*
|
|
81
|
-
* type in a known field rejects the whole claim.
|
|
95
|
+
* Validates a verified capability (a claim plus `id`, `expiresAt` and
|
|
96
|
+
* an optional `cnf`) and returns a frozen copy, or `undefined`.
|
|
82
97
|
*/
|
|
83
98
|
declare function parseCapability(input: unknown): Capability | undefined;
|
|
84
99
|
/**
|
|
85
|
-
*
|
|
86
|
-
* `exp`
|
|
100
|
+
* The capability verified claims carry: the `capability` claim, `sub` as
|
|
101
|
+
* `id`, `exp` as `expiresAt` and the RFC 7800 `cnf`. `undefined` when any
|
|
102
|
+
* of them is missing or malformed.
|
|
103
|
+
*/
|
|
104
|
+
declare function capabilityFromClaims(claims: Readonly<Record<string, unknown>>): Capability | undefined;
|
|
105
|
+
/**
|
|
106
|
+
* Validates an untrusted `capability` claim and returns a frozen copy with
|
|
107
|
+
* only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
|
|
108
|
+
* type in a known field rejects the whole claim.
|
|
87
109
|
*/
|
|
88
|
-
declare function
|
|
110
|
+
declare function parseCapabilityClaim(input: unknown): CapabilityClaim | undefined;
|
|
89
111
|
/**
|
|
90
|
-
*
|
|
91
|
-
* `
|
|
92
|
-
* `
|
|
93
|
-
* the anonymous subject until user-bound credentials ship.
|
|
112
|
+
* Signs a capability as a `vnd.permdock.capability+jwt`: `sub` is the link
|
|
113
|
+
* id, `exp` is `expiresAt`, `cnf` binds the redeemer's key, and the signer
|
|
114
|
+
* sets `iss`, `aud`, `iat` (`issuedAt`, else now) and a fresh `jti`.
|
|
94
115
|
*/
|
|
95
|
-
declare function
|
|
96
|
-
readonly issuer?: string;
|
|
97
|
-
}): Subject<LinkPrincipal> | Subject;
|
|
116
|
+
declare function signCapability(input: CapabilityInput, signer: TokenSigner, options?: CapabilityOptions): Promise<string>;
|
|
98
117
|
//#endregion
|
|
99
|
-
export {
|
|
118
|
+
export { CapabilityOptions as a, LinkPolicy as c, linkPolicyViolation as d, parseCapability as f, CapabilityInput as i, LinkPolicyViolation as l, signCapability as m, CapabilityClaim as n, CapabilityPrincipal as o, parseCapabilityClaim as p, CapabilityConfirmation as r, CapabilityRedeemer as s, Capability as t, capabilityFromClaims as u };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
-
import {
|
|
4
|
-
import { t as expiredAt } from "./expiry-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { a as ownRecord } from "./paths-DXSHAMIa.js";
|
|
4
|
+
import { a as isId, o as sameId, r as idList, t as expiredAt } from "./expiry-D4_YKRKD.js";
|
|
5
|
+
import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
|
|
6
|
+
import { o as epochSeconds, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
7
|
+
import { t as anonymousSubject } from "./subject-BGoM5o8B.js";
|
|
7
8
|
//#region src/core/capability.ts
|
|
8
9
|
function redeemerKind(redeemer) {
|
|
9
10
|
if (redeemer === void 0 || typeof redeemer === "string") return redeemer ?? "anyone";
|
|
@@ -23,22 +24,6 @@ function linkPolicyViolation(capability, policy, issuedAt) {
|
|
|
23
24
|
if (item.once === true && capability.once !== true) return "once";
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
|
-
const MAX_ID = 256;
|
|
27
|
-
const MAX_ENTRIES = 64;
|
|
28
|
-
/** A copy holding only own enumerable properties, so a prototype never supplies a field. */
|
|
29
|
-
function ownRecord(value) {
|
|
30
|
-
if (value === null || typeof value !== "object" || Array.isArray(value)) return;
|
|
31
|
-
const record = {};
|
|
32
|
-
for (const [key, item] of Object.entries(value)) if (!isForbiddenKey(key)) record[key] = item;
|
|
33
|
-
return record;
|
|
34
|
-
}
|
|
35
|
-
function isId(value) {
|
|
36
|
-
return typeof value === "string" && value.length > 0 && value.length <= MAX_ID;
|
|
37
|
-
}
|
|
38
|
-
function idList(value) {
|
|
39
|
-
if (!Array.isArray(value) || value.length === 0 || value.length > MAX_ENTRIES || !value.every(isId)) return;
|
|
40
|
-
return [...new Set(value)];
|
|
41
|
-
}
|
|
42
27
|
function parseRedeemer(input) {
|
|
43
28
|
if (input === "anyone" || input === "signed-in") return input;
|
|
44
29
|
const value = ownRecord(input);
|
|
@@ -50,14 +35,54 @@ function parseRedeemer(input) {
|
|
|
50
35
|
id: value["id"]
|
|
51
36
|
};
|
|
52
37
|
}
|
|
38
|
+
function parseConfirmation(input) {
|
|
39
|
+
const jkt = ownRecord(input)?.["jkt"];
|
|
40
|
+
return typeof jkt === "string" && /^[\w-]{43}$/u.test(jkt) ? { jkt } : void 0;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validates a verified capability (a claim plus `id`, `expiresAt` and
|
|
44
|
+
* an optional `cnf`) and returns a frozen copy, or `undefined`.
|
|
45
|
+
*/
|
|
46
|
+
function parseCapability(input) {
|
|
47
|
+
const value = ownRecord(input);
|
|
48
|
+
const claim = parseCapabilityClaim(input);
|
|
49
|
+
if (value === void 0 || claim === void 0 || !isId(value["id"])) return;
|
|
50
|
+
const expiresAt = value["expiresAt"];
|
|
51
|
+
if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt)) return;
|
|
52
|
+
const cnf = value["cnf"] === void 0 ? void 0 : parseConfirmation(value["cnf"]);
|
|
53
|
+
if (value["cnf"] !== void 0 && cnf === void 0) return;
|
|
54
|
+
return freezeDeep(compact({
|
|
55
|
+
...claim,
|
|
56
|
+
id: value["id"],
|
|
57
|
+
expiresAt,
|
|
58
|
+
cnf
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The capability verified claims carry: the `capability` claim, `sub` as
|
|
63
|
+
* `id`, `exp` as `expiresAt` and the RFC 7800 `cnf`. `undefined` when any
|
|
64
|
+
* of them is missing or malformed.
|
|
65
|
+
*/
|
|
66
|
+
function capabilityFromClaims(claims) {
|
|
67
|
+
const claim = parseCapabilityClaim(claims["capability"]);
|
|
68
|
+
const sub = claims["sub"];
|
|
69
|
+
const exp = claims["exp"];
|
|
70
|
+
if (claim === void 0 || !isId(sub) || typeof exp !== "number") return;
|
|
71
|
+
return parseCapability({
|
|
72
|
+
...claim,
|
|
73
|
+
id: sub,
|
|
74
|
+
expiresAt: exp,
|
|
75
|
+
cnf: claims["cnf"]
|
|
76
|
+
});
|
|
77
|
+
}
|
|
53
78
|
/**
|
|
54
79
|
* Validates an untrusted `capability` claim and returns a frozen copy with
|
|
55
80
|
* only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
|
|
56
81
|
* type in a known field rejects the whole claim.
|
|
57
82
|
*/
|
|
58
|
-
function
|
|
83
|
+
function parseCapabilityClaim(input) {
|
|
59
84
|
const value = ownRecord(input);
|
|
60
|
-
if (value === void 0 || value["v"] !== 1
|
|
85
|
+
if (value === void 0 || value["v"] !== 1) return;
|
|
61
86
|
if (value["holder"] !== "link" && value["holder"] !== "key") return;
|
|
62
87
|
const on = ownRecord(value["on"]);
|
|
63
88
|
if (on === void 0 || !isId(on["resource"]) || !isId(on["id"])) return;
|
|
@@ -68,11 +93,8 @@ function parseCapability(input) {
|
|
|
68
93
|
const redeemer = value["redeemer"] === void 0 ? void 0 : parseRedeemer(value["redeemer"]);
|
|
69
94
|
if (value["redeemer"] !== void 0 && redeemer === void 0) return;
|
|
70
95
|
if (value["once"] !== void 0 && value["once"] !== true) return;
|
|
71
|
-
const expiresAt = value["expiresAt"];
|
|
72
|
-
if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt)) return;
|
|
73
96
|
return freezeDeep(compact({
|
|
74
97
|
v: 1,
|
|
75
|
-
id: value["id"],
|
|
76
98
|
holder: value["holder"],
|
|
77
99
|
on: {
|
|
78
100
|
resource: on["resource"],
|
|
@@ -81,8 +103,7 @@ function parseCapability(input) {
|
|
|
81
103
|
roles,
|
|
82
104
|
permissions,
|
|
83
105
|
redeemer,
|
|
84
|
-
once: value["once"]
|
|
85
|
-
expiresAt
|
|
106
|
+
once: value["once"]
|
|
86
107
|
}));
|
|
87
108
|
}
|
|
88
109
|
function resourceName(resource) {
|
|
@@ -105,26 +126,32 @@ function capabilityOf(input) {
|
|
|
105
126
|
permissions: input.permissions?.map((permission) => permission.key),
|
|
106
127
|
redeemer: input.redeemer,
|
|
107
128
|
once: input.once === true ? true : void 0,
|
|
108
|
-
expiresAt: Math.floor(input.expiresAt)
|
|
129
|
+
expiresAt: Math.floor(input.expiresAt),
|
|
130
|
+
cnf: input.cnf
|
|
109
131
|
}));
|
|
110
|
-
if (capability === void 0) throw new Error("PermDock: invalid capability (id, on.id and roles are required; roles and permissions hold at most 64 entries)");
|
|
132
|
+
if (capability === void 0) throw new Error("PermDock: invalid capability (id, on.id and roles are required; roles and permissions hold at most 64 entries; cnf.jkt is a base64url SHA-256 thumbprint)");
|
|
111
133
|
return capability;
|
|
112
134
|
}
|
|
113
135
|
/**
|
|
114
|
-
* Signs a capability as a `permdock
|
|
115
|
-
* `exp` is `expiresAt`,
|
|
136
|
+
* Signs a capability as a `vnd.permdock.capability+jwt`: `sub` is the link
|
|
137
|
+
* id, `exp` is `expiresAt`, `cnf` binds the redeemer's key, and the signer
|
|
138
|
+
* sets `iss`, `aud`, `iat` (`issuedAt`, else now) and a fresh `jti`.
|
|
116
139
|
*/
|
|
117
140
|
function signCapability(input, signer, options = {}) {
|
|
118
141
|
const capability = capabilityOf(input);
|
|
119
|
-
const
|
|
142
|
+
const issuedAt = nowSeconds(options.issuedAt);
|
|
143
|
+
const violation = options.linkPolicy === void 0 ? void 0 : linkPolicyViolation(capability, options.linkPolicy, issuedAt);
|
|
120
144
|
if (violation !== void 0) return Promise.reject(/* @__PURE__ */ new Error(`PermDock: capability breaks the link policy (${violation})`));
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
145
|
+
const { id, expiresAt, cnf, ...claim } = capability;
|
|
146
|
+
return signer.sign(compact({
|
|
147
|
+
capability: claim,
|
|
148
|
+
sub: id,
|
|
149
|
+
cnf
|
|
150
|
+
}), compact({
|
|
151
|
+
typ: "vnd.permdock.capability+jwt",
|
|
126
152
|
audience: options.audience,
|
|
127
|
-
expiresAt
|
|
153
|
+
expiresAt,
|
|
154
|
+
issuedAt
|
|
128
155
|
}));
|
|
129
156
|
}
|
|
130
157
|
function holdsScope(membership, scope, id, now) {
|
|
@@ -133,10 +160,10 @@ function holdsScope(membership, scope, id, now) {
|
|
|
133
160
|
return scope === "tenant" && sameId(membership.tenant, id) || scope === "team" && sameId(membership.team, id);
|
|
134
161
|
}
|
|
135
162
|
/** Whether `viewer`, the request's own verified subject, may redeem a capability. */
|
|
136
|
-
function redeemerAllows(redeemer, viewer, now =
|
|
163
|
+
function redeemerAllows(redeemer, viewer, now = epochSeconds()) {
|
|
137
164
|
if (redeemer === void 0 || redeemer === "anyone") return true;
|
|
138
165
|
const principal = viewer?.principal ?? null;
|
|
139
|
-
if (principal === null || principal.kind === "link") return false;
|
|
166
|
+
if (principal === null || principal.kind === "link" || principal.kind === "feed") return false;
|
|
140
167
|
if (redeemer === "signed-in") return true;
|
|
141
168
|
if ("user" in redeemer) return principal.id === redeemer.user;
|
|
142
169
|
return (principal.memberships ?? []).some((membership) => holdsScope(membership, redeemer.scope, redeemer.id, now));
|
|
@@ -170,4 +197,4 @@ function capabilitySubject(capability, options = {}) {
|
|
|
170
197
|
}));
|
|
171
198
|
}
|
|
172
199
|
//#endregion
|
|
173
|
-
export {
|
|
200
|
+
export { parseCapability as a, signCapability as c, linkPolicyViolation as i, capabilityOf as n, parseCapabilityClaim as o, capabilitySubject as r, redeemerAllows as s, capabilityFromClaims as t };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { t as defineLeaf } from "./command-L8EstFNm.js";
|
|
2
|
+
import { c as given, l as outFlag, o as fileOut } from "./flags-C3DktBDY.js";
|
|
3
|
+
//#region src/cli/commands/casbin.ts
|
|
4
|
+
const casbinImport = defineLeaf({
|
|
5
|
+
flags: {
|
|
6
|
+
model: {
|
|
7
|
+
type: "string",
|
|
8
|
+
description: "The Casbin model.conf",
|
|
9
|
+
valueHint: "file"
|
|
10
|
+
},
|
|
11
|
+
policy: {
|
|
12
|
+
type: "string",
|
|
13
|
+
description: "The Casbin policy.csv",
|
|
14
|
+
valueHint: "file"
|
|
15
|
+
},
|
|
16
|
+
...outFlag
|
|
17
|
+
},
|
|
18
|
+
async run(ctx, { flags }) {
|
|
19
|
+
const { runCasbinImport } = await import("./casbin-Dyu2gnUD.js");
|
|
20
|
+
return runCasbinImport({
|
|
21
|
+
cwd: ctx.cwd,
|
|
22
|
+
model: given(flags.model),
|
|
23
|
+
policy: given(flags.policy),
|
|
24
|
+
out: fileOut("casbin import", flags.out),
|
|
25
|
+
json: ctx.json
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
//#endregion
|
|
30
|
+
export { casbinImport };
|