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
package/dist/solid/index.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { i as describe, r as DescribeOptions, t as DecisionDescription } from "../describe-C3ldA9os.js";
|
|
1
|
+
import { Mn as ApprovalRequiredDecision, Nn as Decision, Vt as Snapshot, dt as TokenVerifier, nr as Membership, zn as GrantedDecision } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { r as Role, w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { n as requiredPlans } from "../problem-details-DXlt-vks.js";
|
|
4
|
+
import { i as describe, r as DescribeOptions, t as DecisionDescription } from "../describe-BZUsixiL.js";
|
|
6
5
|
import { t as PermissionBoundaryState } from "../boundary-BmHxVH1J.js";
|
|
7
|
-
import { t as approvalHeaders } from "../headers-
|
|
8
|
-
import { a as
|
|
6
|
+
import { t as approvalHeaders } from "../headers-CIbDTUTK.js";
|
|
7
|
+
import { a as FilterResult, c as PermissionSet, d as RolesOptions, f as SubjectView, i as ClientStatus, l as PermissionState, n as ApprovalState, p as TenantView, r as ClientPermDock, t as ApprovalHandle, u as ProviderOptionsBase } from "../types-BNORmDM8.js";
|
|
9
8
|
import { Accessor, Accessor as Accessor$1, JSX } from "solid-js";
|
|
10
9
|
//#region src/solid/types.d.ts
|
|
11
10
|
/** Structural `JSX.Element`: text, a DOM node or a list of children. */
|
|
@@ -31,7 +30,7 @@ type PermDockProviderProps = ProviderOptionsBase & {
|
|
|
31
30
|
/** Provider-wide content for the `<Protected>` slots a component leaves out. */
|
|
32
31
|
type PermDockDefaults = {
|
|
33
32
|
readonly pending?: SolidChild;
|
|
34
|
-
readonly
|
|
33
|
+
readonly denied?: SolidChild | ((decision: Decision) => SolidChild);
|
|
35
34
|
readonly approval?: SolidChild | ((decision: ApprovalRequiredDecision) => SolidChild);
|
|
36
35
|
};
|
|
37
36
|
type PermissionBoundaryProps = {
|
|
@@ -46,8 +45,8 @@ type ProtectedProps = {
|
|
|
46
45
|
readonly data?: unknown;
|
|
47
46
|
readonly tenant?: string;
|
|
48
47
|
readonly pending?: SolidChild;
|
|
49
|
-
readonly
|
|
50
|
-
/** Rendered for an approval-required decision; defaults to `
|
|
48
|
+
readonly denied?: SolidChild | ((decision: Decision) => SolidChild);
|
|
49
|
+
/** Rendered for an approval-required decision; defaults to `denied`. */
|
|
51
50
|
readonly approval?: SolidChild | ((decision: ApprovalRequiredDecision) => SolidChild);
|
|
52
51
|
readonly children: SolidChild | ((decision: GrantedDecision) => SolidChild);
|
|
53
52
|
};
|
|
@@ -59,7 +58,7 @@ export declare function usePermissions(permissions: Accessor<readonly Permission
|
|
|
59
58
|
export declare function useFilter<T>(permission: Permission<string, T, "instance">, rows: Accessor<readonly T[]>): Accessor<FilterResult<T>>;
|
|
60
59
|
export declare function useTenant(): Accessor<TenantView>;
|
|
61
60
|
export declare function useMemberships(): Accessor<readonly Membership[]>;
|
|
62
|
-
export declare function useRoles(options?: Accessor<
|
|
61
|
+
export declare function useRoles(options?: Accessor<RolesOptions>): Accessor<{
|
|
63
62
|
readonly roles: readonly Role[];
|
|
64
63
|
}>;
|
|
65
64
|
export declare function useAssignableRoles(): Accessor<readonly Role[]>;
|
|
@@ -90,4 +89,4 @@ export declare function Protected(props: ProtectedProps): JSX.Element;
|
|
|
90
89
|
//#region src/solid/provider.d.ts
|
|
91
90
|
export declare function PermDockProvider(props: PermDockProviderProps): JSX.Element;
|
|
92
91
|
//#endregion
|
|
93
|
-
export { type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type PermDockDefaults, type PermDockProviderProps, type PermissionBoundaryProps, type PermissionBoundaryState, type PermissionSet, type PermissionState, type ProtectedProps, type
|
|
92
|
+
export { type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type PermDockDefaults, type PermDockProviderProps, type PermissionBoundaryProps, type PermissionBoundaryState, type PermissionSet, type PermissionState, type ProtectedProps, type RolesOptions, type SolidChild, type SubjectView, type TenantView, approvalHeaders, describe, requiredPlans };
|
package/dist/solid/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import { r as requiredPlans } from "../problem-details-
|
|
3
|
-
import { t as describe } from "../describe-
|
|
4
|
-
import { t as approvalHeaders } from "../headers-BZSDieNT.js";
|
|
5
|
-
import { i as isPromiseLike } from "../store-options-CbUHDoSe.js";
|
|
6
|
-
import { a as permissionSet, c as scopedTenant, d as tenantView, i as livePermDock, l as slotContent, n as describeWith, o as protectedView, r as filterResult, s as rolesView, t as approvalHandle, u as subjectView } from "../views-CJsrBS1f.js";
|
|
2
|
+
import { r as requiredPlans } from "../problem-details-cn5X30gZ.js";
|
|
3
|
+
import { t as describe } from "../describe-BybMRY7A.js";
|
|
7
4
|
import { n as boundaryFallback, t as boundaryDigest } from "../boundary-BM8a_P6E.js";
|
|
8
|
-
import {
|
|
5
|
+
import { t as approvalHeaders } from "../headers-BIjfMaoC.js";
|
|
6
|
+
import { i as isPromiseLike } from "../store-options-BqEakYRa.js";
|
|
7
|
+
import { n as switchTenant, t as providerStore } from "../provider-store-B5Yrkhzr.js";
|
|
8
|
+
import { a as livePermDock, c as rolesView, d as subjectView, f as tenantView, l as scopedTenant, n as describeWith, o as permissionSet, r as filterResult, s as protectedView, t as approvalHandle, u as slotContent } from "../views-DTIIO-oQ.js";
|
|
9
9
|
import { ErrorBoundary, createComponent, createComputed, createContext, createMemo, createSignal, getOwner, on, onCleanup, useContext } from "solid-js";
|
|
10
10
|
//#region src/solid/context.ts
|
|
11
11
|
const PermDockContext = createContext(void 0);
|
|
@@ -138,7 +138,7 @@ function Protected(props) {
|
|
|
138
138
|
const current = view();
|
|
139
139
|
switch (current.slot) {
|
|
140
140
|
case "pending": return slotContent("pending", props, ui.defaults) ?? null;
|
|
141
|
-
case "
|
|
141
|
+
case "denied": return content(slotContent("denied", props, ui.defaults), current.decision);
|
|
142
142
|
case "approval": return content(slotContent("approval", props, ui.defaults), current.decision);
|
|
143
143
|
case "default": return typeof props.children === "function" ? props.children(current.decision) : props.children;
|
|
144
144
|
default: return current;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { T as Policy, Vt as Snapshot, j as PolicyVocabulary, rr as Principal } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { a as OperationInput, t as Operation } from "../operations-CxybZErY.js";
|
|
4
|
+
import { r as PermDock } from "../permdock-D7eeLJER.js";
|
|
5
|
+
import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-BLd4MnBX.js";
|
|
6
|
+
import { a as ProtectTarget, n as FetchAdapterOptions, t as ContextReader } from "../fetch-adapter-qKJBuRqy.js";
|
|
7
|
+
import { APIEvent, FetchEvent } from "@solidjs/start/server";
|
|
8
|
+
//#region src/solid-start/create.d.ts
|
|
9
|
+
/** The h3 event under every SolidStart request; `subject` and `scope` read it. */
|
|
10
|
+
type SolidStartNativeEvent = FetchEvent["nativeEvent"];
|
|
11
|
+
/** An h3 middleware for `createMiddleware([...])` in `src/middleware.ts`. */
|
|
12
|
+
type SolidStartMiddleware = (event: SolidStartNativeEvent, next: () => unknown) => Promise<unknown>;
|
|
13
|
+
type SolidStartPermDockOptions<TUser = unknown> = FetchAdapterOptions<SolidStartNativeEvent, TUser>;
|
|
14
|
+
/** What the adapter sets on `event.locals`. */
|
|
15
|
+
type SolidStartPermDockLocals<TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
16
|
+
readonly permdock: PermDock<V>;
|
|
17
|
+
readonly permdockData: TData;
|
|
18
|
+
};
|
|
19
|
+
/** The event a wrapped API route receives: its own `APIEvent` with typed `locals`. */
|
|
20
|
+
type SolidStartPermDockEvent<TEvent extends FetchEvent = APIEvent, TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = TEvent & {
|
|
21
|
+
readonly locals: SolidStartPermDockLocals<TData, V>;
|
|
22
|
+
};
|
|
23
|
+
/** Wraps an API route handler. */
|
|
24
|
+
type SolidStartGuarded<TData, V extends PolicyVocabulary = PolicyVocabulary> = <TEvent extends FetchEvent = APIEvent, R = Response>(handler: (event: SolidStartPermDockEvent<TEvent, TData, V>) => R | Promise<R>) => (event: TEvent) => Promise<R | Response>;
|
|
25
|
+
type SolidStartProtect<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
26
|
+
<T = unknown>(permission: Permission | null, data?: ContextReader<APIEvent, T | null | undefined>, protectOptions?: ProtectOptions): SolidStartGuarded<NonNullable<T>, V>;
|
|
27
|
+
<TOperation extends Operation>(operation: TOperation, input?: ContextReader<APIEvent, OperationInput<TOperation>>, protectOptions?: ProtectOptions): SolidStartGuarded<unknown, V>;
|
|
28
|
+
};
|
|
29
|
+
/** The decision endpoint, one API route handler per method. */
|
|
30
|
+
type SolidStartPermDockHandlers = {
|
|
31
|
+
readonly GET: (event: FetchEvent) => Promise<Response>;
|
|
32
|
+
readonly POST: (event: FetchEvent) => Promise<Response>;
|
|
33
|
+
};
|
|
34
|
+
type SolidStartPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
35
|
+
/** Sets `event.context.permdock` on the h3 event; a bad Web Bot Auth signature is a `401`. */
|
|
36
|
+
readonly middleware: () => SolidStartMiddleware;
|
|
37
|
+
/** `export const DELETE = protect(permissions.post.delete, loadPost)(handler)`. */
|
|
38
|
+
readonly protect: SolidStartProtect<V>;
|
|
39
|
+
/** Types `event.locals.permdock` for an API route and answers a thrown PermDock error with Problem Details. */
|
|
40
|
+
readonly withPermDock: SolidStartGuarded<unknown, V>;
|
|
41
|
+
/** The instance for an API route, or a server function through `getRequestEvent()`. */
|
|
42
|
+
readonly getPermDock: (event: FetchEvent) => Promise<PermDock<V>>;
|
|
43
|
+
/** The snapshot a route `query` returns for `permdock/solid`. */
|
|
44
|
+
readonly getSnapshot: (event: FetchEvent, query?: SnapshotQuery) => Promise<Snapshot>;
|
|
45
|
+
readonly connection: (event: FetchEvent, connectionOptions?: ConnectionOptions) => Promise<Connection>;
|
|
46
|
+
/** `export const { GET, POST } = permdockHandler()` in `src/routes/api/permdock.ts`. */
|
|
47
|
+
readonly permdockHandler: () => SolidStartPermDockHandlers;
|
|
48
|
+
readonly openapi: OpenApiHooks;
|
|
49
|
+
};
|
|
50
|
+
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: SolidStartPermDockOptions<TUser>): SolidStartPermDock<V>;
|
|
51
|
+
//#endregion
|
|
52
|
+
export { type ContextReader, InvalidSignatureError, type ProtectTarget, type SolidStartGuarded, type SolidStartMiddleware, type SolidStartNativeEvent, type SolidStartPermDock, type SolidStartPermDockEvent, type SolidStartPermDockHandlers, type SolidStartPermDockLocals, type SolidStartPermDockOptions, type SolidStartProtect, discoverViaSignatureAgent, webBotAuthVerifier };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { d as discoverViaSignatureAgent, m as webBotAuthVerifier, u as InvalidSignatureError } from "../evaluations-DZ2CbV5k.js";
|
|
2
|
+
import { i as decorate } from "../bind-CZzhx-Vj.js";
|
|
3
|
+
import { n as guardedRoute, t as fetchAdapter } from "../fetch-adapter-g0ypLkID.js";
|
|
4
|
+
//#region src/solid-start/create.ts
|
|
5
|
+
/**
|
|
6
|
+
* `event.locals`. Its type, `App.RequestEventLocals`, is declared by
|
|
7
|
+
* `@solidjs/start/env`, which only an app's own `tsconfig` loads.
|
|
8
|
+
*/
|
|
9
|
+
function localsOf(event) {
|
|
10
|
+
return Reflect.get(event, "locals");
|
|
11
|
+
}
|
|
12
|
+
const route = {
|
|
13
|
+
context: (event) => event.nativeEvent,
|
|
14
|
+
locals: localsOf
|
|
15
|
+
};
|
|
16
|
+
function createPermDock(policy, options) {
|
|
17
|
+
const adapter = fetchAdapter(policy, options, "solid-start", (event) => event.req);
|
|
18
|
+
const middleware = () => async (event, next) => {
|
|
19
|
+
const attached = await adapter.ensure(event.context, event);
|
|
20
|
+
if (!attached.ok) return attached.response;
|
|
21
|
+
return adapter.mapErrors(event, next);
|
|
22
|
+
};
|
|
23
|
+
const protect = ((target, data, protectOptions) => guardedRoute(adapter, route, target, data, protectOptions));
|
|
24
|
+
const withPermDock = (handler) => async (event) => {
|
|
25
|
+
const attached = await adapter.ensure(event.nativeEvent.context, event.nativeEvent);
|
|
26
|
+
if (!attached.ok) return attached.response;
|
|
27
|
+
decorate(localsOf(event), attached.permdock);
|
|
28
|
+
return adapter.mapErrors(event.nativeEvent, () => handler(event));
|
|
29
|
+
};
|
|
30
|
+
const handlers = () => {
|
|
31
|
+
const { GET, POST } = adapter.handlers();
|
|
32
|
+
return {
|
|
33
|
+
GET: (event) => GET(event.nativeEvent),
|
|
34
|
+
POST: (event) => POST(event.nativeEvent)
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
middleware,
|
|
39
|
+
protect,
|
|
40
|
+
withPermDock,
|
|
41
|
+
getPermDock: (event) => adapter.getPermDock(event.nativeEvent),
|
|
42
|
+
getSnapshot: (event, query) => adapter.getSnapshot(event.nativeEvent, query),
|
|
43
|
+
connection: (event, connectionOptions) => adapter.connection(event.nativeEvent, connectionOptions),
|
|
44
|
+
permdockHandler: handlers,
|
|
45
|
+
openapi: adapter.kernel.openapi
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent, webBotAuthVerifier };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as RoleThrough, y as SupabaseSuspension } from "./types-
|
|
3
|
-
import { o as SupabaseManifestMembership } from "./manifest-
|
|
1
|
+
import { et as MembershipSource } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { n as RoleThrough, y as SupabaseSuspension } from "./types-CdlxsYQh.js";
|
|
3
|
+
import { o as SupabaseManifestMembership } from "./manifest-mx5ghSFM.js";
|
|
4
4
|
//#region src/supabase/roles.d.ts
|
|
5
5
|
/** A roles table a role column references, by `schema.table`. */
|
|
6
6
|
type RoleKeys = {
|
|
@@ -163,26 +163,20 @@ type SqlMembershipSource = MembershipSource & {
|
|
|
163
163
|
type SupabasePostgres = {
|
|
164
164
|
readonly queryRaw: (text: string, params?: unknown[]) => Promise<readonly Record<string, unknown>[]>;
|
|
165
165
|
};
|
|
166
|
-
|
|
167
|
-
* `ctx.postgres` (from `withPostgresClient`) or `ctx.postgresAdmin` as a
|
|
168
|
-
* `SqlQuery` for `fromTable`, `fromJunction` and `supabaseApprovalStore`.
|
|
169
|
-
* `ctx.postgres` runs as the caller under RLS, so the membership tables must
|
|
170
|
-
* be readable by `authenticated`; `ctx.postgresAdmin` bypasses RLS.
|
|
171
|
-
*/
|
|
172
|
-
declare function fromSupabasePostgres(postgres: SupabasePostgres): SqlQuery;
|
|
166
|
+
declare function supabasePostgresQuery(postgres: SupabasePostgres): SqlQuery;
|
|
173
167
|
/**
|
|
174
168
|
* Memberships from one table holding every scope: a row per user, scope,
|
|
175
169
|
* instance and role (`user_id, scope, scope_id, role`), with optional
|
|
176
170
|
* `within`, `via`, expiry, owner and seat columns. Rows of the same instance
|
|
177
171
|
* merge into one membership.
|
|
178
172
|
*/
|
|
179
|
-
declare function
|
|
173
|
+
declare function tableMembershipSource(options: MembershipTableOptions): SqlMembershipSource;
|
|
180
174
|
/**
|
|
181
175
|
* Memberships from a table of one scope (`customer_contacts`): every row is a
|
|
182
176
|
* membership of `scope`, with roles from a column or fixed (`['contact']`), a
|
|
183
177
|
* fixed `via`, and ancestor ids from `within` columns.
|
|
184
178
|
*/
|
|
185
|
-
declare function
|
|
179
|
+
declare function junctionMembershipSource(options: MembershipJunctionOptions): SqlMembershipSource;
|
|
186
180
|
declare const AUTHZ_VERSION_TABLE = "permdock_authz_version";
|
|
187
181
|
/**
|
|
188
182
|
* Reads the authorization version `permdock supabase hook generate` keeps in
|
|
@@ -193,4 +187,4 @@ declare function authzVersion(options: {
|
|
|
193
187
|
readonly schema?: string;
|
|
194
188
|
}): NonNullable<MembershipSource["version"]>;
|
|
195
189
|
//#endregion
|
|
196
|
-
export { MembershipTableOptions as a, SupabasePostgres as c,
|
|
190
|
+
export { MembershipTableOptions as a, SupabasePostgres as c, supabasePostgresQuery as d, tableMembershipSource as f, MembershipSql as i, authzVersion as l, MembershipHolders as n, SqlMembershipSource as o, MembershipJunctionOptions as r, SqlQuery as s, AUTHZ_VERSION_TABLE as t, junctionMembershipSource as u };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { i as readAppData } from "./app-data-
|
|
3
|
-
import { a as
|
|
2
|
+
import { i as readAppData } from "./app-data-MuyzVqX8.js";
|
|
3
|
+
import { a as quoteQualifiedTable, c as quoteSqlTable, i as qualifySqlTable, o as quoteSqlIdent, s as quoteSqlLiteral, u as sqlTextArray } from "./sql-B5T1IL83.js";
|
|
4
4
|
//#region src/supabase/keep.ts
|
|
5
5
|
/** The permission keys of a suspended scope's `keep`, references read by `key`, sorted and unique. */
|
|
6
6
|
function keptKeys(row) {
|
|
@@ -12,111 +12,19 @@ function keptKeys(row) {
|
|
|
12
12
|
return [...new Set(valid)].toSorted();
|
|
13
13
|
}
|
|
14
14
|
//#endregion
|
|
15
|
-
//#region src/supabase/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Resolves the role sources of `table` (`schema.table`, or `public`). An
|
|
21
|
-
* unqualified `through` table is in `table`'s schema. `label` names the
|
|
22
|
-
* option in the error for an `on` that is not exactly one column; `prefix`
|
|
23
|
-
* starts every error. A row with several sources holds the union of their
|
|
24
|
-
* non-null keys.
|
|
25
|
-
*/
|
|
26
|
-
function roleColumn(role, table, alias, options) {
|
|
27
|
-
if (!isRoleList(role)) return singleRole(role, table, alias, options);
|
|
28
|
-
const prefix = options.prefix ?? "PermDock";
|
|
29
|
-
const parts = role.map((part, index) => singleRole(part, table, alias, {
|
|
30
|
-
...options,
|
|
31
|
-
label: `${options.label}[${String(index)}]`
|
|
32
|
-
}));
|
|
33
|
-
const [first] = parts;
|
|
34
|
-
if (first === void 0) throw new TypeError(`${prefix}: ${options.label} needs at least one role source`);
|
|
35
|
-
if (parts.length === 1) return first;
|
|
36
|
-
const rows = quoteSqlIdent(`${alias}r`, prefix);
|
|
37
|
-
const values = quoteSqlIdent(`${alias}v`, prefix);
|
|
38
|
-
const sql = `${rows}.permdock_role`;
|
|
39
|
-
return {
|
|
40
|
-
column: first.column,
|
|
41
|
-
sql,
|
|
42
|
-
join: `${options.indent === void 0 ? " " : `\n${options.indent}`}cross join lateral (select ${values}.role from (values ${parts.map((part) => `(${part.lookup})`).join(", ")}) ${values}(role) where ${values}.role is not null) ${rows}(permdock_role)`,
|
|
43
|
-
lookup: sql,
|
|
44
|
-
columns: [...new Set(parts.map((part) => part.column))],
|
|
45
|
-
throughs: parts.flatMap((part) => part.throughs),
|
|
46
|
-
lateral: true
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
function singleRole(role, table, alias, options) {
|
|
50
|
-
const prefix = options.prefix ?? "PermDock";
|
|
51
|
-
const q = (name) => quoteSqlIdent(name, prefix);
|
|
52
|
-
if (typeof role === "string") return {
|
|
53
|
-
column: role,
|
|
54
|
-
sql: `${alias}.${q(role)}::text`,
|
|
55
|
-
join: "",
|
|
56
|
-
lookup: `${alias}.${q(role)}::text`,
|
|
57
|
-
columns: [role],
|
|
58
|
-
throughs: [],
|
|
59
|
-
lateral: false
|
|
60
|
-
};
|
|
61
|
-
const pairs = Object.entries(role.on);
|
|
62
|
-
const [pair] = pairs;
|
|
63
|
-
if (pair === void 0 || pairs.length !== 1) throw new TypeError(`${prefix}: ${options.label}.on must map exactly one column of ${table} to ${role.through}, for example ${options.example ?? "{ role_id: 'id' }"}`);
|
|
64
|
-
const [ref, id] = pair;
|
|
65
|
-
const schema = table.includes(".") ? table.split(".")[0] ?? "public" : "public";
|
|
66
|
-
const through = role.through.includes(".") ? role.through : `${schema}.${role.through}`;
|
|
67
|
-
const keys = options.joined ?? `${alias}k`;
|
|
68
|
-
const target = quoteSqlTable(through, prefix);
|
|
69
|
-
const keyed = {
|
|
70
|
-
table: through,
|
|
71
|
-
id,
|
|
72
|
-
key: role.column,
|
|
73
|
-
ref
|
|
74
|
-
};
|
|
75
|
-
return {
|
|
76
|
-
column: ref,
|
|
77
|
-
sql: `${keys}.${q(role.column)}::text`,
|
|
78
|
-
join: `${options.indent === void 0 ? " " : `\n${options.indent}`}join ${target} ${keys} on ${keys}.${q(id)} = ${alias}.${q(ref)}`,
|
|
79
|
-
lookup: `(select ${keys}.${q(role.column)}::text from ${target} ${keys} where ${keys}.${q(id)} = ${alias}.${q(ref)})`,
|
|
80
|
-
through: keyed,
|
|
81
|
-
columns: [ref],
|
|
82
|
-
throughs: [keyed],
|
|
83
|
-
lateral: false
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
/** The manifest entry of one role source: the column, and the roles table it references. */
|
|
87
|
-
function sourceManifest(column, through) {
|
|
88
|
-
return through === void 0 ? { column } : {
|
|
89
|
-
column,
|
|
90
|
-
through: {
|
|
91
|
-
table: through.table,
|
|
92
|
-
id: through.id,
|
|
93
|
-
column: through.key
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
/** The manifest entry of a single-source column, such as a membership's user. */
|
|
98
|
-
function columnManifest(role) {
|
|
99
|
-
return sourceManifest(role.column, role.through);
|
|
100
|
-
}
|
|
101
|
-
/** The manifest entry of a role column, or one entry per source of a row with several. */
|
|
102
|
-
function roleManifest(role) {
|
|
103
|
-
if (!role.lateral) return sourceManifest(role.column, role.through);
|
|
104
|
-
return role.columns.map((column) => sourceManifest(column, role.throughs.find((through) => through.ref === column)));
|
|
105
|
-
}
|
|
106
|
-
//#endregion
|
|
107
|
-
//#region src/supabase/sources.ts
|
|
108
|
-
const ident = (name) => quoteSqlIdent(name);
|
|
109
|
-
const literal = quoteSqlLiteral;
|
|
15
|
+
//#region src/supabase/membership-sql.ts
|
|
16
|
+
const ident$1 = (name) => quoteSqlIdent(name);
|
|
17
|
+
const literal$1 = quoteSqlLiteral;
|
|
110
18
|
function col(name) {
|
|
111
|
-
return `m.${ident(name)}`;
|
|
19
|
+
return `m.${ident$1(name)}`;
|
|
112
20
|
}
|
|
113
21
|
function activeRow(row, id) {
|
|
114
|
-
const parts = [`s.${ident(row.id)}::text = (${id})::text`];
|
|
115
|
-
if (row.disabledAt !== void 0) parts.push(`s.${ident(row.disabledAt)} is null`);
|
|
22
|
+
const parts = [`s.${ident$1(row.id)}::text = (${id})::text`];
|
|
23
|
+
if (row.disabledAt !== void 0) parts.push(`s.${ident$1(row.disabledAt)} is null`);
|
|
116
24
|
if (row.status !== void 0) {
|
|
117
25
|
const values = row.active ?? [];
|
|
118
26
|
if (values.length === 0) throw new TypeError("PermDock: a suspension status column needs its active values");
|
|
119
|
-
parts.push(`s.${ident(row.status)}::text = any(array[${values.map(literal).join(", ")}]::text[])`);
|
|
27
|
+
parts.push(`s.${ident$1(row.status)}::text = any(array[${values.map(literal$1).join(", ")}]::text[])`);
|
|
120
28
|
}
|
|
121
29
|
if (row.disabledAt === void 0 && row.status === void 0) throw new TypeError("PermDock: a suspension table needs disabledAt or status");
|
|
122
30
|
return `exists (select 1 from ${quoteQualifiedTable(row.table)} s where ${parts.join(" and ")})`;
|
|
@@ -210,7 +118,7 @@ where ${where.join("\n and ")}
|
|
|
210
118
|
group by ${group.join(", ")}`;
|
|
211
119
|
}
|
|
212
120
|
function holdersOf(shape) {
|
|
213
|
-
const id = ident(shape.idColumn);
|
|
121
|
+
const id = ident$1(shape.idColumn);
|
|
214
122
|
return {
|
|
215
123
|
idType: `${quoteQualifiedTable(shape.table)}.${id}%type`,
|
|
216
124
|
id: (scope, row) => {
|
|
@@ -235,7 +143,7 @@ function sqlOf(shape) {
|
|
|
235
143
|
table: shape.table,
|
|
236
144
|
user: shape.user,
|
|
237
145
|
userThrough: shape.userThrough,
|
|
238
|
-
userType: shape.userThrough === void 0 ? `${quoteQualifiedTable(shape.table)}.${ident(shape.user)}%type` : `${quoteSqlTable(shape.userThrough.table)}.${ident(shape.userThrough.key)}%type`,
|
|
146
|
+
userType: shape.userThrough === void 0 ? `${quoteQualifiedTable(shape.table)}.${ident$1(shape.user)}%type` : `${quoteSqlTable(shape.userThrough.table)}.${ident$1(shape.userThrough.key)}%type`,
|
|
239
147
|
reads: [...new Set([suspension?.users, ...Object.values(suspension?.scopes ?? {})].flatMap((row) => row === void 0 ? [] : [row.table]))],
|
|
240
148
|
managed: shape.managedColumn,
|
|
241
149
|
through: shape.through,
|
|
@@ -251,6 +159,102 @@ function sqlOf(shape) {
|
|
|
251
159
|
list: (keep = keptSql(shape) !== void 0) => selectOf(shape, filters(shape, `${shape.scope} = $1::text and ${shape.id} = $2::text`), true, keep)
|
|
252
160
|
});
|
|
253
161
|
}
|
|
162
|
+
//#endregion
|
|
163
|
+
//#region src/supabase/roles.ts
|
|
164
|
+
function isRoleList(role) {
|
|
165
|
+
return Array.isArray(role);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Resolves the role sources of `table` (`schema.table`, or `public`). An
|
|
169
|
+
* unqualified `through` table is in `table`'s schema. `label` names the
|
|
170
|
+
* option in the error for an `on` that is not exactly one column; `prefix`
|
|
171
|
+
* starts every error. A row with several sources holds the union of their
|
|
172
|
+
* non-null keys.
|
|
173
|
+
*/
|
|
174
|
+
function roleColumn(role, table, alias, options) {
|
|
175
|
+
if (!isRoleList(role)) return singleRole(role, table, alias, options);
|
|
176
|
+
const prefix = options.prefix ?? "PermDock";
|
|
177
|
+
const parts = role.map((part, index) => singleRole(part, table, alias, {
|
|
178
|
+
...options,
|
|
179
|
+
label: `${options.label}[${String(index)}]`
|
|
180
|
+
}));
|
|
181
|
+
const [first] = parts;
|
|
182
|
+
if (first === void 0) throw new TypeError(`${prefix}: ${options.label} needs at least one role source`);
|
|
183
|
+
if (parts.length === 1) return first;
|
|
184
|
+
const rows = quoteSqlIdent(`${alias}r`, prefix);
|
|
185
|
+
const values = quoteSqlIdent(`${alias}v`, prefix);
|
|
186
|
+
const sql = `${rows}.permdock_role`;
|
|
187
|
+
return {
|
|
188
|
+
column: first.column,
|
|
189
|
+
sql,
|
|
190
|
+
join: `${options.indent === void 0 ? " " : `\n${options.indent}`}cross join lateral (select ${values}.role from (values ${parts.map((part) => `(${part.lookup})`).join(", ")}) ${values}(role) where ${values}.role is not null) ${rows}(permdock_role)`,
|
|
191
|
+
lookup: sql,
|
|
192
|
+
columns: [...new Set(parts.map((part) => part.column))],
|
|
193
|
+
throughs: parts.flatMap((part) => part.throughs),
|
|
194
|
+
lateral: true
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function singleRole(role, table, alias, options) {
|
|
198
|
+
const prefix = options.prefix ?? "PermDock";
|
|
199
|
+
const q = (name) => quoteSqlIdent(name, prefix);
|
|
200
|
+
if (typeof role === "string") return {
|
|
201
|
+
column: role,
|
|
202
|
+
sql: `${alias}.${q(role)}::text`,
|
|
203
|
+
join: "",
|
|
204
|
+
lookup: `${alias}.${q(role)}::text`,
|
|
205
|
+
columns: [role],
|
|
206
|
+
throughs: [],
|
|
207
|
+
lateral: false
|
|
208
|
+
};
|
|
209
|
+
const pairs = Object.entries(role.on);
|
|
210
|
+
const [pair] = pairs;
|
|
211
|
+
if (pair === void 0 || pairs.length !== 1) throw new TypeError(`${prefix}: ${options.label}.on must map exactly one column of ${table} to ${role.through}, for example ${options.example ?? "{ role_id: 'id' }"}`);
|
|
212
|
+
const [ref, id] = pair;
|
|
213
|
+
const schema = table.includes(".") ? table.split(".")[0] ?? "public" : "public";
|
|
214
|
+
const through = role.through.includes(".") ? role.through : `${schema}.${role.through}`;
|
|
215
|
+
const keys = options.joined ?? `${alias}k`;
|
|
216
|
+
const target = quoteSqlTable(through, prefix);
|
|
217
|
+
const keyed = {
|
|
218
|
+
table: through,
|
|
219
|
+
id,
|
|
220
|
+
key: role.column,
|
|
221
|
+
ref
|
|
222
|
+
};
|
|
223
|
+
return {
|
|
224
|
+
column: ref,
|
|
225
|
+
sql: `${keys}.${q(role.column)}::text`,
|
|
226
|
+
join: `${options.indent === void 0 ? " " : `\n${options.indent}`}join ${target} ${keys} on ${keys}.${q(id)} = ${alias}.${q(ref)}`,
|
|
227
|
+
lookup: `(select ${keys}.${q(role.column)}::text from ${target} ${keys} where ${keys}.${q(id)} = ${alias}.${q(ref)})`,
|
|
228
|
+
through: keyed,
|
|
229
|
+
columns: [ref],
|
|
230
|
+
throughs: [keyed],
|
|
231
|
+
lateral: false
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/** The manifest entry of one role source: the column, and the roles table it references. */
|
|
235
|
+
function sourceManifest(column, through) {
|
|
236
|
+
return through === void 0 ? { column } : {
|
|
237
|
+
column,
|
|
238
|
+
through: {
|
|
239
|
+
table: through.table,
|
|
240
|
+
id: through.id,
|
|
241
|
+
column: through.key
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/** The manifest entry of a single-source column, such as a membership's user. */
|
|
246
|
+
function columnManifest(role) {
|
|
247
|
+
return sourceManifest(role.column, role.through);
|
|
248
|
+
}
|
|
249
|
+
/** The manifest entry of a role column, or one entry per source of a row with several. */
|
|
250
|
+
function roleManifest(role) {
|
|
251
|
+
if (!role.lateral) return sourceManifest(role.column, role.through);
|
|
252
|
+
return role.columns.map((column) => sourceManifest(column, role.throughs.find((through) => through.ref === column)));
|
|
253
|
+
}
|
|
254
|
+
//#endregion
|
|
255
|
+
//#region src/supabase/sources.ts
|
|
256
|
+
const ident = (name) => quoteSqlIdent(name);
|
|
257
|
+
const literal = quoteSqlLiteral;
|
|
254
258
|
function isFixed(roles) {
|
|
255
259
|
return Array.isArray(roles);
|
|
256
260
|
}
|
|
@@ -335,11 +339,14 @@ function sourceOf(sql, query) {
|
|
|
335
339
|
}
|
|
336
340
|
/**
|
|
337
341
|
* `ctx.postgres` (from `withPostgresClient`) or `ctx.postgresAdmin` as a
|
|
338
|
-
* `SqlQuery` for `
|
|
342
|
+
* `SqlQuery` for `tableMembershipSource`, `junctionMembershipSource` and `supabaseApprovalStore`.
|
|
339
343
|
* `ctx.postgres` runs as the caller under RLS, so the membership tables must
|
|
340
344
|
* be readable by `authenticated`; `ctx.postgresAdmin` bypasses RLS.
|
|
341
345
|
*/
|
|
342
|
-
function
|
|
346
|
+
function optionalColumn(name, cast) {
|
|
347
|
+
return name === void 0 ? `null::${cast}` : `${col(name)}::${cast}`;
|
|
348
|
+
}
|
|
349
|
+
function supabasePostgresQuery(postgres) {
|
|
343
350
|
return (text, values) => postgres.queryRaw(text, [...values]);
|
|
344
351
|
}
|
|
345
352
|
/**
|
|
@@ -348,14 +355,13 @@ function fromSupabasePostgres(postgres) {
|
|
|
348
355
|
* `within`, `via`, expiry, owner and seat columns. Rows of the same instance
|
|
349
356
|
* merge into one membership.
|
|
350
357
|
*/
|
|
351
|
-
function
|
|
358
|
+
function tableMembershipSource(options) {
|
|
352
359
|
const c = options.columns ?? {};
|
|
353
360
|
const scope = `${col(c.scope ?? "scope")}::text`;
|
|
354
361
|
const id = `${col(c.id ?? "scope_id")}::text`;
|
|
355
362
|
const within = c.within === void 0 ? "null::jsonb" : col(c.within);
|
|
356
|
-
const
|
|
357
|
-
const
|
|
358
|
-
const role = memberRole(c.role ?? "role", options.table, "fromTable columns.role");
|
|
363
|
+
const user = memberUser(c.user ?? "user_id", options.table, "tableMembershipSource columns.user");
|
|
364
|
+
const role = memberRole(c.role ?? "role", options.table, "tableMembershipSource columns.role");
|
|
359
365
|
return sourceOf(sqlOf({
|
|
360
366
|
table: options.table,
|
|
361
367
|
join: `${user.column.join}${role.join}`,
|
|
@@ -368,13 +374,13 @@ function fromTable(options) {
|
|
|
368
374
|
id,
|
|
369
375
|
within,
|
|
370
376
|
roles: roleAgg(role),
|
|
371
|
-
via:
|
|
377
|
+
via: optionalColumn(c.via, "text"),
|
|
372
378
|
expiresAt: c.expiresAt,
|
|
373
379
|
disabledAt: c.disabledAt,
|
|
374
|
-
grantedBy:
|
|
375
|
-
reason:
|
|
376
|
-
memberGroup:
|
|
377
|
-
managed:
|
|
380
|
+
grantedBy: optionalColumn(c.grantedBy, "text"),
|
|
381
|
+
reason: optionalColumn(c.reason, "text"),
|
|
382
|
+
memberGroup: optionalColumn(c.group, "text"),
|
|
383
|
+
managed: optionalColumn(c.managedBy, "text"),
|
|
378
384
|
managedColumn: c.managedBy,
|
|
379
385
|
seats: c.seats === void 0 ? "null::jsonb" : `to_jsonb(${col(c.seats)})`,
|
|
380
386
|
x: c.x,
|
|
@@ -428,15 +434,15 @@ function fromTable(options) {
|
|
|
428
434
|
* membership of `scope`, with roles from a column or fixed (`['contact']`), a
|
|
429
435
|
* fixed `via`, and ancestor ids from `within` columns.
|
|
430
436
|
*/
|
|
431
|
-
function
|
|
437
|
+
function junctionMembershipSource(options) {
|
|
432
438
|
if (!/^[a-z][a-z0-9_]*$/u.test(options.scope)) throw new TypeError(`PermDock: unsafe scope name '${options.scope}'`);
|
|
433
439
|
const idColumn = options.id ?? `${options.scope}_id`;
|
|
434
440
|
const withinEntries = Object.entries(options.within ?? {});
|
|
435
441
|
const roles = options.roles;
|
|
436
442
|
const fixed = isFixed(roles) ? roles : void 0;
|
|
437
|
-
if (fixed?.length === 0) throw new TypeError("PermDock:
|
|
438
|
-
const role = isFixed(roles) ? void 0 : memberRole(typeof roles === "object" && "sources" in roles ? roles.sources : roles, options.table, "
|
|
439
|
-
const user = memberUser(options.user ?? "user_id", options.table, "
|
|
443
|
+
if (fixed?.length === 0) throw new TypeError("PermDock: junctionMembershipSource needs at least one role");
|
|
444
|
+
const role = isFixed(roles) ? void 0 : memberRole(typeof roles === "object" && "sources" in roles ? roles.sources : roles, options.table, "junctionMembershipSource roles");
|
|
445
|
+
const user = memberUser(options.user ?? "user_id", options.table, "junctionMembershipSource user");
|
|
440
446
|
const managedColumn = options.managedBy === void 0 ? void 0 : options.managedBy === "idp" ? "" : options.managedBy.column;
|
|
441
447
|
const groupColumn = options.group === void 0 || typeof options.group === "string" ? void 0 : options.group.column;
|
|
442
448
|
const shape = {
|
|
@@ -541,4 +547,4 @@ function authzVersion(options) {
|
|
|
541
547
|
};
|
|
542
548
|
}
|
|
543
549
|
//#endregion
|
|
544
|
-
export {
|
|
550
|
+
export { hookApiNames as a, tableMembershipSource as c, keptKeys as d, authzVersion as i, roleColumn as l, HOOK_API_SCHEMA as n, junctionMembershipSource as o, PERMDOCK_SCHEMA as r, supabasePostgresQuery as s, AUTHZ_VERSION_TABLE as t, roleManifest as u };
|
|
@@ -39,5 +39,17 @@ function quoteQualifiedTable(name, prefix = "PermDock") {
|
|
|
39
39
|
function sqlTextArray(values) {
|
|
40
40
|
return values.length === 0 ? `'{}'::text[]` : `array[${values.map(quoteSqlLiteral).join(", ")}]::text[]`;
|
|
41
41
|
}
|
|
42
|
+
/** The SQL command a default verb runs: `read`, `list` and `get` select, `create` inserts, `update` and `delete` keep their name. */
|
|
43
|
+
function defaultSqlCommand(action) {
|
|
44
|
+
switch (action) {
|
|
45
|
+
case "read":
|
|
46
|
+
case "list":
|
|
47
|
+
case "get": return "select";
|
|
48
|
+
case "create": return "insert";
|
|
49
|
+
case "update": return "update";
|
|
50
|
+
case "delete": return "delete";
|
|
51
|
+
default: return;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
42
54
|
//#endregion
|
|
43
|
-
export {
|
|
55
|
+
export { quoteQualifiedTable as a, quoteSqlTable as c, qualifySqlTable as i, sqlIdent as l, defaultSqlCommand as n, quoteSqlIdent as o, escapeSqlIdent as r, quoteSqlLiteral as s, SQL_IDENT as t, sqlTextArray as u };
|