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,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
1
|
+
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { i as configError, u as usageResult } from "./errors-CWTY6uih.js";
|
|
3
|
+
import { s as writeFileEnsuringDir } from "./files-D_JIzUrP.js";
|
|
4
|
+
import { r as escapeSqlIdent, s as quoteSqlLiteral } from "./sql-B5T1IL83.js";
|
|
5
|
+
import { C as parseMembershipsFlag, r as HELPERS } from "./shared-CD11nBbC.js";
|
|
6
|
+
import { f as pgConnector } from "./policies-CO1oOymN.js";
|
|
7
|
+
import { t as FIELD_VIEWS } from "./fields-D9tPVUUS.js";
|
|
8
|
+
import { n as emptySchema, r as isSchemaKind, t as emitPermissionsModule } from "./generate-CNU1pIOo.js";
|
|
9
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
10
|
+
import { resolve } from "node:path";
|
|
8
11
|
import { createHash } from "node:crypto";
|
|
9
12
|
import { deparse, parse } from "pgsql-parser";
|
|
10
|
-
//#region src/cli/rls
|
|
13
|
+
//#region src/cli/rls/import-nodes.ts
|
|
11
14
|
function asNode$1(value) {
|
|
12
|
-
|
|
15
|
+
return isRecord(value) ? value : void 0;
|
|
13
16
|
}
|
|
14
17
|
function stringVal(value) {
|
|
15
18
|
const node = asNode$1(value);
|
|
@@ -86,33 +89,50 @@ function selectFromTable(selectNode) {
|
|
|
86
89
|
const relname = asNode$1(asNode$1(from[0])?.["RangeVar"])?.["relname"];
|
|
87
90
|
return typeof relname === "string" ? relname : void 0;
|
|
88
91
|
}
|
|
89
|
-
function
|
|
92
|
+
function sublinkSelect(value, kinds) {
|
|
90
93
|
const sub = asNode$1(asNode$1(unwrap(value))?.["SubLink"]);
|
|
91
94
|
if (sub === void 0) return;
|
|
92
95
|
const kind = sub["subLinkType"];
|
|
93
96
|
if (kind === void 0 || !kinds.has(kind)) return;
|
|
94
|
-
return selectFromTable(sub["subselect"]);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if (
|
|
105
|
-
|
|
97
|
+
return selectFromTable(sub["subselect"]) === void 0 ? void 0 : sub["subselect"];
|
|
98
|
+
}
|
|
99
|
+
const EXISTS = /* @__PURE__ */ new Set(["EXISTS_SUBLINK", 0]);
|
|
100
|
+
const IN_OR_ANY = /* @__PURE__ */ new Set([
|
|
101
|
+
"ANY_SUBLINK",
|
|
102
|
+
"IN_SUBLINK",
|
|
103
|
+
2
|
|
104
|
+
]);
|
|
105
|
+
function subquery(select, field) {
|
|
106
|
+
const table = selectFromTable(select);
|
|
107
|
+
if (table === void 0) return;
|
|
108
|
+
return field === void 0 ? {
|
|
109
|
+
select,
|
|
110
|
+
table
|
|
111
|
+
} : {
|
|
112
|
+
select,
|
|
113
|
+
table,
|
|
114
|
+
field
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function membershipSubquery(value) {
|
|
118
|
+
const node = asNode$1(unwrap(value));
|
|
119
|
+
const exists = sublinkSelect(value, EXISTS);
|
|
120
|
+
if (exists !== void 0) return subquery(exists, void 0);
|
|
121
|
+
const sub = asNode$1(node?.["SubLink"]);
|
|
122
|
+
const anyDirect = sublinkSelect(value, IN_OR_ANY);
|
|
123
|
+
if (anyDirect !== void 0) return subquery(anyDirect, columnName(sub?.["testexpr"]));
|
|
124
|
+
const expr = asNode$1(node?.["A_Expr"]);
|
|
106
125
|
if (expr === void 0) return;
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
126
|
+
const right = unwrap(expr["rexpr"]);
|
|
127
|
+
const existsRight = sublinkSelect(right, EXISTS);
|
|
128
|
+
if (existsRight !== void 0) return subquery(existsRight, void 0);
|
|
129
|
+
const anyRight = sublinkSelect(right, IN_OR_ANY);
|
|
130
|
+
if (anyRight !== void 0) return subquery(anyRight, columnName(expr["lexpr"]));
|
|
131
|
+
if (Array.isArray(expr["rexpr"]) && expr["rexpr"][0] !== void 0) return subquery(expr["rexpr"][0], columnName(expr["lexpr"]));
|
|
132
|
+
}
|
|
133
|
+
/** The `where` clause of a `select` node. */
|
|
134
|
+
function selectWhere(selectNode) {
|
|
135
|
+
return asNode$1(asNode$1(selectNode)?.["SelectStmt"])?.["whereClause"];
|
|
116
136
|
}
|
|
117
137
|
function operatorName(value) {
|
|
118
138
|
const names = asNode$1(asNode$1(unwrap(value))?.["A_Expr"])?.["name"];
|
|
@@ -158,6 +178,145 @@ async function fingerprintSql(sql) {
|
|
|
158
178
|
return createHash("sha256").update(sql.replaceAll(/\s+/g, " ").trim().toLowerCase()).digest("hex").slice(0, 16);
|
|
159
179
|
}
|
|
160
180
|
}
|
|
181
|
+
function nodeStmt(first) {
|
|
182
|
+
const raw = asNode$1(first?.["RawStmt"]);
|
|
183
|
+
if (raw !== void 0) return raw["stmt"];
|
|
184
|
+
return first?.["stmt"];
|
|
185
|
+
}
|
|
186
|
+
function jwtClaim(value) {
|
|
187
|
+
const node = asNode$1(unwrap(value));
|
|
188
|
+
const expr = asNode$1(node?.["A_Expr"]);
|
|
189
|
+
if (expr === void 0) return;
|
|
190
|
+
const name = operatorName(node);
|
|
191
|
+
if (name !== "->>" && name !== "->" || !isJwtCall(expr["lexpr"])) return;
|
|
192
|
+
const claim = constValue(expr["rexpr"]);
|
|
193
|
+
return typeof claim === "string" ? claim : void 0;
|
|
194
|
+
}
|
|
195
|
+
/** `auth.jwt()` / `auth.session()`, bare or as a scalar `(select …)`; a column's `->>` is row data, not a claim. */
|
|
196
|
+
function isJwtCall(value) {
|
|
197
|
+
const inner = scalarSubselect(value);
|
|
198
|
+
if (inner !== void 0) return isJwtCall(inner);
|
|
199
|
+
const name = funcName(value);
|
|
200
|
+
return name === "auth.jwt" || name === "auth.session";
|
|
201
|
+
}
|
|
202
|
+
//#endregion
|
|
203
|
+
//#region src/cli/rls/import-membership.ts
|
|
204
|
+
/**
|
|
205
|
+
* What the `where` of a membership subquery on `table` says, or `undefined`
|
|
206
|
+
* when any part of it cannot be read as one. A subquery imports as
|
|
207
|
+
* `memberOf` only when it binds the membership row to the signed-in user
|
|
208
|
+
* and to the policy row, and filters roles with string literals at most:
|
|
209
|
+
* a predicate left unread would widen the imported condition.
|
|
210
|
+
*/
|
|
211
|
+
function membershipRoles(subquery, table) {
|
|
212
|
+
const where = selectWhere(subquery.select);
|
|
213
|
+
if (where === void 0) return;
|
|
214
|
+
const scopeColumns = new Set([
|
|
215
|
+
...Object.values(table.columns ?? {}),
|
|
216
|
+
table.tenant,
|
|
217
|
+
table.team,
|
|
218
|
+
table.id
|
|
219
|
+
].filter((column) => column !== void 0));
|
|
220
|
+
if (subquery.field !== void 0 && !scopeColumns.has(selectTarget(subquery.select) ?? "")) return;
|
|
221
|
+
const roleColumn = typeof table.role === "string" ? table.role : void 0;
|
|
222
|
+
const roles = [];
|
|
223
|
+
let user = false;
|
|
224
|
+
let field = subquery.field;
|
|
225
|
+
for (const conjunct of conjuncts(where)) {
|
|
226
|
+
const read = readConjunct(conjunct, table, roleColumn, scopeColumns);
|
|
227
|
+
if (read === void 0) return;
|
|
228
|
+
if (read.kind === "user") user = true;
|
|
229
|
+
else if (read.kind === "row") {
|
|
230
|
+
if (field !== void 0 && field !== read.field) return;
|
|
231
|
+
field = read.field;
|
|
232
|
+
} else if (read.kind === "roles") roles.push(...read.roles);
|
|
233
|
+
}
|
|
234
|
+
return user && field !== void 0 ? {
|
|
235
|
+
field,
|
|
236
|
+
roles: [...new Set(roles)]
|
|
237
|
+
} : void 0;
|
|
238
|
+
}
|
|
239
|
+
/** The column a `select <column> from …` returns. */
|
|
240
|
+
function selectTarget(select) {
|
|
241
|
+
const targets = asNode$1(asNode$1(select)?.["SelectStmt"])?.["targetList"];
|
|
242
|
+
if (!Array.isArray(targets) || targets.length !== 1) return;
|
|
243
|
+
return columnName(asNode$1(asNode$1(targets[0])?.["ResTarget"])?.["val"]);
|
|
244
|
+
}
|
|
245
|
+
function conjuncts(value) {
|
|
246
|
+
if (boolOp(value) !== "and") return [value];
|
|
247
|
+
const args = asNode$1(asNode$1(unwrap(value))?.["BoolExpr"])?.["args"];
|
|
248
|
+
return Array.isArray(args) ? args.flatMap((arg) => conjuncts(arg)) : [];
|
|
249
|
+
}
|
|
250
|
+
function readConjunct(value, table, roleColumn, scopeColumns) {
|
|
251
|
+
const node = asNode$1(unwrap(value));
|
|
252
|
+
const nullTest = asNode$1(node?.["NullTest"]);
|
|
253
|
+
if (nullTest !== void 0) {
|
|
254
|
+
const column = columnName(nullTest["arg"]);
|
|
255
|
+
return (nullTest["nulltesttype"] === "IS_NULL" || nullTest["nulltesttype"] === 0 || nullTest["nulltesttype"] === void 0) && column !== void 0 && (column === table.disabledAt || column === table.expiresAt) ? { kind: "active" } : void 0;
|
|
256
|
+
}
|
|
257
|
+
const expr = asNode$1(node?.["A_Expr"]);
|
|
258
|
+
if (expr === void 0 || operatorName(node) !== "=") return;
|
|
259
|
+
const kind = expr["kind"];
|
|
260
|
+
const left = columnName(expr["lexpr"]);
|
|
261
|
+
if (kind === "AEXPR_OP_ANY" || kind === 2) {
|
|
262
|
+
const elements = asNode$1(asNode$1(unwrap(expr["rexpr"]))?.["A_ArrayExpr"])?.["elements"];
|
|
263
|
+
if (left === void 0 || left !== roleColumn || !Array.isArray(elements) || elements.length === 0) return;
|
|
264
|
+
const values = elements.map((item) => constValue(item));
|
|
265
|
+
return values.every((item) => typeof item === "string") ? {
|
|
266
|
+
kind: "roles",
|
|
267
|
+
roles: values
|
|
268
|
+
} : void 0;
|
|
269
|
+
}
|
|
270
|
+
if (kind === "AEXPR_IN" || kind === 7) {
|
|
271
|
+
const raw = expr["rexpr"];
|
|
272
|
+
const items = asNode$1(raw)?.["List"];
|
|
273
|
+
const list = Array.isArray(raw) ? raw : asNode$1(items)?.["items"];
|
|
274
|
+
if (left === void 0 || left !== roleColumn || !Array.isArray(list) || list.length === 0) return;
|
|
275
|
+
const values = list.map((item) => constValue(item));
|
|
276
|
+
return values.every((item) => typeof item === "string") ? {
|
|
277
|
+
kind: "roles",
|
|
278
|
+
roles: values
|
|
279
|
+
} : void 0;
|
|
280
|
+
}
|
|
281
|
+
const right = columnName(expr["rexpr"]);
|
|
282
|
+
for (const [column, other, otherColumn] of [[
|
|
283
|
+
left,
|
|
284
|
+
expr["rexpr"],
|
|
285
|
+
right
|
|
286
|
+
], [
|
|
287
|
+
right,
|
|
288
|
+
expr["lexpr"],
|
|
289
|
+
left
|
|
290
|
+
]]) {
|
|
291
|
+
if (column === void 0) continue;
|
|
292
|
+
if (column === table.user && (isAuthUid(other) || isCurrentSettingUserId(other))) return { kind: "user" };
|
|
293
|
+
if (column === roleColumn) {
|
|
294
|
+
const role = constValue(other);
|
|
295
|
+
return typeof role === "string" ? {
|
|
296
|
+
kind: "roles",
|
|
297
|
+
roles: [role]
|
|
298
|
+
} : void 0;
|
|
299
|
+
}
|
|
300
|
+
if (scopeColumns.has(column) && otherColumn !== void 0) return {
|
|
301
|
+
kind: "row",
|
|
302
|
+
field: otherColumn
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* `condition` with every `memberOf` role read through `rls.roleValues`, so a
|
|
308
|
+
* legacy role value imports as the PermDock role it stands for.
|
|
309
|
+
*/
|
|
310
|
+
function mapRoleValues(condition, roleValues) {
|
|
311
|
+
if (roleValues === void 0 || condition === null) return condition;
|
|
312
|
+
if (Array.isArray(condition)) return condition.map((item) => mapRoleValues(item, roleValues));
|
|
313
|
+
if (typeof condition !== "object") return condition;
|
|
314
|
+
const mapped = Object.fromEntries(Object.entries(condition).map(([key, value]) => [key, mapRoleValues(value, roleValues)]));
|
|
315
|
+
if (mapped["op"] === "memberOf" && Array.isArray(mapped["roles"])) mapped["roles"] = mapped["roles"].map((role) => typeof role === "string" && Object.hasOwn(roleValues, role) ? roleValues[role] : role);
|
|
316
|
+
return mapped;
|
|
317
|
+
}
|
|
318
|
+
//#endregion
|
|
319
|
+
//#region src/cli/rls/import-ast.ts
|
|
161
320
|
async function conditionFromAst(sql, memberships, functions, unmapped, joins = [], seeds = []) {
|
|
162
321
|
if (sql === void 0 || sql.trim() === "" || sql.trim() === "true") return {
|
|
163
322
|
op: "eq",
|
|
@@ -338,58 +497,6 @@ async function helperGrants(sql, memberships, functions, seeds) {
|
|
|
338
497
|
}
|
|
339
498
|
return grants;
|
|
340
499
|
}
|
|
341
|
-
const SEED_COLUMNS = [
|
|
342
|
-
"role",
|
|
343
|
-
"permission",
|
|
344
|
-
"grant_key",
|
|
345
|
-
"scope",
|
|
346
|
-
"effect"
|
|
347
|
-
];
|
|
348
|
-
function asScope(value) {
|
|
349
|
-
return typeof value === "string" && /^[a-z][a-z0-9_]*$/u.test(value) ? value : void 0;
|
|
350
|
-
}
|
|
351
|
-
function seedFromRow(row) {
|
|
352
|
-
const scope = asScope(row["scope"]);
|
|
353
|
-
if (typeof row["role"] !== "string" || typeof row["permission"] !== "string" || typeof row["grant_key"] !== "string" || scope === void 0) return;
|
|
354
|
-
return {
|
|
355
|
-
role: row["role"],
|
|
356
|
-
permission: row["permission"],
|
|
357
|
-
grantKey: row["grant_key"],
|
|
358
|
-
scope,
|
|
359
|
-
effect: row["effect"] === "deny" ? "deny" : "allow"
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
/** `role_permissions` rows from the `insert ... values` statements of a SQL dump. */
|
|
363
|
-
async function seedsFromSql(sql) {
|
|
364
|
-
let parsed;
|
|
365
|
-
try {
|
|
366
|
-
parsed = await parse(sql);
|
|
367
|
-
} catch {
|
|
368
|
-
return [];
|
|
369
|
-
}
|
|
370
|
-
const seeds = [];
|
|
371
|
-
for (const item of asStmts(parsed)) {
|
|
372
|
-
const insert = asNode$1(asNode$1(nodeStmt(asNode$1(item)))?.["InsertStmt"]);
|
|
373
|
-
if (asNode$1(insert?.["relation"])?.["relname"] !== "role_permissions") continue;
|
|
374
|
-
const cols = Array.isArray(insert?.["cols"]) ? insert["cols"].map((col) => asNode$1(asNode$1(col)?.["ResTarget"])?.["name"]) : [];
|
|
375
|
-
const values = asNode$1(asNode$1(insert?.["selectStmt"])?.["SelectStmt"])?.["valuesLists"];
|
|
376
|
-
if (!Array.isArray(values)) continue;
|
|
377
|
-
for (const list of values) {
|
|
378
|
-
const items = asNode$1(asNode$1(list)?.["List"])?.["items"];
|
|
379
|
-
if (!Array.isArray(items)) continue;
|
|
380
|
-
const row = {};
|
|
381
|
-
for (const [index, col] of cols.entries()) if (typeof col === "string" && SEED_COLUMNS.includes(col)) row[col] = constValue(items[index]);
|
|
382
|
-
const seed = seedFromRow(row);
|
|
383
|
-
if (seed !== void 0) seeds.push(seed);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
return seeds;
|
|
387
|
-
}
|
|
388
|
-
function nodeStmt(first) {
|
|
389
|
-
const raw = asNode$1(first?.["RawStmt"]);
|
|
390
|
-
if (raw !== void 0) return raw["stmt"];
|
|
391
|
-
return first?.["stmt"];
|
|
392
|
-
}
|
|
393
500
|
function mapNode(value, ctx) {
|
|
394
501
|
if (value === void 0) return;
|
|
395
502
|
const node = asNode$1(unwrap(value));
|
|
@@ -433,29 +540,25 @@ function mapNode(value, ctx) {
|
|
|
433
540
|
conditions: children
|
|
434
541
|
};
|
|
435
542
|
}
|
|
436
|
-
const
|
|
437
|
-
if (
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
543
|
+
const subquery = membershipSubquery(node);
|
|
544
|
+
if (subquery !== void 0) {
|
|
545
|
+
const { table } = subquery;
|
|
546
|
+
const mappedScopes = Object.entries(memberships?.scopes ?? {});
|
|
547
|
+
if (memberships?.tenant !== void 0) mappedScopes.push(["tenant", memberships.tenant]);
|
|
548
|
+
if (memberships?.team !== void 0) mappedScopes.push(["team", memberships.team]);
|
|
549
|
+
const matches = mappedScopes.filter(([, mapped]) => mapped.table === table);
|
|
550
|
+
if (matches.length > 0) {
|
|
551
|
+
for (const [scope, mapped] of matches) {
|
|
552
|
+
const read = membershipRoles(subquery, mapped);
|
|
553
|
+
if (read !== void 0) return {
|
|
554
|
+
op: "memberOf",
|
|
555
|
+
scope,
|
|
556
|
+
field: read.field,
|
|
557
|
+
roles: read.roles
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
return;
|
|
446
561
|
}
|
|
447
|
-
if (memberships?.tenant?.table === table) return {
|
|
448
|
-
op: "memberOf",
|
|
449
|
-
scope: "tenant",
|
|
450
|
-
field: memberships.tenant.tenant ?? "tenant_id",
|
|
451
|
-
roles: []
|
|
452
|
-
};
|
|
453
|
-
if (memberships?.team?.table === table) return {
|
|
454
|
-
op: "memberOf",
|
|
455
|
-
scope: "team",
|
|
456
|
-
field: memberships.team.team ?? "team_id",
|
|
457
|
-
roles: []
|
|
458
|
-
};
|
|
459
562
|
joins.push(table);
|
|
460
563
|
return;
|
|
461
564
|
}
|
|
@@ -505,26 +608,59 @@ function mapNode(value, ctx) {
|
|
|
505
608
|
};
|
|
506
609
|
}
|
|
507
610
|
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
611
|
+
//#endregion
|
|
612
|
+
//#region src/cli/rls/import-seeds.ts
|
|
613
|
+
const SEED_COLUMNS = [
|
|
614
|
+
"role",
|
|
615
|
+
"permission",
|
|
616
|
+
"grant_key",
|
|
617
|
+
"scope",
|
|
618
|
+
"effect"
|
|
619
|
+
];
|
|
620
|
+
function asScope(value) {
|
|
621
|
+
return typeof value === "string" && /^[a-z][a-z0-9_]*$/u.test(value) ? value : void 0;
|
|
516
622
|
}
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
623
|
+
function seedFromRow(row) {
|
|
624
|
+
const scope = asScope(row["scope"]);
|
|
625
|
+
if (typeof row["role"] !== "string" || typeof row["permission"] !== "string" || typeof row["grant_key"] !== "string" || scope === void 0) return;
|
|
626
|
+
return {
|
|
627
|
+
role: row["role"],
|
|
628
|
+
permission: row["permission"],
|
|
629
|
+
grantKey: row["grant_key"],
|
|
630
|
+
scope,
|
|
631
|
+
effect: row["effect"] === "deny" ? "deny" : "allow"
|
|
632
|
+
};
|
|
633
|
+
}
|
|
634
|
+
/** `role_permissions` rows from the `insert ... values` statements of a SQL dump. */
|
|
635
|
+
async function seedsFromSql(sql) {
|
|
636
|
+
let parsed;
|
|
637
|
+
try {
|
|
638
|
+
parsed = await parse(sql);
|
|
639
|
+
} catch {
|
|
640
|
+
return [];
|
|
641
|
+
}
|
|
642
|
+
const seeds = [];
|
|
643
|
+
for (const item of asStmts(parsed)) {
|
|
644
|
+
const insert = asNode$1(asNode$1(nodeStmt(asNode$1(item)))?.["InsertStmt"]);
|
|
645
|
+
if (asNode$1(insert?.["relation"])?.["relname"] !== "role_permissions") continue;
|
|
646
|
+
const cols = Array.isArray(insert?.["cols"]) ? insert["cols"].map((col) => asNode$1(asNode$1(col)?.["ResTarget"])?.["name"]) : [];
|
|
647
|
+
const values = asNode$1(asNode$1(insert?.["selectStmt"])?.["SelectStmt"])?.["valuesLists"];
|
|
648
|
+
if (!Array.isArray(values)) continue;
|
|
649
|
+
for (const list of values) {
|
|
650
|
+
const items = asNode$1(asNode$1(list)?.["List"])?.["items"];
|
|
651
|
+
if (!Array.isArray(items)) continue;
|
|
652
|
+
const row = {};
|
|
653
|
+
for (const [index, col] of cols.entries()) if (typeof col === "string" && SEED_COLUMNS.includes(col)) row[col] = constValue(items[index]);
|
|
654
|
+
const seed = seedFromRow(row);
|
|
655
|
+
if (seed !== void 0) seeds.push(seed);
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
return seeds;
|
|
523
659
|
}
|
|
524
660
|
//#endregion
|
|
525
|
-
//#region src/cli/rls
|
|
661
|
+
//#region src/cli/rls/import-views.ts
|
|
526
662
|
function asNode(value) {
|
|
527
|
-
return
|
|
663
|
+
return isRecord(value) ? value : void 0;
|
|
528
664
|
}
|
|
529
665
|
function list(value) {
|
|
530
666
|
return Array.isArray(value) ? value : [];
|
|
@@ -708,7 +844,7 @@ async function viewsSqlFromDb(query) {
|
|
|
708
844
|
}).join("\n");
|
|
709
845
|
}
|
|
710
846
|
//#endregion
|
|
711
|
-
//#region src/cli/rls
|
|
847
|
+
//#region src/cli/rls/import.ts
|
|
712
848
|
const POLICY_RE = /create\s+policy\s+"?([A-Za-z0-9_]+)"?\s+on\s+"?([A-Za-z0-9_]+)"?([\s\S]*?);/gi;
|
|
713
849
|
function extractParenClause(sql, keyword) {
|
|
714
850
|
const match = new RegExp(`\\b${keyword}\\s*\\(`, "i").exec(sql);
|
|
@@ -795,7 +931,7 @@ function emitGenerated(catalog, fieldViews, schema) {
|
|
|
795
931
|
});
|
|
796
932
|
}
|
|
797
933
|
function assertNoServiceRole(sql) {
|
|
798
|
-
if (/\bto\s+service_role\b|\bfrom\s+service_role\b/i.test(sql)) throw
|
|
934
|
+
if (/\bto\s+service_role\b|\bfrom\s+service_role\b/i.test(sql)) throw configError("PermDock CLI: imported SQL must never target service_role");
|
|
799
935
|
}
|
|
800
936
|
async function seedsFromDb(query) {
|
|
801
937
|
const schema = (await query(`select table_schema from information_schema.tables where table_name = 'role_permissions' order by table_schema = 'permdock' desc, table_schema = 'public' desc, table_schema limit 1`)).rows[0]?.["table_schema"];
|
|
@@ -876,7 +1012,7 @@ async function runRlsImport(input) {
|
|
|
876
1012
|
policies = splitPolicies(await canonicalDump(sql) ?? sql);
|
|
877
1013
|
if (policies.length === 0) policies = splitPolicies(sql);
|
|
878
1014
|
} else if (input.db !== void 0) try {
|
|
879
|
-
const fromDb = await policiesFromDb(input.db, input.connect ?? (
|
|
1015
|
+
const fromDb = await policiesFromDb(input.db, input.connect ?? pgConnector("permdock rls import --db-url-stdin", input.cwd));
|
|
880
1016
|
policies = fromDb.policies;
|
|
881
1017
|
bodies = fromDb.bodies;
|
|
882
1018
|
seeds = fromDb.seeds;
|
|
@@ -886,16 +1022,24 @@ async function runRlsImport(input) {
|
|
|
886
1022
|
}
|
|
887
1023
|
else return {
|
|
888
1024
|
code: 2,
|
|
889
|
-
output: "PermDock CLI: rls import needs --sql <file> or --db
|
|
1025
|
+
output: "PermDock CLI: rls import needs --sql <file> or a database: --db-url-stdin, DATABASE_URL or SUPABASE_DB_URL"
|
|
890
1026
|
};
|
|
891
1027
|
const memberships = parseMembershipsFlag(input.memberships) ?? input.config.rls?.memberships;
|
|
1028
|
+
const roleValues = input.config.rls?.roleValues;
|
|
1029
|
+
if (roleValues !== void 0) seeds = seeds.map((row) => {
|
|
1030
|
+
const mapped = Object.hasOwn(roleValues, row.role) ? roleValues[row.role] : void 0;
|
|
1031
|
+
return mapped === void 0 ? row : {
|
|
1032
|
+
...row,
|
|
1033
|
+
role: mapped
|
|
1034
|
+
};
|
|
1035
|
+
});
|
|
892
1036
|
const functions = input.config.rls?.functions;
|
|
893
1037
|
const unmapped = [];
|
|
894
1038
|
const joins = [];
|
|
895
1039
|
const catalog = [];
|
|
896
1040
|
for (const item of policies) {
|
|
897
1041
|
const sourceSql = item.using ?? item.check ?? "true";
|
|
898
|
-
const condition = await conditionFromAst(item.using ?? item.check, memberships, functions, unmapped, joins, seeds);
|
|
1042
|
+
const condition = mapRoleValues(await conditionFromAst(item.using ?? item.check, memberships, functions, unmapped, joins, seeds), input.config.rls?.roleValues);
|
|
899
1043
|
const grants = await helperGrants(item.using ?? item.check, memberships, functions, seeds);
|
|
900
1044
|
catalog.push({
|
|
901
1045
|
table: item.table,
|
|
@@ -911,8 +1055,7 @@ async function runRlsImport(input) {
|
|
|
911
1055
|
const fieldViews = viewsSql === "" ? [] : await fieldViewsFromSql(viewsSql, memberships, functions, seeds);
|
|
912
1056
|
const outRel = input.out ?? "src/permissions.generated.ts";
|
|
913
1057
|
const outPath = resolve(input.cwd, outRel);
|
|
914
|
-
|
|
915
|
-
writeFileSync(outPath, emitGenerated(catalog, fieldViews, input.schema));
|
|
1058
|
+
writeFileEnsuringDir(outPath, emitGenerated(catalog, fieldViews, input.schema));
|
|
916
1059
|
const hints = [
|
|
917
1060
|
...uniqueHints([...new Set(unmapped)], bodies),
|
|
918
1061
|
...[...new Set(joins)].map(membershipHint),
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { T as Policy, Zt as DeliveryChannel, j as PolicyVocabulary, q as DecisionSink, rr as Principal } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "./vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { t as Operation } from "./operations-CxybZErY.js";
|
|
4
|
+
import { p as PrincipalSource, r as PermDock } from "./permdock-D7eeLJER.js";
|
|
5
|
+
import { _ as TransportOptions, a as DeliveryReport, c as DeliveryTransport, g as TransportMessages, i as DeliveryMessages, l as DeliveryTransports, m as Recipient, o as DeliveryResult, r as DeliverOptions, s as DeliveryTarget, y as WebhookTransport } from "./types-DX0LaKTb.js";
|
|
6
|
+
import { l as WebhookSigner } from "./standard-webhooks-6lg8v_is.js";
|
|
7
|
+
//#region src/delivery/audience.d.ts
|
|
8
|
+
type Audience = {
|
|
9
|
+
/** Principal ids `decideFor` grants, in discovery or candidate order, each once. */
|
|
10
|
+
readonly principals: readonly string[];
|
|
11
|
+
/** `false` when `whoCan` could not list every holder: someone granted may be missing. */
|
|
12
|
+
readonly complete: boolean;
|
|
13
|
+
};
|
|
14
|
+
type AudienceOptions = {
|
|
15
|
+
/** Check only these principals instead of listing holders with `whoCan`. */
|
|
16
|
+
readonly candidates?: readonly string[];
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Who may receive a delivery about `row`: the holders `whoCan` lists (or
|
|
20
|
+
* `candidates`), kept only where `decideFor` grants `permission` in the
|
|
21
|
+
* sender's active tenant. A collection permission has no holders to list,
|
|
22
|
+
* so it needs `candidates`; without them it is empty and incomplete.
|
|
23
|
+
*/
|
|
24
|
+
declare function audience(permdock: PermDock, permission: Permission, row: unknown, options?: AudienceOptions): Promise<Audience>;
|
|
25
|
+
/** One event a subscriber may receive: the permission its row needs. */
|
|
26
|
+
type SubscriberEvent = {
|
|
27
|
+
readonly permission: Permission;
|
|
28
|
+
readonly row?: unknown;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* The subscribers whose principal `decideFor` grants the event's
|
|
32
|
+
* permission on its row, in their order: the per-event filter for webhook
|
|
33
|
+
* endpoints and realtime channels. A subscriber without a string
|
|
34
|
+
* `principal` is dropped.
|
|
35
|
+
*/
|
|
36
|
+
declare function subscribersFor<S extends {
|
|
37
|
+
readonly principal: string;
|
|
38
|
+
}>(permdock: PermDock, event: SubscriberEvent, subscribers: readonly S[]): Promise<S[]>;
|
|
39
|
+
//#endregion
|
|
40
|
+
//#region src/delivery/memory-transport.d.ts
|
|
41
|
+
type MemoryDelivery<C extends DeliveryChannel> = {
|
|
42
|
+
readonly target: DeliveryTarget<C>;
|
|
43
|
+
readonly message: TransportMessages[C];
|
|
44
|
+
readonly options: TransportOptions;
|
|
45
|
+
};
|
|
46
|
+
type MemoryDeliveryTransport<C extends DeliveryChannel> = DeliveryTransport<C> & {
|
|
47
|
+
/** Every delivery `respond` answered `sent` for, oldest first. */
|
|
48
|
+
readonly deliveries: readonly MemoryDelivery<C>[];
|
|
49
|
+
};
|
|
50
|
+
type MemoryDeliveryTransportOptions<C extends DeliveryChannel> = {
|
|
51
|
+
/** The result per delivery; defaults to `sent`. A throw propagates, as from a provider client. */
|
|
52
|
+
readonly respond?: (target: DeliveryTarget<C>, message: TransportMessages[C]) => DeliveryResult;
|
|
53
|
+
};
|
|
54
|
+
/** An in-process transport for tests and examples: it records what it would have sent. */
|
|
55
|
+
declare function memoryDeliveryTransport<C extends DeliveryChannel>(channel: C, options?: MemoryDeliveryTransportOptions<C>): MemoryDeliveryTransport<C>;
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/delivery/router.d.ts
|
|
58
|
+
type DeliveryPermDockOptions = {
|
|
59
|
+
readonly transports: DeliveryTransports;
|
|
60
|
+
/** Resolves `{ address }` recipients through `principalByIdentity`. */
|
|
61
|
+
readonly principals?: PrincipalSource;
|
|
62
|
+
/** Receives one `delivery` event per recipient. A throw is ignored. */
|
|
63
|
+
readonly sink?: DecisionSink;
|
|
64
|
+
/** The `from` of an email whose message sets none. */
|
|
65
|
+
readonly from?: string;
|
|
66
|
+
/** The event `source`; defaults to `permdock`. */
|
|
67
|
+
readonly source?: string;
|
|
68
|
+
};
|
|
69
|
+
type DeliveryPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
70
|
+
/**
|
|
71
|
+
* Checks every recipient against `target`'s permission on `row` with
|
|
72
|
+
* `permdock.decideFor`, routes the granted ones to the transport of their
|
|
73
|
+
* channel, and writes one `delivery` event per recipient. Never rejects:
|
|
74
|
+
* a refused recipient or a transport error is a `failed` event.
|
|
75
|
+
*/
|
|
76
|
+
readonly deliver: (permdock: PermDock<V>, target: Permission | Pick<Operation, "name" | "permission">, row: unknown, recipients: readonly Recipient[], messages: Partial<DeliveryMessages>, options?: DeliverOptions) => Promise<DeliveryReport>;
|
|
77
|
+
};
|
|
78
|
+
/** Routes checked recipients to channel transports and records a delivery event for each. */
|
|
79
|
+
declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(_policy: Policy<TUser, TPrincipal, V>, options: DeliveryPermDockOptions): DeliveryPermDock<V>;
|
|
80
|
+
//#endregion
|
|
81
|
+
//#region src/delivery/target.d.ts
|
|
82
|
+
/**
|
|
83
|
+
* Whether `value` is a target the router checked for `channel`: a non-empty
|
|
84
|
+
* address and a granted decision. A transport calls it first and refuses
|
|
85
|
+
* anything else, so a hand-built recipient never reaches a provider.
|
|
86
|
+
*/
|
|
87
|
+
declare function isDeliveryTarget<C extends DeliveryChannel>(value: unknown, channel: C): value is DeliveryTarget<C>;
|
|
88
|
+
/**
|
|
89
|
+
* An RFC 5322 `addr-spec` in dot-atom form with a DNS domain, at most 254
|
|
90
|
+
* characters (RFC 5321 path limit). Quoted local parts, comments and
|
|
91
|
+
* domain literals are refused.
|
|
92
|
+
*/
|
|
93
|
+
declare function isAddrSpec(value: string): boolean;
|
|
94
|
+
//#endregion
|
|
95
|
+
//#region src/delivery/webhook-transport.d.ts
|
|
96
|
+
type WebhookTransportOptions = {
|
|
97
|
+
/** Defaults to the global `fetch`. */
|
|
98
|
+
readonly fetch?: typeof fetch;
|
|
99
|
+
/** Milliseconds before a request is aborted as `unavailable`. Defaults to 10000. */
|
|
100
|
+
readonly timeout?: number;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Posts each CloudEvent to the target's https endpoint as
|
|
104
|
+
* `application/cloudevents+json`, signed with the Standard Webhooks
|
|
105
|
+
* headers. `webhook-id` is the idempotency key, so a retry repeats it and
|
|
106
|
+
* the receiver drops the duplicate. Redirects are not followed.
|
|
107
|
+
*/
|
|
108
|
+
declare function webhookTransport(signer: WebhookSigner, options?: WebhookTransportOptions): WebhookTransport;
|
|
109
|
+
//#endregion
|
|
110
|
+
export { DeliveryPermDock as a, MemoryDelivery as c, memoryDeliveryTransport as d, Audience as f, subscribersFor as g, audience as h, isDeliveryTarget as i, MemoryDeliveryTransport as l, SubscriberEvent as m, webhookTransport as n, DeliveryPermDockOptions as o, AudienceOptions as p, isAddrSpec as r, createPermDock as s, WebhookTransportOptions as t, MemoryDeliveryTransportOptions as u };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {}
|