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,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { n as
|
|
1
|
+
import { $n as Delegation, Q as LimitStore, Rt as Instant, Zn as CustomRole, ir as Subject, it as RelationSource, nr as Membership, qn as Actor, rr as Principal } from "../../policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "../../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { i as PermDockOptions } from "../../permdock-D7eeLJER.js";
|
|
4
|
+
import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-oEWfl-kl.js";
|
|
5
|
+
import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-Czo4n3Hs.js";
|
|
5
6
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
6
7
|
//#region src/testing/saas/schema.d.ts
|
|
7
8
|
type FieldKind = "string" | "boolean" | "nullable-string";
|
|
@@ -121,8 +122,8 @@ type SaasTokenOptions = {
|
|
|
121
122
|
/** Claim memberships; `false` omits the claim (database mode). Defaults to the seed. */
|
|
122
123
|
readonly memberships?: readonly Membership[] | false;
|
|
123
124
|
readonly ttl?: number;
|
|
124
|
-
/**
|
|
125
|
-
readonly now?:
|
|
125
|
+
/** The instant used for `iat`; defaults to the current time. */
|
|
126
|
+
readonly now?: Instant;
|
|
126
127
|
readonly issuer?: string;
|
|
127
128
|
readonly audience?: string;
|
|
128
129
|
readonly claims?: Readonly<Record<string, unknown>>;
|
|
@@ -134,9 +135,9 @@ export declare function signSaasToken(sub: string, options?: SaasTokenOptions):
|
|
|
134
135
|
* and returns its `sub`, or `null`; never throws. Identity only: memberships
|
|
135
136
|
* and plans come from the seed, never from the token.
|
|
136
137
|
*/
|
|
137
|
-
export declare function verifySaasToken(token: string | null | undefined, now?:
|
|
138
|
+
export declare function verifySaasToken(token: string | null | undefined, now?: Instant): Promise<string | null>;
|
|
138
139
|
/** `verifySaasToken` plus the token's `exp` as `expiresAt` (epoch seconds). */
|
|
139
|
-
export declare function verifySaasSession(token: string | null | undefined,
|
|
140
|
+
export declare function verifySaasSession(token: string | null | undefined, at?: Instant): Promise<{
|
|
140
141
|
readonly sub: string;
|
|
141
142
|
readonly expiresAt: number;
|
|
142
143
|
} | null>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-
|
|
2
|
-
import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-
|
|
1
|
+
import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-CZKiUfFM.js";
|
|
2
|
+
import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-FO-Q8oj0.js";
|
|
3
3
|
export { SAAS_API_KEY_LIMIT, SAAS_EXPIRED_AT, SAAS_TOKEN_TTL_SECONDS, SaasDocSchema, SaasFolderSchema, SaasProjectSchema, rowSchema, saasAudience, saasCustomRoles, saasDoc, saasFolder, saasFolderScenarios, saasIssuer, saasJwks, saasLimitStore, saasMemberships, saasOrg, saasPermissions, saasPlans, saasPolicy, saasPrincipal, saasPrivateJwk, saasProject, saasPublicJwk, saasRelations, saasRoles, saasScenarioOptions, saasScenarios, saasSchemaSql, saasSeed, saasSeedSql, saasTenantRoleNames, saasUser, saasUsers, signSaasToken, verifySaasSession, verifySaasToken };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-
|
|
1
|
+
import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-oEWfl-kl.js";
|
|
2
2
|
export { SaasDoc, SaasDocSchema, SaasFolder, SaasFolderSchema, SaasProject, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { SaasDocSchema, SaasFolderSchema, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
|
|
1
|
+
export { t as SaasDocSchema, n as SaasFolderSchema, r as SaasProjectSchema, i as saasPermissions, a as saasPlans, o as saasRoles, s as saasTenantRoleNames } from "../../permissions-CZKiUfFM.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/cli/shared/text.ts
|
|
2
|
+
/** The text before the first `separator`, or all of it when there is none. */
|
|
3
|
+
function beforeFirst(text, separator) {
|
|
4
|
+
const at = text.indexOf(separator);
|
|
5
|
+
return at === -1 ? text : text.slice(0, at);
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { beforeFirst as t };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
+
//#region src/core/thenable.ts
|
|
3
|
+
function isThenable(value) {
|
|
4
|
+
return value !== null && typeof value === "object" && "then" in value && typeof value.then === "function";
|
|
5
|
+
}
|
|
6
|
+
/** Settles a promise nobody awaits, so its rejection is not reported as unhandled. */
|
|
7
|
+
function ignoreRejection(value) {
|
|
8
|
+
Promise.resolve(value).then(void 0, () => void 0);
|
|
9
|
+
}
|
|
10
|
+
/** Runs a Standard Schema that must answer synchronously; an asynchronous answer fails. */
|
|
11
|
+
function validateSync(schema, value) {
|
|
12
|
+
const result = schema["~standard"].validate(value);
|
|
13
|
+
if (isThenable(result)) {
|
|
14
|
+
ignoreRejection(result);
|
|
15
|
+
return { ok: false };
|
|
16
|
+
}
|
|
17
|
+
return result.issues === void 0 ? {
|
|
18
|
+
ok: true,
|
|
19
|
+
value: result.value
|
|
20
|
+
} : {
|
|
21
|
+
ok: false,
|
|
22
|
+
issues: result.issues
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** `validateSync` for a schema whose output must be an object; anything else is `undefined`. */
|
|
26
|
+
function validateRecord(schema, value) {
|
|
27
|
+
const validated = validateSync(schema, value);
|
|
28
|
+
return validated.ok && isRecord(validated.value) ? validated.value : void 0;
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { validateSync as i, isThenable as n, validateRecord as r, ignoreRejection as t };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
//#region src/core/time.ts
|
|
2
|
+
/** RFC 3339 `date-time` in UTC or with an offset; fractional seconds optional. */
|
|
3
|
+
const RFC3339_PATTERN = "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$";
|
|
4
|
+
const RFC3339 = /* @__PURE__ */ new RegExp(RFC3339_PATTERN, "u");
|
|
5
|
+
function isRfc3339(value) {
|
|
6
|
+
return typeof value === "string" && RFC3339.test(value) && Number.isFinite(Date.parse(value));
|
|
7
|
+
}
|
|
8
|
+
/** Seconds since the epoch as RFC 3339 in UTC. */
|
|
9
|
+
function rfc3339(seconds) {
|
|
10
|
+
return (/* @__PURE__ */ new Date(seconds * 1e3)).toISOString();
|
|
11
|
+
}
|
|
12
|
+
/** Milliseconds since the epoch as RFC 3339 in UTC, milliseconds kept; throws a `RangeError` for a value outside the `Date` range. */
|
|
13
|
+
function isoAt(millis) {
|
|
14
|
+
return new Date(millis).toISOString();
|
|
15
|
+
}
|
|
16
|
+
/** RFC 3339 in UTC of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
|
|
17
|
+
function isoNow(now) {
|
|
18
|
+
return dateAt(now).toISOString();
|
|
19
|
+
}
|
|
20
|
+
/** Whole seconds since the epoch of an RFC 3339 instant; `undefined` for anything else. */
|
|
21
|
+
function secondsOf(value) {
|
|
22
|
+
return isRfc3339(value) ? Math.floor(Date.parse(value) / 1e3) : void 0;
|
|
23
|
+
}
|
|
24
|
+
/** Whole seconds since the epoch of an RFC 3339 string or an `Instant`; `undefined` for anything else, Unix seconds included. */
|
|
25
|
+
function instantOf(value) {
|
|
26
|
+
if (typeof value === "string") return secondsOf(value);
|
|
27
|
+
if (typeof value === "object" && value !== null && "epochMilliseconds" in value && typeof value.epochMilliseconds === "number" && Number.isFinite(value.epochMilliseconds)) return Math.floor(value.epochMilliseconds / 1e3);
|
|
28
|
+
}
|
|
29
|
+
/** A duration: a whole number of seconds above zero, else `undefined`. */
|
|
30
|
+
function durationOf(value) {
|
|
31
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : void 0;
|
|
32
|
+
}
|
|
33
|
+
/** Throws at definition time unless `value` is a whole number of seconds above zero. */
|
|
34
|
+
function assertDuration(value, label) {
|
|
35
|
+
if (durationOf(value) === void 0) throw new Error(`PermDock: ${label} must be a whole number of seconds above 0, got ${JSON.stringify(value) ?? String(value)}`);
|
|
36
|
+
}
|
|
37
|
+
/** Whole seconds since the epoch of `now`, or of the clock when absent. */
|
|
38
|
+
function nowSeconds(now) {
|
|
39
|
+
return Math.floor(nowMillis(now) / 1e3);
|
|
40
|
+
}
|
|
41
|
+
/** The `validation` denial detail for a `now` option that is not an `Instant`. */
|
|
42
|
+
const INVALID_NOW = Object.freeze({
|
|
43
|
+
field: "now",
|
|
44
|
+
message: "now must be an Instant ({ epochMilliseconds }), such as a Temporal.Instant"
|
|
45
|
+
});
|
|
46
|
+
/** The `Date` of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
|
|
47
|
+
function dateAt(now) {
|
|
48
|
+
const millis = nowMillis(now);
|
|
49
|
+
if (!Number.isFinite(millis)) throw new RangeError(`PermDock: ${INVALID_NOW.message}`);
|
|
50
|
+
return new Date(millis);
|
|
51
|
+
}
|
|
52
|
+
/** Whole seconds since the epoch of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
|
|
53
|
+
function secondsAt(now) {
|
|
54
|
+
return Math.floor(dateAt(now).getTime() / 1e3);
|
|
55
|
+
}
|
|
56
|
+
/** The instant `seconds` after the epoch. */
|
|
57
|
+
function instantAt(seconds) {
|
|
58
|
+
return { epochMilliseconds: seconds * 1e3 };
|
|
59
|
+
}
|
|
60
|
+
/** Seconds since the epoch of `now`, fraction kept, or of the clock when absent. */
|
|
61
|
+
function epochSeconds(now) {
|
|
62
|
+
return nowMillis(now) / 1e3;
|
|
63
|
+
}
|
|
64
|
+
/** Milliseconds since the epoch of `now`, or of the clock when absent; `NaN` for a `now` that is not an `Instant`. */
|
|
65
|
+
function nowMillis(now) {
|
|
66
|
+
if (now === void 0) return Date.now();
|
|
67
|
+
const millis = typeof now === "object" && now !== null ? now.epochMilliseconds : void 0;
|
|
68
|
+
return typeof millis === "number" ? millis : NaN;
|
|
69
|
+
}
|
|
70
|
+
//#endregion
|
|
71
|
+
export { durationOf as a, instantOf as c, isoNow as d, nowMillis as f, secondsOf as g, secondsAt as h, dateAt as i, isRfc3339 as l, rfc3339 as m, RFC3339_PATTERN as n, epochSeconds as o, nowSeconds as p, assertDuration as r, instantAt as s, INVALID_NOW as t, isoAt as u };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as canonicalJson } from "./canonical-json-
|
|
2
|
-
import {
|
|
1
|
+
import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
|
|
2
|
+
import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
|
|
3
3
|
//#region src/core/token.ts
|
|
4
4
|
/**
|
|
5
5
|
* Only stable identity goes into the token, so refreshing a session (new
|
|
@@ -22,7 +22,16 @@ function versionOf(row, field) {
|
|
|
22
22
|
}
|
|
23
23
|
/** The digest that binds a token to the call's data when no row id does. */
|
|
24
24
|
function payloadDigest(data) {
|
|
25
|
-
return
|
|
25
|
+
return sha256Digest(canonicalJson(data));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The payload a decision token binds: the call's `args` when the caller
|
|
29
|
+
* passes them (an agent or MCP tool call, row or not), otherwise the data of
|
|
30
|
+
* a call without a row id. `undefined` binds nothing beyond the row id.
|
|
31
|
+
*/
|
|
32
|
+
function tokenPayload(resourceId, data, args) {
|
|
33
|
+
if (args !== void 0) return payloadDigest(args);
|
|
34
|
+
return resourceId === "*" && data !== void 0 ? payloadDigest(data) : void 0;
|
|
26
35
|
}
|
|
27
36
|
/**
|
|
28
37
|
* `version` is set only for an approval that goes stale on a resource
|
|
@@ -32,7 +41,7 @@ function payloadDigest(data) {
|
|
|
32
41
|
* others.
|
|
33
42
|
*/
|
|
34
43
|
function decisionToken(input) {
|
|
35
|
-
const payload =
|
|
44
|
+
const payload = canonicalJson({
|
|
36
45
|
key: input.key,
|
|
37
46
|
resourceId: input.resourceId,
|
|
38
47
|
principal: principalIdentity(input.principal),
|
|
@@ -44,7 +53,7 @@ function decisionToken(input) {
|
|
|
44
53
|
...input.version === void 0 ? {} : { version: input.version },
|
|
45
54
|
...input.payload === void 0 ? {} : { payload: input.payload }
|
|
46
55
|
});
|
|
47
|
-
return
|
|
56
|
+
return sha256Digest(payload);
|
|
48
57
|
}
|
|
49
58
|
//#endregion
|
|
50
|
-
export { payloadDigest as n,
|
|
59
|
+
export { versionOf as i, payloadDigest as n, tokenPayload as r, decisionToken as t };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
|
|
2
|
+
import { t as describe } from "./describe-BybMRY7A.js";
|
|
3
|
+
//#region src/core/tool-refusal.ts
|
|
4
|
+
function deniedToolRefusal(decision, permission, resource) {
|
|
5
|
+
const alternatives = decision.alternatives.map((leaf) => leaf.key);
|
|
6
|
+
return {
|
|
7
|
+
text: `Denied: ${resource.id === void 0 ? permission.key : `${permission.key} on ${resource.id}`}.${alternatives.length === 0 ? "" : ` You may: ${alternatives.join(", ")}.`}`,
|
|
8
|
+
structured: {
|
|
9
|
+
outcome: "denied",
|
|
10
|
+
permission: permission.key,
|
|
11
|
+
resource,
|
|
12
|
+
denials: wireDenials(decision.denials),
|
|
13
|
+
alternatives,
|
|
14
|
+
detail: describe(decision).detail
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function approvalToolRefusal(decision, permission, resource) {
|
|
19
|
+
return {
|
|
20
|
+
text: describe(decision).detail,
|
|
21
|
+
structured: {
|
|
22
|
+
outcome: "approval-required",
|
|
23
|
+
permission: permission.key,
|
|
24
|
+
resource,
|
|
25
|
+
token: decision.token
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** An MCP `CallToolResult` with `isError` set, as MCP and WebMCP clients read it. */
|
|
30
|
+
function toolErrorResult(refusal) {
|
|
31
|
+
return {
|
|
32
|
+
isError: true,
|
|
33
|
+
content: [{
|
|
34
|
+
type: "text",
|
|
35
|
+
text: refusal.text
|
|
36
|
+
}],
|
|
37
|
+
structuredContent: refusal.structured
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { deniedToolRefusal as n, toolErrorResult as r, approvalToolRefusal as t };
|
package/dist/trpc/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { t as
|
|
1
|
+
import { T as Policy, rr as Principal } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { r as PermDock } from "../permdock-D7eeLJER.js";
|
|
4
|
+
import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
|
|
5
|
+
import { D as ConnectionOptions, T as Connection, i as OpenApiHooks } from "../server-types-BLd4MnBX.js";
|
|
6
|
+
import { t as ServerAdapterOptions } from "../bind--9EFVYWF.js";
|
|
7
|
+
import { t as StreamProtectOptions } from "../stream-7-xmnf3U.js";
|
|
7
8
|
import { AnyTRPCMiddlewareFunction } from "@trpc/server";
|
|
8
9
|
//#region src/trpc/create.d.ts
|
|
9
10
|
type TrpcMiddlewareOpts<TCtx = object, TInput = unknown> = {
|
|
@@ -33,11 +34,13 @@ type TrpcOpenApiHooks = {
|
|
|
33
34
|
readonly securitySchemes: OpenApiHooks["securitySchemes"];
|
|
34
35
|
};
|
|
35
36
|
type TrpcPermDock<TCtx = object> = {
|
|
36
|
-
|
|
37
|
-
readonly
|
|
37
|
+
/** The `PermDock` for one procedure call, for code the middleware does not run before. */
|
|
38
|
+
readonly getPermDock: (opts: TrpcMiddlewareOpts<TCtx>) => Promise<PermDock>;
|
|
39
|
+
readonly middleware: () => TrpcMiddleware;
|
|
40
|
+
readonly protect: (permission: Permission | null, data?: (opts: TrpcMiddlewareOpts<TCtx>) => unknown, protectOptions?: StreamProtectOptions) => TrpcMiddleware;
|
|
38
41
|
/** A long-lived connection for the request behind `ctx`. */
|
|
39
42
|
readonly connection: (opts: TrpcMiddlewareOpts<TCtx>, connectionOptions?: ConnectionOptions) => Promise<Connection>;
|
|
40
|
-
readonly permdockHandler: (request: Request) => Promise<Response>;
|
|
43
|
+
readonly permdockHandler: () => (request: Request) => Promise<Response>;
|
|
41
44
|
readonly openapi: TrpcOpenApiHooks;
|
|
42
45
|
readonly errorFormatter: <TShape extends {
|
|
43
46
|
readonly data: object;
|
package/dist/trpc/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as problemFromError } from "../map-error-
|
|
3
|
-
import { n as attached } from "../bind-
|
|
4
|
-
import {
|
|
5
|
-
import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-
|
|
1
|
+
import { o as problemMessage } from "../http-BBoKefeS.js";
|
|
2
|
+
import { t as problemFromError } from "../map-error-TCAdw-eW.js";
|
|
3
|
+
import { n as attached } from "../bind-CZzhx-Vj.js";
|
|
4
|
+
import { i as isAsyncIterable, o as reloadAfter } from "../stream-CvdUS9V1.js";
|
|
5
|
+
import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-aPyNi6tA.js";
|
|
6
6
|
import { TRPCError, isTrackedEnvelope } from "@trpc/server";
|
|
7
7
|
//#region src/trpc/create.ts
|
|
8
8
|
const PROBLEM = Symbol.for("permdock.problem");
|
|
@@ -57,10 +57,11 @@ function errorFormatter(opts) {
|
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
function createPermDock(policy, options) {
|
|
60
|
-
const { kernel, bind, attach, scopeOf, connection, evaluate } = bindRpcKernel(policy, options, "trpc", (opts) => opts.ctx, (opts) => opts.path);
|
|
61
|
-
const
|
|
60
|
+
const { kernel, bind, attach, scopeOf, connection, evaluate, guard: runGuard } = bindRpcKernel(policy, options, "trpc", (opts) => opts.ctx, (opts) => opts.path);
|
|
61
|
+
const getPermDock = async (opts) => kernel.getPermDock(bind(opts), await scopeOf(opts));
|
|
62
|
+
const middleware = () => (async (opts) => {
|
|
62
63
|
const request = bind(opts);
|
|
63
|
-
const instance = await attached(async () => kernel.
|
|
64
|
+
const instance = await attached(async () => kernel.getPermDock(request, await scopeOf(opts)));
|
|
64
65
|
if (!instance.ok) return throwTrpcError(instance.response);
|
|
65
66
|
const nextCtx = {
|
|
66
67
|
...opts.ctx,
|
|
@@ -70,19 +71,18 @@ function createPermDock(policy, options) {
|
|
|
70
71
|
return mapDownstream(await opts.next({ ctx: nextCtx }));
|
|
71
72
|
});
|
|
72
73
|
/** Wraps a subscription's iterable so revocation ends it and unreadable items drop. */
|
|
73
|
-
const guardSubscription = async (result, opts, permission,
|
|
74
|
+
const guardSubscription = async (result, opts, permission, data, protectOptions) => {
|
|
74
75
|
if (result === null || typeof result !== "object" || result.ok !== true || !isAsyncIterable(result.data)) return result;
|
|
75
76
|
return {
|
|
76
77
|
...result,
|
|
77
|
-
data: await guardStream(result.data, (connectionOptions) => connection(opts, connectionOptions), permission,
|
|
78
|
+
data: await guardStream(result.data, (connectionOptions) => connection(opts, connectionOptions), permission, data, protectOptions, {
|
|
78
79
|
unwrap: (item) => isTrackedEnvelope(item) ? item[1] : item,
|
|
79
80
|
onRevoked: trpcErrorFrom
|
|
80
81
|
})
|
|
81
82
|
};
|
|
82
83
|
};
|
|
83
|
-
const protect = (permission,
|
|
84
|
-
const request =
|
|
85
|
-
const guard = await kernel.protect(permission, loadData === void 0 ? void 0 : () => loadData(opts), protectOptions)(request, await scopeOf(opts));
|
|
84
|
+
const protect = (permission, data, protectOptions) => (async (opts) => {
|
|
85
|
+
const { request, guard } = await runGuard(permission, data, opts, protectOptions);
|
|
86
86
|
if (guard.ok) {
|
|
87
87
|
const nextCtx = {
|
|
88
88
|
...opts.ctx,
|
|
@@ -90,11 +90,11 @@ function createPermDock(policy, options) {
|
|
|
90
90
|
permdockData: guard.data
|
|
91
91
|
};
|
|
92
92
|
attach(nextCtx, request);
|
|
93
|
-
return guardSubscription(await mapDownstream(await opts.next({ ctx: nextCtx })), opts, permission,
|
|
93
|
+
return guardSubscription(await mapDownstream(await opts.next({ ctx: nextCtx })), opts, permission, data === void 0 ? void 0 : reloadAfter(guard.data, () => data(opts)), protectOptions);
|
|
94
94
|
}
|
|
95
95
|
return throwTrpcError(guard.response);
|
|
96
96
|
});
|
|
97
|
-
const
|
|
97
|
+
const handler = (request) => {
|
|
98
98
|
return evaluate(request, {
|
|
99
99
|
ctx: { req: request },
|
|
100
100
|
path: "permdock",
|
|
@@ -104,10 +104,11 @@ function createPermDock(policy, options) {
|
|
|
104
104
|
};
|
|
105
105
|
const kernelOpenApi = kernel.openapi;
|
|
106
106
|
return {
|
|
107
|
-
|
|
107
|
+
getPermDock,
|
|
108
|
+
middleware,
|
|
108
109
|
protect,
|
|
109
110
|
connection,
|
|
110
|
-
permdockHandler,
|
|
111
|
+
permdockHandler: () => handler,
|
|
111
112
|
openapi: {
|
|
112
113
|
security: (permission) => ({ openapi: {
|
|
113
114
|
protect: true,
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import { n as RoleThrough } from "./types-
|
|
2
|
-
import { o as SqlMembershipSource } from "./sources-
|
|
1
|
+
import { n as RoleThrough } from "./types-CdlxsYQh.js";
|
|
2
|
+
import { o as SqlMembershipSource } from "./sources-BV9j0DeZ.js";
|
|
3
|
+
//#region src/cli/core/errors.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* 0 success, 1 failure, 2 usage, 3 action required, 130 interrupted (SIGINT
|
|
6
|
+
* or a cancelled prompt), 143 terminated (SIGTERM).
|
|
7
|
+
*/
|
|
8
|
+
type ExitCode = 0 | 1 | 2 | 3 | 130 | 143;
|
|
9
|
+
//#endregion
|
|
3
10
|
//#region src/cli/types.d.ts
|
|
4
11
|
type CollectConfig = {
|
|
5
12
|
readonly srcPath?: readonly string[];
|
|
@@ -88,7 +95,7 @@ type RlsConfig = {
|
|
|
88
95
|
readonly dialect?: RlsDialect;
|
|
89
96
|
readonly memberships?: RlsMemberships;
|
|
90
97
|
/**
|
|
91
|
-
* `database` mode: the `
|
|
98
|
+
* `database` mode: the `tableMembershipSource` / `junctionMembershipSource` sources the helpers
|
|
92
99
|
* read for every scope `memberships` maps no table for. Default
|
|
93
100
|
* `supabase.hook.memberships`, so the helpers and the token hook run the
|
|
94
101
|
* same SQL. Setting it selects `database` mode.
|
|
@@ -117,6 +124,13 @@ type RlsConfig = {
|
|
|
117
124
|
/** Postgres type of each named scope's id column; overrides `tenantType` / `teamType`. */
|
|
118
125
|
readonly scopeTypes?: Readonly<Record<string, string>>;
|
|
119
126
|
readonly roleClaim?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Role values the existing SQL compares against (a string literal or an
|
|
129
|
+
* enum label) and the PermDock role each one is. `rls import` writes the
|
|
130
|
+
* PermDock name for a mapped value; `rls migrate` filters a `role` helper by
|
|
131
|
+
* it. An unmapped value must already be a declared role.
|
|
132
|
+
*/
|
|
133
|
+
readonly roleValues?: Readonly<Record<string, string>>;
|
|
120
134
|
readonly gucPrefix?: string;
|
|
121
135
|
readonly out?: string;
|
|
122
136
|
/** `--target drizzle`: where each policy's `.link()` finds its table. */
|
|
@@ -140,9 +154,19 @@ type RlsConfig = {
|
|
|
140
154
|
/**
|
|
141
155
|
* Resolve tenant-defined custom roles in the helpers: `custom_role_permissions` and
|
|
142
156
|
* `custom_role_includes` in `database` mode, the `memberships[].grants` claim in `jwt` mode,
|
|
143
|
-
* always intersected with the `permdock_ceiling` view. Off by default.
|
|
157
|
+
* always intersected with the `permdock_ceiling` view. Off by default. An
|
|
158
|
+
* object turns them on and names the application's existing role tables
|
|
159
|
+
* that `--backfill-out` copies from.
|
|
160
|
+
*/
|
|
161
|
+
readonly customRoles?: boolean | RlsCustomRolesConfig;
|
|
162
|
+
/**
|
|
163
|
+
* Triggers the application owns on tables `generate` creates, by table
|
|
164
|
+
* name without the schema (`custom_role_permissions`): written after the
|
|
165
|
+
* tables, each as `drop trigger if exists` and `create trigger`.
|
|
144
166
|
*/
|
|
145
|
-
readonly
|
|
167
|
+
readonly triggers?: Readonly<Record<string, readonly RlsTrigger[]>>;
|
|
168
|
+
/** Register generated tables with an audit function, such as `better_supabase.audit`. */
|
|
169
|
+
readonly audit?: RlsAudit;
|
|
146
170
|
/** How the generated custom-role write functions check the caller (`database` mode with `customRoles`). */
|
|
147
171
|
readonly customRoleWrites?: {
|
|
148
172
|
/**
|
|
@@ -208,7 +232,8 @@ type RlsConfig = {
|
|
|
208
232
|
* Add the approval store `supabaseApprovalStore` reads and writes: the
|
|
209
233
|
* `approval_requests` table and one function per `ApprovalStore` method, in
|
|
210
234
|
* the helper schema, executable by no client role. Off by default. An
|
|
211
|
-
* object adopts a table the app already has instead
|
|
235
|
+
* object with `table` adopts a table the app already has instead, and
|
|
236
|
+
* `delegations: true` adds the out-of-office covers.
|
|
212
237
|
*/
|
|
213
238
|
readonly approvals?: boolean | RlsApprovalsAdopt;
|
|
214
239
|
/**
|
|
@@ -291,8 +316,15 @@ type RlsConfig = {
|
|
|
291
316
|
* fields into the app's own columns on each write, converted to their types.
|
|
292
317
|
*/
|
|
293
318
|
type RlsApprovalsAdopt = {
|
|
294
|
-
/** `table` or `schema.table`. */
|
|
295
|
-
readonly table
|
|
319
|
+
/** `table` or `schema.table`. Without it the store is the generated `approval_requests`. */
|
|
320
|
+
readonly table?: string;
|
|
321
|
+
/**
|
|
322
|
+
* Add `approval_delegations`, the out-of-office covers a user writes for
|
|
323
|
+
* themselves, and the four-argument `permdock_is_approver` that answers for
|
|
324
|
+
* a delegate inside an active cover. `tableApprovalDelegationSource` reads
|
|
325
|
+
* the same rows for `approvalsHandler`. Off by default.
|
|
326
|
+
*/
|
|
327
|
+
readonly delegations?: boolean;
|
|
296
328
|
/** A text column unique per request. Default `token`. */
|
|
297
329
|
readonly token?: string;
|
|
298
330
|
/** A jsonb column holding the `ApprovalRequest`. Default `body`. */
|
|
@@ -350,6 +382,63 @@ type RlsCustomRoleTable = {
|
|
|
350
382
|
/** A boolean column marking rows that are not custom roles (declared or system roles); those rows are skipped. */
|
|
351
383
|
readonly skip?: string;
|
|
352
384
|
};
|
|
385
|
+
/** `rls.customRoles` as an object: custom roles on, plus where existing ones live. */
|
|
386
|
+
type RlsCustomRolesConfig = {
|
|
387
|
+
/** The application's role tables `--backfill-out` copies into `custom_role_permissions` and `custom_role_includes`. */
|
|
388
|
+
readonly from?: RlsCustomRolesFrom;
|
|
389
|
+
};
|
|
390
|
+
/**
|
|
391
|
+
* Existing custom-role data. Each row's role is a row of
|
|
392
|
+
* `rls.customRoleWrites.roles`, which supplies its name, tenant, scope,
|
|
393
|
+
* instance and `skip` flag.
|
|
394
|
+
*/
|
|
395
|
+
type RlsCustomRolesFrom = {
|
|
396
|
+
readonly permissions: {
|
|
397
|
+
/** `table` or `schema.table`: one row per permission a role holds. */
|
|
398
|
+
readonly table: string;
|
|
399
|
+
/** The reference to the roles table: `{ through: 'roles', on: { role_id: 'id' }, column: 'key' }`. */
|
|
400
|
+
readonly role: RoleThrough;
|
|
401
|
+
/** The permission key column, or a reference to a permissions table that holds the key. */
|
|
402
|
+
readonly permission: string | RoleThrough;
|
|
403
|
+
/** A text column holding `allow` or `deny`. Without it every row allows. */
|
|
404
|
+
readonly effect?: string;
|
|
405
|
+
/** A text column holding the level of a leveled allow. */
|
|
406
|
+
readonly level?: string;
|
|
407
|
+
};
|
|
408
|
+
readonly includes?: {
|
|
409
|
+
readonly table: string;
|
|
410
|
+
/** The reference to the including role's row in the roles table. */
|
|
411
|
+
readonly role: RoleThrough;
|
|
412
|
+
/** The included role's key column, or a reference to the roles table. */
|
|
413
|
+
readonly include: string | RoleThrough;
|
|
414
|
+
};
|
|
415
|
+
};
|
|
416
|
+
/** One trigger the application owns on a generated table (`rls.triggers`). */
|
|
417
|
+
type RlsTrigger = {
|
|
418
|
+
/** The trigger name; `permdock_` is reserved for generated triggers. */
|
|
419
|
+
readonly name: string;
|
|
420
|
+
readonly when: "before" | "after";
|
|
421
|
+
readonly events: readonly ("insert" | "update" | "delete" | "truncate")[];
|
|
422
|
+
/** Default `row`. */
|
|
423
|
+
readonly level?: "row" | "statement";
|
|
424
|
+
/** `schema.function`, a trigger function that already exists. */
|
|
425
|
+
readonly function: string;
|
|
426
|
+
/** String arguments passed to the trigger function. */
|
|
427
|
+
readonly args?: readonly string[];
|
|
428
|
+
};
|
|
429
|
+
/**
|
|
430
|
+
* `rls.audit`: one `select <function>('<schema>.<table>'::regclass, <args>)`
|
|
431
|
+
* per generated table, for an audit module that registers a table by
|
|
432
|
+
* creating its own trigger.
|
|
433
|
+
*/
|
|
434
|
+
type RlsAudit = {
|
|
435
|
+
/** `schema.function` taking the table as its first argument. */
|
|
436
|
+
readonly function: string;
|
|
437
|
+
/** Generated tables, without the schema. Default the custom-role tables and `user_roles`, those this run creates. */
|
|
438
|
+
readonly tables?: readonly string[];
|
|
439
|
+
/** Named text arguments: `{ tenant_column: 'tenant_id' }` passes `tenant_column => 'tenant_id'`. */
|
|
440
|
+
readonly args?: Readonly<Record<string, string>>;
|
|
441
|
+
};
|
|
353
442
|
/** `rls.shims`: where the legacy-named wrappers go. */
|
|
354
443
|
type RlsShimsConfig = {
|
|
355
444
|
/** Schema of the legacy helpers. Default `public`. */
|
|
@@ -365,6 +454,9 @@ type RlsActions = Readonly<Record<string, "select" | "insert" | "update" | "dele
|
|
|
365
454
|
type RlsMigrateHelper = {
|
|
366
455
|
readonly form: "ids" | "row" | "membership";
|
|
367
456
|
readonly scope: string;
|
|
457
|
+
} | {
|
|
458
|
+
readonly form: "role";
|
|
459
|
+
readonly scope: string;
|
|
368
460
|
} | {
|
|
369
461
|
readonly form: "scoped";
|
|
370
462
|
} | {
|
|
@@ -381,6 +473,17 @@ type RlsMigrateConfig = {
|
|
|
381
473
|
readonly globalScopes?: readonly string[];
|
|
382
474
|
/** For `scoped` helpers, a scope literal's PermDock scope when the names differ. */
|
|
383
475
|
readonly scopes?: Readonly<Record<string, string>>;
|
|
476
|
+
/**
|
|
477
|
+
* Materialised permission tables to retire, by `schema.table`: a table the
|
|
478
|
+
* application keeps in step with triggers and reads instead of the grants.
|
|
479
|
+
* `rls migrate --retire-out` drops it with its refresh triggers once
|
|
480
|
+
* nothing else reads it.
|
|
481
|
+
*/
|
|
482
|
+
readonly tables?: Readonly<Record<string, RlsMigrateTable>>;
|
|
483
|
+
};
|
|
484
|
+
type RlsMigrateTable = {
|
|
485
|
+
/** The functions that keep the table in step. Default: every function in `--sql` whose body writes it, and every function that calls one. */
|
|
486
|
+
readonly refresh?: readonly string[];
|
|
384
487
|
};
|
|
385
488
|
/** Where global roles live: `table (user, role)`. Defaults `user_id` and `role`. */
|
|
386
489
|
type GlobalRoles = {
|
|
@@ -422,7 +525,7 @@ type RlsStorage = {
|
|
|
422
525
|
};
|
|
423
526
|
/** `permdock supabase hook generate` input. */
|
|
424
527
|
type SupabaseHookConfig = {
|
|
425
|
-
/** The same `
|
|
528
|
+
/** The same `tableMembershipSource` / `junctionMembershipSource` sources the app passes as `memberships`. */
|
|
426
529
|
readonly memberships: readonly SqlMembershipSource[];
|
|
427
530
|
/** Schema of the hook and the version table. Default `rls.schema`, else `permdock`. */
|
|
428
531
|
readonly schema?: string;
|
|
@@ -487,8 +590,21 @@ type SupabaseHookConfig = {
|
|
|
487
590
|
readonly suspension?: RlsSuspension;
|
|
488
591
|
readonly out?: string;
|
|
489
592
|
};
|
|
593
|
+
/**
|
|
594
|
+
* How the project turns SQL into Supabase migrations: `'pg-delta'`
|
|
595
|
+
* (Declarative Schemas 2.0, `supabase db schema declarative sync`),
|
|
596
|
+
* `'migra'` (declarative schemas on `supabase db diff`) or `'migrations'`
|
|
597
|
+
* (hand-written migrations, no declarative schemas).
|
|
598
|
+
*/
|
|
599
|
+
type SupabaseSchemas = "pg-delta" | "migra" | "migrations";
|
|
490
600
|
type SupabaseConfig = {
|
|
491
601
|
readonly hook?: SupabaseHookConfig;
|
|
602
|
+
/**
|
|
603
|
+
* The schema workflow `rls generate --split`, `supabase hook generate` and
|
|
604
|
+
* doctor follow. Default: `'migra'` when `supabase/config.toml` sets
|
|
605
|
+
* `[experimental.pgdelta] enabled = false`, else `'pg-delta'`.
|
|
606
|
+
*/
|
|
607
|
+
readonly schemas?: SupabaseSchemas;
|
|
492
608
|
};
|
|
493
609
|
type DoctorConfig = {
|
|
494
610
|
/**
|
|
@@ -500,7 +616,7 @@ type DoctorConfig = {
|
|
|
500
616
|
readonly srcPath?: readonly string[];
|
|
501
617
|
readonly sensitiveActions?: readonly string[];
|
|
502
618
|
readonly memberships?: string;
|
|
503
|
-
/** A JSON fixture `{ credentials?, settings? }` of API-key credentials and per-tenant settings (the `
|
|
619
|
+
/** A JSON fixture `{ credentials?, settings? }` of API-key credentials and per-tenant settings (the `memorySettingsSource` input) for PD029. */
|
|
504
620
|
readonly credentials?: string;
|
|
505
621
|
/** Globs or directories whose files are client entries for PD001, for frameworks with no `'use client'` convention. */
|
|
506
622
|
readonly clientEntries?: readonly string[];
|
|
@@ -512,6 +628,8 @@ type DoctorConfig = {
|
|
|
512
628
|
type PermDockConfig = {
|
|
513
629
|
readonly permissions?: string;
|
|
514
630
|
readonly policy?: string;
|
|
631
|
+
/** A module exporting the `defineOperations` map as `operations` or default; `collect` writes it to the catalog's `operations`. */
|
|
632
|
+
readonly operations?: string;
|
|
515
633
|
readonly collect?: CollectConfig;
|
|
516
634
|
readonly catalog?: CatalogConfig;
|
|
517
635
|
readonly openapi?: {
|
|
@@ -530,7 +648,7 @@ type PowerSyncConfig = {
|
|
|
530
648
|
readonly resources?: readonly string[];
|
|
531
649
|
/** The action whose grants decide which rows sync; default `read`. */
|
|
532
650
|
readonly action?: string;
|
|
533
|
-
/** Where `generate` writes `localSnapshotManifest(policy)` as JSON for `localSnapshot` and `
|
|
651
|
+
/** Where `generate` writes `localSnapshotManifest(policy)` as JSON for `localSnapshot` and `powerSyncSource`; none by default. */
|
|
534
652
|
readonly manifest?: string;
|
|
535
653
|
};
|
|
536
654
|
type CliIo = {
|
|
@@ -539,13 +657,23 @@ type CliIo = {
|
|
|
539
657
|
readonly now?: () => Date;
|
|
540
658
|
readonly fetch?: typeof fetch;
|
|
541
659
|
readonly env?: Readonly<Record<string, string | undefined>>;
|
|
542
|
-
/** Styled
|
|
660
|
+
/** Styled stdout; `--no-color` turns it off. Unset is plain. */
|
|
543
661
|
readonly color?: boolean;
|
|
662
|
+
/** Styled stderr, decided for that stream on its own. Unset is plain. */
|
|
663
|
+
readonly errColor?: boolean;
|
|
544
664
|
/** A person at a terminal: commands may prompt. Unset never prompts. */
|
|
545
665
|
readonly interactive?: boolean;
|
|
666
|
+
/** stdout is a terminal; agent detection reads it. Unset is a pipe. */
|
|
667
|
+
readonly stdoutIsTty?: boolean;
|
|
668
|
+
/** stderr is a terminal: progress draws a spinner. Unset prints lines. */
|
|
669
|
+
readonly stderrIsTty?: boolean;
|
|
670
|
+
/** Reads all of stdin, for `--*-stdin` secrets. Unset reads nothing. */
|
|
671
|
+
readonly readStdin?: () => Promise<string>;
|
|
672
|
+
/** Aborted on SIGINT or SIGTERM. */
|
|
673
|
+
readonly signal?: AbortSignal;
|
|
546
674
|
};
|
|
547
675
|
type RunResult = {
|
|
548
|
-
readonly code:
|
|
676
|
+
readonly code: ExitCode;
|
|
549
677
|
readonly stdout: string;
|
|
550
678
|
readonly stderr: string;
|
|
551
679
|
};
|