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,385 @@
|
|
|
1
|
+
import { n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
+
import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-DXSHAMIa.js";
|
|
4
|
+
import { r as parseAppData, t as assertAppData } from "./app-data-MuyzVqX8.js";
|
|
5
|
+
import { f as normaliseRelation, h as restrictedStopsOf, i as assertIncludes, n as RESOURCE_NAME, r as assertGraphTargets, t as LEVEL_NAME } from "./resource-relations-D_jw0BFx.js";
|
|
6
|
+
//#region src/core/brands.ts
|
|
7
|
+
const RESOURCE_BRAND = Symbol.for("permdock.resource");
|
|
8
|
+
const TREE_REGISTRY = Symbol.for("permdock.registry");
|
|
9
|
+
const NODE_RESOURCE = Symbol.for("permdock.resource");
|
|
10
|
+
const TREE_LEAVES = Symbol.for("permdock.leaves");
|
|
11
|
+
const LEAF_FORMER = Symbol.for("permdock.former");
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/core/permission-leaf.ts
|
|
14
|
+
function isStandardSchema(value) {
|
|
15
|
+
return value !== null && typeof value === "object" && "~standard" in value && typeof value["~standard"]?.version === "number";
|
|
16
|
+
}
|
|
17
|
+
function isResourceInit(value) {
|
|
18
|
+
return value !== null && typeof value === "object" && RESOURCE_BRAND in value && value[RESOURCE_BRAND] === true;
|
|
19
|
+
}
|
|
20
|
+
function isResourceOptions(value) {
|
|
21
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) && !isStandardSchema(value);
|
|
22
|
+
}
|
|
23
|
+
function metaFor(list, action, schema) {
|
|
24
|
+
if (list === void 0 || Array.isArray(list)) return freezeDeep({});
|
|
25
|
+
const meta = list[action];
|
|
26
|
+
if (meta?.x === void 0) return freezeDeep({ ...meta });
|
|
27
|
+
return freezeDeep({
|
|
28
|
+
...meta,
|
|
29
|
+
x: parseAppData(schema, meta.x, `meta.x of action '${action}'`)
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function resourceMetaFor(name, meta, schema) {
|
|
33
|
+
if (meta === void 0) return;
|
|
34
|
+
assertAppData(meta, `meta of resource '${name}'`);
|
|
35
|
+
for (const field of ["title", "description"]) if (meta[field] !== void 0 && typeof meta[field] !== "string") throw new TypeError(`PermDock: meta.${field} of resource '${name}' must be a string`);
|
|
36
|
+
return freezeDeep(compact({
|
|
37
|
+
title: meta.title,
|
|
38
|
+
description: meta.description,
|
|
39
|
+
x: meta.x === void 0 ? void 0 : parseAppData(schema, meta.x, `meta.x of resource '${name}'`)
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* MCP and WebMCP tool hints from a permission's `meta`. Hints only inform the
|
|
44
|
+
* client; every call is still decided on the server.
|
|
45
|
+
*/
|
|
46
|
+
function annotationsFor(permission) {
|
|
47
|
+
const { meta } = permission;
|
|
48
|
+
const readOnlyHint = meta.readOnly ?? (permission.action === "read" || permission.action === "list");
|
|
49
|
+
return compact({
|
|
50
|
+
readOnlyHint,
|
|
51
|
+
destructiveHint: readOnlyHint ? void 0 : meta.destructive,
|
|
52
|
+
idempotentHint: meta.idempotent
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function actionNames(list) {
|
|
56
|
+
if (list === void 0) return [];
|
|
57
|
+
if (isReadonlyArray(list)) return list;
|
|
58
|
+
return Object.keys(list);
|
|
59
|
+
}
|
|
60
|
+
function keyToScope(key) {
|
|
61
|
+
return key.replaceAll(".", ":");
|
|
62
|
+
}
|
|
63
|
+
function makeLeaf(key, resourceName, action, meta, kind, former) {
|
|
64
|
+
const leaf = {
|
|
65
|
+
key,
|
|
66
|
+
scope: keyToScope(key),
|
|
67
|
+
resource: resourceName,
|
|
68
|
+
action,
|
|
69
|
+
meta
|
|
70
|
+
};
|
|
71
|
+
Object.defineProperty(leaf, "kind", {
|
|
72
|
+
value: kind,
|
|
73
|
+
enumerable: false,
|
|
74
|
+
writable: false,
|
|
75
|
+
configurable: false
|
|
76
|
+
});
|
|
77
|
+
if (former !== void 0 && former.length > 0) Object.defineProperty(leaf, LEAF_FORMER, {
|
|
78
|
+
value: Object.freeze([...former].toSorted()),
|
|
79
|
+
enumerable: false,
|
|
80
|
+
writable: false,
|
|
81
|
+
configurable: false
|
|
82
|
+
});
|
|
83
|
+
return Object.freeze(leaf);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The keys `permission` was renamed from, sorted. Empty for a leaf without
|
|
87
|
+
* renames and for one that crossed a serialisation boundary.
|
|
88
|
+
*/
|
|
89
|
+
function formerKeys(permission) {
|
|
90
|
+
if (!Object.hasOwn(permission, LEAF_FORMER)) return [];
|
|
91
|
+
const value = Reflect.get(permission, LEAF_FORMER);
|
|
92
|
+
return isReadonlyArray(value) ? value.filter((item) => typeof item === "string") : [];
|
|
93
|
+
}
|
|
94
|
+
/** The OAuth scope strings `permission` used to have: each former key with `.` as `:`. */
|
|
95
|
+
function formerScopes(permission) {
|
|
96
|
+
return formerKeys(permission).map(keyToScope);
|
|
97
|
+
}
|
|
98
|
+
function resource(schemaOrOptions, options) {
|
|
99
|
+
if (schemaOrOptions === void 0 && options === void 0) throw new Error("PermDock: resource() requires a schema or options");
|
|
100
|
+
if (isStandardSchema(schemaOrOptions)) return {
|
|
101
|
+
[RESOURCE_BRAND]: true,
|
|
102
|
+
schema: schemaOrOptions,
|
|
103
|
+
options: options ?? {}
|
|
104
|
+
};
|
|
105
|
+
if (isResourceOptions(schemaOrOptions) && options === void 0) return {
|
|
106
|
+
[RESOURCE_BRAND]: true,
|
|
107
|
+
schema: void 0,
|
|
108
|
+
options: schemaOrOptions
|
|
109
|
+
};
|
|
110
|
+
throw new Error("PermDock: resource() first argument must be a schema or options");
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
//#region src/core/materialise-resource.ts
|
|
114
|
+
function materialiseResource(init, path, registry, leaves, build) {
|
|
115
|
+
const { former } = build;
|
|
116
|
+
const segment = path.at(-1);
|
|
117
|
+
if (segment === void 0) throw new Error("PermDock: resource() cannot be the root of definePermissions");
|
|
118
|
+
const name = init.options.name ?? segment;
|
|
119
|
+
assertSafeKey(name, "resource");
|
|
120
|
+
if (init.options.name !== void 0 && !RESOURCE_NAME.test(name)) throw new Error(`PermDock: resource name '${name}' must start with a letter and hold only letters, digits, '_' and '-'`);
|
|
121
|
+
if (registry.has(name)) throw new Error(`PermDock: duplicate resource name '${name}'`);
|
|
122
|
+
const prefix = path.join(".");
|
|
123
|
+
const instanceNames = actionNames(init.options.actions);
|
|
124
|
+
const collectionNames = actionNames(init.options.collection);
|
|
125
|
+
if (instanceNames.length === 0 && collectionNames.length === 0) throw new Error(`PermDock: resource '${name}' has no actions or collection`);
|
|
126
|
+
const instanceSet = /* @__PURE__ */ new Set();
|
|
127
|
+
const collectionSet = /* @__PURE__ */ new Set();
|
|
128
|
+
const node = {};
|
|
129
|
+
for (const action of instanceNames) {
|
|
130
|
+
assertSafeKey(action, "action");
|
|
131
|
+
if (instanceSet.has(action)) throw new Error(`PermDock: duplicate action '${action}' on '${name}'`);
|
|
132
|
+
instanceSet.add(action);
|
|
133
|
+
const key = `${prefix}.${action}`;
|
|
134
|
+
const leaf = makeLeaf(key, name, action, metaFor(init.options.actions, action, build.x?.permission), "instance", former.get(key));
|
|
135
|
+
node[action] = leaf;
|
|
136
|
+
leaves.push(leaf);
|
|
137
|
+
}
|
|
138
|
+
for (const action of collectionNames) {
|
|
139
|
+
assertSafeKey(action, "action");
|
|
140
|
+
if (instanceSet.has(action) || collectionSet.has(action)) throw new Error(`PermDock: duplicate action '${action}' on '${name}'`);
|
|
141
|
+
collectionSet.add(action);
|
|
142
|
+
const key = `${prefix}.${action}`;
|
|
143
|
+
const leaf = makeLeaf(key, name, action, metaFor(init.options.collection, action, build.x?.permission), "collection", former.get(key));
|
|
144
|
+
node[action] = leaf;
|
|
145
|
+
leaves.push(leaf);
|
|
146
|
+
}
|
|
147
|
+
const parent = init.options.parent;
|
|
148
|
+
if (parent !== void 0) {
|
|
149
|
+
assertSafeKey(parent.field, "parent field");
|
|
150
|
+
assertSafeKey(parent.resource, "parent resource");
|
|
151
|
+
}
|
|
152
|
+
const version = init.options.version;
|
|
153
|
+
if (version !== void 0) assertSafeKey(version, "version field");
|
|
154
|
+
const restrictedOption = init.options.restricted;
|
|
155
|
+
const restricted = typeof restrictedOption === "string" ? restrictedOption : restrictedOption?.field;
|
|
156
|
+
if (restrictedOption !== void 0) {
|
|
157
|
+
if (typeof restricted !== "string") throw new TypeError(`PermDock: resource "${name}" restricted must name a field`);
|
|
158
|
+
assertSafeKey(restricted, "restricted field");
|
|
159
|
+
}
|
|
160
|
+
const disclosure = init.options.disclosure ?? "reveal";
|
|
161
|
+
if (disclosure !== "hide" && disclosure !== "reveal") throw new Error(`PermDock: resource "${name}" disclosure must be 'hide' or 'reveal'`);
|
|
162
|
+
const relations = {};
|
|
163
|
+
for (const [relationName, spec] of Object.entries(init.options.relations ?? {})) {
|
|
164
|
+
assertSafeKey(relationName, "relation");
|
|
165
|
+
relations[relationName] = freezeDeep(normaliseRelation(name, relationName, spec));
|
|
166
|
+
}
|
|
167
|
+
const links = {};
|
|
168
|
+
for (const [linkName, link] of Object.entries(init.options.links ?? {})) {
|
|
169
|
+
assertSafeKey(linkName, "link");
|
|
170
|
+
if (linkName === "parent") throw new Error(`PermDock: link 'parent' on '${name}' is reserved; declare it as parent`);
|
|
171
|
+
assertSafeKey(link.field, "link field");
|
|
172
|
+
assertSafeKey(link.resource, "link resource");
|
|
173
|
+
links[linkName] = freezeDeep({
|
|
174
|
+
field: link.field,
|
|
175
|
+
resource: link.resource
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
const restrictedStopList = typeof restrictedOption === "object" ? restrictedStopsOf(name, restrictedOption, parent, links) : void 0;
|
|
179
|
+
const levels = {};
|
|
180
|
+
for (const [levelName, condition] of Object.entries(init.options.levels ?? {})) {
|
|
181
|
+
if (!LEVEL_NAME.test(levelName)) throw new Error(`PermDock: level '${levelName}' on '${name}' must match ^[a-z][a-z0-9_]*$`);
|
|
182
|
+
if (condition === null || typeof condition !== "object" || Array.isArray(condition)) throw new Error(`PermDock: level '${levelName}' on '${name}' must be a condition object`);
|
|
183
|
+
levels[levelName] = freezeDeep({ ...condition });
|
|
184
|
+
}
|
|
185
|
+
if (Object.keys(levels).length > 0 && instanceSet.size === 0) throw new Error(`PermDock: resource '${name}' declares levels but no instance actions`);
|
|
186
|
+
const meta = resourceMetaFor(name, init.options.meta, build.x?.resource);
|
|
187
|
+
const resourceNode = Object.freeze({
|
|
188
|
+
...meta === void 0 ? {} : { meta },
|
|
189
|
+
name,
|
|
190
|
+
path: prefix,
|
|
191
|
+
schema: init.schema,
|
|
192
|
+
id: init.options.id ?? "id",
|
|
193
|
+
parent: parent === void 0 ? void 0 : freezeDeep({ ...parent }),
|
|
194
|
+
links: freezeDeep(links),
|
|
195
|
+
relations: freezeDeep(relations),
|
|
196
|
+
version,
|
|
197
|
+
restricted,
|
|
198
|
+
...restrictedStopList === void 0 ? {} : { restrictedStops: restrictedStopList },
|
|
199
|
+
disclosure,
|
|
200
|
+
instanceActions: instanceSet,
|
|
201
|
+
collectionActions: collectionSet,
|
|
202
|
+
levels: Object.freeze(levels)
|
|
203
|
+
});
|
|
204
|
+
assertIncludes(resourceNode);
|
|
205
|
+
registry.set(name, resourceNode);
|
|
206
|
+
Object.defineProperty(node, NODE_RESOURCE, {
|
|
207
|
+
value: resourceNode,
|
|
208
|
+
enumerable: false,
|
|
209
|
+
writable: false,
|
|
210
|
+
configurable: false
|
|
211
|
+
});
|
|
212
|
+
return freezeDeep(node);
|
|
213
|
+
}
|
|
214
|
+
/** The resource a `definePermissions` resource node was built from, read from the node itself. */
|
|
215
|
+
function resourceOfNode(node) {
|
|
216
|
+
if (!Object.hasOwn(node, NODE_RESOURCE)) return;
|
|
217
|
+
const value = Reflect.get(node, NODE_RESOURCE);
|
|
218
|
+
return isResourceNode(value) ? value : void 0;
|
|
219
|
+
}
|
|
220
|
+
function isResourceNode(value) {
|
|
221
|
+
return value !== null && typeof value === "object" && "name" in value && "instanceActions" in value;
|
|
222
|
+
}
|
|
223
|
+
function walk(input, path, registry, leaves, depth, build) {
|
|
224
|
+
if (depth > 10) throw new Error(`PermDock: permission group nesting exceeds 10`);
|
|
225
|
+
if (isResourceInit(input)) return materialiseResource(input, path, registry, leaves, build);
|
|
226
|
+
if (input === null || typeof input !== "object" || Array.isArray(input)) throw new Error(`PermDock: definePermissions expected a group or resource at '${path.join(".")}'`);
|
|
227
|
+
const group = {};
|
|
228
|
+
for (const key of Object.keys(input)) {
|
|
229
|
+
assertSafeKey(key, "group");
|
|
230
|
+
group[key] = walk(input[key], [...path, key], registry, leaves, depth + 1, build);
|
|
231
|
+
}
|
|
232
|
+
return group;
|
|
233
|
+
}
|
|
234
|
+
function attachRegistry(tree, registry, leaves) {
|
|
235
|
+
const attached = tree;
|
|
236
|
+
Object.defineProperty(attached, TREE_REGISTRY, {
|
|
237
|
+
value: registry,
|
|
238
|
+
enumerable: false,
|
|
239
|
+
writable: false,
|
|
240
|
+
configurable: false
|
|
241
|
+
});
|
|
242
|
+
Object.defineProperty(attached, TREE_LEAVES, {
|
|
243
|
+
value: Object.freeze([...leaves]),
|
|
244
|
+
enumerable: false,
|
|
245
|
+
writable: false,
|
|
246
|
+
configurable: false
|
|
247
|
+
});
|
|
248
|
+
return attached;
|
|
249
|
+
}
|
|
250
|
+
//#endregion
|
|
251
|
+
//#region src/core/permission-registry.ts
|
|
252
|
+
function isRegistryTree(tree) {
|
|
253
|
+
return TREE_REGISTRY in tree;
|
|
254
|
+
}
|
|
255
|
+
function getRegistry(tree) {
|
|
256
|
+
if (!isRegistryTree(tree)) throw new Error("PermDock: permission tree is missing its registry");
|
|
257
|
+
return tree[TREE_REGISTRY];
|
|
258
|
+
}
|
|
259
|
+
function getResource(tree, name) {
|
|
260
|
+
if (isForbiddenKey(name)) return;
|
|
261
|
+
return getRegistry(tree).get(name);
|
|
262
|
+
}
|
|
263
|
+
const RENAMED_KEY = /^\S+$/u;
|
|
264
|
+
/** Current key to its former keys, from the `renamed` option; targets are checked once leaves exist. */
|
|
265
|
+
function formerByKey(renamed) {
|
|
266
|
+
const former = /* @__PURE__ */ new Map();
|
|
267
|
+
if (renamed === void 0) return former;
|
|
268
|
+
if (renamed === null || typeof renamed !== "object") throw new TypeError("PermDock: renamed must map old keys to current keys");
|
|
269
|
+
for (const [old, current] of Object.entries(renamed)) {
|
|
270
|
+
if (!RENAMED_KEY.test(old) || old.split(".").some(isForbiddenKey)) throw new Error(`PermDock: renamed key '${old}' is not a valid key`);
|
|
271
|
+
if (typeof current !== "string") throw new TypeError(`PermDock: renamed key '${old}' must map to a current key`);
|
|
272
|
+
former.set(current, [...former.get(current) ?? [], old]);
|
|
273
|
+
}
|
|
274
|
+
return former;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Every current key is unique, every former key names exactly one leaf, and
|
|
278
|
+
* no former key is also a current key, so a string resolves to one leaf.
|
|
279
|
+
*/
|
|
280
|
+
function assertKeys(leaves, former) {
|
|
281
|
+
const current = /* @__PURE__ */ new Set();
|
|
282
|
+
for (const leaf of leaves) {
|
|
283
|
+
if (current.has(leaf.key))
|
|
284
|
+
/* v8 ignore next */
|
|
285
|
+
throw new Error(`PermDock: duplicate permission key '${leaf.key}'`);
|
|
286
|
+
current.add(leaf.key);
|
|
287
|
+
}
|
|
288
|
+
for (const target of former?.keys() ?? []) if (!current.has(target)) throw new Error(`PermDock: renamed target '${target}' is not a permission key`);
|
|
289
|
+
const olds = /* @__PURE__ */ new Map();
|
|
290
|
+
for (const leaf of leaves) for (const old of formerKeys(leaf)) {
|
|
291
|
+
if (current.has(old)) throw new Error(`PermDock: renamed key '${old}' is still a permission key`);
|
|
292
|
+
const other = olds.get(old);
|
|
293
|
+
if (other !== void 0 && other !== leaf.key) throw new Error(`PermDock: renamed key '${old}' maps to both '${other}' and '${leaf.key}'`);
|
|
294
|
+
olds.set(old, leaf.key);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
function collectLeaves(node) {
|
|
298
|
+
if ("key" in node && "scope" in node && "action" in node) return [node];
|
|
299
|
+
const out = [];
|
|
300
|
+
for (const key of ownKeys(node)) {
|
|
301
|
+
const child = node[key];
|
|
302
|
+
if (child !== void 0) out.push(...collectLeaves(child));
|
|
303
|
+
}
|
|
304
|
+
return out;
|
|
305
|
+
}
|
|
306
|
+
function listPermissions(tree) {
|
|
307
|
+
if (isRegistryTree(tree)) return tree[TREE_LEAVES];
|
|
308
|
+
return collectLeaves(tree);
|
|
309
|
+
}
|
|
310
|
+
function findPermission(tree, keyOrScope) {
|
|
311
|
+
if (isForbiddenKey(keyOrScope)) return;
|
|
312
|
+
const leaves = listPermissions(tree);
|
|
313
|
+
for (const leaf of leaves) if (leaf.key === keyOrScope || leaf.scope === keyOrScope) return leaf;
|
|
314
|
+
for (const leaf of leaves) if (formerKeys(leaf).includes(keyOrScope) || formerScopes(leaf).includes(keyOrScope)) return leaf;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* A permission leaf: string `key`, `scope`, `resource` and `action` plus an
|
|
318
|
+
* object `meta`. `kind` is non-enumerable and does not survive
|
|
319
|
+
* `JSON.stringify`, so a leaf that crossed a serialisation boundary passes
|
|
320
|
+
* without it; when present it must be `instance` or `collection`.
|
|
321
|
+
*/
|
|
322
|
+
function isPermission(value) {
|
|
323
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
|
|
324
|
+
for (const field of [
|
|
325
|
+
"key",
|
|
326
|
+
"scope",
|
|
327
|
+
"resource",
|
|
328
|
+
"action"
|
|
329
|
+
]) if (!Object.hasOwn(value, field) || typeof Reflect.get(value, field) !== "string") return false;
|
|
330
|
+
const meta = Object.hasOwn(value, "meta") ? Reflect.get(value, "meta") : void 0;
|
|
331
|
+
if (meta === null || typeof meta !== "object" || Array.isArray(meta)) return false;
|
|
332
|
+
if (!Object.hasOwn(value, "kind")) return true;
|
|
333
|
+
const kind = Reflect.get(value, "kind");
|
|
334
|
+
return kind === "instance" || kind === "collection";
|
|
335
|
+
}
|
|
336
|
+
function mergeNodes(target, source, keys, registry, sourceRegistry) {
|
|
337
|
+
for (const key of ownKeys(source)) {
|
|
338
|
+
assertSafeKey(key, "group");
|
|
339
|
+
const incoming = source[key];
|
|
340
|
+
if (incoming === void 0)
|
|
341
|
+
/* v8 ignore next */
|
|
342
|
+
continue;
|
|
343
|
+
const existing = target[key];
|
|
344
|
+
if (existing === void 0) {
|
|
345
|
+
target[key] = incoming;
|
|
346
|
+
if (isPermission(incoming)) {
|
|
347
|
+
if (keys.has(incoming.key))
|
|
348
|
+
/* v8 ignore next */
|
|
349
|
+
throw new Error(`PermDock: duplicate permission key '${incoming.key}'`);
|
|
350
|
+
keys.add(incoming.key);
|
|
351
|
+
}
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
if (isPermission(existing) || isPermission(incoming)) {
|
|
355
|
+
const keyName = isPermission(incoming) ? incoming.key : isPermission(existing) ? existing.key : key;
|
|
356
|
+
throw new Error(`PermDock: duplicate permission key '${keyName}'`);
|
|
357
|
+
}
|
|
358
|
+
const nested = { ...existing };
|
|
359
|
+
mergeNodes(nested, incoming, keys, registry, sourceRegistry);
|
|
360
|
+
target[key] = freezeDeep(nested);
|
|
361
|
+
}
|
|
362
|
+
if (sourceRegistry !== void 0) for (const [name, node] of sourceRegistry) {
|
|
363
|
+
if (registry.has(name) && registry.get(name) !== node) throw new Error(`PermDock: duplicate resource name '${name}'`);
|
|
364
|
+
registry.set(name, node);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
function mergePermissions(...trees) {
|
|
368
|
+
if (trees.length === 0) throw new Error("PermDock: mergePermissions() requires at least one tree");
|
|
369
|
+
const merged = {};
|
|
370
|
+
const keys = /* @__PURE__ */ new Set();
|
|
371
|
+
const registry = /* @__PURE__ */ new Map();
|
|
372
|
+
for (const tree of trees) mergeNodes(merged, tree, keys, registry, isRegistryTree(tree) ? tree[TREE_REGISTRY] : void 0);
|
|
373
|
+
assertGraphTargets(registry);
|
|
374
|
+
const leaves = collectLeaves(merged);
|
|
375
|
+
assertKeys(leaves);
|
|
376
|
+
return freezeDeep(attachRegistry(merged, registry, leaves));
|
|
377
|
+
}
|
|
378
|
+
/** Former key to current key, for every leaf of `tree`. */
|
|
379
|
+
function renamedKeys(tree) {
|
|
380
|
+
const map = /* @__PURE__ */ new Map();
|
|
381
|
+
for (const leaf of listPermissions(tree)) for (const old of formerKeys(leaf)) map.set(old, leaf.key);
|
|
382
|
+
return map;
|
|
383
|
+
}
|
|
384
|
+
//#endregion
|
|
385
|
+
export { resource as _, getResource as a, listPermissions as c, attachRegistry as d, resourceOfNode as f, formerScopes as g, formerKeys as h, getRegistry as i, mergePermissions as l, annotationsFor as m, findPermission as n, isPermission as o, walk as p, formerByKey as r, isRegistryTree as s, assertKeys as t, renamedKeys as u };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
2
|
+
import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-Br4jSNVi.js";
|
|
3
|
+
import { r as assertGraphTargets } from "./resource-relations-D_jw0BFx.js";
|
|
4
|
+
//#region src/core/operation-risks.ts
|
|
5
|
+
/** Every `meta.risk` level, lowest first. */
|
|
6
|
+
const OPERATION_RISKS = Object.freeze([
|
|
7
|
+
"low",
|
|
8
|
+
"medium",
|
|
9
|
+
"high",
|
|
10
|
+
"critical"
|
|
11
|
+
]);
|
|
12
|
+
function isOperationRisk(value) {
|
|
13
|
+
return OPERATION_RISKS.some((risk) => risk === value);
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/core/permissions.ts
|
|
17
|
+
function definePermissions(input, options) {
|
|
18
|
+
const registry = /* @__PURE__ */ new Map();
|
|
19
|
+
const leaves = [];
|
|
20
|
+
const former = formerByKey(options?.renamed);
|
|
21
|
+
const tree = walk(input, [], registry, leaves, 0, {
|
|
22
|
+
former,
|
|
23
|
+
x: options?.x
|
|
24
|
+
});
|
|
25
|
+
assertKeys(leaves, former);
|
|
26
|
+
assertGraphTargets(registry);
|
|
27
|
+
return freezeDeep(attachRegistry(tree, registry, leaves));
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { OPERATION_RISKS as n, isOperationRisk as r, definePermissions as t };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { i as crud } from "./src-DLfUWFAI.js";
|
|
2
|
+
import { _ as resource } from "./permission-registry-Br4jSNVi.js";
|
|
3
|
+
import { f as definePlans, p as defineRoles } from "./grantee-Cn1HyUsI.js";
|
|
4
|
+
import { t as definePermissions } from "./permissions-B-wCP5ZC.js";
|
|
4
5
|
//#region src/testing/saas/schema.ts
|
|
5
6
|
function accepts(kind, value) {
|
|
6
7
|
switch (kind) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { r as Role, t as Plan } from "./vocabulary-DA8a8zif.js";
|
|
1
|
+
import { C as InferPermissionTree, k as ResourceInit, r as Role, t as Plan } from "./vocabulary-D6lPdb4Z.js";
|
|
3
2
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
3
|
//#region src/testing/saas/permissions.d.ts
|
|
5
4
|
declare const SaasProjectSchema: StandardSchemaV1<SaasProject>;
|