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
|
@@ -1,14 +1,298 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { Rt as Instant, St as ApiKeyPrincipal, T as Policy, U as CredentialVerifier, gt as SupportSession, ir as Subject, pn as ApproverInput, qt as AuthEvent, rr as Principal } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { E as PermissionTree, w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { d as PrincipalIdentity, i as PermDockOptions, p as PrincipalSource, r as PermDock } from "../permdock-D7eeLJER.js";
|
|
4
|
+
import { c as AccessReviewStore } from "../types-_sHy8BQf.js";
|
|
5
|
+
import { i as SupabaseRpcCaller } from "../postgrest-NUqZT-RB.js";
|
|
6
|
+
import { g as SupabaseSubjectOptions, m as SupabaseSessionLike, u as SupabasePrincipal } from "../types-CdlxsYQh.js";
|
|
7
|
+
import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-BSslw1QV.js";
|
|
4
8
|
import { AuthorizationProvider } from "better-supabase/config";
|
|
9
|
+
import { AuthSession, AuthorizationHooks, Authorizer, SupportAuthorize, SupportAuthorizeInput } from "better-supabase/server";
|
|
10
|
+
import { EntitlementClaimOptions } from "better-supabase/blocks/entitlements";
|
|
11
|
+
import { ApiKey, ApiKeyClaimsOptions, ApiKeys } from "better-supabase/blocks/api-keys";
|
|
5
12
|
import { AccessTopicPolicy } from "better-supabase/realtime";
|
|
6
13
|
import { AccessBucketPolicy } from "better-supabase/storage";
|
|
7
|
-
import { ApiKey, ApiKeyClaimsOptions, ApiKeys } from "better-supabase/blocks/api-keys";
|
|
8
14
|
import { CredentialProvider } from "better-supabase/credentials";
|
|
9
15
|
import { ToolDecision, ToolRef } from "better-supabase/mcp";
|
|
10
|
-
import {
|
|
11
|
-
|
|
16
|
+
import { AuthorizeHookOptions, ProtectWebHandlerOptions } from "better-supabase/workflow-sdk";
|
|
17
|
+
//#region src/better-supabase/access-reviews.d.ts
|
|
18
|
+
type AccessReviewApplierOptions = {
|
|
19
|
+
/**
|
|
20
|
+
* A supabase-js client that may call the organizations and invitations
|
|
21
|
+
* block functions. Pass the reviewer's client so the block's own
|
|
22
|
+
* permission and role-ceiling checks run as the reviewer.
|
|
23
|
+
*/
|
|
24
|
+
readonly client: SupabaseRpcCaller;
|
|
25
|
+
readonly reviews: AccessReviewStore;
|
|
26
|
+
/** Decides whether a fallback role or an invitation's role grants the reviewed permission. */
|
|
27
|
+
readonly policy: Policy;
|
|
28
|
+
/**
|
|
29
|
+
* The role a revoked member moves to with `update_member_role`: one role,
|
|
30
|
+
* or a map from the roles in the item's `via` to their fallback. A
|
|
31
|
+
* fallback that still grants the permission, or none, removes the member
|
|
32
|
+
* with `remove_member` instead.
|
|
33
|
+
*/
|
|
34
|
+
readonly demoteTo?: string | Readonly<Record<string, string>>;
|
|
35
|
+
/**
|
|
36
|
+
* The member's email, for revoking the tenant's open invitations to it
|
|
37
|
+
* whose role grants the permission. Without it invitations are left alone.
|
|
38
|
+
*/
|
|
39
|
+
readonly email?: (userId: string) => string | null | undefined | Promise<string | null | undefined>;
|
|
40
|
+
/**
|
|
41
|
+
* An instance for the member in the review's tenant, read after the
|
|
42
|
+
* change. An item it still grants is not marked applied.
|
|
43
|
+
*/
|
|
44
|
+
readonly permdockFor?: (principalId: string, tenant: string) => PermDock | Promise<PermDock>;
|
|
45
|
+
/** The schema of the block functions; better-supabase's default is `better_supabase`. */
|
|
46
|
+
readonly schema?: string;
|
|
47
|
+
/** The scope review tenants are; defaults to the policy's first scope. */
|
|
48
|
+
readonly scope?: string;
|
|
49
|
+
readonly now?: Instant;
|
|
50
|
+
};
|
|
51
|
+
type AccessReviewApplyFailure = {
|
|
52
|
+
readonly item: string;
|
|
53
|
+
readonly cause: string;
|
|
54
|
+
};
|
|
55
|
+
type AccessReviewApplyResult = {
|
|
56
|
+
/** Items marked applied, including those whose member was already gone. */
|
|
57
|
+
readonly applied: readonly string[];
|
|
58
|
+
/** Items left unapplied, with the error the block function or the re-check gave. */
|
|
59
|
+
readonly failed: readonly AccessReviewApplyFailure[];
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Applies the revoked items of an access review to better-supabase's
|
|
63
|
+
* organizations and invitations blocks, then marks each one applied. A
|
|
64
|
+
* revoked member moves to the `demoteTo` role when the policy says that
|
|
65
|
+
* role lacks the permission, and is removed otherwise. With `email`, the
|
|
66
|
+
* tenant's open invitations to the member whose role grants the permission
|
|
67
|
+
* are revoked too. A member who is no longer in the organization counts as
|
|
68
|
+
* applied. Any other error leaves the item unapplied in `failed`, and one
|
|
69
|
+
* item's failure never stops the others. Throws `review-not-found` for an
|
|
70
|
+
* unknown review.
|
|
71
|
+
*/
|
|
72
|
+
export declare function accessReviewApplier(options: AccessReviewApplierOptions): (reviewId: string) => Promise<AccessReviewApplyResult>;
|
|
73
|
+
//#endregion
|
|
74
|
+
//#region src/better-supabase/approvers.d.ts
|
|
75
|
+
/**
|
|
76
|
+
* Who may approve each better-supabase request kind: `'ai-tool'` (a tool
|
|
77
|
+
* call), `'support-session'`, or `'<subject type>.<action>'` from the
|
|
78
|
+
* approvals block.
|
|
79
|
+
*/
|
|
80
|
+
type ProviderApprovers = Readonly<Record<string, ApproverInput>>;
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region src/better-supabase/subscribers.d.ts
|
|
83
|
+
/** The fields of better-supabase's `OutboxEvent` the policy reads. */
|
|
84
|
+
type SubscriberPolicyEvent = {
|
|
85
|
+
readonly type: string;
|
|
86
|
+
readonly tenant: string | null;
|
|
87
|
+
readonly actorId: string | null;
|
|
88
|
+
readonly payload: unknown;
|
|
89
|
+
};
|
|
90
|
+
type SubscriberPolicyOptions<E extends SubscriberPolicyEvent = SubscriberPolicyEvent> = {
|
|
91
|
+
readonly policy: Policy;
|
|
92
|
+
/** Loads the sender and every subscriber's principal. */
|
|
93
|
+
readonly principals: PrincipalSource;
|
|
94
|
+
/**
|
|
95
|
+
* The permission a subscriber needs for each event type: an exact type,
|
|
96
|
+
* `prefix.*` or `*`, with the exact type first and then the longest
|
|
97
|
+
* pattern. A type with no entry reaches no one.
|
|
98
|
+
*/
|
|
99
|
+
readonly events: Readonly<Record<string, Permission>>;
|
|
100
|
+
/** The row the permission is decided on. Defaults to `event.payload`, validated against the resource schema. */
|
|
101
|
+
readonly row?: (event: E) => unknown;
|
|
102
|
+
/** The principal the fan-out runs as in the event's tenant. Defaults to `event.actorId`. */
|
|
103
|
+
readonly sender?: (event: E) => string | null | undefined;
|
|
104
|
+
/** Sources for the sender's and subscribers' instances. */
|
|
105
|
+
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt" | "principals">;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* The per-subscriber check for better-supabase's webhooks-out, outbox and
|
|
109
|
+
* realtime fan-out: the subscribers whose `principal` `decideFor` grants
|
|
110
|
+
* the event type's permission on its row, in the event's tenant, as the
|
|
111
|
+
* sender. An unmapped type, an event without a tenant or sender, a sender
|
|
112
|
+
* outside the tenant and a throw reach no one.
|
|
113
|
+
*/
|
|
114
|
+
export declare function subscriberPolicy<E extends SubscriberPolicyEvent = SubscriberPolicyEvent>(options: SubscriberPolicyOptions<E>): <S extends {
|
|
115
|
+
readonly principal: string;
|
|
116
|
+
}>(event: E, subscribers: readonly S[]) => Promise<S[]>;
|
|
117
|
+
//#endregion
|
|
118
|
+
//#region src/better-supabase/api-keys.d.ts
|
|
119
|
+
/** The roles a tenant key holds in its tenant: a list, or one per key. */
|
|
120
|
+
type ServiceRoles<K> = readonly string[] | ((key: K) => readonly string[]);
|
|
121
|
+
type ApiKeyVerifierOptions = {
|
|
122
|
+
/** `createApiKeys()` over a service transport. */
|
|
123
|
+
readonly keys: Pick<ApiKeys, "verify">;
|
|
124
|
+
/**
|
|
125
|
+
* `permdock.manifest.json`, whose `rls.apiKeys.serviceRoles` is the
|
|
126
|
+
* default for `serviceRoles`.
|
|
127
|
+
*/
|
|
128
|
+
readonly manifest?: unknown;
|
|
129
|
+
/**
|
|
130
|
+
* The roles a tenant key holds in its tenant, as a `service` principal.
|
|
131
|
+
* Without it or a manifest with `rls.apiKeys`, a tenant key verifies to
|
|
132
|
+
* `null`.
|
|
133
|
+
*/
|
|
134
|
+
readonly serviceRoles?: ServiceRoles<ApiKey>;
|
|
135
|
+
/** The permissions `*` stands for. Without it, a key with `*` verifies to `null`. */
|
|
136
|
+
readonly allPermissions?: readonly Permission[];
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* better-supabase's API keys as a `CredentialVerifier`, for
|
|
140
|
+
* `subjectFromApiKey` from `permdock/server`, which reads PermDock's
|
|
141
|
+
* `pdk_<id>_<secret>` format: create the keys with `prefix: "pdk"`. The
|
|
142
|
+
* credential id is the key's `publicId`, the id in the token. A personal key
|
|
143
|
+
* is a `user` credential acting as its user (inside its tenant when the key
|
|
144
|
+
* is limited to one), a tenant key a `service` credential holding
|
|
145
|
+
* `serviceRoles` in its tenant, and the key's scopes are the credential's
|
|
146
|
+
* permissions. better-supabase records the use when it verifies, so there is
|
|
147
|
+
* no `touch`. A rotated key in its grace period verifies, and its credential
|
|
148
|
+
* expires when the grace period ends. An invalid, revoked, expired or
|
|
149
|
+
* rate-limited key, and a failed lookup, are `null`. `permdock/server` exports a different
|
|
150
|
+
* `apiKeyVerifier`, over the application's own key records.
|
|
151
|
+
*/
|
|
152
|
+
export declare function apiKeyVerifier(options: ApiKeyVerifierOptions): CredentialVerifier;
|
|
153
|
+
/**
|
|
154
|
+
* The `claim` and `tenantClaim` options of better-supabase's
|
|
155
|
+
* `apiKeyClaims()`, from the manifest's `rls.apiKeys`, so a key's token
|
|
156
|
+
* carries the scopes ceiling, tenant and roles the `rls generate` helpers
|
|
157
|
+
* read. Throws when the manifest has no `rls.apiKeys`.
|
|
158
|
+
*/
|
|
159
|
+
export declare function apiKeyClaimOptions(manifest: unknown): Pick<ApiKeyClaimsOptions, "claim" | "tenantClaim">;
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region src/better-supabase/subject.d.ts
|
|
162
|
+
/** An `AuthSession` of kind `apiKey`, from better-supabase's api-keys middleware. */
|
|
163
|
+
type ApiKeySession = Extract<AuthSession, {
|
|
164
|
+
readonly kind: "apiKey";
|
|
165
|
+
}>;
|
|
166
|
+
type ApiKeySessionOptions = {
|
|
167
|
+
/** The definitions: the key's scopes become the subject's delegation, and `*` stands for all of them. */
|
|
168
|
+
readonly permissions: PermissionTree;
|
|
169
|
+
/** `permdock.manifest.json`, whose `rls.apiKeys.serviceRoles` is the default for `serviceRoles`. */
|
|
170
|
+
readonly manifest?: unknown;
|
|
171
|
+
/** The roles a tenant key holds in its tenant. Without it or a manifest with `rls.apiKeys`, a tenant key is anonymous. */
|
|
172
|
+
readonly serviceRoles?: ServiceRoles<ApiKeySession>;
|
|
173
|
+
};
|
|
174
|
+
/** The claim, and the short code better-supabase writes for each feature key. */
|
|
175
|
+
type FeatureClaim = EntitlementClaimOptions;
|
|
176
|
+
type BetterSupabaseSubjectOptions = Omit<SupabaseSubjectOptions, "claims"> & {
|
|
177
|
+
/** Where the token carries roles, the active tenant and memberships; plans come from `plans`. */
|
|
178
|
+
readonly claims?: Omit<NonNullable<SupabaseSubjectOptions["claims"]>, "plans">;
|
|
179
|
+
/** How `kind: 'apiKey'` sessions map. Without it they are anonymous. */
|
|
180
|
+
readonly apiKeys?: ApiKeySessionOptions;
|
|
181
|
+
/**
|
|
182
|
+
* The claim `principal.plans` reads: its name (default `features`), or
|
|
183
|
+
* `{ claim, keys }` with the same `entitlements.claim.keys` better-supabase
|
|
184
|
+
* writes short codes with, so `plans` holds the feature keys. A code
|
|
185
|
+
* without a key is dropped.
|
|
186
|
+
*/
|
|
187
|
+
readonly plans?: string | FeatureClaim;
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* `subjectFromSupabaseSession` for better-supabase's `AuthSession`, reading
|
|
191
|
+
* `memberships` for the memberships and the entitlements module's `features`
|
|
192
|
+
* claim for `principal.plans` (`plans` names another claim). With `apiKeys`,
|
|
193
|
+
* a verified `apiKey` session is the key's credential subject: a personal key
|
|
194
|
+
* acts as its user within the key's scopes, a tenant key as a `service`
|
|
195
|
+
* principal holding `serviceRoles`. Without `apiKeys`, and for `anon`,
|
|
196
|
+
* `service` and `invalid` sessions, the subject is anonymous.
|
|
197
|
+
*/
|
|
198
|
+
export declare function subjectFromBetterSupabase(session: SupabaseSessionLike | ApiKeySession | null | undefined, options?: BetterSupabaseSubjectOptions): Subject<SupabasePrincipal> | Subject<ApiKeyPrincipal> | Subject;
|
|
199
|
+
//#endregion
|
|
200
|
+
//#region src/better-supabase/support.d.ts
|
|
201
|
+
/** A start `decideSupportSession` holds for approval: the session it would start and the token an approval binds to. */
|
|
202
|
+
type PendingSupportSession = {
|
|
203
|
+
readonly token: string;
|
|
204
|
+
readonly session: SupportSession;
|
|
205
|
+
};
|
|
206
|
+
type SupportPolicyOptions = {
|
|
207
|
+
readonly policy: Policy;
|
|
208
|
+
/** How the admin's verified claims map to a subject; the defaults of `subjectFromBetterSupabase`. */
|
|
209
|
+
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
210
|
+
/** Sources and sinks for the admin's instance; `settings` also supplies the tenant's `supportSessions` rules. */
|
|
211
|
+
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt">;
|
|
212
|
+
/**
|
|
213
|
+
* The session's permissions when a start asks for `readOnly: false`.
|
|
214
|
+
* Without it such a start is refused; a read-only start gets every
|
|
215
|
+
* `readOnlyHint` permission the admin can use.
|
|
216
|
+
*/
|
|
217
|
+
readonly writable?: readonly Permission[];
|
|
218
|
+
/** Approval by someone other than the admin is required unless this is `false`. */
|
|
219
|
+
readonly approval?: boolean;
|
|
220
|
+
/**
|
|
221
|
+
* The approval the application recorded for `pending.token`, or
|
|
222
|
+
* `undefined` while none exists. `approvedBy` is the approver's principal
|
|
223
|
+
* id and never the admin's.
|
|
224
|
+
*/
|
|
225
|
+
readonly approved?: (input: SupportAuthorizeInput, pending: PendingSupportSession) => {
|
|
226
|
+
readonly approvedBy: string;
|
|
227
|
+
} | undefined | Promise<{
|
|
228
|
+
readonly approvedBy: string;
|
|
229
|
+
} | undefined>;
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* The `authorize` option of better-supabase's `supportSessions`: the admin's
|
|
233
|
+
* verified claims become a PermDock subject, and the start is decided with
|
|
234
|
+
* `permdock.decideSupportSession` in the requested tenant. `true` only for
|
|
235
|
+
* `granted`: an `approval-required` start passes once `approved` returns a
|
|
236
|
+
* distinct approver for its token. `readOnly: false` needs `writable`. A
|
|
237
|
+
* throw is `false`.
|
|
238
|
+
*/
|
|
239
|
+
export declare function supportPolicy(options: SupportPolicyOptions): SupportAuthorize;
|
|
240
|
+
//#endregion
|
|
241
|
+
//#region src/better-supabase/hooks.d.ts
|
|
242
|
+
type Maybe$1<T> = T | null | undefined | Promise<T | null | undefined>;
|
|
243
|
+
type Claims = Readonly<Record<string, unknown>>;
|
|
244
|
+
type AuthorizationHooksOptions = {
|
|
245
|
+
readonly policy: Policy;
|
|
246
|
+
/**
|
|
247
|
+
* The claims better-supabase mints for `userId` now, or `null` for a user
|
|
248
|
+
* deleted, suspended or unknown: the same loader `principalSource` takes.
|
|
249
|
+
*/
|
|
250
|
+
readonly claims: (userId: string, options: {
|
|
251
|
+
readonly tenant?: string;
|
|
252
|
+
}) => Maybe$1<Claims>;
|
|
253
|
+
/** How the claims map to a subject; the defaults of `subjectFromBetterSupabase`. */
|
|
254
|
+
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
255
|
+
/** Sources for every instance the hooks build. */
|
|
256
|
+
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt">;
|
|
257
|
+
/**
|
|
258
|
+
* The claims an organization-owned automation runs as in `tenant`, such
|
|
259
|
+
* as its default service principal's. Without it such an automation runs
|
|
260
|
+
* as no one.
|
|
261
|
+
*/
|
|
262
|
+
readonly service?: (tenant: string | null) => Maybe$1<Claims>;
|
|
263
|
+
/** The `principalSource` for `identities` and `delivery`; without it neither hook is set. */
|
|
264
|
+
readonly principals?: PrincipalSource;
|
|
265
|
+
/** The permission each event type needs, for `delivery` (`subscriberPolicy`'s `events`). */
|
|
266
|
+
readonly events?: Readonly<Record<string, Permission>>;
|
|
267
|
+
/** The row a delivery check decides on; defaults to `event.payload`. */
|
|
268
|
+
readonly row?: (event: SubscriberPolicyEvent) => unknown;
|
|
269
|
+
/** Who may approve each request kind, as for `authorizationProvider`; sets `approverOf`. */
|
|
270
|
+
readonly approvers?: ProviderApprovers;
|
|
271
|
+
/** `supportPolicy`'s options without `policy`; sets `support.authorize`. */
|
|
272
|
+
readonly support?: Omit<SupportPolicyOptions, "policy">;
|
|
273
|
+
/**
|
|
274
|
+
* The user and tenant a run ticket stands for, looked up in the app's
|
|
275
|
+
* store; `null` refuses the ticket. Sets `tickets.subject`, which loads
|
|
276
|
+
* the user's current claims, so a suspended user's ticket runs as no one.
|
|
277
|
+
*/
|
|
278
|
+
readonly tickets?: (ticket: string) => Maybe$1<{
|
|
279
|
+
readonly userId: string;
|
|
280
|
+
readonly tenant?: string;
|
|
281
|
+
}>;
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* better-supabase's `AuthorizationHooks` (`createServer(betterSupabase,
|
|
285
|
+
* { authorization })`), decided by `policy`. Every hook builds the
|
|
286
|
+
* principal's instance from the claims `claims` loads now, never from the
|
|
287
|
+
* request, and fails closed: a throw, an unknown key and `approval-required`
|
|
288
|
+
* refuse. `automation` and `delegation` are always set; `identities`,
|
|
289
|
+
* `delivery`, `approverOf`, `support` and `tickets` only with the options
|
|
290
|
+
* they read. `delegation.permissions` maps each scope to the keys whose
|
|
291
|
+
* `.scope` it is, was renamed from, or that a policy `oauthScopes` entry
|
|
292
|
+
* covers, and reads no `authorization_details`.
|
|
293
|
+
*/
|
|
294
|
+
export declare function authorizationHooks(options: AuthorizationHooksOptions): AuthorizationHooks;
|
|
295
|
+
//#endregion
|
|
12
296
|
//#region src/better-supabase/provider.d.ts
|
|
13
297
|
type AuthorizationProviderOptions = {
|
|
14
298
|
/** `permdock.manifest.json`, parsed or as JSON text, from `permdock supabase inspect --out`. */
|
|
@@ -22,12 +306,20 @@ type AuthorizationProviderOptions = {
|
|
|
22
306
|
/** The scope tenants are; defaults to the manifest's one root scope. */
|
|
23
307
|
readonly scope?: string;
|
|
24
308
|
/**
|
|
25
|
-
* The permission that lets a user decide a tool call waiting for
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* owner decides.
|
|
309
|
+
* The permission that lets a user decide a tool call waiting for
|
|
310
|
+
* approval: the `'ai-tool'` entry of `approvers` (`holder(approver)`)
|
|
311
|
+
* unless `approvers` names one. The requester is never their own approver.
|
|
29
312
|
*/
|
|
30
313
|
readonly approver?: Permission;
|
|
314
|
+
/**
|
|
315
|
+
* Who may approve each request kind, for better-supabase's `isApprover`:
|
|
316
|
+
* `'ai-tool'`, `'support-session'` or the approvals block's
|
|
317
|
+
* `'<subject type>.<action>'`, each mapped to `user()`, `holder()` or
|
|
318
|
+
* `anyOf()` approvers. A kind it does not name has no provider approver,
|
|
319
|
+
* which for tool calls and support sessions means nobody but the service
|
|
320
|
+
* role. Needs `permdock_is_approver` from `rls.approvals`.
|
|
321
|
+
*/
|
|
322
|
+
readonly approvers?: ProviderApprovers;
|
|
31
323
|
};
|
|
32
324
|
/**
|
|
33
325
|
* better-supabase's `authorization` config value, built from PermDock's
|
|
@@ -35,12 +327,40 @@ type AuthorizationProviderOptions = {
|
|
|
35
327
|
* templates, the membership tables, suspension rows, the token hook and
|
|
36
328
|
* every catalog key with `sqlComplete` set from its `rowConditions`. A
|
|
37
329
|
* `_for` template and `permissionsFor` are set only when the manifest lists
|
|
38
|
-
* their helper, which `rls.mode: 'database'` writes; `
|
|
39
|
-
* `
|
|
330
|
+
* their helper, which `rls.mode: 'database'` writes; `isApprover` only with
|
|
331
|
+
* `approvers` and `permdock_is_approver`, and otherwise `canApprove` only
|
|
332
|
+
* with `approver`. `holdersOf` (`permitted_<tenant scope>_users`) and
|
|
333
|
+
* `actorMayWrite` (`permdock_actor_may_write()`) are set when the manifest
|
|
334
|
+
* lists their helper. Throws when the manifest or catalog is invalid, or when the
|
|
40
335
|
* tenant scope is ambiguous.
|
|
41
336
|
*/
|
|
42
337
|
export declare function authorizationProvider(options: AuthorizationProviderOptions): AuthorizationProvider;
|
|
43
338
|
//#endregion
|
|
339
|
+
//#region src/better-supabase/authorizer.d.ts
|
|
340
|
+
/** The table operations better-supabase's `permissions: true` resolves through `forOperation`. */
|
|
341
|
+
type AuthorizerOperation = "list" | "get" | "create" | "update" | "delete";
|
|
342
|
+
type AuthorizerOptions = {
|
|
343
|
+
readonly policy: Policy;
|
|
344
|
+
/** How the verified claims map to a subject; the defaults of `subjectFromBetterSupabase`. */
|
|
345
|
+
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
346
|
+
/**
|
|
347
|
+
* The permission of each table operation, so a resource with
|
|
348
|
+
* `permissions: true` is checked. Without it such a resource is refused.
|
|
349
|
+
*/
|
|
350
|
+
readonly operations?: Readonly<Record<string, Partial<Record<AuthorizerOperation, Permission>>>>;
|
|
351
|
+
/** Sources and sinks for each instance. The subject, actor and tenant always come from the verified request. */
|
|
352
|
+
readonly options?: Omit<PermDockOptions, "tenant" | "actor" | "delegation" | "session" | "expiresAt">;
|
|
353
|
+
};
|
|
354
|
+
/**
|
|
355
|
+
* better-supabase's `authorizer` for PermDock: every resource, action, route
|
|
356
|
+
* guard and MCP tool that declares a `permission` is decided with `decide`.
|
|
357
|
+
* The subject is mapped from the verified claims with
|
|
358
|
+
* `subjectFromBetterSupabase`; the request's `context.tenant` selects the
|
|
359
|
+
* active tenant only among the memberships the claims hold. A caller without
|
|
360
|
+
* claims is anonymous, and a throw denies.
|
|
361
|
+
*/
|
|
362
|
+
export declare function authorizer(options: AuthorizerOptions): Authorizer<Permission>;
|
|
363
|
+
//#endregion
|
|
44
364
|
//#region src/better-supabase/policies.d.ts
|
|
45
365
|
type AccessScope = {
|
|
46
366
|
/** A scope in the policy's scopes (or the manifest's `rls.scopes`), or `platform` for permissions granted globally. */
|
|
@@ -93,49 +413,6 @@ export declare function bucketPolicy(access: BucketAccess, options: AccessPolicy
|
|
|
93
413
|
/** As {@link bucketPolicy}, for a better-supabase Realtime topic. */
|
|
94
414
|
export declare function topicPolicy(access: TopicAccess, options: AccessPolicyOptions): AccessTopicPolicy;
|
|
95
415
|
//#endregion
|
|
96
|
-
//#region src/better-supabase/api-keys.d.ts
|
|
97
|
-
/** The roles a tenant key holds in its tenant: a list, or one per key. */
|
|
98
|
-
type ServiceRoles<K> = readonly string[] | ((key: K) => readonly string[]);
|
|
99
|
-
type ApiKeyVerifierOptions = {
|
|
100
|
-
/** `createApiKeys()` over a service transport. */
|
|
101
|
-
readonly keys: Pick<ApiKeys, "verify">;
|
|
102
|
-
/**
|
|
103
|
-
* `permdock.manifest.json`, whose `rls.apiKeys.serviceRoles` is the
|
|
104
|
-
* default for `serviceRoles`.
|
|
105
|
-
*/
|
|
106
|
-
readonly manifest?: unknown;
|
|
107
|
-
/**
|
|
108
|
-
* The roles a tenant key holds in its tenant, as a `service` principal.
|
|
109
|
-
* Without it or a manifest with `rls.apiKeys`, a tenant key verifies to
|
|
110
|
-
* `null`.
|
|
111
|
-
*/
|
|
112
|
-
readonly serviceRoles?: ServiceRoles<ApiKey>;
|
|
113
|
-
/** The permissions `*` stands for. Without it, a key with `*` verifies to `null`. */
|
|
114
|
-
readonly allPermissions?: readonly Permission[];
|
|
115
|
-
};
|
|
116
|
-
/**
|
|
117
|
-
* better-supabase's API keys as a `CredentialVerifier`, for
|
|
118
|
-
* `subjectFromApiKey` from `permdock/server`, which reads PermDock's
|
|
119
|
-
* `pdk_<id>_<secret>` format: create the keys with `prefix: "pdk"`. The
|
|
120
|
-
* credential id is the key's `publicId`, the id in the token. A personal key
|
|
121
|
-
* is a `user` credential acting as its user (inside its tenant when the key
|
|
122
|
-
* is limited to one), a tenant key a `service` credential holding
|
|
123
|
-
* `serviceRoles` in its tenant, and the key's scopes are the credential's
|
|
124
|
-
* permissions. better-supabase records the use when it verifies, so there is
|
|
125
|
-
* no `touch`. A rotated key in its grace period verifies, and its credential
|
|
126
|
-
* expires when the grace period ends. An invalid, revoked, expired or
|
|
127
|
-
* rate-limited key, and a failed lookup, are `null`. `permdock/server` exports a different
|
|
128
|
-
* `apiKeyVerifier`, over the application's own key records.
|
|
129
|
-
*/
|
|
130
|
-
export declare function apiKeyVerifier(options: ApiKeyVerifierOptions): CredentialVerifier;
|
|
131
|
-
/**
|
|
132
|
-
* The `claim` and `tenantClaim` options of better-supabase's
|
|
133
|
-
* `apiKeyClaims()`, from the manifest's `rls.apiKeys`, so a key's token
|
|
134
|
-
* carries the scopes ceiling, tenant and roles the `rls generate` helpers
|
|
135
|
-
* read. Throws when the manifest has no `rls.apiKeys`.
|
|
136
|
-
*/
|
|
137
|
-
export declare function apiKeyClaimOptions(manifest: unknown): Pick<ApiKeyClaimsOptions, "claim" | "tenantClaim">;
|
|
138
|
-
//#endregion
|
|
139
416
|
//#region src/better-supabase/credentials.d.ts
|
|
140
417
|
type CredentialGuardOptions = {
|
|
141
418
|
/** The request's PermDock instance. */
|
|
@@ -183,41 +460,116 @@ type ToolPolicy<C> = {
|
|
|
183
460
|
*/
|
|
184
461
|
export declare function toolPolicy<C>(options: ToolPolicyOptions<C>): ToolPolicy<C>;
|
|
185
462
|
//#endregion
|
|
186
|
-
//#region src/better-supabase/
|
|
187
|
-
/**
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
type
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
readonly manifest?: unknown;
|
|
196
|
-
/** The roles a tenant key holds in its tenant. Without it or a manifest with `rls.apiKeys`, a tenant key is anonymous. */
|
|
197
|
-
readonly serviceRoles?: ServiceRoles<ApiKeySession>;
|
|
463
|
+
//#region src/better-supabase/principals.d.ts
|
|
464
|
+
/**
|
|
465
|
+
* Where an identity link points: an app user, whose claims `principal`
|
|
466
|
+
* loads, or a contact the app stores itself, which must be `kind: 'contact'`.
|
|
467
|
+
*/
|
|
468
|
+
type BetterSupabaseIdentityLink = {
|
|
469
|
+
readonly user: string;
|
|
470
|
+
} | {
|
|
471
|
+
readonly contact: Principal;
|
|
198
472
|
};
|
|
199
|
-
|
|
200
|
-
type
|
|
201
|
-
type BetterSupabaseSubjectOptions = Omit<SupabaseSubjectOptions, "plans"> & {
|
|
202
|
-
/** How `kind: 'apiKey'` sessions map. Without it they are anonymous. */
|
|
203
|
-
readonly apiKeys?: ApiKeySessionOptions;
|
|
473
|
+
type Maybe<T> = T | null | undefined | Promise<T | null | undefined>;
|
|
474
|
+
type PrincipalSourceOptions = {
|
|
204
475
|
/**
|
|
205
|
-
* The
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
* without a key is dropped.
|
|
476
|
+
* The claims better-supabase mints for `userId` now, or `null` for a user
|
|
477
|
+
* deleted, suspended or unknown. `sqlSupportStore(…).claims`, which runs
|
|
478
|
+
* the custom access token hook, fills it.
|
|
209
479
|
*/
|
|
210
|
-
readonly
|
|
480
|
+
readonly claims: (userId: string, options: {
|
|
481
|
+
readonly tenant?: string;
|
|
482
|
+
}) => Maybe<Readonly<Record<string, unknown>>>;
|
|
483
|
+
/**
|
|
484
|
+
* The identity link for an email address or chat user. Only links the
|
|
485
|
+
* app created through a signed-in link flow or a verified address count.
|
|
486
|
+
* Without it the source has no `principalByIdentity`.
|
|
487
|
+
*/
|
|
488
|
+
readonly identities?: (identity: PrincipalIdentity) => Maybe<BetterSupabaseIdentityLink>;
|
|
489
|
+
/** How the claims map to a principal; the defaults of `subjectFromBetterSupabase`. */
|
|
490
|
+
readonly subject?: Omit<BetterSupabaseSubjectOptions, "apiKeys">;
|
|
211
491
|
};
|
|
212
492
|
/**
|
|
213
|
-
* `
|
|
214
|
-
* `
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
493
|
+
* A `PrincipalSource` over better-supabase: `principal(id)` maps the claims
|
|
494
|
+
* `claims` loads with `subjectFromBetterSupabase`, and `principalByIdentity`
|
|
495
|
+
* follows `identities` to a user or a contact. Claims for another user, a
|
|
496
|
+
* link to a non-contact principal and a missing link are `null`.
|
|
497
|
+
*/
|
|
498
|
+
export declare function principalSource(options: PrincipalSourceOptions): PrincipalSource;
|
|
499
|
+
//#endregion
|
|
500
|
+
//#region src/better-supabase/share-links.d.ts
|
|
501
|
+
/** The fields of better-supabase's `ResolvedShareLink` a link subject is built from. */
|
|
502
|
+
type ShareLinkRow = {
|
|
503
|
+
readonly id: string;
|
|
504
|
+
readonly organizationId: string;
|
|
505
|
+
readonly subjectType: string;
|
|
506
|
+
readonly subjectId: string;
|
|
507
|
+
readonly role: string;
|
|
508
|
+
/** Set on a link pinned to one version, which `subjectFromShareLink` refuses. */
|
|
509
|
+
readonly versionId?: string;
|
|
510
|
+
readonly expiresAt?: Instant;
|
|
511
|
+
};
|
|
512
|
+
/** better-supabase's `ShareLinks`, or anything with its `resolve`. */
|
|
513
|
+
type ShareLinkResolver = {
|
|
514
|
+
resolve(token: string): PromiseLike<{
|
|
515
|
+
readonly ok: true;
|
|
516
|
+
readonly data: ShareLinkRow | null;
|
|
517
|
+
} | {
|
|
518
|
+
readonly ok: false;
|
|
519
|
+
}>;
|
|
520
|
+
};
|
|
521
|
+
/** How links on one better-supabase subject type map to PermDock. */
|
|
522
|
+
type ShareLinkTarget = {
|
|
523
|
+
/** The resource the subject type's rows are; RLS matches it against `capability.on.resource`. */
|
|
524
|
+
readonly resource: Permission | PermissionTree;
|
|
525
|
+
/** PermDock roles for each share-link role (`{ view: ['guest'] }`). A role with no entry is refused. */
|
|
526
|
+
readonly roles: Readonly<Record<string, readonly string[]>>;
|
|
527
|
+
};
|
|
528
|
+
type ShareLinkSubjectOptions = {
|
|
529
|
+
readonly shareLinks: ShareLinkResolver;
|
|
530
|
+
/** One entry per subject type a guest page serves, keyed by better-supabase's `subjectType`. */
|
|
531
|
+
readonly links: Readonly<Record<string, ShareLinkTarget>>;
|
|
532
|
+
/** Lifetime of the subject in seconds, capped by the link's own expiry. Default 300, at most 3600. */
|
|
533
|
+
readonly ttl?: number;
|
|
534
|
+
/**
|
|
535
|
+
* The link policies of the link's organization (`row.organizationId`);
|
|
536
|
+
* every one must hold, and a throw denies. A row carries no creation
|
|
537
|
+
* time, so a `maxLifetime` rule refuses every share link.
|
|
538
|
+
*/
|
|
539
|
+
readonly linkPolicy?: (capability: Capability, row: ShareLinkRow) => LinkPolicy | readonly LinkPolicy[] | undefined | Promise<LinkPolicy | readonly LinkPolicy[] | undefined>;
|
|
540
|
+
readonly onAuth?: (event: AuthEvent) => void;
|
|
541
|
+
readonly requestId?: string;
|
|
542
|
+
readonly now?: Instant;
|
|
543
|
+
};
|
|
544
|
+
/**
|
|
545
|
+
* Resolves a better-supabase share-link token into the `link` subject it
|
|
546
|
+
* acts as, for `exchangeCapability` and `--capabilities` RLS. The row is
|
|
547
|
+
* read on every call, so a revoked or expired link stops resolving at
|
|
548
|
+
* once. An unknown token, subject type or role, a malformed row, a broken
|
|
549
|
+
* link policy, a `resolve` error and a throw are the anonymous subject. So
|
|
550
|
+
* is a link pinned to a version: a capability grants the subject's current
|
|
551
|
+
* rows, so a pinned link reads through `versions.getShared(token)` instead.
|
|
552
|
+
*/
|
|
553
|
+
export declare function subjectFromShareLink(token: string | undefined | null, options: ShareLinkSubjectOptions): Promise<Subject<CapabilityPrincipal>>;
|
|
554
|
+
//#endregion
|
|
555
|
+
//#region src/better-supabase/workflow.d.ts
|
|
556
|
+
/** Where `handlerCan` gets the request's instance, such as `permdock/server`'s `createPermDock` result. */
|
|
557
|
+
type HandlerPermDockSource = {
|
|
558
|
+
readonly getPermDock: (request: Request) => PermDock | Promise<PermDock>;
|
|
559
|
+
};
|
|
560
|
+
/**
|
|
561
|
+
* The `can` option of better-supabase's `authorizeHook`, for the caller's
|
|
562
|
+
* `permdock`: `true` only when the caller is a member of the hook's tenant
|
|
563
|
+
* and `decide` grants the permission its `hookMetadata` names there. An
|
|
564
|
+
* unknown key, `approval-required` and a throw are `false`.
|
|
565
|
+
*/
|
|
566
|
+
export declare function hookCan(permdock: PermDock): NonNullable<AuthorizeHookOptions["can"]>;
|
|
567
|
+
/**
|
|
568
|
+
* The `can` option of better-supabase's `protectWebHandler`: `undefined`
|
|
569
|
+
* (401) when the request has no signed-in principal or `getPermDock`
|
|
570
|
+
* throws, otherwise whether `decide` grants the permission in the request's
|
|
571
|
+
* active tenant. An unknown key and `approval-required` are `false` (403).
|
|
220
572
|
*/
|
|
221
|
-
export declare function
|
|
573
|
+
export declare function handlerCan(source: HandlerPermDockSource): ProtectWebHandlerOptions["can"];
|
|
222
574
|
//#endregion
|
|
223
|
-
export type { AccessPolicyOptions, ApiKeySession, ApiKeySessionOptions, ApiKeyVerifierOptions, AuthorizationProviderOptions, BetterSupabaseSubjectOptions, BucketAccess, CredentialGuardOptions, McpToolDecision, McpToolRef, ServiceRoles, SupabasePrincipal, ToolPolicy, ToolPolicyOptions, TopicAccess };
|
|
575
|
+
export type { AccessPolicyOptions, AccessReviewApplierOptions, AccessReviewApplyFailure, AccessReviewApplyResult, ApiKeySession, ApiKeySessionOptions, ApiKeyVerifierOptions, AuthorizationHooksOptions, AuthorizationProviderOptions, AuthorizerOperation, AuthorizerOptions, BetterSupabaseIdentityLink, BetterSupabaseSubjectOptions, BucketAccess, CredentialGuardOptions, HandlerPermDockSource, McpToolDecision, McpToolRef, PendingSupportSession, PrincipalSourceOptions, ProviderApprovers, ServiceRoles, ShareLinkResolver, ShareLinkRow, ShareLinkSubjectOptions, ShareLinkTarget, SubscriberPolicyEvent, SubscriberPolicyOptions, SupabasePrincipal, SupportPolicyOptions, ToolPolicy, ToolPolicyOptions, TopicAccess };
|