permdock 0.4.0 → 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/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
- package/dist/a2a/index.d.ts +6 -6
- package/dist/a2a/index.js +14 -17
- 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 -35
- package/dist/ai-sdk/index.js +37 -23
- package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
- 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/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.js} +20 -14
- 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 +94 -79
- 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 +9 -8
- package/dist/better-supabase/index.d.ts +357 -30
- package/dist/better-supabase/index.js +936 -194
- package/dist/{bind-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
- package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/{build-instance-DIIV9DbC.js → build-instance-BMnAudHn.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -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-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.js} +45 -23
- 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 +24 -27
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +9 -14
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +19 -5
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +239 -340
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/{compile-CtTP7eur.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-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- 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-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
- package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-DaXVdDhM.js +286 -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-DfRk15uw.d.ts → denied-text-D8jDHgsl.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.js} +245 -50
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +2 -2
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +13 -12
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-OD_4c__H.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-C9YJsv3H.js → evaluations-DZ2CbV5k.js} +145 -34
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +22 -28
- 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 +12 -11
- package/dist/fastify/index.d.ts +25 -22
- package/dist/fastify/index.js +13 -12
- 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/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-D2lZt4Dd.js} +55 -52
- package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.js} +5 -4
- 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-C9YmyBIa.js → helpers-DTcZOzhF.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-BZIAYvon.js +315 -0
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
- package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
- package/dist/{import-BFIlhetD.js → import-DMmOG27O.js} +190 -53
- 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-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
- package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +19 -15
- package/dist/index.js +31 -21
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-plkrsAog.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-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +156 -135
- package/dist/{kernel-CB3LrIJM.js → kernel-5JatXyND.js} +52 -24
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +2 -2
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
- 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-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
- package/dist/{map-error-BE27PYkE.js → map-error-TCAdw-eW.js} +3 -3
- package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
- package/dist/mcp/index.d.ts +22 -12
- package/dist/mcp/index.js +57 -39
- package/dist/{migrate-BwlB5-Wk.js → migrate-BShP7Vf4.js} +53 -14
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +15 -14
- package/dist/next/index.d.ts +18 -21
- package/dist/next/index.js +13 -11
- 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-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +17 -24
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
- package/dist/{openapi-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
- 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 +20 -15
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +30 -7
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
- package/dist/{permission-keys-B26jeyUv.js → ownership-BatFgAA4.js} +1698 -869
- package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
- package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
- package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
- package/dist/{parse-local-manifest-DvYUR0QL.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 +45 -26
- 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-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-CCJ6lmxB.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
- 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-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
- 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 +2 -2
- package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
- package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/{protected-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
- package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
- package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
- 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 -72
- package/dist/react-native/index.js +24 -22
- package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
- package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-COpmZUfx.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.js} +3 -3
- 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-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
- package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
- package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
- 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-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DtaA4JuW.js → saas-FO-Q8oj0.js} +16 -14
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
- 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-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
- package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
- package/dist/server/index.d.ts +12 -143
- package/dist/server/index.js +12 -9
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
- package/dist/{shared-JhMeOsDF.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-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +11 -12
- package/dist/solid/index.js +7 -7
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-Dljy06zL.d.ts → sources-BV9j0DeZ.d.ts} +7 -13
- package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
- package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- 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-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
- package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
- package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
- package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -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/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +7 -6
- package/dist/supabase/middleware.js +13 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +4 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +10 -10
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +4 -4
- 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/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +23 -287
- package/dist/testing/index.d.ts +311 -38
- package/dist/testing/index.js +3475 -201
- 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-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
- package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +16 -14
- package/dist/{types-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
- package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
- package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-CIlTojhq.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-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
- 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-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
- package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
- package/dist/{verify-BztUB3GX.js → verify-DbCL9bnB.js} +645 -50
- package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
- package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-D6lPdb4Z.d.ts} +65 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- 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-zeucB7eF.js → watch-CszoTJMq.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- 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-Cr93qqdP.d.ts → wrap-Bd1Tejur.d.ts} +2 -1
- package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
- package/package.json +136 -37
- 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 +123 -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 +14 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +9 -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 +5 -4
- package/skills/permdock-wire/SKILL.md +17 -11
- package/skills/permdock-wire/references/adapters.md +139 -51
- package/skills/permdock-wire/references/policy-options.md +5 -5
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DZL76lKW.js +0 -240
- package/dist/arazzo-CD8d0WLb.js +0 -54
- package/dist/catalog-6yWAX6Ps.js +0 -2
- package/dist/catalog-WHG4kBq7.js +0 -48
- package/dist/cloud-C7bSDgX4.js +0 -50
- package/dist/cloud-PeBN3IEn.js +0 -118
- package/dist/collect-Bw2Jdq1q.js +0 -2
- package/dist/collect-CQx4hX4N.js +0 -83
- package/dist/commands-Cpip4ULx.js +0 -97
- package/dist/config-DLt6BvV7.js +0 -36
- package/dist/diff-Cnghh_Ip.js +0 -48
- package/dist/doctor-CuVJvhV_.js +0 -53
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-fwfXN01n.js +0 -1016
- 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-DgM7w96K.d.ts +0 -6
- package/dist/index-Dz7didpC.d.ts +0 -201
- package/dist/load-B_shHrmd.js +0 -2
- package/dist/manifest-BngWKryL.js +0 -770
- package/dist/may-use-BOn_dR_w.js +0 -78
- package/dist/openapi-DcQ1Kg40.js +0 -164
- package/dist/ownership-BgnbOJFT.js +0 -851
- package/dist/permdock-L26udHSk.js +0 -3646
- package/dist/powersync-BFSbSElQ.js +0 -62
- package/dist/powersync-DCDgZgfZ.js +0 -2
- package/dist/rls-55DQTuf5.js +0 -250
- package/dist/run-DMcNW_8T.js +0 -174
- package/dist/server-ZYEHtNHS.js +0 -268
- package/dist/sink-BTtmfPnE.js +0 -141
- package/dist/sink-CPN4zLfs.d.ts +0 -104
- package/dist/skills-Dle4ZoLF.js +0 -56
- package/dist/snapshot-Dc9CHPME.js +0 -1078
- package/dist/src-Bb7no-hS.js +0 -639
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-Dbqr141s.js +0 -83
- package/dist/supabase-hook-BULg7Ut_.js +0 -2
- package/dist/thenable-QSmvt-vZ.js +0 -65
- package/dist/types-C0dee0Qf.d.ts +0 -197
- package/dist/types-DvupZE0w.d.ts +0 -9
- package/dist/usage-4G6t643F.js +0 -42
- package/dist/usage-iFLJ0-rr.js +0 -2
- package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
- package/dist/watch-C8TpsAl4.js +0 -2
|
@@ -1,38 +1,43 @@
|
|
|
1
|
-
import { a as hasConditionOp } from "./refs-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { o as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
1
|
+
import { a as hasConditionOp } from "./refs-K6eWUJ0H.js";
|
|
2
|
+
import { c as listPermissions, h as formerKeys } from "./permission-registry-Br4jSNVi.js";
|
|
3
|
+
import { u as isPrincipalRelation } from "./resource-relations-D_jw0BFx.js";
|
|
4
|
+
import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
|
|
5
|
+
import { a as normalizeMemberships, d as scopeList, o as resolveScope } from "./scopes-CUPSjo9q.js";
|
|
6
|
+
import { o as flattenGrantee } from "./grantee-Cn1HyUsI.js";
|
|
7
|
+
import { c as separationConflicts } from "./policy-DLZJ5gAp.js";
|
|
8
|
+
import { x as validateCustomRole } from "./evaluate-_R8QkWaf.js";
|
|
9
|
+
import { s as parseCredential } from "./credential-DM2um3ha.js";
|
|
10
|
+
import { a as describeError } from "./errors-CWTY6uih.js";
|
|
10
11
|
import { t as policyRowConditionKeys } from "./row-conditions-h2HythXQ.js";
|
|
11
12
|
import { a as rel, n as doctorSrcPath, o as sqlFiles, r as listSourceFiles } from "./files-D_JIzUrP.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { a as loadModule, i as loadConfiguredPolicy, n as asPolicy, s as pickNamed } from "./load-
|
|
15
|
-
import { r as runCollect } from "./collect-
|
|
13
|
+
import { i as DOCTOR_REPORT_SCHEMA } from "./version-CEbQ5UeM.js";
|
|
14
|
+
import { r as catalogOAuthScopes, s as jsonSchemaOf } from "./catalog-doc-C9wjsfNY.js";
|
|
15
|
+
import { a as loadModule, i as loadConfiguredPolicy, n as asPolicy, s as pickNamed } from "./load-DFS_ry0W.js";
|
|
16
|
+
import { r as runCollect } from "./collect-CrZJJnEF.js";
|
|
17
|
+
import { t as catalogPath } from "./catalog-path-CnI0XTFK.js";
|
|
16
18
|
import { n as supabaseTenantClaim } from "./budget-NbEtbJC_.js";
|
|
17
|
-
import {
|
|
18
|
-
import { d as keptKeys, r as PERMDOCK_SCHEMA } from "./sources-
|
|
19
|
-
import "./
|
|
20
|
-
import
|
|
21
|
-
import {
|
|
19
|
+
import { s as quoteSqlLiteral } from "./sql-B5T1IL83.js";
|
|
20
|
+
import { d as keptKeys, r as PERMDOCK_SCHEMA } from "./sources-vs5dGOsS.js";
|
|
21
|
+
import { t as parseCatalog } from "./parse-Cxq0WxrA.js";
|
|
22
|
+
import "./markers-C6joDI3o.js";
|
|
23
|
+
import { t as didYouMean } from "./args-IIolxxKA.js";
|
|
24
|
+
import { t as DOCS_BASE } from "./manifest-CtKR3GXL.js";
|
|
25
|
+
import { t as createStyle } from "./style-Uao76wO7.js";
|
|
26
|
+
import { r as findingOf } from "./output-Dyw8fyPF.js";
|
|
27
|
+
import { i as runSkillsInstall } from "./skills-B6lVdD_W.js";
|
|
22
28
|
import { n as MIGRATION_DIRS, t as DEFAULT_SENSITIVE_ACTIONS } from "./constants-DcJABbLW.js";
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
29
|
+
import { l as partPath } from "./output-files-DhRBBE4n.js";
|
|
30
|
+
import { _ as pd045, a as supabaseHookManifest, f as pd039, g as attrsPlan, m as resolveSchemas, n as hookOut, v as readSupabaseConfig, y as supabaseConfig } from "./supabase-hook-DdDQhMlw.js";
|
|
25
31
|
import { i as group, n as membershipColumns, o as sqlStatements, r as tableKey } from "./deciding-columns-Sq12mEA6.js";
|
|
26
|
-
import {
|
|
27
|
-
import { i as
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import { r as
|
|
32
|
-
import { n as legacyHelperNames, r as retirePlan, t as legacyHelperCalls } from "./retire-BFcxL6un.js";
|
|
32
|
+
import { I as graphSqlName, M as contextRefs, S as byKey, a as guardedTables, t as ownershipRules } from "./ownership-BatFgAA4.js";
|
|
33
|
+
import { a as pd010, c as pd014, d as pd038, f as pd041, i as pd008, l as pd015, n as pd001, o as pd011, p as pd057, r as pd007, s as pd013, t as runUsage, u as pd036 } from "./usage-T5mXq98v.js";
|
|
34
|
+
import { d as rowConditionMessage, f as commandFor, i as graphPlan, m as tableFor, p as compileGrants, s as ROW_CONDITION_FIX, u as helperTablePolicies } from "./verify-DbCL9bnB.js";
|
|
35
|
+
import { t as FIELD_VIEWS } from "./fields-D9tPVUUS.js";
|
|
36
|
+
import { r as staleFiles, t as powersyncFiles } from "./powersync-bYUDLOAO.js";
|
|
37
|
+
import { n as legacyHelperNames, r as retirePlan, t as legacyHelperCalls } from "./retire-CALjIQ7e.js";
|
|
33
38
|
import { t as supautilsRejections } from "./supautils-B6HYL9eL.js";
|
|
34
39
|
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
35
|
-
import { dirname, join, resolve } from "node:path";
|
|
40
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
36
41
|
import { createRequire } from "node:module";
|
|
37
42
|
//#region src/cli/shared/doctor-files.ts
|
|
38
43
|
const nodeFiles = Object.freeze({
|
|
@@ -49,7 +54,7 @@ function readJson(files, path) {
|
|
|
49
54
|
return JSON.parse(files.read(path));
|
|
50
55
|
}
|
|
51
56
|
//#endregion
|
|
52
|
-
//#region src/cli/project.ts
|
|
57
|
+
//#region src/cli/project/project.ts
|
|
53
58
|
function loadProject(input) {
|
|
54
59
|
const { cwd, config } = input;
|
|
55
60
|
const files = input.files ?? nodeFiles;
|
|
@@ -201,6 +206,33 @@ async function pd064(input) {
|
|
|
201
206
|
}
|
|
202
207
|
//#endregion
|
|
203
208
|
//#region src/cli/doctor/catalog.ts
|
|
209
|
+
/**
|
|
210
|
+
* A policy that declares `oauthScopes` against a catalog on disk without
|
|
211
|
+
* them, or with another set. `authorizationProvider` builds better-supabase's
|
|
212
|
+
* `delegation.scopes` from the catalog, so its SQL checks deny a token that
|
|
213
|
+
* holds only the coarse scope.
|
|
214
|
+
*/
|
|
215
|
+
async function pd070(input) {
|
|
216
|
+
const declared = (await policyOf(input))?.oauthScopes ?? [];
|
|
217
|
+
if (declared.length === 0) return [];
|
|
218
|
+
const files = filesOf(input);
|
|
219
|
+
const path = catalogPath(input.config, input.cwd);
|
|
220
|
+
if (!files.exists(path)) return [];
|
|
221
|
+
let listed;
|
|
222
|
+
try {
|
|
223
|
+
listed = parseCatalog(files.read(path)).oauthScopes;
|
|
224
|
+
} catch {
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
227
|
+
const expected = catalogOAuthScopes(declared);
|
|
228
|
+
if (listed !== void 0 && canonicalJson(listed) === canonicalJson(expected)) return [];
|
|
229
|
+
return [{
|
|
230
|
+
code: "PD070",
|
|
231
|
+
severity: "warning",
|
|
232
|
+
message: listed === void 0 ? `the policy declares oauthScopes (${expected.map(({ scope }) => scope).join(", ")}) and ${rel(input.cwd, path)} lists none, so better-supabase's SQL checks deny a token that holds only a coarse scope` : `${rel(input.cwd, path)} lists other oauthScopes than the policy declares`,
|
|
233
|
+
fix: "pnpm exec permdock collect"
|
|
234
|
+
}];
|
|
235
|
+
}
|
|
204
236
|
async function pd002(input) {
|
|
205
237
|
const collected = await collectedOf(input);
|
|
206
238
|
if (collected.scan === void 0) return [];
|
|
@@ -244,6 +276,18 @@ async function pd004(input) {
|
|
|
244
276
|
fix: "pnpm exec permdock collect"
|
|
245
277
|
}];
|
|
246
278
|
}
|
|
279
|
+
async function pd067(input) {
|
|
280
|
+
if (input.config.operations === void 0) return [];
|
|
281
|
+
const document = (await collectedOf(input)).document;
|
|
282
|
+
if (document?.operations === void 0) return [];
|
|
283
|
+
const declared = new Set(document.permissions.map(({ key }) => key));
|
|
284
|
+
return document.operations.flatMap((operation) => [["permission", operation.permission], ["results", operation.results]].flatMap(([field, key]) => key === void 0 || declared.has(key) ? [] : [{
|
|
285
|
+
code: "PD067",
|
|
286
|
+
severity: "error",
|
|
287
|
+
message: `operation ${operation.name} has ${field} ${key}, which the permissions module does not declare`,
|
|
288
|
+
fix: "pass the same permission tree to defineOperations and to permdock.config.ts permissions, or declare the permission"
|
|
289
|
+
}]));
|
|
290
|
+
}
|
|
247
291
|
//#endregion
|
|
248
292
|
//#region src/cli/doctor/declarative.ts
|
|
249
293
|
const SCHEMAS = "supabase/schemas";
|
|
@@ -256,16 +300,20 @@ const CALLS_HELPER = /\b(?:permdock_has|(?:permitted|member)_[a-z][a-z0-9_]*_ids
|
|
|
256
300
|
function uncommented(text) {
|
|
257
301
|
return text.replaceAll(/--[^\n]*/gu, "").replaceAll(/\/\*[\s\S]*?\*\//gu, "");
|
|
258
302
|
}
|
|
303
|
+
/** Whether `text` starts with a line `rls generate` or `supabase hook generate` writes. */
|
|
304
|
+
function generatedByPermDock(text) {
|
|
305
|
+
return text.startsWith("-- permdock:") || text.startsWith("-- generated by permdock");
|
|
306
|
+
}
|
|
259
307
|
/**
|
|
260
|
-
* PD042: a hook declared under `supabase/schemas` reaches the
|
|
261
|
-
* `supabase db diff`, which drops its `supabase_auth_admin`
|
|
262
|
-
* keeps them, so the check
|
|
308
|
+
* PD042: under migra, a hook declared under `supabase/schemas` reaches the
|
|
309
|
+
* database through `supabase db diff`, which drops its `supabase_auth_admin`
|
|
310
|
+
* grants. pg-delta keeps them, so the check runs only for `migra`. A function
|
|
263
311
|
* created (or dropped and created again) without them is executable by
|
|
264
312
|
* `public` and not by the auth server, so a migration at or after the one
|
|
265
313
|
* that creates it must carry the grants.
|
|
266
314
|
*/
|
|
267
315
|
function pd042(cwd, config, files = nodeFiles) {
|
|
268
|
-
if (config.supabase?.hook === void 0 ||
|
|
316
|
+
if (config.supabase?.hook === void 0 || resolveSchemas(cwd, config).mode !== "migra") return [];
|
|
269
317
|
if (!sqlFiles(cwd, [SCHEMAS]).some((file) => files.read(file).startsWith(`-- permdock:hook v1 `))) return [];
|
|
270
318
|
const migrations = sqlFiles(cwd, [MIGRATIONS]).map((file) => ({
|
|
271
319
|
file,
|
|
@@ -280,9 +328,59 @@ function pd042(cwd, config, files = nodeFiles) {
|
|
|
280
328
|
code: "PD042",
|
|
281
329
|
severity: "error",
|
|
282
330
|
message: `${rel(cwd, migrations[needed]?.file ?? MIGRATIONS)} creates custom_access_token_hook from supabase/schemas, and no migration from it on grants it to supabase_auth_admin: supabase db diff drops those grants, so the auth server cannot call the hook and public can`,
|
|
283
|
-
fix: "generate the grants with permdock supabase hook generate --grants-out (or rls generate --split ...,hook --grants-out) into a new file from supabase migration new, after the db diff migration"
|
|
331
|
+
fix: "switch to pg-delta, which keeps the grants ([experimental.pgdelta] enabled = true and no supabase.schemas: 'migra'), or generate the grants with permdock supabase hook generate --grants-out (or rls generate --split ...,hook --grants-out) into a new file from supabase migration new, after the db diff migration"
|
|
284
332
|
}];
|
|
285
333
|
}
|
|
334
|
+
/** The PermDock-generated files under the declarative schema directory. */
|
|
335
|
+
function generatedSchemaFiles(cwd, schemaDir, files) {
|
|
336
|
+
if (!files.exists(join(cwd, schemaDir))) return [];
|
|
337
|
+
return sqlFiles(cwd, [schemaDir]).filter((file) => generatedByPermDock(files.read(file)));
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* PD068: PermDock generates for pg-delta (the default), but
|
|
341
|
+
* `supabase/config.toml` does not set `[experimental.pgdelta] enabled =
|
|
342
|
+
* true`, so Supabase CLI 2.x diffs the schema files with migra. migra drops
|
|
343
|
+
* the hook's `supabase_auth_admin` grants and the helpers' privileges, and
|
|
344
|
+
* PermDock wrote no `--grants-out` file to restore them.
|
|
345
|
+
*/
|
|
346
|
+
function pd068(cwd, config, files = nodeFiles) {
|
|
347
|
+
const read = readSupabaseConfig(cwd);
|
|
348
|
+
if (read?.ok !== true || read.config.pgDelta?.enabled === true) return [];
|
|
349
|
+
const schemas = resolveSchemas(cwd, config);
|
|
350
|
+
if (schemas.mode !== "pg-delta") return [];
|
|
351
|
+
const [first] = generatedSchemaFiles(cwd, schemas.schemaDir, files);
|
|
352
|
+
if (first === void 0) return [];
|
|
353
|
+
return [{
|
|
354
|
+
code: "PD068",
|
|
355
|
+
severity: "error",
|
|
356
|
+
message: `${rel(cwd, first)} is written for pg-delta, but supabase/config.toml does not set [experimental.pgdelta] enabled = true, so the Supabase CLI diffs it with migra and drops the hook and helper grants`,
|
|
357
|
+
fix: "add [experimental.pgdelta] with enabled = true to supabase/config.toml (Supabase CLI 2.119 or later), or set supabase.schemas: 'migra' in permdock.config.ts and regenerate with --grants-out"
|
|
358
|
+
}];
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* PD069: leftovers of declarative schemas on migra in a pg-delta project:
|
|
362
|
+
* `[db.migrations] schema_paths`, which pg-delta's dependency order makes
|
|
363
|
+
* unnecessary, and numbered `NNN_permdock_<part>.sql` files that duplicate
|
|
364
|
+
* the per-schema layout `rls generate --split` now writes.
|
|
365
|
+
*/
|
|
366
|
+
function pd069(cwd, config, files = nodeFiles) {
|
|
367
|
+
const schemas = resolveSchemas(cwd, config);
|
|
368
|
+
if (schemas.mode !== "pg-delta") return [];
|
|
369
|
+
const findings = [];
|
|
370
|
+
if ((supabaseConfig(cwd).schemaPaths ?? []).length > 0) findings.push({
|
|
371
|
+
code: "PD069",
|
|
372
|
+
severity: "warning",
|
|
373
|
+
message: "supabase/config.toml sets [db.migrations] schema_paths, which pg-delta does not need: it orders the schema files by their dependencies",
|
|
374
|
+
fix: "remove schema_paths from [db.migrations] in supabase/config.toml"
|
|
375
|
+
});
|
|
376
|
+
for (const file of generatedSchemaFiles(cwd, schemas.schemaDir, files)) if (/^\d+_permdock_/u.test(basename(file))) findings.push({
|
|
377
|
+
code: "PD069",
|
|
378
|
+
severity: "warning",
|
|
379
|
+
message: `${rel(cwd, file)} is a numbered part from declarative schemas on migra; under pg-delta, rls generate --split writes the per-schema layout instead`,
|
|
380
|
+
fix: "delete the numbered parts, run permdock rls generate --split without --out, then supabase db schema declarative sync"
|
|
381
|
+
});
|
|
382
|
+
return findings;
|
|
383
|
+
}
|
|
286
384
|
/** The `[db.migrations] schema_paths` globs of `supabase/config.toml`, or Supabase's default. */
|
|
287
385
|
function schemaPaths(cwd) {
|
|
288
386
|
const paths = supabaseConfig(cwd).schemaPaths ?? [];
|
|
@@ -293,12 +391,13 @@ function orderedSchemaFiles(cwd) {
|
|
|
293
391
|
return sqlFiles(join(cwd, "supabase"), schemaPaths(cwd), { order: "entry" });
|
|
294
392
|
}
|
|
295
393
|
/**
|
|
296
|
-
* PD043: `db diff` applies schema files in `schema_paths`
|
|
297
|
-
* that calls `permdock_has` or `permitted_<scope>_ids`
|
|
298
|
-
* defines them fails to apply. pg-delta orders by
|
|
394
|
+
* PD043: under migra, `db diff` applies schema files in `schema_paths`
|
|
395
|
+
* order, so a policy that calls `permdock_has` or `permitted_<scope>_ids`
|
|
396
|
+
* before the file that defines them fails to apply. pg-delta orders by
|
|
397
|
+
* dependencies instead.
|
|
299
398
|
*/
|
|
300
|
-
function pd043(cwd, files = nodeFiles) {
|
|
301
|
-
if (
|
|
399
|
+
function pd043(cwd, config, files = nodeFiles) {
|
|
400
|
+
if (resolveSchemas(cwd, config).mode !== "migra") return [];
|
|
302
401
|
if (!files.exists(join(cwd, SCHEMAS))) return [];
|
|
303
402
|
const schemas = orderedSchemaFiles(cwd).map((file) => ({
|
|
304
403
|
file,
|
|
@@ -695,7 +794,7 @@ async function pd033(input) {
|
|
|
695
794
|
code: "PD033",
|
|
696
795
|
severity: "warning",
|
|
697
796
|
message: `role '${binding.name}' has activation without maxDuration: an elevation never expires on its own`,
|
|
698
|
-
fix: `set activation: { maxDuration:
|
|
797
|
+
fix: `set activation: { maxDuration: 14_400, ... } on role '${binding.name}'`
|
|
699
798
|
});
|
|
700
799
|
}
|
|
701
800
|
const fixture = membershipsFixture(input);
|
|
@@ -1082,8 +1181,8 @@ async function pd016(input) {
|
|
|
1082
1181
|
if (!files.exists(resolve(input.cwd, fixtures)) && !files.exists(resolve(input.cwd, "rls.fixtures.ts"))) findings.push({
|
|
1083
1182
|
code: "PD016",
|
|
1084
1183
|
severity: "warning",
|
|
1085
|
-
message: "sqlFunction grants have no rls fixtures for verify --db",
|
|
1086
|
-
fix: "add rls.fixtures.json and run permdock rls verify --db"
|
|
1184
|
+
message: "sqlFunction grants have no rls fixtures for verify --db-url-stdin",
|
|
1185
|
+
fix: "add rls.fixtures.json and run permdock rls verify --db-url-stdin"
|
|
1087
1186
|
});
|
|
1088
1187
|
}
|
|
1089
1188
|
return findings;
|
|
@@ -1258,6 +1357,48 @@ async function pd037(input) {
|
|
|
1258
1357
|
}
|
|
1259
1358
|
return findings;
|
|
1260
1359
|
}
|
|
1360
|
+
const WRITE_VERB_PREFIXES = [
|
|
1361
|
+
"create",
|
|
1362
|
+
"update",
|
|
1363
|
+
"delete",
|
|
1364
|
+
"remove",
|
|
1365
|
+
"send",
|
|
1366
|
+
"mark",
|
|
1367
|
+
"cancel",
|
|
1368
|
+
"approve",
|
|
1369
|
+
"receive",
|
|
1370
|
+
"fulfill",
|
|
1371
|
+
"reimburse",
|
|
1372
|
+
"withdraw",
|
|
1373
|
+
"writeOff",
|
|
1374
|
+
"confirm",
|
|
1375
|
+
"pause"
|
|
1376
|
+
];
|
|
1377
|
+
/** `verb` starts with a write prefix that ends at a word boundary: `markPaid`, not `market`. */
|
|
1378
|
+
function suggestsWrite(verb) {
|
|
1379
|
+
return WRITE_VERB_PREFIXES.some((prefix) => {
|
|
1380
|
+
if (!verb.startsWith(prefix)) return false;
|
|
1381
|
+
const next = verb.charAt(prefix.length);
|
|
1382
|
+
return next === "" || /[A-Z0-9_-]/u.test(next);
|
|
1383
|
+
});
|
|
1384
|
+
}
|
|
1385
|
+
async function pd071(input) {
|
|
1386
|
+
const rls = input.config.rls;
|
|
1387
|
+
if (rls === void 0 || input.config.policy === void 0) return [];
|
|
1388
|
+
const policy = await policyOf(input);
|
|
1389
|
+
if (policy === void 0) return [];
|
|
1390
|
+
const byVerb = /* @__PURE__ */ new Map();
|
|
1391
|
+
for (const leaf of listPermissions(policy.vocabulary.permissions)) {
|
|
1392
|
+
if (rls.actions !== void 0 && Object.hasOwn(rls.actions, leaf.action) || commandFor(leaf.action) !== void 0 || !suggestsWrite(leaf.action)) continue;
|
|
1393
|
+
byVerb.set(leaf.action, [...byVerb.get(leaf.action) ?? [], leaf.key]);
|
|
1394
|
+
}
|
|
1395
|
+
return [...byVerb.entries()].toSorted(byKey).map(([verb, keys]) => ({
|
|
1396
|
+
code: "PD071",
|
|
1397
|
+
severity: "warning",
|
|
1398
|
+
message: `action '${verb}' (${keys.toSorted().join(", ")}) reads as a write but has no rls.actions entry, so it compiles to 'none' and adds no SQL policy`,
|
|
1399
|
+
fix: `map it on purpose in rls.actions: ${verb}: "insert", "update", "delete" or "none"`
|
|
1400
|
+
}));
|
|
1401
|
+
}
|
|
1261
1402
|
//#endregion
|
|
1262
1403
|
//#region src/cli/doctor/seeds.ts
|
|
1263
1404
|
const SEED_INSERT = /^insert\s+into\s+((?:"[^"]+"|\w+)(?:\.(?:"[^"]+"|\w+))?)\s*\(\s*role\s*,\s*permission\s*,\s*grant_key\s*,\s*scope\s*,\s*effect\s*\)\s*values\s*([\s\S]*?)\s*on\s+conflict\b/iu;
|
|
@@ -1335,7 +1476,7 @@ async function pd054(input) {
|
|
|
1335
1476
|
code: "PD054",
|
|
1336
1477
|
severity: "warning",
|
|
1337
1478
|
message: `${seeded.file} seeds ${schema}.role_permissions with rows the policy no longer compiles to: ${parts.join("; ")}`,
|
|
1338
|
-
fix: "run permdock rls generate (
|
|
1479
|
+
fix: "run permdock rls generate (for declarative schemas, --split ...,seeds --seeds-out supabase/migrations/, which writes a new migration) and apply it"
|
|
1339
1480
|
}];
|
|
1340
1481
|
}
|
|
1341
1482
|
//#endregion
|
|
@@ -1675,7 +1816,7 @@ function pd056(cwd, config, files = nodeFiles) {
|
|
|
1675
1816
|
code: "PD056",
|
|
1676
1817
|
severity: "warning",
|
|
1677
1818
|
message: `legacy helper ${name} is still called ${String(count)} time(s), in ${callers.join(", ")}`,
|
|
1678
|
-
fix: `run permdock rls migrate
|
|
1819
|
+
fix: `run permdock rls migrate for policies, rewrite function bodies, views and triggers onto the permdock helpers by hand, then drop function ${name}`
|
|
1679
1820
|
});
|
|
1680
1821
|
}
|
|
1681
1822
|
return findings;
|
|
@@ -1802,6 +1943,18 @@ const DOCTOR_CHECKS = [
|
|
|
1802
1943
|
groups: ["catalog"],
|
|
1803
1944
|
run: pd004
|
|
1804
1945
|
},
|
|
1946
|
+
{
|
|
1947
|
+
code: "PD067",
|
|
1948
|
+
groups: ["catalog", "operations"],
|
|
1949
|
+
when: (config) => config.operations !== void 0,
|
|
1950
|
+
run: pd067
|
|
1951
|
+
},
|
|
1952
|
+
{
|
|
1953
|
+
code: "PD070",
|
|
1954
|
+
groups: ["catalog", "better-supabase"],
|
|
1955
|
+
when: (config) => config.policy !== void 0,
|
|
1956
|
+
run: pd070
|
|
1957
|
+
},
|
|
1805
1958
|
{
|
|
1806
1959
|
code: "PD005",
|
|
1807
1960
|
groups: ["skills"],
|
|
@@ -1920,6 +2073,11 @@ const DOCTOR_CHECKS = [
|
|
|
1920
2073
|
groups: ["rls", "context-refs"],
|
|
1921
2074
|
run: pd027
|
|
1922
2075
|
},
|
|
2076
|
+
{
|
|
2077
|
+
code: "PD071",
|
|
2078
|
+
groups: ["rls"],
|
|
2079
|
+
run: pd071
|
|
2080
|
+
},
|
|
1923
2081
|
{
|
|
1924
2082
|
code: "PD028",
|
|
1925
2083
|
groups: ["attrs", "supabase"],
|
|
@@ -2006,7 +2164,17 @@ const DOCTOR_CHECKS = [
|
|
|
2006
2164
|
{
|
|
2007
2165
|
code: "PD043",
|
|
2008
2166
|
groups: ["supabase", "declarative"],
|
|
2009
|
-
run: (project) => pd043(project.cwd, project.files)
|
|
2167
|
+
run: (project) => pd043(project.cwd, project.config, project.files)
|
|
2168
|
+
},
|
|
2169
|
+
{
|
|
2170
|
+
code: "PD068",
|
|
2171
|
+
groups: ["supabase", "declarative"],
|
|
2172
|
+
run: (project) => pd068(project.cwd, project.config, project.files)
|
|
2173
|
+
},
|
|
2174
|
+
{
|
|
2175
|
+
code: "PD069",
|
|
2176
|
+
groups: ["supabase", "declarative"],
|
|
2177
|
+
run: (project) => pd069(project.cwd, project.config, project.files)
|
|
2010
2178
|
},
|
|
2011
2179
|
{
|
|
2012
2180
|
code: "PD045",
|
|
@@ -2079,12 +2247,20 @@ const DOCTOR_CHECKS = [
|
|
|
2079
2247
|
}
|
|
2080
2248
|
];
|
|
2081
2249
|
async function runDoctor(input) {
|
|
2250
|
+
const wanted = new Set(input.only.map((item) => item.toLowerCase()));
|
|
2251
|
+
const unknown = unknownOnly(wanted);
|
|
2252
|
+
if (unknown !== void 0) return {
|
|
2253
|
+
code: 2,
|
|
2254
|
+
output: unknown
|
|
2255
|
+
};
|
|
2256
|
+
const fixed = [];
|
|
2082
2257
|
if (input.fix) {
|
|
2083
|
-
runSkillsInstall({
|
|
2258
|
+
const skills = runSkillsInstall({
|
|
2084
2259
|
cwd: input.cwd,
|
|
2085
2260
|
agents: []
|
|
2086
2261
|
});
|
|
2087
|
-
|
|
2262
|
+
fixed.push(`skills: ${skills.output}`);
|
|
2263
|
+
const collected = await runCollect({
|
|
2088
2264
|
cwd: input.cwd,
|
|
2089
2265
|
config: input.config,
|
|
2090
2266
|
collect: input.config.collect ?? {},
|
|
@@ -2092,9 +2268,9 @@ async function runDoctor(input) {
|
|
|
2092
2268
|
now: input.now,
|
|
2093
2269
|
io: input.io
|
|
2094
2270
|
});
|
|
2271
|
+
fixed.push(`catalog: ${collected.message.trim()}`);
|
|
2095
2272
|
}
|
|
2096
2273
|
const project = loadProject(input);
|
|
2097
|
-
const wanted = new Set(input.only.map((item) => item.toLowerCase()));
|
|
2098
2274
|
const selected = (check) => wanted.size === 0 || wanted.has(check.code.toLowerCase()) || check.groups.some((group) => wanted.has(group));
|
|
2099
2275
|
const findings = [];
|
|
2100
2276
|
for (const check of DOCTOR_CHECKS) {
|
|
@@ -2105,13 +2281,18 @@ async function runDoctor(input) {
|
|
|
2105
2281
|
const warnings = findings.filter((item) => item.severity === "warning").length;
|
|
2106
2282
|
const report = {
|
|
2107
2283
|
$schema: DOCTOR_REPORT_SCHEMA,
|
|
2284
|
+
fixed,
|
|
2108
2285
|
findings,
|
|
2109
2286
|
errors,
|
|
2110
2287
|
warnings
|
|
2111
2288
|
};
|
|
2112
2289
|
return {
|
|
2113
2290
|
code: errors > 0 || input.strict && warnings > 0 ? 1 : 0,
|
|
2114
|
-
output: input.json ? `${JSON.stringify(report, null, 2)}\n` : formatDoctor(report, input.color)
|
|
2291
|
+
output: input.json ? `${JSON.stringify(report, null, 2)}\n` : formatDoctor(report, input.color),
|
|
2292
|
+
findings: findings.map((item) => findingOf({
|
|
2293
|
+
...item,
|
|
2294
|
+
docs: `${DOCS_BASE}/doctor#checks`
|
|
2295
|
+
}))
|
|
2115
2296
|
};
|
|
2116
2297
|
}
|
|
2117
2298
|
/** PD059: the configured policy module throws or exports no policy, so every policy check is skipped. */
|
|
@@ -2134,9 +2315,23 @@ async function pd060(project) {
|
|
|
2134
2315
|
fix: "fix the syntax error, or exclude the file from collect.srcPath"
|
|
2135
2316
|
}));
|
|
2136
2317
|
}
|
|
2318
|
+
/** A usage message for the first `--only` value that names no check code or group. */
|
|
2319
|
+
function unknownOnly(wanted) {
|
|
2320
|
+
const known = /* @__PURE__ */ new Set();
|
|
2321
|
+
for (const check of DOCTOR_CHECKS) {
|
|
2322
|
+
known.add(check.code.toLowerCase());
|
|
2323
|
+
for (const group of check.groups) known.add(group);
|
|
2324
|
+
}
|
|
2325
|
+
for (const item of wanted) if (!known.has(item)) {
|
|
2326
|
+
const suggestion = didYouMean(item, [...known]);
|
|
2327
|
+
return `doctor: --only ${item} names no check code or group${suggestion === void 0 ? "" : `. Did you mean ${suggestion}?`}`;
|
|
2328
|
+
}
|
|
2329
|
+
}
|
|
2137
2330
|
function formatDoctor(report, color) {
|
|
2138
2331
|
const style = createStyle(color);
|
|
2139
2332
|
const lines = [style.paint("bold", "permdock doctor"), ""];
|
|
2333
|
+
for (const change of report.fixed) lines.push(` ${style.okMark} fixed ${change}`);
|
|
2334
|
+
if (report.fixed.length > 0) lines.push("");
|
|
2140
2335
|
for (const finding of report.findings) {
|
|
2141
2336
|
const mark = finding.severity === "error" ? style.errorMark : style.warnMark;
|
|
2142
2337
|
lines.push(` ${mark} ${style.paint("bold", finding.code)} ${finding.message}`);
|
|
@@ -2163,4 +2358,4 @@ async function supabaseSetup(input) {
|
|
|
2163
2358
|
});
|
|
2164
2359
|
}
|
|
2165
2360
|
//#endregion
|
|
2166
|
-
export { runDoctor };
|
|
2361
|
+
export { DOCTOR_CHECKS, runDoctor };
|
package/dist/drizzle/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Rt as Instant, ir as Subject, lr as Condition } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { c as WhereResult } from "../permdock-D7eeLJER.js";
|
|
2
3
|
import { r as RelationsMapping } from "../graph-sql-B-dsAT6j.js";
|
|
3
|
-
import { s as MembershipsMapping } from "../compile-
|
|
4
|
+
import { s as MembershipsMapping } from "../compile-Ckm2HqBZ.js";
|
|
4
5
|
import { n as WithSubjectOptions, t as RowCheck } from "../row-check-Dt35czLy.js";
|
|
5
6
|
import { SQL, Table } from "drizzle-orm";
|
|
6
7
|
//#region src/drizzle/types.d.ts
|
|
@@ -13,7 +14,8 @@ type DrizzleWhereOptions<T = unknown> = {
|
|
|
13
14
|
readonly memberships?: MembershipsMapping;
|
|
14
15
|
/** Where the relation graph lives; graph grants compile to Postgres subqueries with it and are refused without. */
|
|
15
16
|
readonly relations?: RelationsMapping;
|
|
16
|
-
|
|
17
|
+
/** The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults to the current time. */
|
|
18
|
+
readonly now?: Instant;
|
|
17
19
|
readonly operators?: DrizzleOperators;
|
|
18
20
|
};
|
|
19
21
|
type DrizzleOperators = {
|
package/dist/drizzle/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import {
|
|
3
|
-
import { n as escapeLike, t as compileWhere } from "../compile-
|
|
2
|
+
import { t as assertSafeKey } from "../paths-DXSHAMIa.js";
|
|
3
|
+
import { n as escapeLike, t as compileWhere } from "../compile-CMqMx_IN.js";
|
|
4
4
|
import { a as rowCheckFrom, i as templateOf, r as subjectStatements, s as loadPeer, t as statementTemplate } from "../subject-settings-CkEwrw3W.js";
|
|
5
5
|
//#region src/drizzle/to-where.ts
|
|
6
6
|
function loadOperators(injected) {
|
package/dist/elysia/index.d.ts
CHANGED
|
@@ -1,30 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { T as Policy, j as PolicyVocabulary, rr as Principal } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { r as PermDock } from "../permdock-D7eeLJER.js";
|
|
4
|
+
import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
|
|
5
|
+
import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-BLd4MnBX.js";
|
|
6
|
+
import { t as ServerAdapterOptions } from "../bind--9EFVYWF.js";
|
|
6
7
|
import { Elysia } from "elysia";
|
|
7
8
|
//#region src/elysia/create.d.ts
|
|
8
|
-
type
|
|
9
|
+
type ElysiaRequestContext = {
|
|
9
10
|
readonly request: Request;
|
|
10
11
|
readonly body?: unknown;
|
|
11
12
|
readonly params?: Readonly<Record<string, string | undefined>>;
|
|
12
13
|
};
|
|
13
|
-
type ElysiaPermDockOptions<TUser = unknown> = ServerAdapterOptions<
|
|
14
|
+
type ElysiaPermDockOptions<TUser = unknown> = ServerAdapterOptions<ElysiaRequestContext, TUser> & {
|
|
14
15
|
/** Ends or revalidates open sockets. */
|
|
15
16
|
readonly revocations?: RevocationFeed;
|
|
16
17
|
};
|
|
17
18
|
/** The `ws` Elysia passes to `.ws` handlers; `data` is the upgrade context. */
|
|
18
19
|
type ElysiaSocket = {
|
|
19
|
-
readonly data:
|
|
20
|
+
readonly data: ElysiaRequestContext;
|
|
20
21
|
close(code?: number, reason?: string): unknown;
|
|
21
22
|
};
|
|
22
|
-
type
|
|
23
|
+
type ElysiaPermDockContext<V extends PolicyVocabulary = PolicyVocabulary> = ElysiaRequestContext & {
|
|
23
24
|
permdock: PermDock<V>;
|
|
24
25
|
permdockData?: unknown;
|
|
25
26
|
};
|
|
26
|
-
type ElysiaProtect = (permission: Permission | null,
|
|
27
|
-
/** The `
|
|
27
|
+
type ElysiaProtect = (permission: Permission | null, data?: (ctx: ElysiaRequestContext) => unknown, protectOptions?: ProtectOptions) => (ctx: ElysiaRequestContext) => Promise<Response | undefined>;
|
|
28
|
+
/** The `middleware()` plugin: its global derive types `permdock` in every later handler. */
|
|
28
29
|
type ElysiaPermDockPlugin<V extends PolicyVocabulary = PolicyVocabulary> = Elysia<"", {
|
|
29
30
|
decorator: Record<never, never>;
|
|
30
31
|
store: Record<never, never>;
|
|
@@ -34,7 +35,9 @@ type ElysiaPermDockPlugin<V extends PolicyVocabulary = PolicyVocabulary> = Elysi
|
|
|
34
35
|
resolve: Record<never, never>;
|
|
35
36
|
}>;
|
|
36
37
|
type ElysiaPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
37
|
-
|
|
38
|
+
/** The `PermDock` for one request, for code the middleware does not run before. */
|
|
39
|
+
readonly getPermDock: (ctx: ElysiaRequestContext) => Promise<PermDock<V>>;
|
|
40
|
+
readonly middleware: () => ElysiaPermDockPlugin<V>;
|
|
38
41
|
readonly protect: ElysiaProtect;
|
|
39
42
|
/**
|
|
40
43
|
* One connection per socket: the same promise for every handler
|
|
@@ -46,4 +49,4 @@ type ElysiaPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
|
46
49
|
};
|
|
47
50
|
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: ElysiaPermDockOptions<TUser>): ElysiaPermDock<V>;
|
|
48
51
|
//#endregion
|
|
49
|
-
export { type
|
|
52
|
+
export { type ElysiaPermDock, type ElysiaPermDockContext, type ElysiaPermDockOptions, type ElysiaProtect, type ElysiaRequestContext, type ElysiaSocket, InvalidSignatureError, discoverViaSignatureAgent, webBotAuthVerifier };
|
package/dist/elysia/index.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { a as parsedBody, r as hasCredentials } from "../http-BBoKefeS.js";
|
|
2
|
-
import {
|
|
3
|
-
import { t as problemFromError } from "../map-error-
|
|
4
|
-
import { a as socketConnection, i as decorate, r as bindKernel } from "../bind-
|
|
5
|
-
import {
|
|
2
|
+
import { d as discoverViaSignatureAgent, m as webBotAuthVerifier, u as InvalidSignatureError } from "../evaluations-DZ2CbV5k.js";
|
|
3
|
+
import { t as problemFromError } from "../map-error-TCAdw-eW.js";
|
|
4
|
+
import { a as socketConnection, i as decorate, r as bindKernel } from "../bind-CZzhx-Vj.js";
|
|
5
|
+
import { a as onRevoked, n as closeReason, t as POLICY_VIOLATION } from "../stream-CvdUS9V1.js";
|
|
6
6
|
import { Elysia } from "elysia";
|
|
7
7
|
//#region src/elysia/create.ts
|
|
8
8
|
function createPermDock(policy, options) {
|
|
9
9
|
const seed = globalThis.crypto.randomUUID();
|
|
10
|
-
const { kernel, bind, scopeOf, handlerScope, guard: runGuard } = bindKernel(policy, options, "elysia", toRequest);
|
|
11
|
-
const
|
|
10
|
+
const { kernel, bind, scopeOf, handlerScope, getPermDock, guard: runGuard } = bindKernel(policy, options, "elysia", toRequest);
|
|
11
|
+
const middleware = () => new Elysia({
|
|
12
12
|
name: "permdock",
|
|
13
13
|
seed
|
|
14
14
|
}).derive({ as: "global" }, async (ctx) => {
|
|
15
|
-
const instance = await kernel.
|
|
15
|
+
const instance = await kernel.getPermDock(bind(ctx), await scopeOf(ctx));
|
|
16
16
|
decorate(ctx, instance);
|
|
17
17
|
return { permdock: instance };
|
|
18
18
|
}).onError({ as: "global" }, ({ error, request }) => problemFromError(error, { credentials: hasCredentials(request) }));
|
|
19
|
-
const protect = (permission,
|
|
20
|
-
const guard = await runGuard(permission,
|
|
19
|
+
const protect = (permission, data, protectOptions) => async (ctx) => {
|
|
20
|
+
const guard = await runGuard(permission, data, ctx, protectOptions);
|
|
21
21
|
if (!guard.ok) return guard.response;
|
|
22
22
|
decorate(ctx, guard.permdock, guard.data);
|
|
23
23
|
};
|
|
@@ -25,7 +25,7 @@ function createPermDock(policy, options) {
|
|
|
25
25
|
const connection = (ws, connectionOptions) => socketConnection(sockets, ws.data, async () => {
|
|
26
26
|
const conn = await kernel.connection(bind(ws.data), connectionOptions, await scopeOf(ws.data));
|
|
27
27
|
onRevoked(conn, (problem) => {
|
|
28
|
-
ws.close(POLICY_VIOLATION, problem
|
|
28
|
+
ws.close(POLICY_VIOLATION, closeReason(problem));
|
|
29
29
|
});
|
|
30
30
|
return conn;
|
|
31
31
|
});
|
|
@@ -37,7 +37,8 @@ function createPermDock(policy, options) {
|
|
|
37
37
|
}).post("/", (ctx) => POST(bind(ctx))).get("/", (ctx) => GET(bind(ctx)));
|
|
38
38
|
};
|
|
39
39
|
return {
|
|
40
|
-
|
|
40
|
+
getPermDock,
|
|
41
|
+
middleware,
|
|
41
42
|
protect,
|
|
42
43
|
connection,
|
|
43
44
|
permdockHandler,
|
|
@@ -56,4 +57,4 @@ function toRequest(ctx) {
|
|
|
56
57
|
});
|
|
57
58
|
}
|
|
58
59
|
//#endregion
|
|
59
|
-
export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent,
|
|
60
|
+
export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent, webBotAuthVerifier };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/cli/core/env.ts
|
|
2
|
+
/** `CI` set to anything but an empty string, `0` or `false`. */
|
|
3
|
+
function isCi(env) {
|
|
4
|
+
const value = env["CI"]?.trim().toLowerCase();
|
|
5
|
+
return value !== void 0 && value !== "" && value !== "0" && value !== "false";
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { isCi };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/approvals/access-reviews/errors.ts
|
|
2
|
+
var AccessReviewError = class extends Error {
|
|
3
|
+
name = "AccessReviewError";
|
|
4
|
+
code;
|
|
5
|
+
constructor(code, message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.code = code;
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
const CODES = /* @__PURE__ */ new Set([
|
|
11
|
+
"review-not-found",
|
|
12
|
+
"review-closed",
|
|
13
|
+
"item-not-found",
|
|
14
|
+
"item-not-pending",
|
|
15
|
+
"reviewer-unauthenticated",
|
|
16
|
+
"reviewer-not-eligible",
|
|
17
|
+
"reviewer-is-holder",
|
|
18
|
+
"not-revoked",
|
|
19
|
+
"already-applied"
|
|
20
|
+
]);
|
|
21
|
+
function isAccessReviewError(value) {
|
|
22
|
+
if (!(value instanceof Error) || value.name !== "AccessReviewError") return false;
|
|
23
|
+
const code = Reflect.get(value, "code");
|
|
24
|
+
return typeof code === "string" && CODES.has(code);
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { isAccessReviewError as n, AccessReviewError as t };
|