permdock 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -35
- package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
- package/dist/a2a/index.d.ts +8 -6
- package/dist/a2a/index.js +21 -31
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-B4R5fnMU.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -23
- package/dist/ai-sdk/index.js +38 -21
- package/dist/app-data-MuyzVqX8.js +60 -0
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-Dg8XsRaO.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +228 -75
- package/dist/automation-BMZPIVUM.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +11 -23
- package/dist/better-supabase/index.d.ts +438 -86
- package/dist/better-supabase/index.js +1027 -184
- package/dist/bind--9EFVYWF.d.ts +38 -0
- package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/build-instance-BMnAudHn.js +52 -0
- package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
- package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/catalog-BECMPrwc.js +100 -0
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +26 -30
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +15 -45
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +20 -6
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +240 -347
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
- package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
- package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
- package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
- package/dist/constants-DcJABbLW.js +20 -0
- package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +18 -18
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/create-DnrmLnLW.js +323 -0
- package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/deciding-columns-Sq12mEA6.js +123 -0
- package/dist/delegation-DaXVdDhM.js +286 -0
- package/dist/delegation-input-FTxMK3ji.js +19 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/denied-text-D8jDHgsl.d.ts +19 -0
- package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
- package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/doctor-DFjUxf2f.js +2361 -0
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +6 -14
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +14 -13
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +23 -29
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +14 -12
- package/dist/fastify/index.d.ts +26 -13
- package/dist/fastify/index.js +17 -36
- package/dist/fetch-adapter-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
- package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
- package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
- package/dist/grantee-Cn1HyUsI.js +254 -0
- package/dist/grantee-conditions-CcXf8hMM.js +271 -0
- package/dist/grantee-match-DHArqY82.js +142 -0
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +14 -13
- package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
- package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
- package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/index-DOVf7RJv.d.ts +900 -0
- package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +20 -14
- package/dist/index.js +33 -23
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +166 -145
- package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +6 -14
- package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-CtKR3GXL.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
- package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
- package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
- package/dist/mcp/index.d.ts +36 -9
- package/dist/mcp/index.js +476 -448
- package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +20 -20
- package/dist/next/index.d.ts +40 -20
- package/dist/next/index.js +37 -39
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/ocsf-BFp-PZZA.js +126 -0
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +18 -25
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
- package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +23 -20
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +53 -27
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/output-files-DhRBBE4n.js +138 -0
- package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
- package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
- package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
- package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
- package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +47 -29
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.d.ts +502 -0
- package/dist/permission-registry-Br4jSNVi.js +385 -0
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/policy-DLZJ5gAp.js +399 -0
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +6 -12
- package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
- package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/protected-DEPHc2xV.d.ts +38 -0
- package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
- package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
- package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -63
- package/dist/react-native/index.js +45 -27
- package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/relation-walk-3OyDBF0S.js +186 -0
- package/dist/relations-BnCWnJGI.js +163 -0
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/request-context-BTRTG7OT.js +71 -0
- package/dist/request-context-C2_1lchh.d.ts +5 -0
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/resource-relations-D_jw0BFx.js +243 -0
- package/dist/retire-CALjIQ7e.js +240 -0
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
- package/dist/role-builder-CXbis5-X.js +623 -0
- package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
- package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
- package/dist/server/index.d.ts +13 -134
- package/dist/server/index.js +13 -10
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/shared-CD11nBbC.js +304 -0
- package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +24 -25
- package/dist/solid/index.js +41 -11
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
- package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
- package/dist/sql-B5T1IL83.js +55 -0
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +440 -106
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
- package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
- package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
- package/dist/stores-ClZUgeoP.d.ts +30 -0
- package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +13 -6
- package/dist/supabase/middleware.js +16 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
- package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +11 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +26 -12
- package/dist/svelte/runtime.d.ts +10 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +5 -5
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +36 -316
- package/dist/testing/index.d.ts +391 -106
- package/dist/testing/index.js +4574 -1286
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
- package/dist/tool-refusal-CMLN5xhn.js +41 -0
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +18 -17
- package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
- package/dist/types-BNORmDM8.d.ts +172 -0
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
- package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/types-fbZ7JEXr.d.ts +89 -0
- package/dist/types-tIgIeIKJ.d.ts +66 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
- package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
- package/dist/validity-CZ7-y0Cj.js +79 -0
- package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
- package/dist/verify-DbCL9bnB.js +1770 -0
- package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
- package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
- package/dist/vue/index.d.ts +25 -21
- package/dist/vue/index.js +25 -9
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +13 -37
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/wrap-Bd1Tejur.d.ts +15 -0
- package/dist/wrap-gX61EtpB.js +27 -0
- package/package.json +140 -41
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +129 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +13 -8
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
- package/skills/permdock-wire/SKILL.md +18 -12
- package/skills/permdock-wire/references/adapters.md +146 -50
- package/skills/permdock-wire/references/policy-options.md +15 -6
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DbYAuNkG.js +0 -224
- package/dist/arazzo-C9chp3ST.js +0 -54
- package/dist/bind-C_ob3LKa.d.ts +0 -25
- package/dist/catalog-CRW5Mx_B.js +0 -2
- package/dist/catalog-CYj-mX2O.js +0 -48
- package/dist/catalog-DWF5cYqB.js +0 -55
- package/dist/cloud-CfwZ39Rl.js +0 -50
- package/dist/cloud-DWLXO2af.js +0 -118
- package/dist/collect-CHB22Sx4.js +0 -83
- package/dist/collect-DSWOk19R.js +0 -2
- package/dist/commands-BeaGNj_o.js +0 -97
- package/dist/config-ir40y8m0.js +0 -36
- package/dist/create-CMwIl-w2.js +0 -253
- package/dist/delegation-D8pUEuce.js +0 -103
- package/dist/diff-C9RDjjhs.js +0 -48
- package/dist/doctor-Djh6JDEk.js +0 -53
- package/dist/doctor-DvH0IQff.js +0 -1194
- package/dist/doctor-collect-CjdO0wQX.js +0 -665
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/evaluation-items-CfCCejQd.js +0 -40
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-BMl1RxoX.js +0 -26
- package/dist/grantee-Cv5Sogfv.js +0 -602
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-0nNqHspG.d.ts +0 -6
- package/dist/index-BNc7Wer_.d.ts +0 -483
- package/dist/index-C7Tw7MaW.d.ts +0 -201
- package/dist/instance-options-Dhhcnm3y.js +0 -22
- package/dist/load-DwJUafYN.js +0 -2
- package/dist/manifest-iaoBXHKc.js +0 -783
- package/dist/map-AcxK9o_D.js +0 -147
- package/dist/may-use-DndQ5tQ-.js +0 -77
- package/dist/openapi-CQTsgKoB.js +0 -164
- package/dist/permdock-CbgvLnuo.js +0 -3479
- package/dist/permissions-DVoF6dMt.js +0 -662
- package/dist/policy-xyWg7QdR.js +0 -1122
- package/dist/powersync-CrBX8hY6.js +0 -2
- package/dist/powersync-DE19b9dT.js +0 -62
- package/dist/protected-BdnIEFkY.d.ts +0 -27
- package/dist/protected-xAr24FEC.d.ts +0 -40
- package/dist/relations-cjOL01hZ.js +0 -505
- package/dist/rls-P-BeBx0n.js +0 -238
- package/dist/rls-graph-CHwx0V8q.js +0 -435
- package/dist/rls-ownership-DcYlZ09B.js +0 -843
- package/dist/rls-shared-Cewd_-zI.js +0 -495
- package/dist/rls-verify-CMv9H3wV.js +0 -746
- package/dist/run-BWc9qqvE.js +0 -174
- package/dist/server-DlZ28Oz5.js +0 -268
- package/dist/sink-B1fZzIMf.d.ts +0 -104
- package/dist/sink-Bd9PSyfq.js +0 -141
- package/dist/skills-C5CbhhpG.js +0 -56
- package/dist/snapshot-Enxd0n-s.js +0 -975
- package/dist/sql-xdg5f4Fi.js +0 -27
- package/dist/src-BDwEZWrZ.js +0 -568
- package/dist/store-jOBYpiXC.d.ts +0 -36
- package/dist/stores-C0IMQrGI.d.ts +0 -52
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-config-Bj3iDH2I.js +0 -472
- package/dist/supabase-hook-gd3s8bxB.js +0 -2
- package/dist/supabase-s4o9s1O1.js +0 -83
- package/dist/thenable-okc2xDsj.js +0 -10
- package/dist/types-BnIEz1sU.d.ts +0 -48
- package/dist/types-Bvc4oWT6.d.ts +0 -9
- package/dist/types-CKNSyIf_.d.ts +0 -52
- package/dist/types-Cq_H8N_X.d.ts +0 -197
- package/dist/usage-B0YuTQRO.js +0 -42
- package/dist/usage-DorAJiU_.js +0 -2
- package/dist/vocabulary-DA8a8zif.d.ts +0 -56
- package/dist/watch-BwxLTYMZ.js +0 -2
|
@@ -1,15 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import "./
|
|
5
|
-
import { r as
|
|
6
|
-
import
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { i as dateAt } from "./time-DkWjdL98.js";
|
|
3
|
+
import { a as describeError } from "./errors-CWTY6uih.js";
|
|
4
|
+
import { o as sqlFiles } from "./files-D_JIzUrP.js";
|
|
5
|
+
import { r as escapeSqlIdent, s as quoteSqlLiteral } from "./sql-B5T1IL83.js";
|
|
6
|
+
import "./sources-vs5dGOsS.js";
|
|
7
|
+
import { a as RETIRE_MARKER } from "./markers-C6joDI3o.js";
|
|
8
|
+
import { r as refuseDirty, t as applyFiles } from "./files-C5ZI27eV.js";
|
|
9
|
+
import { f as writeOutputFiles, n as dataMigrationFile } from "./output-files-DhRBBE4n.js";
|
|
10
|
+
import { r as HELPERS } from "./shared-CD11nBbC.js";
|
|
11
|
+
import { o as sqlStatements } from "./deciding-columns-Sq12mEA6.js";
|
|
12
|
+
import { i as retireSql, r as retirePlan } from "./retire-CALjIQ7e.js";
|
|
13
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
7
14
|
import { relative, resolve } from "node:path";
|
|
8
15
|
import { parse } from "pgsql-parser";
|
|
9
|
-
//#region src/cli/rls
|
|
16
|
+
//#region src/cli/rls/migrate.ts
|
|
10
17
|
function migrateTarget(generated) {
|
|
11
18
|
const granted = /* @__PURE__ */ new Map();
|
|
19
|
+
const roles = /* @__PURE__ */ new Set();
|
|
12
20
|
for (const row of generated.seeds ?? []) {
|
|
21
|
+
roles.add(row.role);
|
|
13
22
|
if (row.effect !== "allow") continue;
|
|
14
23
|
let keys = granted.get(row.scope);
|
|
15
24
|
if (keys === void 0) {
|
|
@@ -24,14 +33,12 @@ function migrateTarget(generated) {
|
|
|
24
33
|
permissions: new Set(generated.keys?.permissions ?? []),
|
|
25
34
|
rowConditions: new Set(generated.keys?.rowConditions ?? []),
|
|
26
35
|
granted,
|
|
27
|
-
renamed: generated.keys?.renamed ?? {}
|
|
36
|
+
renamed: generated.keys?.renamed ?? {},
|
|
37
|
+
roles
|
|
28
38
|
};
|
|
29
39
|
}
|
|
30
|
-
function isNode(value) {
|
|
31
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
32
|
-
}
|
|
33
40
|
function child(node, key) {
|
|
34
|
-
return
|
|
41
|
+
return isRecord(node) ? node[key] : void 0;
|
|
35
42
|
}
|
|
36
43
|
function list(value) {
|
|
37
44
|
return Array.isArray(value) ? value : [];
|
|
@@ -171,6 +178,21 @@ var Rewriter = class {
|
|
|
171
178
|
const column = this.#column(idArg);
|
|
172
179
|
return "to" in column ? { to: `(${column.to} in (select ${helper}()))` } : column;
|
|
173
180
|
}
|
|
181
|
+
#role(scope, idArg, roleArgs) {
|
|
182
|
+
const name = `member_${scope}_ids`;
|
|
183
|
+
const helper = this.#helper(name);
|
|
184
|
+
if (helper === void 0 || !this.#target.sql.includes(`.${name}(p_roles text[])`)) return skip("missing-helper", `rls generate writes no ${name}(p_roles text[]): run it with this rls.migrate config, which asks for it`);
|
|
185
|
+
const legacy = roleArgs.map((arg) => stringConst(arg)).filter((role) => role !== void 0);
|
|
186
|
+
if (legacy.length === 0 || legacy.length !== roleArgs.length) return skip("dynamic-role", "a role is not a string literal; map it by hand");
|
|
187
|
+
const mapped = [];
|
|
188
|
+
for (const value of legacy) {
|
|
189
|
+
const declared = this.#target.roleValues?.[value] ?? value;
|
|
190
|
+
if (!this.#target.roles.has(declared)) return skip("unknown-role", `${value} maps to ${declared}, which no role grants; add it to rls.roleValues or declare the role`);
|
|
191
|
+
mapped.push(declared);
|
|
192
|
+
}
|
|
193
|
+
const column = this.#column(idArg);
|
|
194
|
+
return "to" in column ? { to: `(${column.to} in (select ${helper}(array[${mapped.map(literal).join(", ")}])))` } : column;
|
|
195
|
+
}
|
|
174
196
|
#scoped(args, selected) {
|
|
175
197
|
const [scopeArg, idArg, keyArg] = args;
|
|
176
198
|
const named = stringConst(scopeArg);
|
|
@@ -185,6 +207,7 @@ var Rewriter = class {
|
|
|
185
207
|
case "ids": return this.#ids(helper.scope, args[0]);
|
|
186
208
|
case "row": return this.#row(helper.scope, args[0], args[1]);
|
|
187
209
|
case "membership": return this.#membership(helper.scope, args[0]);
|
|
210
|
+
case "role": return this.#role(helper.scope, args[0], args.slice(1));
|
|
188
211
|
case "scoped": return this.#scoped(args, selected);
|
|
189
212
|
case "global": return this.#global(args[0], selected);
|
|
190
213
|
default: return helper;
|
|
@@ -259,9 +282,9 @@ async function migrateSql(file, text, config, target) {
|
|
|
259
282
|
for (const item of node) visit(item, inPolicy);
|
|
260
283
|
return;
|
|
261
284
|
}
|
|
262
|
-
if (!
|
|
285
|
+
if (!isRecord(node)) return;
|
|
263
286
|
for (const [kind, value] of Object.entries(node)) {
|
|
264
|
-
if (kind === "FuncCall" &&
|
|
287
|
+
if (kind === "FuncCall" && isRecord(value)) {
|
|
265
288
|
const call = rewriter.call(value);
|
|
266
289
|
if (call !== void 0) {
|
|
267
290
|
const source = call.end === -1 ? call.name : text.slice(call.start, call.end);
|
|
@@ -305,7 +328,7 @@ async function migrateSql(file, text, config, target) {
|
|
|
305
328
|
const statement = child(raw, "stmt");
|
|
306
329
|
const offset = child(raw, "stmt_location");
|
|
307
330
|
const statementStart = at(typeof offset === "number" ? offset : 0);
|
|
308
|
-
const kind =
|
|
331
|
+
const kind = isRecord(statement) ? Object.keys(statement)[0] : void 0;
|
|
309
332
|
if (kind !== void 0 && BODY_STATEMENTS.has(kind)) {
|
|
310
333
|
for (const body of bodyStrings(child(statement, kind))) {
|
|
311
334
|
const bodyStart = text.indexOf(body, statementStart);
|
|
@@ -329,11 +352,17 @@ async function migrateSql(file, text, config, target) {
|
|
|
329
352
|
text: out
|
|
330
353
|
};
|
|
331
354
|
}
|
|
355
|
+
function describeRetire(plan) {
|
|
356
|
+
return plan.tables.flatMap((table) => {
|
|
357
|
+
if (!table.present) return [`retire ${table.table}: no longer created by --sql`];
|
|
358
|
+
return [`retire ${table.table}: ${String(table.refreshTriggers.length)} refresh trigger(s), ${String(table.refreshFunctions.length)} refresh function(s), ${String(table.readers.length)} reader(s)${table.readers.length === 0 ? "; --retire-out drops it" : ""}`, ...table.readers.map((reader) => ` read by ${reader.kind} ${reader.name} at ${reader.file}:${String(reader.line)}`)];
|
|
359
|
+
});
|
|
360
|
+
}
|
|
332
361
|
function describe(report, write) {
|
|
333
362
|
const lines = [...report.rewrites.map((item) => `${item.file}:${String(item.line)} ${item.from} -> ${item.to}`), ...report.skipped.map((item) => `skipped ${item.file}:${String(item.line)} ${item.call}: ${item.detail}`)];
|
|
334
363
|
const files = new Set(report.rewrites.map((item) => item.file)).size;
|
|
335
364
|
const unknown = report.skipped.filter((item) => item.reason === "unknown-key").length;
|
|
336
|
-
lines.push(`rls migrate: ${write ? "rewrote" : "would rewrite"} ${String(report.rewrites.length)} call(s) in ${String(files)} file(s), skipped ${String(report.skipped.length)}${unknown === 0 ? "" : `, ${String(unknown)} with an unknown key`}${write ? "" : "; --
|
|
365
|
+
lines.push(`rls migrate: ${write ? "rewrote" : "would rewrite"} ${String(report.rewrites.length)} call(s) in ${String(files)} file(s), skipped ${String(report.skipped.length)}${unknown === 0 ? "" : `, ${String(unknown)} with an unknown key`}${write ? "" : "; drop --dry-run to apply them"}`);
|
|
337
366
|
return lines.join("\n");
|
|
338
367
|
}
|
|
339
368
|
/** `permdock rls migrate`: a dry run unless `write`; exits 1 while a key is unknown. */
|
|
@@ -346,21 +375,91 @@ async function runRlsMigrate(input) {
|
|
|
346
375
|
const files = sqlFiles(root, ["."]);
|
|
347
376
|
const rewrites = [];
|
|
348
377
|
const skipped = [];
|
|
378
|
+
const statements = [];
|
|
379
|
+
const writes = [];
|
|
349
380
|
for (const path of files) {
|
|
350
381
|
const file = relative(input.cwd, path);
|
|
351
382
|
const text = readFileSync(path, "utf8");
|
|
352
383
|
const result = await migrateSql(file, text, input.config, input.target);
|
|
353
384
|
rewrites.push(...result.rewrites);
|
|
354
385
|
skipped.push(...result.skipped);
|
|
355
|
-
if (input.write && result.text !== text)
|
|
386
|
+
if (input.write && result.text !== text) writes.push({
|
|
387
|
+
path,
|
|
388
|
+
text: result.text
|
|
389
|
+
});
|
|
390
|
+
for (const statement of sqlStatements(input.write ? result.text : text)) statements.push({
|
|
391
|
+
file,
|
|
392
|
+
...statement
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
if (input.retireOut !== void 0 && input.config.tables === void 0) return {
|
|
396
|
+
code: 2,
|
|
397
|
+
output: "rls migrate --retire-out needs rls.migrate.tables in permdock.config.ts"
|
|
398
|
+
};
|
|
399
|
+
if (writes.length > 0) {
|
|
400
|
+
refuseDirty({
|
|
401
|
+
command: "rls migrate",
|
|
402
|
+
invocation: `rls migrate --sql ${input.sql}`,
|
|
403
|
+
cwd: input.cwd,
|
|
404
|
+
paths: writes.map((write) => write.path),
|
|
405
|
+
force: input.force === true
|
|
406
|
+
});
|
|
407
|
+
applyFiles(input.cwd, writes);
|
|
356
408
|
}
|
|
357
|
-
const
|
|
409
|
+
const retire = input.config.tables === void 0 ? void 0 : retirePlan(statements, input.config);
|
|
410
|
+
const report = retire === void 0 ? {
|
|
358
411
|
rewrites,
|
|
359
412
|
skipped
|
|
413
|
+
} : {
|
|
414
|
+
rewrites,
|
|
415
|
+
skipped,
|
|
416
|
+
retire
|
|
417
|
+
};
|
|
418
|
+
const unknown = skipped.some((item) => item.reason === "unknown-key");
|
|
419
|
+
const output = input.json ? JSON.stringify(report, void 0, 2) : [describe(report, input.write), ...retire === void 0 ? [] : describeRetire(retire)].join("\n");
|
|
420
|
+
if (input.retireOut === void 0 || retire === void 0) return {
|
|
421
|
+
code: unknown ? 1 : 0,
|
|
422
|
+
output
|
|
423
|
+
};
|
|
424
|
+
const retired = writeRetire(input.cwd, input.retireOut, retire, input.now, !input.write);
|
|
425
|
+
return {
|
|
426
|
+
code: unknown || retired.code === 1 ? 1 : 0,
|
|
427
|
+
output: `${output}\n${retired.output}`
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
/** `--retire-out`: nothing is written while any listed table is still read. */
|
|
431
|
+
function writeRetire(cwd, out, plan, now, dryRun) {
|
|
432
|
+
const read = plan.tables.filter((table) => table.present && table.readers.length > 0);
|
|
433
|
+
if (read.length > 0) return {
|
|
434
|
+
code: 1,
|
|
435
|
+
output: `rls migrate --retire-out: ${read.map((table) => table.table).join(", ")} still read; nothing written`
|
|
436
|
+
};
|
|
437
|
+
const text = retireSql(plan);
|
|
438
|
+
if (text === void 0) return {
|
|
439
|
+
code: 0,
|
|
440
|
+
output: "rls migrate --retire-out: nothing to retire"
|
|
441
|
+
};
|
|
442
|
+
const file = dataMigrationFile({
|
|
443
|
+
cwd,
|
|
444
|
+
out,
|
|
445
|
+
part: "retire",
|
|
446
|
+
marker: RETIRE_MARKER,
|
|
447
|
+
text,
|
|
448
|
+
now: now ?? dateAt(),
|
|
449
|
+
check: false
|
|
450
|
+
});
|
|
451
|
+
if (file === void 0) return {
|
|
452
|
+
code: 0,
|
|
453
|
+
output: "rls migrate --retire-out: up to date"
|
|
454
|
+
};
|
|
455
|
+
if (dryRun && file.rel !== "-") return {
|
|
456
|
+
code: 0,
|
|
457
|
+
output: `would write ${file.rel}`
|
|
360
458
|
};
|
|
459
|
+
const written = writeOutputFiles(cwd, [file]);
|
|
361
460
|
return {
|
|
362
|
-
code:
|
|
363
|
-
output:
|
|
461
|
+
code: 0,
|
|
462
|
+
output: written.printed === "" ? `wrote ${written.wrote.join(", ")}` : written.printed
|
|
364
463
|
};
|
|
365
464
|
}
|
|
366
465
|
//#endregion
|
package/dist/nest/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { T as Policy, rr as Principal } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { r as PermDock } from "../permdock-D7eeLJER.js";
|
|
4
|
+
import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
|
|
5
|
+
import { D as ConnectionOptions, T as Connection, 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";
|
|
7
|
+
import { r as sendResponse, t as NodeRequest } from "../http-B_LphE5Y.js";
|
|
7
8
|
import { CanActivate, DynamicModule, ExceptionFilter, ExecutionContext, Type } from "@nestjs/common";
|
|
8
9
|
//#region src/nest/http.d.ts
|
|
9
10
|
/**
|
|
@@ -33,8 +34,8 @@ type NestSocket = {
|
|
|
33
34
|
disconnect?(close?: boolean): unknown;
|
|
34
35
|
close?(code?: number, reason?: string): unknown;
|
|
35
36
|
};
|
|
36
|
-
/** `Protect(null,
|
|
37
|
-
type NestProtect = (permission: Permission | null,
|
|
37
|
+
/** `Protect(null, data?, { oauthScopes })` needs a principal and one of the OAuth scopes, but no permission. */
|
|
38
|
+
type NestProtect = (permission: Permission | null, data?: (req: NestRequest) => unknown, protectOptions?: ProtectOptions) => ClassDecorator & MethodDecorator;
|
|
38
39
|
type NestHandlerOptions = {
|
|
39
40
|
/** Controller path; may hold route params such as `:org`. Default `api/permdock`. */
|
|
40
41
|
readonly path?: string;
|
|
@@ -44,6 +45,8 @@ type PermDockModuleOptions = {
|
|
|
44
45
|
readonly guard?: "global";
|
|
45
46
|
};
|
|
46
47
|
type NestPermDock = {
|
|
48
|
+
/** The `PermDock` for one request, for code the guard does not run before. */
|
|
49
|
+
readonly getPermDock: (req: NestRequest) => Promise<PermDock>;
|
|
47
50
|
readonly PermDockModule: Type<unknown> & {
|
|
48
51
|
readonly forRoot: (options?: PermDockModuleOptions) => DynamicModule;
|
|
49
52
|
};
|
|
@@ -72,4 +75,4 @@ export declare function decorateMethod(cls: {
|
|
|
72
75
|
readonly prototype: object;
|
|
73
76
|
}, key: string, ...decorators: readonly MethodDecorator[]): void;
|
|
74
77
|
//#endregion
|
|
75
|
-
export { InvalidSignatureError, type NestHandlerOptions, type NestPermDock, type NestPermDockOptions, type NestProtect, type NestRequest, type NestSocket, type PermDockModuleOptions, discoverViaSignatureAgent, sendResponse,
|
|
78
|
+
export { InvalidSignatureError, type NestHandlerOptions, type NestPermDock, type NestPermDockOptions, type NestProtect, type NestRequest, type NestSocket, type PermDockModuleOptions, discoverViaSignatureAgent, sendResponse, webBotAuthVerifier };
|
package/dist/nest/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { t as compact } from "../compact-
|
|
2
|
-
import { n as PermDockValidationError } from "../validation-error-
|
|
3
|
-
import { n as PermDockDeniedError, r as PermDockRevokedError, t as PermDockApprovalRequiredError } from "../errors-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
1
|
+
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
+
import { n as PermDockValidationError } from "../validation-error-ZfUHbKvf.js";
|
|
3
|
+
import { n as PermDockDeniedError, r as PermDockRevokedError, t as PermDockApprovalRequiredError } from "../errors-BKy0EfhN.js";
|
|
4
|
+
import { c as writeReply, r as hasCredentials } from "../http-BBoKefeS.js";
|
|
5
|
+
import { d as discoverViaSignatureAgent, m as webBotAuthVerifier, u as InvalidSignatureError } from "../evaluations-DZ2CbV5k.js";
|
|
6
|
+
import { t as problemFromError } from "../map-error-TCAdw-eW.js";
|
|
7
|
+
import { a as socketConnection, r as bindKernel } from "../bind-CZzhx-Vj.js";
|
|
8
|
+
import { a as onRevoked, n as closeReason, t as POLICY_VIOLATION } from "../stream-CvdUS9V1.js";
|
|
9
|
+
import { n as sendResponse, r as toRequest$1, t as isServerResponse } from "../http-ujKm0JXE.js";
|
|
9
10
|
import { Catch, Controller, Get, Inject, Injectable, Module, Post, Req, Res, createParamDecorator } from "@nestjs/common";
|
|
10
11
|
import { APP_FILTER, APP_GUARD, Reflector } from "@nestjs/core";
|
|
11
12
|
//#region src/nest/decorate.ts
|
|
@@ -47,9 +48,7 @@ async function sendNestResponse(res, response) {
|
|
|
47
48
|
return;
|
|
48
49
|
}
|
|
49
50
|
if (isFastifyReply(res)) {
|
|
50
|
-
res
|
|
51
|
-
for (const [key, value] of response.headers.entries()) res.header(key, value);
|
|
52
|
-
await res.send(await response.text());
|
|
51
|
+
await writeReply(res, response);
|
|
53
52
|
return;
|
|
54
53
|
}
|
|
55
54
|
throw new TypeError("permdock/nest supports @nestjs/platform-express and @nestjs/platform-fastify responses");
|
|
@@ -97,10 +96,10 @@ function rulesOf(target) {
|
|
|
97
96
|
if (!Array.isArray(found)) return [];
|
|
98
97
|
return found;
|
|
99
98
|
}
|
|
100
|
-
const Protect = (permission,
|
|
99
|
+
const Protect = (permission, data, protectOptions) => {
|
|
101
100
|
const rule = compact({
|
|
102
101
|
permission,
|
|
103
|
-
|
|
102
|
+
data,
|
|
104
103
|
options: protectOptions
|
|
105
104
|
});
|
|
106
105
|
return ((target, _propertyKey, descriptor) => {
|
|
@@ -111,11 +110,11 @@ const Protect = (permission, loadData, protectOptions) => {
|
|
|
111
110
|
});
|
|
112
111
|
};
|
|
113
112
|
function createPermDock(policy, options) {
|
|
114
|
-
const { kernel, bind, rebind, scopeOf, handlerScope } = bindKernel(policy, options, "nest", toRequest);
|
|
113
|
+
const { kernel, bind, rebind, scopeOf, handlerScope, getPermDock } = bindKernel(policy, options, "nest", toRequest);
|
|
115
114
|
const applyProtect = async (remaining, req, request, scope, load) => {
|
|
116
115
|
const [rule, ...rest] = remaining;
|
|
117
116
|
if (rule === void 0) return;
|
|
118
|
-
const guard = await kernel.protect(rule.permission, load(rule.
|
|
117
|
+
const guard = await kernel.protect(rule.permission, load(rule.data), rule.options)(request, scope);
|
|
119
118
|
if (!guard.ok) throw new PermDockHttpError(guard.response);
|
|
120
119
|
req.permdock = guard.permdock;
|
|
121
120
|
req.permdockData = guard.data;
|
|
@@ -127,7 +126,7 @@ function createPermDock(policy, options) {
|
|
|
127
126
|
onRevoked(conn, (problem) => {
|
|
128
127
|
client.emit?.("permdock:error", problem);
|
|
129
128
|
if (typeof client.disconnect === "function") client.disconnect(true);
|
|
130
|
-
else client.close?.(POLICY_VIOLATION, problem
|
|
129
|
+
else client.close?.(POLICY_VIOLATION, closeReason(problem));
|
|
131
130
|
});
|
|
132
131
|
return conn;
|
|
133
132
|
});
|
|
@@ -137,7 +136,7 @@ function createPermDock(policy, options) {
|
|
|
137
136
|
const load = loadsFor(req);
|
|
138
137
|
for (const rule of rules) {
|
|
139
138
|
if (conn.signal.aborted) throw conn.signal.reason instanceof PermDockRevokedError ? conn.signal.reason : new PermDockRevokedError({ code: "denied" });
|
|
140
|
-
const guard = await kernel.protectOn(conn.permdock, rule.permission, load(rule.
|
|
139
|
+
const guard = await kernel.protectOn(conn.permdock, rule.permission, load(rule.data), rule.options, request);
|
|
141
140
|
if (!guard.ok) throw new PermDockHttpError(guard.response);
|
|
142
141
|
}
|
|
143
142
|
};
|
|
@@ -159,7 +158,7 @@ function createPermDock(policy, options) {
|
|
|
159
158
|
if (req === void 0) return rules.length === 0;
|
|
160
159
|
const request = bind(req);
|
|
161
160
|
const scope = await scopeOf(req);
|
|
162
|
-
req.permdock = await kernel.
|
|
161
|
+
req.permdock = await kernel.getPermDock(request, scope);
|
|
163
162
|
await applyProtect(rules, req, request, scope, loadsFor(req));
|
|
164
163
|
return true;
|
|
165
164
|
}
|
|
@@ -174,7 +173,7 @@ function createPermDock(policy, options) {
|
|
|
174
173
|
class PermDockExceptionFilter {
|
|
175
174
|
send = sendNestResponse;
|
|
176
175
|
async catch(exception, host) {
|
|
177
|
-
const problem = exception instanceof PermDockHttpError ? exception.response : problemFromError(exception, { credentials: host.getType() === "http" && host.switchToHttp().getRequest()
|
|
176
|
+
const problem = exception instanceof PermDockHttpError ? exception.response : problemFromError(exception, { credentials: host.getType() === "http" && hasCredentials(host.switchToHttp().getRequest()) });
|
|
178
177
|
if (problem === void 0) throw new TypeError("unhandled permdock exception");
|
|
179
178
|
if (host.getType() === "http") {
|
|
180
179
|
await this.send(host.switchToHttp().getResponse(), problem);
|
|
@@ -247,6 +246,7 @@ function createPermDock(policy, options) {
|
|
|
247
246
|
return EvaluationsController;
|
|
248
247
|
};
|
|
249
248
|
return {
|
|
249
|
+
getPermDock,
|
|
250
250
|
PermDockModule: PermDockRoot,
|
|
251
251
|
PermDockGuard,
|
|
252
252
|
Protect,
|
|
@@ -258,4 +258,4 @@ function createPermDock(policy, options) {
|
|
|
258
258
|
};
|
|
259
259
|
}
|
|
260
260
|
//#endregion
|
|
261
|
-
export { InvalidSignatureError, createPermDock, decorateMethod, discoverViaSignatureAgent, sendResponse, toRequest,
|
|
261
|
+
export { InvalidSignatureError, createPermDock, decorateMethod, discoverViaSignatureAgent, sendResponse, toRequest, webBotAuthVerifier };
|
package/dist/next/index.d.ts
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { In as DenialReason, Nn as Decision, T as Policy, Vt as Snapshot, ir as Subject, 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 { m as ApprovalStore } from "../types-CCpc2Dcv.js";
|
|
5
|
+
import { t as InstanceOptions } from "../instance-options-Omfd793B.js";
|
|
6
|
+
import { n as PermDockWrap } from "../wrap-Bd1Tejur.js";
|
|
7
|
+
import { o as OtelWrap } from "../types-BqAKcRNW.js";
|
|
8
|
+
import { n as DescribeMessages } from "../describe-BZUsixiL.js";
|
|
9
|
+
import { a as snapshotHeaders, i as cacheLifeFor, n as SnapshotHeaders, o as snapshotTag, r as SnapshotHeadersOptions, t as CacheLifeForOptions } from "../snapshot-cache-DqK9eDmM.js";
|
|
7
10
|
import { ReactElement, ReactNode } from "react";
|
|
8
11
|
//#region src/next/types.d.ts
|
|
9
12
|
type NextSubjectInput = unknown;
|
|
10
13
|
type NextPermDockOptions<TUser = NextSubjectInput> = InstanceOptions & {
|
|
11
|
-
|
|
14
|
+
/** The user, or a full `Subject` (core then skips `policy.subject`). */
|
|
15
|
+
readonly subject: () => TUser | Subject | Promise<TUser | Subject>;
|
|
12
16
|
readonly tenant?: string | (() => string | undefined | Promise<string | undefined>);
|
|
13
17
|
readonly onDenied?: (decision: Decision) => never | void;
|
|
14
18
|
readonly store?: ApprovalStore;
|
|
15
19
|
/** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
|
|
16
20
|
readonly otel?: OtelWrap;
|
|
21
|
+
/** Wraps each instance after `otel`; build it with `wrapPermDock` to cover derived instances. */
|
|
22
|
+
readonly wrap?: PermDockWrap;
|
|
17
23
|
/**
|
|
18
24
|
* Where `PermDockProvider` sends checks the snapshot cannot answer; default `/api/permdock`.
|
|
19
25
|
* `false` is snapshot-only: no `permdockHandler` route, and those checks are denied with
|
|
@@ -32,19 +38,19 @@ type GetSnapshotQuery = GetPermDockQuery & {
|
|
|
32
38
|
/** Tags added next to `snapshotTag(sub)`, such as the app's own organisation tag. */
|
|
33
39
|
readonly tags?: readonly string[];
|
|
34
40
|
};
|
|
35
|
-
type
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
readonly
|
|
41
|
+
type PermissionRequirementOptions = GetPermDockQuery & {
|
|
42
|
+
/**
|
|
43
|
+
* Runs before the default interrupts; throw or redirect to replace them.
|
|
44
|
+
* Defaults to the factory's `onDenied`.
|
|
45
|
+
*/
|
|
46
|
+
readonly onDenied?: (decision: Decision) => never | void;
|
|
41
47
|
};
|
|
42
48
|
type ServerPermissionState = {
|
|
43
49
|
readonly allowed: boolean;
|
|
44
50
|
readonly status: "ready";
|
|
45
51
|
readonly decision: Decision;
|
|
46
52
|
};
|
|
47
|
-
type
|
|
53
|
+
type NextPermDockProviderProps = {
|
|
48
54
|
readonly children: ReactNode;
|
|
49
55
|
readonly tenant?: string;
|
|
50
56
|
readonly include?: readonly (Permission | {
|
|
@@ -55,6 +61,19 @@ type ServerPermDockProviderProps = {
|
|
|
55
61
|
readonly endpoint?: string | false;
|
|
56
62
|
/** Suspends permission readers until the snapshot streams in, instead of answering `pending`. */
|
|
57
63
|
readonly suspend?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* What every `<Protected>` below renders for a slot it leaves out. Nodes
|
|
66
|
+
* only: a function cannot cross from a Server Component to the client.
|
|
67
|
+
*/
|
|
68
|
+
readonly defaults?: {
|
|
69
|
+
readonly pending?: ReactNode;
|
|
70
|
+
readonly denied?: ReactNode;
|
|
71
|
+
readonly approval?: ReactNode;
|
|
72
|
+
};
|
|
73
|
+
/** Localised text for `useDescribe()`; records only, for the same reason. */
|
|
74
|
+
readonly messages?: Pick<DescribeMessages, "titles" | "separator"> & {
|
|
75
|
+
readonly reasons?: Partial<Record<DenialReason, string>>;
|
|
76
|
+
};
|
|
58
77
|
};
|
|
59
78
|
type PermDockHandler = {
|
|
60
79
|
readonly POST: (request: Request) => Promise<Response>;
|
|
@@ -75,19 +94,20 @@ type NextPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
|
75
94
|
*/
|
|
76
95
|
readonly getSnapshot: (query?: GetSnapshotQuery) => Promise<Snapshot>;
|
|
77
96
|
/**
|
|
78
|
-
* Resolves to the granted `Decision`. A denial
|
|
79
|
-
*
|
|
97
|
+
* Resolves to the granted `Decision`. A denial first runs `onDenied` (the
|
|
98
|
+
* call's, else the factory's), then calls `unauthorized()` for an anonymous
|
|
99
|
+
* subject and `forbidden()` otherwise (`experimental.authInterrupts`);
|
|
80
100
|
* approval-required and boundary validation throw as from `assert`.
|
|
81
101
|
*/
|
|
82
|
-
readonly
|
|
102
|
+
readonly requirePermission: (permission: Permission, data?: unknown, options?: PermissionRequirementOptions) => Promise<Extract<Decision, {
|
|
83
103
|
readonly outcome: "granted";
|
|
84
104
|
}>>;
|
|
85
105
|
/** Never awaits: passes an unawaited snapshot to the client provider, whose hooks suspend. */
|
|
86
|
-
readonly PermDockProvider: (props:
|
|
106
|
+
readonly PermDockProvider: (props: NextPermDockProviderProps) => ReactElement;
|
|
87
107
|
readonly permdockHandler: () => PermDockHandler;
|
|
88
108
|
};
|
|
89
109
|
//#endregion
|
|
90
110
|
//#region src/next/create.d.ts
|
|
91
|
-
export declare function createPermDock<TUser = NextSubjectInput, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>,
|
|
111
|
+
export declare function createPermDock<TUser = NextSubjectInput, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: NextPermDockOptions<TUser>): NextPermDock<V>;
|
|
92
112
|
//#endregion
|
|
93
|
-
export { type CacheLifeForOptions, type GetPermDockQuery, type GetSnapshotQuery, type NextPermDock, type NextPermDockOptions, type
|
|
113
|
+
export { type CacheLifeForOptions, type GetPermDockQuery, type GetSnapshotQuery, type NextPermDock, type NextPermDockOptions, type NextPermDockProviderProps, type PermDockHandler, type PermissionRequirementOptions, type ServerPermissionState, type SnapshotHeaders, type SnapshotHeadersOptions, cacheLifeFor, snapshotHeaders, snapshotTag };
|
package/dist/next/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { t as compact } from "../compact-
|
|
2
|
-
import {
|
|
3
|
-
import { n as
|
|
4
|
-
import {
|
|
5
|
-
import { t as
|
|
1
|
+
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
+
import { c as withApp } from "../permdock-B9JxkBwC.js";
|
|
3
|
+
import { n as wrapPermDock } from "../wrap-gX61EtpB.js";
|
|
4
|
+
import { n as snapshotHeaders, r as snapshotTag, t as cacheLifeFor } from "../snapshot-cache-DZHQ0KF6.js";
|
|
5
|
+
import { n as resolveOrNull, t as buildInstance } from "../build-instance-BMnAudHn.js";
|
|
6
|
+
import { o as evaluationsHandler, v as NO_GRANT } from "../evaluations-DZ2CbV5k.js";
|
|
6
7
|
import { cache } from "react";
|
|
7
8
|
import { jsx } from "react/jsx-runtime";
|
|
8
9
|
import { forbidden, unauthorized, unstable_rethrow } from "#next/navigation";
|
|
@@ -16,7 +17,9 @@ function renderClientProvider(options) {
|
|
|
16
17
|
snapshotPromise: options.snapshotPromise,
|
|
17
18
|
endpoint: options.endpoint,
|
|
18
19
|
tenant: options.tenant,
|
|
19
|
-
suspend: options.suspend
|
|
20
|
+
suspend: options.suspend,
|
|
21
|
+
defaults: options.defaults,
|
|
22
|
+
messages: options.messages
|
|
20
23
|
}),
|
|
21
24
|
children: options.children
|
|
22
25
|
});
|
|
@@ -65,44 +68,35 @@ function afterResponse(sink) {
|
|
|
65
68
|
}
|
|
66
69
|
function wrapInstance(permdock, onDenied) {
|
|
67
70
|
if (onDenied === void 0) return permdock;
|
|
68
|
-
|
|
69
|
-
const assert = ((permission, data, options) => permdock.assert(permission, data, compact({
|
|
71
|
+
return wrapPermDock(permdock, (inner) => ({ assert: ((permission, data, options) => inner.assert(permission, data, compact({
|
|
70
72
|
...options,
|
|
71
73
|
onDenied: options?.onDenied ?? onDenied
|
|
72
|
-
})));
|
|
73
|
-
return Object.freeze({
|
|
74
|
-
...permdock,
|
|
75
|
-
assert,
|
|
76
|
-
tenant: (id) => wrap(permdock.tenant(id)),
|
|
77
|
-
team: (id) => wrap(permdock.team(id)),
|
|
78
|
-
derive: (options) => {
|
|
79
|
-
const derived = permdock.derive(options);
|
|
80
|
-
return derived instanceof Promise ? derived.then(wrap) : wrap(derived);
|
|
81
|
-
}
|
|
82
|
-
});
|
|
74
|
+
}))) }));
|
|
83
75
|
}
|
|
84
|
-
function createPermDock(policy,
|
|
76
|
+
function createPermDock(policy, given) {
|
|
77
|
+
const options = withApp(policy, given);
|
|
85
78
|
assertServerOnly();
|
|
86
79
|
const sink = options.sink === void 0 ? void 0 : afterResponse(options.sink);
|
|
87
|
-
const resolveSubject = cache(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
});
|
|
80
|
+
const resolveSubject = cache(() => resolveOrNull(() => options.subject(), unstable_rethrow));
|
|
81
|
+
const decorate = (permdock) => {
|
|
82
|
+
const traced = options.otel === void 0 ? permdock : options.otel(permdock);
|
|
83
|
+
return wrapInstance(options.wrap === void 0 ? traced : options.wrap(traced), options.onDenied);
|
|
84
|
+
};
|
|
95
85
|
const resolveFallbackTenant = cache(() => readTenant(options.tenant));
|
|
96
86
|
const instantiate = cache(async (tenantKey) => {
|
|
97
87
|
const tenant = tenantKey === "" ? void 0 : tenantKey;
|
|
98
88
|
const user = await resolveSubject();
|
|
99
89
|
await io();
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
90
|
+
return (await buildInstance({
|
|
91
|
+
policy,
|
|
92
|
+
user,
|
|
93
|
+
sources: options,
|
|
94
|
+
scope: {
|
|
95
|
+
tenant,
|
|
96
|
+
sink
|
|
97
|
+
},
|
|
98
|
+
wrap: decorate
|
|
99
|
+
})).permdock;
|
|
106
100
|
});
|
|
107
101
|
const getPermDock = async (query) => {
|
|
108
102
|
const tenant = query?.tenant ?? await resolveFallbackTenant();
|
|
@@ -140,10 +134,12 @@ function createPermDock(policy, options) {
|
|
|
140
134
|
}
|
|
141
135
|
return snapshot;
|
|
142
136
|
};
|
|
143
|
-
const
|
|
144
|
-
const permdock = await getPermDock(
|
|
137
|
+
const requirePermission = async (permission, data, requirement = {}) => {
|
|
138
|
+
const permdock = await getPermDock(requirement.tenant === void 0 ? void 0 : { tenant: requirement.tenant });
|
|
145
139
|
const assert = permdock.assert;
|
|
146
|
-
|
|
140
|
+
const handler = requirement.onDenied ?? options.onDenied;
|
|
141
|
+
return assert(permission, data, { onDenied: (decision) => {
|
|
142
|
+
handler?.(decision);
|
|
147
143
|
if (decision.outcome !== "denied" || decision.denials.some((denial) => denial.reason === "validation")) return;
|
|
148
144
|
if (permdock.subject.principal === null) unauthorized();
|
|
149
145
|
forbidden();
|
|
@@ -159,10 +155,12 @@ function createPermDock(policy, options) {
|
|
|
159
155
|
endpoint: props.endpoint ?? options.endpoint ?? "/api/permdock",
|
|
160
156
|
tenant: props.tenant,
|
|
161
157
|
suspend: props.suspend,
|
|
158
|
+
defaults: props.defaults,
|
|
159
|
+
messages: props.messages,
|
|
162
160
|
children: props.children
|
|
163
161
|
}));
|
|
164
162
|
};
|
|
165
|
-
const permdockHandler = () =>
|
|
163
|
+
const permdockHandler = () => evaluationsHandler(compact({
|
|
166
164
|
policy,
|
|
167
165
|
getPermDock,
|
|
168
166
|
store: options.store
|
|
@@ -171,7 +169,7 @@ function createPermDock(policy, options) {
|
|
|
171
169
|
getPermDock,
|
|
172
170
|
getPermission,
|
|
173
171
|
getSnapshot,
|
|
174
|
-
|
|
172
|
+
requirePermission,
|
|
175
173
|
PermDockProvider,
|
|
176
174
|
permdockHandler
|
|
177
175
|
};
|
package/dist/next/plugin.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as PermDockPluginOptions } from "../types-
|
|
1
|
+
import { a as PermDockPluginOptions } from "../types-5Ut_pbKy.js";
|
|
2
2
|
//#region src/cli/plugin.d.ts
|
|
3
3
|
/** Any object: Next's `NextConfig` is an interface, so no index signature. */
|
|
4
4
|
type NextConfigLike = object;
|
package/dist/next/plugin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as createCollectScheduler, r as report, t as collectOnce } from "../watch-
|
|
1
|
+
import { a as describeError } from "../errors-CWTY6uih.js";
|
|
2
|
+
import { n as createCollectScheduler, r as report, t as collectOnce } from "../watch-CszoTJMq.js";
|
|
3
3
|
//#region src/cli/plugin.ts
|
|
4
4
|
const PHASE_BUILD = "phase-production-build";
|
|
5
5
|
const PHASE_DEV = "phase-development-server";
|