permdock 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -35
- package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
- package/dist/a2a/index.d.ts +8 -6
- package/dist/a2a/index.js +21 -31
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-B4R5fnMU.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -23
- package/dist/ai-sdk/index.js +38 -21
- package/dist/app-data-MuyzVqX8.js +60 -0
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-Dg8XsRaO.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +228 -75
- package/dist/automation-BMZPIVUM.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +11 -23
- package/dist/better-supabase/index.d.ts +438 -86
- package/dist/better-supabase/index.js +1027 -184
- package/dist/bind--9EFVYWF.d.ts +38 -0
- package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/build-instance-BMnAudHn.js +52 -0
- package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
- package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/catalog-BECMPrwc.js +100 -0
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +26 -30
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +15 -45
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +20 -6
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +240 -347
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
- package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
- package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
- package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
- package/dist/constants-DcJABbLW.js +20 -0
- package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +18 -18
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/create-DnrmLnLW.js +323 -0
- package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/deciding-columns-Sq12mEA6.js +123 -0
- package/dist/delegation-DaXVdDhM.js +286 -0
- package/dist/delegation-input-FTxMK3ji.js +19 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/denied-text-D8jDHgsl.d.ts +19 -0
- package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
- package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/doctor-DFjUxf2f.js +2361 -0
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +6 -14
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +14 -13
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +23 -29
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +14 -12
- package/dist/fastify/index.d.ts +26 -13
- package/dist/fastify/index.js +17 -36
- package/dist/fetch-adapter-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
- package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
- package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
- package/dist/grantee-Cn1HyUsI.js +254 -0
- package/dist/grantee-conditions-CcXf8hMM.js +271 -0
- package/dist/grantee-match-DHArqY82.js +142 -0
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +14 -13
- package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
- package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
- package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/index-DOVf7RJv.d.ts +900 -0
- package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +20 -14
- package/dist/index.js +33 -23
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +166 -145
- package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +6 -14
- package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-CtKR3GXL.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
- package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
- package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
- package/dist/mcp/index.d.ts +36 -9
- package/dist/mcp/index.js +476 -448
- package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +20 -20
- package/dist/next/index.d.ts +40 -20
- package/dist/next/index.js +37 -39
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/ocsf-BFp-PZZA.js +126 -0
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +18 -25
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
- package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +23 -20
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +53 -27
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/output-files-DhRBBE4n.js +138 -0
- package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
- package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
- package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
- package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
- package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +47 -29
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.d.ts +502 -0
- package/dist/permission-registry-Br4jSNVi.js +385 -0
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/policy-DLZJ5gAp.js +399 -0
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +6 -12
- package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
- package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/protected-DEPHc2xV.d.ts +38 -0
- package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
- package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
- package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -63
- package/dist/react-native/index.js +45 -27
- package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/relation-walk-3OyDBF0S.js +186 -0
- package/dist/relations-BnCWnJGI.js +163 -0
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/request-context-BTRTG7OT.js +71 -0
- package/dist/request-context-C2_1lchh.d.ts +5 -0
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/resource-relations-D_jw0BFx.js +243 -0
- package/dist/retire-CALjIQ7e.js +240 -0
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
- package/dist/role-builder-CXbis5-X.js +623 -0
- package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
- package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
- package/dist/server/index.d.ts +13 -134
- package/dist/server/index.js +13 -10
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/shared-CD11nBbC.js +304 -0
- package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +24 -25
- package/dist/solid/index.js +41 -11
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
- package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
- package/dist/sql-B5T1IL83.js +55 -0
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +440 -106
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
- package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
- package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
- package/dist/stores-ClZUgeoP.d.ts +30 -0
- package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +13 -6
- package/dist/supabase/middleware.js +16 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
- package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +11 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +26 -12
- package/dist/svelte/runtime.d.ts +10 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +5 -5
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +36 -316
- package/dist/testing/index.d.ts +391 -106
- package/dist/testing/index.js +4574 -1286
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
- package/dist/tool-refusal-CMLN5xhn.js +41 -0
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +18 -17
- package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
- package/dist/types-BNORmDM8.d.ts +172 -0
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
- package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/types-fbZ7JEXr.d.ts +89 -0
- package/dist/types-tIgIeIKJ.d.ts +66 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
- package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
- package/dist/validity-CZ7-y0Cj.js +79 -0
- package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
- package/dist/verify-DbCL9bnB.js +1770 -0
- package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
- package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
- package/dist/vue/index.d.ts +25 -21
- package/dist/vue/index.js +25 -9
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +13 -37
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/wrap-Bd1Tejur.d.ts +15 -0
- package/dist/wrap-gX61EtpB.js +27 -0
- package/package.json +140 -41
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +129 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +13 -8
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
- package/skills/permdock-wire/SKILL.md +18 -12
- package/skills/permdock-wire/references/adapters.md +146 -50
- package/skills/permdock-wire/references/policy-options.md +15 -6
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DbYAuNkG.js +0 -224
- package/dist/arazzo-C9chp3ST.js +0 -54
- package/dist/bind-C_ob3LKa.d.ts +0 -25
- package/dist/catalog-CRW5Mx_B.js +0 -2
- package/dist/catalog-CYj-mX2O.js +0 -48
- package/dist/catalog-DWF5cYqB.js +0 -55
- package/dist/cloud-CfwZ39Rl.js +0 -50
- package/dist/cloud-DWLXO2af.js +0 -118
- package/dist/collect-CHB22Sx4.js +0 -83
- package/dist/collect-DSWOk19R.js +0 -2
- package/dist/commands-BeaGNj_o.js +0 -97
- package/dist/config-ir40y8m0.js +0 -36
- package/dist/create-CMwIl-w2.js +0 -253
- package/dist/delegation-D8pUEuce.js +0 -103
- package/dist/diff-C9RDjjhs.js +0 -48
- package/dist/doctor-Djh6JDEk.js +0 -53
- package/dist/doctor-DvH0IQff.js +0 -1194
- package/dist/doctor-collect-CjdO0wQX.js +0 -665
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/evaluation-items-CfCCejQd.js +0 -40
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-BMl1RxoX.js +0 -26
- package/dist/grantee-Cv5Sogfv.js +0 -602
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-0nNqHspG.d.ts +0 -6
- package/dist/index-BNc7Wer_.d.ts +0 -483
- package/dist/index-C7Tw7MaW.d.ts +0 -201
- package/dist/instance-options-Dhhcnm3y.js +0 -22
- package/dist/load-DwJUafYN.js +0 -2
- package/dist/manifest-iaoBXHKc.js +0 -783
- package/dist/map-AcxK9o_D.js +0 -147
- package/dist/may-use-DndQ5tQ-.js +0 -77
- package/dist/openapi-CQTsgKoB.js +0 -164
- package/dist/permdock-CbgvLnuo.js +0 -3479
- package/dist/permissions-DVoF6dMt.js +0 -662
- package/dist/policy-xyWg7QdR.js +0 -1122
- package/dist/powersync-CrBX8hY6.js +0 -2
- package/dist/powersync-DE19b9dT.js +0 -62
- package/dist/protected-BdnIEFkY.d.ts +0 -27
- package/dist/protected-xAr24FEC.d.ts +0 -40
- package/dist/relations-cjOL01hZ.js +0 -505
- package/dist/rls-P-BeBx0n.js +0 -238
- package/dist/rls-graph-CHwx0V8q.js +0 -435
- package/dist/rls-ownership-DcYlZ09B.js +0 -843
- package/dist/rls-shared-Cewd_-zI.js +0 -495
- package/dist/rls-verify-CMv9H3wV.js +0 -746
- package/dist/run-BWc9qqvE.js +0 -174
- package/dist/server-DlZ28Oz5.js +0 -268
- package/dist/sink-B1fZzIMf.d.ts +0 -104
- package/dist/sink-Bd9PSyfq.js +0 -141
- package/dist/skills-C5CbhhpG.js +0 -56
- package/dist/snapshot-Enxd0n-s.js +0 -975
- package/dist/sql-xdg5f4Fi.js +0 -27
- package/dist/src-BDwEZWrZ.js +0 -568
- package/dist/store-jOBYpiXC.d.ts +0 -36
- package/dist/stores-C0IMQrGI.d.ts +0 -52
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-config-Bj3iDH2I.js +0 -472
- package/dist/supabase-hook-gd3s8bxB.js +0 -2
- package/dist/supabase-s4o9s1O1.js +0 -83
- package/dist/thenable-okc2xDsj.js +0 -10
- package/dist/types-BnIEz1sU.d.ts +0 -48
- package/dist/types-Bvc4oWT6.d.ts +0 -9
- package/dist/types-CKNSyIf_.d.ts +0 -52
- package/dist/types-Cq_H8N_X.d.ts +0 -197
- package/dist/usage-B0YuTQRO.js +0 -42
- package/dist/usage-DorAJiU_.js +0 -2
- package/dist/vocabulary-DA8a8zif.d.ts +0 -56
- package/dist/watch-BwxLTYMZ.js +0 -2
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { n as CliError } from "./errors-CWTY6uih.js";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { dirname, relative, resolve } from "node:path";
|
|
4
|
+
import { execFileSync } from "node:child_process";
|
|
5
|
+
//#region src/cli/core/files.ts
|
|
6
|
+
function outcomeOf(abs, text) {
|
|
7
|
+
if (!existsSync(abs)) return "created";
|
|
8
|
+
return readFileSync(abs, "utf8") === text ? "unchanged" : "updated";
|
|
9
|
+
}
|
|
10
|
+
/** What writing `files` would do, without writing. */
|
|
11
|
+
function planFiles(cwd, files) {
|
|
12
|
+
return files.map((file) => ({
|
|
13
|
+
path: file.path,
|
|
14
|
+
outcome: outcomeOf(resolve(cwd, file.path), file.text)
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Writes every created or updated file, all or nothing: each one is staged
|
|
19
|
+
* beside its target first, and a failed stage removes the others before
|
|
20
|
+
* anything is replaced. `dryRun` only plans.
|
|
21
|
+
*/
|
|
22
|
+
function applyFiles(cwd, files, options = {}) {
|
|
23
|
+
const planned = planFiles(cwd, files);
|
|
24
|
+
if (options.dryRun === true) return planned;
|
|
25
|
+
const staged = [];
|
|
26
|
+
try {
|
|
27
|
+
for (const [index, file] of files.entries()) {
|
|
28
|
+
if (planned[index]?.outcome === "unchanged") continue;
|
|
29
|
+
const target = resolve(cwd, file.path);
|
|
30
|
+
const temp = `${target}.permdock-${String(process.pid)}.tmp`;
|
|
31
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
32
|
+
writeFileSync(temp, file.text);
|
|
33
|
+
staged.push({
|
|
34
|
+
temp,
|
|
35
|
+
target
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
} catch (error) {
|
|
39
|
+
for (const { temp } of staged) rmSync(temp, { force: true });
|
|
40
|
+
throw new CliError("failed", `could not write ${describe(error)}; wrote nothing`, {
|
|
41
|
+
code: "write_failed",
|
|
42
|
+
cause: error
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
for (const { temp, target } of staged) renameSync(temp, target);
|
|
46
|
+
return planned;
|
|
47
|
+
}
|
|
48
|
+
function describe(error) {
|
|
49
|
+
return error instanceof Error ? error.message : String(error);
|
|
50
|
+
}
|
|
51
|
+
const VERBS = {
|
|
52
|
+
created: ["Created", "Would create"],
|
|
53
|
+
updated: ["Updated", "Would update"],
|
|
54
|
+
unchanged: ["Unchanged", "Unchanged"]
|
|
55
|
+
};
|
|
56
|
+
/** One line per file: `Created x`, or `Would create x` under `--dry-run`. */
|
|
57
|
+
function fileSummary(applied, dryRun) {
|
|
58
|
+
return applied.map((file) => `${VERBS[file.outcome][dryRun ? 1 : 0]} ${file.path}`).join("\n");
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The files among `paths` with uncommitted changes in git. Outside a git
|
|
62
|
+
* work tree, or without git, nothing counts as dirty.
|
|
63
|
+
*/
|
|
64
|
+
function dirtyFiles(cwd, paths) {
|
|
65
|
+
if (paths.length === 0) return [];
|
|
66
|
+
let status;
|
|
67
|
+
try {
|
|
68
|
+
status = execFileSync("git", [
|
|
69
|
+
"status",
|
|
70
|
+
"--porcelain",
|
|
71
|
+
"-z",
|
|
72
|
+
"--",
|
|
73
|
+
...paths.map((path) => resolve(cwd, path))
|
|
74
|
+
], {
|
|
75
|
+
cwd,
|
|
76
|
+
encoding: "utf8",
|
|
77
|
+
stdio: [
|
|
78
|
+
"ignore",
|
|
79
|
+
"pipe",
|
|
80
|
+
"ignore"
|
|
81
|
+
]
|
|
82
|
+
});
|
|
83
|
+
} catch {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
let root;
|
|
87
|
+
try {
|
|
88
|
+
root = execFileSync("git", ["rev-parse", "--show-toplevel"], {
|
|
89
|
+
cwd,
|
|
90
|
+
encoding: "utf8",
|
|
91
|
+
stdio: [
|
|
92
|
+
"ignore",
|
|
93
|
+
"pipe",
|
|
94
|
+
"ignore"
|
|
95
|
+
]
|
|
96
|
+
}).trim();
|
|
97
|
+
} catch {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
return status.split("\0").filter((entry) => entry.length > 3).map((entry) => relative(realpathSync(cwd), resolve(root, entry.slice(3))));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* A rewrite of hand-written files stops when one of them has uncommitted
|
|
104
|
+
* changes, so `git diff` shows only what the command changed. `--force`
|
|
105
|
+
* rewrites anyway.
|
|
106
|
+
*/
|
|
107
|
+
function refuseDirty(input) {
|
|
108
|
+
if (input.force) return;
|
|
109
|
+
const dirty = dirtyFiles(input.cwd, input.paths);
|
|
110
|
+
if (dirty.length === 0) return;
|
|
111
|
+
throw new CliError("action", `${input.command} rewrites files with uncommitted changes: ${dirty.join(", ")}. Commit or stash them first, so git diff shows only the rewrite.`, {
|
|
112
|
+
code: "dirty_worktree",
|
|
113
|
+
extensions: { files: dirty },
|
|
114
|
+
next: [{
|
|
115
|
+
when: "to see the changes first",
|
|
116
|
+
command: `permdock ${input.invocation} --dry-run`
|
|
117
|
+
}, {
|
|
118
|
+
when: "to rewrite anyway",
|
|
119
|
+
command: `permdock ${input.invocation} --force`
|
|
120
|
+
}]
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//#endregion
|
|
124
|
+
export { fileSummary as n, refuseDirty as r, applyFiles as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { existsSync, globSync, readdirSync, realpathSync, statSync } from "node:fs";
|
|
2
|
-
import { basename, extname, join, relative, resolve } from "node:path";
|
|
1
|
+
import { existsSync, globSync, mkdirSync, readFileSync, readdirSync, realpathSync, statSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { basename, dirname, extname, join, relative, resolve } from "node:path";
|
|
3
3
|
//#region src/cli/files.ts
|
|
4
4
|
const SOURCE_EXT = /* @__PURE__ */ new Set([
|
|
5
5
|
".ts",
|
|
@@ -121,5 +121,14 @@ function defaultSrcPath() {
|
|
|
121
121
|
function doctorSrcPath(config) {
|
|
122
122
|
return config.doctor?.srcPath ?? config.collect?.srcPath ?? defaultSrcPath();
|
|
123
123
|
}
|
|
124
|
+
/** The parsed JSON at `path`; throws when it is unreadable or not JSON. */
|
|
125
|
+
function readJsonFile(path) {
|
|
126
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
127
|
+
}
|
|
128
|
+
/** Writes `text` to `path`, creating its directory first. */
|
|
129
|
+
function writeFileEnsuringDir(path, text) {
|
|
130
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
131
|
+
writeFileSync(path, text);
|
|
132
|
+
}
|
|
124
133
|
//#endregion
|
|
125
|
-
export {
|
|
134
|
+
export { rel as a, readJsonFile as i, doctorSrcPath as n, sqlFiles as o, listSourceFiles as r, writeFileEnsuringDir as s, defaultSrcPath as t };
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { i as configError } from "./errors-CWTY6uih.js";
|
|
3
|
+
import { i as readJsonFile } from "./files-D_JIzUrP.js";
|
|
4
|
+
import { a as loadModule, s as pickNamed } from "./load-DFS_ry0W.js";
|
|
5
|
+
import { existsSync } from "node:fs";
|
|
3
6
|
import { resolve } from "node:path";
|
|
4
7
|
//#region src/cli/fixtures.ts
|
|
5
|
-
function isRecord(value) {
|
|
6
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
7
|
-
}
|
|
8
8
|
function asFixtures(value) {
|
|
9
9
|
const list = Array.isArray(value) ? value : isRecord(value) && Array.isArray(value["fixtures"]) ? value["fixtures"] : void 0;
|
|
10
|
-
if (list === void 0) throw
|
|
10
|
+
if (list === void 0) throw configError("PermDock CLI: fixtures must be an array or { fixtures }");
|
|
11
11
|
return list.map((item, index) => {
|
|
12
|
-
if (!isRecord(item) || !isRecord(item["subject"]) || item["row"] === void 0) throw
|
|
12
|
+
if (!isRecord(item) || !isRecord(item["subject"]) || item["row"] === void 0) throw configError(`PermDock CLI: fixture ${index} needs subject and row`);
|
|
13
13
|
if (typeof item["action"] !== "string") throw new TypeError(`PermDock CLI: fixture ${index} needs action`);
|
|
14
14
|
if (typeof item["subject"]["id"] !== "string") throw new TypeError(`PermDock CLI: fixture ${index} subject needs id`);
|
|
15
15
|
const memberships = item["subject"]["memberships"];
|
|
16
|
-
if (memberships !== void 0 && !Array.isArray(memberships)) throw
|
|
16
|
+
if (memberships !== void 0 && !Array.isArray(memberships)) throw configError(`PermDock CLI: fixture ${index} subject.memberships must be an array`);
|
|
17
17
|
const tenant = item["subject"]["tenant"];
|
|
18
|
-
if (tenant !== void 0 && typeof tenant !== "string") throw
|
|
18
|
+
if (tenant !== void 0 && typeof tenant !== "string") throw configError(`PermDock CLI: fixture ${index} subject.tenant must be a string`);
|
|
19
19
|
const claims = item["subject"]["claims"];
|
|
20
|
-
if (claims !== void 0 && !isRecord(claims)) throw
|
|
20
|
+
if (claims !== void 0 && !isRecord(claims)) throw configError(`PermDock CLI: fixture ${index} subject.claims must be an object`);
|
|
21
21
|
return item;
|
|
22
22
|
});
|
|
23
23
|
}
|
|
@@ -29,9 +29,9 @@ function asCustomRoles(value) {
|
|
|
29
29
|
/** A `.json` file or a module exporting `fixtures` (or default) and optionally `customRoles`. */
|
|
30
30
|
async function loadFixtures(cwd, path) {
|
|
31
31
|
const abs = resolve(cwd, path);
|
|
32
|
-
if (!existsSync(abs)) throw
|
|
32
|
+
if (!existsSync(abs)) throw configError(`PermDock CLI: fixtures not found: ${path}`);
|
|
33
33
|
if (abs.endsWith(".json")) {
|
|
34
|
-
const parsed =
|
|
34
|
+
const parsed = readJsonFile(abs);
|
|
35
35
|
return {
|
|
36
36
|
fixtures: asFixtures(parsed),
|
|
37
37
|
customRoles: asCustomRoles(parsed)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { n as CliError } from "./errors-CWTY6uih.js";
|
|
2
|
+
import { n as secretInput } from "./credentials-DPyHmYz5.js";
|
|
3
|
+
//#region src/cli/core/flags.ts
|
|
4
|
+
/** The flag vocabulary shared with better-supabase: one spelling per meaning. */
|
|
5
|
+
const dbUrlFlags = { "db-url-stdin": {
|
|
6
|
+
type: "boolean",
|
|
7
|
+
description: "Read the Postgres connection string from stdin (default $DATABASE_URL, then $SUPABASE_DB_URL)"
|
|
8
|
+
} };
|
|
9
|
+
const outFlag = { out: {
|
|
10
|
+
type: "string",
|
|
11
|
+
description: "File to write",
|
|
12
|
+
valueHint: "file"
|
|
13
|
+
} };
|
|
14
|
+
const checkFlag = { check: {
|
|
15
|
+
type: "boolean",
|
|
16
|
+
description: "Exit 1 when a file on disk is stale; write nothing"
|
|
17
|
+
} };
|
|
18
|
+
const dryRunFlag = { "dry-run": {
|
|
19
|
+
type: "boolean",
|
|
20
|
+
description: "Print what would change; write nothing"
|
|
21
|
+
} };
|
|
22
|
+
const forceFlag = { force: {
|
|
23
|
+
type: "boolean",
|
|
24
|
+
description: "Overwrite files PermDock did not write or that changed by hand"
|
|
25
|
+
} };
|
|
26
|
+
const policyFlag = { policy: {
|
|
27
|
+
type: "string",
|
|
28
|
+
description: "Module exporting the policy (default policy in the config)",
|
|
29
|
+
valueHint: "module"
|
|
30
|
+
} };
|
|
31
|
+
const permissionsFlag = { permissions: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "Module exporting the permissions (default permissions in the config)",
|
|
34
|
+
valueHint: "module"
|
|
35
|
+
} };
|
|
36
|
+
const failOnFlag = { "fail-on": {
|
|
37
|
+
type: "enum",
|
|
38
|
+
options: ["error", "warning"],
|
|
39
|
+
default: "error",
|
|
40
|
+
description: "Lowest finding severity that exits 1"
|
|
41
|
+
} };
|
|
42
|
+
const validatorFlag = { validator: {
|
|
43
|
+
type: "enum",
|
|
44
|
+
options: [
|
|
45
|
+
"zod",
|
|
46
|
+
"valibot",
|
|
47
|
+
"arktype"
|
|
48
|
+
],
|
|
49
|
+
description: "Schema library for the generated resources (default zod)"
|
|
50
|
+
} };
|
|
51
|
+
/**
|
|
52
|
+
* The connection string from `--db-url-stdin`, or, when the leaf needs one,
|
|
53
|
+
* `DATABASE_URL` then `SUPABASE_DB_URL`: the order better-supabase reads them.
|
|
54
|
+
*/
|
|
55
|
+
async function dbUrl(ctx, flags, options) {
|
|
56
|
+
const piped = await secretInput(ctx, {
|
|
57
|
+
flag: "db-url",
|
|
58
|
+
stdin: flags["db-url-stdin"]
|
|
59
|
+
});
|
|
60
|
+
if (piped !== void 0 || options?.required !== true) return piped;
|
|
61
|
+
for (const name of DB_URL_ENV) {
|
|
62
|
+
const value = ctx.env[name];
|
|
63
|
+
if (value !== void 0 && value !== "") {
|
|
64
|
+
ctx.addSecret(value);
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const DB_URL_ENV = ["DATABASE_URL", "SUPABASE_DB_URL"];
|
|
70
|
+
/** A string flag given with a value; a bare flag reads as `""`. */
|
|
71
|
+
function given(value) {
|
|
72
|
+
return value === void 0 || value === "" ? void 0 : value;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* `--out` for a command that only writes a file: `-` is refused instead of
|
|
76
|
+
* creating a file named `-`.
|
|
77
|
+
*/
|
|
78
|
+
function fileOut(command, value) {
|
|
79
|
+
if (value === "-") throw new CliError("usage", `${command}: --out - is not supported; name a file.`, {
|
|
80
|
+
code: "invalid_value",
|
|
81
|
+
extensions: { flag: "--out" }
|
|
82
|
+
});
|
|
83
|
+
return given(value);
|
|
84
|
+
}
|
|
85
|
+
//#endregion
|
|
86
|
+
export { failOnFlag as a, given as c, policyFlag as d, validatorFlag as f, dryRunFlag as i, outFlag as l, dbUrl as n, fileOut as o, dbUrlFlags as r, forceFlag as s, checkFlag as t, permissionsFlag as u };
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { a as
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { a as
|
|
3
|
+
import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-BKy0EfhN.js";
|
|
4
|
+
import { o as sameId } from "./expiry-D4_YKRKD.js";
|
|
5
|
+
import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
|
|
6
|
+
import { g as secondsOf, o as epochSeconds, t as INVALID_NOW } from "./time-DkWjdL98.js";
|
|
7
|
+
import { a as normalizeMemberships, d as scopeList, m as tenantOf, o as resolveScope, t as activeFor } from "./scopes-CUPSjo9q.js";
|
|
8
|
+
import { a as readOnlyActorRefuses, c as rowIdOf, l as rowValues, n as coveredByDelegation, u as evaluateCondition } from "./delegation-DaXVdDhM.js";
|
|
9
|
+
import { b as synthesiseRole, m as findRole, v as listRoles } from "./grantee-Cn1HyUsI.js";
|
|
10
|
+
import { a as grantCoversField, o as pickVisible, r as readWireValidity, t as isActive } from "./validity-CZ7-y0Cj.js";
|
|
11
|
+
import { c as nowSeconds, d as resolveActiveTenant, f as rowInScope, n as inTeam, r as isMembershipExpired, s as nestedAppliesWithoutRow } from "./tenancy-DN2QAx9z.js";
|
|
11
12
|
import { t as requiresApproval } from "./approval-required-TzNB9oQA.js";
|
|
12
|
-
import { t as
|
|
13
|
+
import { r as tokenPayload, t as decisionToken } from "./token-BLZcjQgt.js";
|
|
14
|
+
import { t as fromWireDelegation } from "./wire-delegation-Cv3W2eaM.js";
|
|
15
|
+
import { n as matchGrantee } from "./grantee-match-DHArqY82.js";
|
|
13
16
|
import { t as resourceIdOf } from "./resource-ref-CaS9yVPi.js";
|
|
14
|
-
import { n as
|
|
17
|
+
import { a as deniedFor, n as mayUse, o as signSnapshot, r as permittedIds, t as whereFromGrants } from "./where-scope-Dv-WTP-w.js";
|
|
15
18
|
//#region src/core/snapshot-evaluate.ts
|
|
16
19
|
function coveredByInclude(snapshot, permission) {
|
|
17
20
|
const include = snapshot.include;
|
|
@@ -81,6 +84,8 @@ function conditionOk(grant, permission, current, next, subject, now, scopes) {
|
|
|
81
84
|
matched: false,
|
|
82
85
|
reason: "opaque-condition"
|
|
83
86
|
};
|
|
87
|
+
const deny = grant.effect === "deny";
|
|
88
|
+
let whereMatched;
|
|
84
89
|
if (grant.where !== void 0) {
|
|
85
90
|
if (permission.kind === "collection" || current === void 0) return {
|
|
86
91
|
matched: false,
|
|
@@ -90,17 +95,22 @@ function conditionOk(grant, permission, current, next, subject, now, scopes) {
|
|
|
90
95
|
matched: false,
|
|
91
96
|
reason: "opaque-condition"
|
|
92
97
|
};
|
|
93
|
-
|
|
98
|
+
whereMatched = evaluateCondition(grant.where, current, subject, now, scopes, void 0, onOpaque);
|
|
94
99
|
if (opaqueReached) return {
|
|
95
100
|
matched: false,
|
|
96
101
|
reason: "opaque-condition"
|
|
97
102
|
};
|
|
98
|
-
if (
|
|
103
|
+
if (whereMatched && deny) return { matched: true };
|
|
104
|
+
if (!whereMatched && !deny) return {
|
|
99
105
|
matched: false,
|
|
100
106
|
reason: "condition"
|
|
101
107
|
};
|
|
102
108
|
}
|
|
103
|
-
const check = grant.check;
|
|
109
|
+
const check = grant.check ?? (permission.action === "update" ? grant.where : void 0);
|
|
110
|
+
if (check === void 0 && whereMatched === false) return {
|
|
111
|
+
matched: false,
|
|
112
|
+
reason: "condition"
|
|
113
|
+
};
|
|
104
114
|
if (check !== void 0) {
|
|
105
115
|
if (check.op === "opaque") return {
|
|
106
116
|
matched: false,
|
|
@@ -126,6 +136,8 @@ function matchedOf(grant) {
|
|
|
126
136
|
return compact({
|
|
127
137
|
role: grant.role,
|
|
128
138
|
permission: grant.permission,
|
|
139
|
+
name: grant.name,
|
|
140
|
+
meta: grant.meta,
|
|
129
141
|
to: grant.to,
|
|
130
142
|
where: grant.where,
|
|
131
143
|
check: grant.check,
|
|
@@ -133,7 +145,7 @@ function matchedOf(grant) {
|
|
|
133
145
|
});
|
|
134
146
|
}
|
|
135
147
|
function evaluateSnapshot(snapshot, subject, permission, data, team, options, outcomeOnly = false) {
|
|
136
|
-
let clock = options.now;
|
|
148
|
+
let clock = options.now === void 0 ? void 0 : epochSeconds(options.now);
|
|
137
149
|
const now = () => clock ??= nowSeconds();
|
|
138
150
|
const tracer = options.explain === true ? {
|
|
139
151
|
evaluated: 0,
|
|
@@ -141,15 +153,22 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
|
|
|
141
153
|
denies: [],
|
|
142
154
|
skipped: []
|
|
143
155
|
} : void 0;
|
|
144
|
-
const done = (
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
156
|
+
const done = (raw) => {
|
|
157
|
+
if (outcomeOnly) return raw;
|
|
158
|
+
const decision = raw.outcome === "denied" ? {
|
|
159
|
+
...raw,
|
|
160
|
+
permission: permission.key
|
|
161
|
+
} : raw;
|
|
162
|
+
return freezeDeep(tracer === void 0 ? decision : {
|
|
163
|
+
...decision,
|
|
164
|
+
trace: {
|
|
165
|
+
evaluated: tracer.evaluated,
|
|
166
|
+
allows: tracer.allows,
|
|
167
|
+
denies: tracer.denies,
|
|
168
|
+
skipped: tracer.skipped
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
};
|
|
153
172
|
const skip = (grant, why) => {
|
|
154
173
|
tracer?.skipped.push({
|
|
155
174
|
role: grant.role,
|
|
@@ -166,6 +185,15 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
|
|
|
166
185
|
}],
|
|
167
186
|
alternatives: []
|
|
168
187
|
});
|
|
188
|
+
if (clock !== void 0 && !Number.isFinite(clock)) return done({
|
|
189
|
+
outcome: "denied",
|
|
190
|
+
denials: [{
|
|
191
|
+
role: null,
|
|
192
|
+
reason: "validation",
|
|
193
|
+
detail: INVALID_NOW
|
|
194
|
+
}],
|
|
195
|
+
alternatives: []
|
|
196
|
+
});
|
|
169
197
|
const { current, next } = rowValues(permission, data);
|
|
170
198
|
const scopes = scopeList(snapshot.scopes);
|
|
171
199
|
const denials = [];
|
|
@@ -183,7 +211,7 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
|
|
|
183
211
|
continue;
|
|
184
212
|
}
|
|
185
213
|
let scoped = scopeOk(snapshot, grant, permission, subject, permission.kind === "instance" ? current : next, team, now(), options.scope);
|
|
186
|
-
if (scoped.ok && permission.kind === "instance" && next !== current) scoped = scopeOk(snapshot, grant, permission, subject, next, team, now(), options.scope);
|
|
214
|
+
if (scoped.ok !== (grant.effect === "deny") && permission.kind === "instance" && next !== current) scoped = scopeOk(snapshot, grant, permission, subject, next, team, now(), options.scope);
|
|
187
215
|
if (!scoped.ok) {
|
|
188
216
|
denials.push(compact({
|
|
189
217
|
role: grant.role,
|
|
@@ -192,7 +220,7 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
|
|
|
192
220
|
}));
|
|
193
221
|
continue;
|
|
194
222
|
}
|
|
195
|
-
if (!isActive(grant.validity, now())) {
|
|
223
|
+
if (!isActive(readWireValidity(grant.validity, grant.effect), now())) {
|
|
196
224
|
if (grant.effect === "allow") denials.push({
|
|
197
225
|
role: grant.role,
|
|
198
226
|
reason: "inactive-grant",
|
|
@@ -269,7 +297,7 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
|
|
|
269
297
|
alternatives: []
|
|
270
298
|
});
|
|
271
299
|
}
|
|
272
|
-
if (snapshot.delegated !== void 0 && !snapshot.delegated.includes(permission.key)) return done({
|
|
300
|
+
if (snapshot.delegated !== void 0 && !snapshot.delegated.includes(permission.key) || readOnlyActorRefuses(subject.actor, permission)) return done({
|
|
273
301
|
outcome: "denied",
|
|
274
302
|
denials: [{
|
|
275
303
|
role: null,
|
|
@@ -292,8 +320,8 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
|
|
|
292
320
|
resourceId,
|
|
293
321
|
principal: subject.principal,
|
|
294
322
|
actor: subject.actor,
|
|
295
|
-
fingerprint: `snapshot:${
|
|
296
|
-
payload: resourceId
|
|
323
|
+
fingerprint: `snapshot:${snapshot.issuedAt}`,
|
|
324
|
+
payload: tokenPayload(resourceId, next ?? current, options.args)
|
|
297
325
|
});
|
|
298
326
|
const grant = matchedOf(matched);
|
|
299
327
|
if (requiresApproval(matched.approval)) return done({
|
|
@@ -302,12 +330,13 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
|
|
|
302
330
|
reason: "human",
|
|
303
331
|
token
|
|
304
332
|
});
|
|
305
|
-
return done({
|
|
333
|
+
return done(compact({
|
|
306
334
|
outcome: "granted",
|
|
307
335
|
subject,
|
|
308
336
|
matched: grant,
|
|
309
|
-
token
|
|
310
|
-
|
|
337
|
+
token,
|
|
338
|
+
obligations: matched.obligations
|
|
339
|
+
}));
|
|
311
340
|
}
|
|
312
341
|
function whereFromSnapshot(snapshot, subject, permission, team) {
|
|
313
342
|
return whereFromGrants(snapshot.grants.filter((grant) => grant.permission === permission.key), {
|
|
@@ -334,9 +363,9 @@ function subjectFromSnapshot(snapshot, tenant) {
|
|
|
334
363
|
...principal,
|
|
335
364
|
tenant: nextTenant
|
|
336
365
|
}),
|
|
337
|
-
delegation: snapshot.subject.delegation,
|
|
366
|
+
delegation: fromWireDelegation(snapshot.subject.delegation),
|
|
338
367
|
context: snapshot.subject.context,
|
|
339
|
-
expiresAt: snapshot.expiresAt
|
|
368
|
+
expiresAt: secondsOf(snapshot.expiresAt)
|
|
340
369
|
}));
|
|
341
370
|
}
|
|
342
371
|
/**
|
|
@@ -405,12 +434,18 @@ function fromSnapshot(snapshot, options = {}) {
|
|
|
405
434
|
});
|
|
406
435
|
const explain = ((permission, data, decideOptions) => run(permission, data, {
|
|
407
436
|
...decideOptions,
|
|
408
|
-
|
|
437
|
+
call: decideOptions?.call ?? "explain",
|
|
409
438
|
explain: true
|
|
410
439
|
}));
|
|
411
440
|
const instance = {
|
|
412
441
|
can,
|
|
413
442
|
decide,
|
|
443
|
+
decideEach(permission, rows, decideOptions) {
|
|
444
|
+
return Object.freeze(rows.map((row) => run(permission, row, decideOptions)));
|
|
445
|
+
},
|
|
446
|
+
decideFor(_principalId, permission) {
|
|
447
|
+
return Promise.resolve(deniedFor(permission, "unsupported"));
|
|
448
|
+
},
|
|
414
449
|
assert,
|
|
415
450
|
explain,
|
|
416
451
|
permissions: {},
|
|
@@ -438,7 +473,6 @@ function fromSnapshot(snapshot, options = {}) {
|
|
|
438
473
|
},
|
|
439
474
|
simulate: ((input, simulateOptions) => {
|
|
440
475
|
if (Array.isArray(input)) return input.map(([permission, data]) => run(permission, data, compact({ now: simulateOptions?.now })));
|
|
441
|
-
if (isArazzoSimulateInput(input)) return simulateArazzo(input, input.permissions, (permission, data) => run(permission, data));
|
|
442
476
|
const preview = input;
|
|
443
477
|
const previewRoles = preview.roles?.map((item) => typeof item === "string" ? item : item.key);
|
|
444
478
|
return fromSnapshot(freezeDeep({
|
|
@@ -455,7 +489,7 @@ function fromSnapshot(snapshot, options = {}) {
|
|
|
455
489
|
}
|
|
456
490
|
}), options);
|
|
457
491
|
}),
|
|
458
|
-
snapshot: ((signing) => signing?.signer === void 0 ? snapshot : signSnapshot(snapshot, signing.signer, signing.audience)),
|
|
492
|
+
snapshot: ((signing) => signing?.signer === void 0 ? snapshot : signSnapshot(snapshot, signing.signer, compact({ audience: signing.audience }))),
|
|
459
493
|
on() {
|
|
460
494
|
return () => void 0;
|
|
461
495
|
},
|
|
@@ -497,38 +531,17 @@ function fromSnapshot(snapshot, options = {}) {
|
|
|
497
531
|
}
|
|
498
532
|
return out;
|
|
499
533
|
},
|
|
500
|
-
|
|
534
|
+
prefetchRelations() {
|
|
501
535
|
return Promise.resolve();
|
|
502
536
|
},
|
|
503
|
-
|
|
504
|
-
return
|
|
505
|
-
permission: permission.key,
|
|
506
|
-
holders: [],
|
|
507
|
-
complete: false
|
|
508
|
-
}));
|
|
537
|
+
mayUse(permission) {
|
|
538
|
+
return mayUse(instance, permission);
|
|
509
539
|
},
|
|
510
|
-
|
|
511
|
-
return
|
|
512
|
-
outcome: "denied",
|
|
513
|
-
change,
|
|
514
|
-
denials: [{
|
|
515
|
-
role: null,
|
|
516
|
-
reason: "unsupported"
|
|
517
|
-
}]
|
|
518
|
-
});
|
|
540
|
+
permittedIds(permission, scope, query) {
|
|
541
|
+
return permittedIds(instance, permission, scope, query);
|
|
519
542
|
},
|
|
520
543
|
derive() {
|
|
521
|
-
return instance;
|
|
522
|
-
},
|
|
523
|
-
activate() {
|
|
524
|
-
return freezeDeep({
|
|
525
|
-
outcome: "denied",
|
|
526
|
-
denials: [{
|
|
527
|
-
role: null,
|
|
528
|
-
reason: "unsupported"
|
|
529
|
-
}],
|
|
530
|
-
alternatives: []
|
|
531
|
-
});
|
|
544
|
+
return Promise.resolve(instance);
|
|
532
545
|
},
|
|
533
546
|
assignableRoles(query) {
|
|
534
547
|
if (query?.scope === "global") return [];
|
|
@@ -556,7 +569,7 @@ function fromSnapshot(snapshot, options = {}) {
|
|
|
556
569
|
function emptySnapshot() {
|
|
557
570
|
return freezeDeep({
|
|
558
571
|
v: 1,
|
|
559
|
-
issuedAt:
|
|
572
|
+
issuedAt: "1970-01-01T00:00:00.000Z",
|
|
560
573
|
subject: {
|
|
561
574
|
principal: null,
|
|
562
575
|
context: {}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
1
2
|
import { t as byCodePoint } from "./compare-pfyVnBjE.js";
|
|
2
3
|
//#region src/cli/generate.ts
|
|
3
4
|
const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
|
|
@@ -19,9 +20,6 @@ function emptySchema(kind) {
|
|
|
19
20
|
function propertyKey(name) {
|
|
20
21
|
return IDENTIFIER.test(name) ? name : JSON.stringify(name);
|
|
21
22
|
}
|
|
22
|
-
function isRecord(value) {
|
|
23
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
24
|
-
}
|
|
25
23
|
function literalEnum(schema) {
|
|
26
24
|
const values = schema["enum"];
|
|
27
25
|
if (!Array.isArray(values) || values.length === 0 || !values.every((value) => typeof value === "string")) return;
|