permdock 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -35
- package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
- package/dist/a2a/index.d.ts +6 -6
- package/dist/a2a/index.js +14 -17
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-B4R5fnMU.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -35
- package/dist/ai-sdk/index.js +37 -23
- package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.js} +20 -14
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-Dg8XsRaO.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +94 -79
- package/dist/automation-BMZPIVUM.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +9 -8
- package/dist/better-supabase/index.d.ts +357 -30
- package/dist/better-supabase/index.js +936 -194
- package/dist/{bind-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
- package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/{build-instance-DIIV9DbC.js → build-instance-BMnAudHn.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/{catalog-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.js} +45 -23
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +24 -27
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +9 -14
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +19 -5
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +239 -340
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/{compile-CtTP7eur.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/{create-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
- package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-DaXVdDhM.js +286 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/{denied-text-DfRk15uw.d.ts → denied-text-D8jDHgsl.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.js} +245 -50
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +2 -2
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +13 -12
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-OD_4c__H.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-C9YJsv3H.js → evaluations-DZ2CbV5k.js} +145 -34
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +22 -28
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +12 -11
- package/dist/fastify/index.d.ts +25 -22
- package/dist/fastify/index.js +13 -12
- package/dist/fetch-adapter-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-D2lZt4Dd.js} +55 -52
- package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.js} +5 -4
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-C9YmyBIa.js → helpers-DTcZOzhF.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-BZIAYvon.js +315 -0
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
- package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
- package/dist/{import-BFIlhetD.js → import-DMmOG27O.js} +190 -53
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/{index-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
- package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +19 -15
- package/dist/index.js +31 -21
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-plkrsAog.d.ts → instance-options-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +156 -135
- package/dist/{kernel-CB3LrIJM.js → kernel-5JatXyND.js} +52 -24
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +2 -2
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-CtKR3GXL.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
- package/dist/{map-error-BE27PYkE.js → map-error-TCAdw-eW.js} +3 -3
- package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
- package/dist/mcp/index.d.ts +22 -12
- package/dist/mcp/index.js +57 -39
- package/dist/{migrate-BwlB5-Wk.js → migrate-BShP7Vf4.js} +53 -14
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +15 -14
- package/dist/next/index.d.ts +18 -21
- package/dist/next/index.js +13 -11
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +17 -24
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
- package/dist/{openapi-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +20 -15
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +30 -7
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
- package/dist/{permission-keys-B26jeyUv.js → ownership-BatFgAA4.js} +1698 -869
- package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
- package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
- package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
- package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +45 -26
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.d.ts +502 -0
- package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-CCJ6lmxB.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +2 -2
- package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
- package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/{protected-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
- package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
- package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -72
- package/dist/react-native/index.js +24 -22
- package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
- package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-COpmZUfx.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.js} +3 -3
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
- package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
- package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DtaA4JuW.js → saas-FO-Q8oj0.js} +16 -14
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
- package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
- package/dist/server/index.d.ts +12 -143
- package/dist/server/index.js +12 -9
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
- package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +11 -12
- package/dist/solid/index.js +7 -7
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-Dljy06zL.d.ts → sources-BV9j0DeZ.d.ts} +7 -13
- package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
- package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
- package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
- package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
- package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +7 -6
- package/dist/supabase/middleware.js +13 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +4 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +10 -10
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +4 -4
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +23 -287
- package/dist/testing/index.d.ts +311 -38
- package/dist/testing/index.js +3475 -201
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
- package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +16 -14
- package/dist/{types-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
- package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
- package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-CIlTojhq.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/{types-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
- package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
- package/dist/{verify-BztUB3GX.js → verify-DbCL9bnB.js} +645 -50
- package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
- package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-D6lPdb4Z.d.ts} +65 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-zeucB7eF.js → watch-CszoTJMq.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/{wrap-Cr93qqdP.d.ts → wrap-Bd1Tejur.d.ts} +2 -1
- package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
- package/package.json +136 -37
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +123 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +9 -8
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +5 -4
- package/skills/permdock-wire/SKILL.md +17 -11
- package/skills/permdock-wire/references/adapters.md +139 -51
- package/skills/permdock-wire/references/policy-options.md +5 -5
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DZL76lKW.js +0 -240
- package/dist/arazzo-CD8d0WLb.js +0 -54
- package/dist/catalog-6yWAX6Ps.js +0 -2
- package/dist/catalog-WHG4kBq7.js +0 -48
- package/dist/cloud-C7bSDgX4.js +0 -50
- package/dist/cloud-PeBN3IEn.js +0 -118
- package/dist/collect-Bw2Jdq1q.js +0 -2
- package/dist/collect-CQx4hX4N.js +0 -83
- package/dist/commands-Cpip4ULx.js +0 -97
- package/dist/config-DLt6BvV7.js +0 -36
- package/dist/diff-Cnghh_Ip.js +0 -48
- package/dist/doctor-CuVJvhV_.js +0 -53
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-fwfXN01n.js +0 -1016
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-DgM7w96K.d.ts +0 -6
- package/dist/index-Dz7didpC.d.ts +0 -201
- package/dist/load-B_shHrmd.js +0 -2
- package/dist/manifest-BngWKryL.js +0 -770
- package/dist/may-use-BOn_dR_w.js +0 -78
- package/dist/openapi-DcQ1Kg40.js +0 -164
- package/dist/ownership-BgnbOJFT.js +0 -851
- package/dist/permdock-L26udHSk.js +0 -3646
- package/dist/powersync-BFSbSElQ.js +0 -62
- package/dist/powersync-DCDgZgfZ.js +0 -2
- package/dist/rls-55DQTuf5.js +0 -250
- package/dist/run-DMcNW_8T.js +0 -174
- package/dist/server-ZYEHtNHS.js +0 -268
- package/dist/sink-BTtmfPnE.js +0 -141
- package/dist/sink-CPN4zLfs.d.ts +0 -104
- package/dist/skills-Dle4ZoLF.js +0 -56
- package/dist/snapshot-Dc9CHPME.js +0 -1078
- package/dist/src-Bb7no-hS.js +0 -639
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-Dbqr141s.js +0 -83
- package/dist/supabase-hook-BULg7Ut_.js +0 -2
- package/dist/thenable-QSmvt-vZ.js +0 -65
- package/dist/types-C0dee0Qf.d.ts +0 -197
- package/dist/types-DvupZE0w.d.ts +0 -9
- package/dist/usage-4G6t643F.js +0 -42
- package/dist/usage-iFLJ0-rr.js +0 -2
- package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
- package/dist/watch-C8TpsAl4.js +0 -2
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { T as Policy, a as ApprovalRequirement, bn as Grantee, lr as Condition } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
//#region src/core/hosted.d.ts
|
|
3
|
+
/** One grant authored in PermDock Cloud; its grantee is a declared role, plan or relation. */
|
|
4
|
+
type HostedGrant = {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
readonly permission: string;
|
|
7
|
+
readonly effect?: "allow" | "deny";
|
|
8
|
+
readonly to: Grantee | readonly Grantee[];
|
|
9
|
+
readonly where?: Condition;
|
|
10
|
+
readonly check?: Condition;
|
|
11
|
+
readonly approval?: "human" | ApprovalRequirement;
|
|
12
|
+
readonly fields?: readonly string[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* PolicyDocument v1. Signed as a `vnd.permdock.policy+jwt`, the `policy`
|
|
16
|
+
* claim carries every field but `id` and `issuedAt`, which are the token's
|
|
17
|
+
* `jti` and `iat` (`policyDocumentFromClaims`).
|
|
18
|
+
*/
|
|
19
|
+
type PolicyDocument = {
|
|
20
|
+
readonly v: 1;
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly fingerprint: string;
|
|
23
|
+
/** The catalog fingerprint the document was authored against. */
|
|
24
|
+
readonly catalog: string;
|
|
25
|
+
/** RFC 3339. */
|
|
26
|
+
readonly issuedAt: string;
|
|
27
|
+
readonly grants: readonly HostedGrant[];
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The channel for hosted grants. `getPermDock` reads `current()` once;
|
|
31
|
+
* the application calls `refresh()` on its own schedule, never a check.
|
|
32
|
+
*/
|
|
33
|
+
type PolicySource = {
|
|
34
|
+
/** Names the implementation in errors and events. */
|
|
35
|
+
readonly name?: string;
|
|
36
|
+
current(): PolicyDocument | null;
|
|
37
|
+
refresh(): Promise<void>;
|
|
38
|
+
};
|
|
39
|
+
type HostedGrantDropReason = "not-hostable" | "unknown-permission" | "unknown-grantee" | "non-portable" | "weaker-approval" | "invalid";
|
|
40
|
+
/** Reported through `on('error')` when a hosted grant is not merged; never thrown. */
|
|
41
|
+
type HostedGrantDropped = {
|
|
42
|
+
readonly kind: "hosted-grant-dropped";
|
|
43
|
+
readonly document: string;
|
|
44
|
+
readonly grant: string;
|
|
45
|
+
readonly reason: HostedGrantDropReason;
|
|
46
|
+
};
|
|
47
|
+
declare function memoryPolicySource(document?: PolicyDocument | null): PolicySource;
|
|
48
|
+
/** Validates the document envelope; per-grant checks happen at merge time. */
|
|
49
|
+
declare function parsePolicyDocument(json: unknown): PolicyDocument;
|
|
50
|
+
/** The document verified `vnd.permdock.policy+jwt` claims carry: `policy`, with `jti` as `id` and `iat` as `issuedAt`. Throws like `parsePolicyDocument`. */
|
|
51
|
+
declare function policyDocumentFromClaims(claims: Readonly<Record<string, unknown>>): PolicyDocument;
|
|
52
|
+
/** True for the portable subset only: no `opaque`, no `sqlFunction`, no unknown op. */
|
|
53
|
+
declare function isPortableCondition(value: unknown): value is Condition;
|
|
54
|
+
/**
|
|
55
|
+
* The code policy plus the hosted grants that pass every rule. Hosted
|
|
56
|
+
* allows OR with code allows and any deny still wins, so a hosted grant can
|
|
57
|
+
* never override a code deny; one that fails a rule is dropped, not thrown.
|
|
58
|
+
*/
|
|
59
|
+
declare function mergeHostedGrants(policy: Policy, document: PolicyDocument | null): {
|
|
60
|
+
readonly policy: Policy;
|
|
61
|
+
readonly dropped: readonly HostedGrantDropped[];
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Hosted grants as an instance option: `policies: hostedPolicies(source)`.
|
|
65
|
+
* The merge code ships only with an app that imports this function.
|
|
66
|
+
* `source.current()` is read once per instance; a throw keeps the code
|
|
67
|
+
* policy and is reported as an error event.
|
|
68
|
+
*/
|
|
69
|
+
type HostedPolicies = {
|
|
70
|
+
readonly feature: "hosted-policies";
|
|
71
|
+
readonly apply: (policy: Policy) => {
|
|
72
|
+
readonly policy: Policy;
|
|
73
|
+
readonly errors: readonly unknown[];
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
declare function hostedPolicies(source: PolicySource): HostedPolicies;
|
|
77
|
+
//#endregion
|
|
78
|
+
export { PolicyDocument as a, isPortableCondition as c, parsePolicyDocument as d, policyDocumentFromClaims as f, HostedPolicies as i, memoryPolicySource as l, HostedGrantDropReason as n, PolicySource as o, HostedGrantDropped as r, hostedPolicies as s, HostedGrant as t, mergeHostedGrants as u };
|
|
@@ -7,7 +7,6 @@ type NodeRequest = IncomingMessage & {
|
|
|
7
7
|
};
|
|
8
8
|
declare function toRequest(req: NodeRequest, stream?: IncomingMessage | null): Request;
|
|
9
9
|
declare function sendResponse(res: ServerResponse, response: Response): Promise<void>;
|
|
10
|
-
declare const fromResponse: typeof sendResponse;
|
|
11
10
|
declare function isServerResponse(value: unknown): value is ServerResponse;
|
|
12
11
|
//#endregion
|
|
13
|
-
export { toRequest as
|
|
12
|
+
export { toRequest as i, isServerResponse as n, sendResponse as r, NodeRequest as t };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { t as timeoutSignal } from "./timeout-D51niuQP.js";
|
|
2
|
+
import { a as describeError, n as CliError } from "./errors-CWTY6uih.js";
|
|
3
|
+
import { s as cliVersion } from "./version-CEbQ5UeM.js";
|
|
4
|
+
import "./device-BARQ8eYG.js";
|
|
5
|
+
//#region src/cli/core/http.ts
|
|
6
|
+
/** `permdock-cli/<version> node/<version> <platform>`, sent on every request the CLI makes. */
|
|
7
|
+
function userAgent() {
|
|
8
|
+
return `permdock-cli/${cliVersion()} node/${process.versions.node} ${process.platform}`;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Every outbound request: the user agent, a timeout joined to the run's
|
|
12
|
+
* abort signal, and a `network_error` CLI error when nothing answers.
|
|
13
|
+
*/
|
|
14
|
+
async function httpRequest(io, request) {
|
|
15
|
+
const fetchImpl = io.fetch ?? globalThis.fetch.bind(globalThis);
|
|
16
|
+
try {
|
|
17
|
+
return await fetchImpl(request.url, {
|
|
18
|
+
method: request.method ?? "GET",
|
|
19
|
+
headers: {
|
|
20
|
+
"user-agent": userAgent(),
|
|
21
|
+
...request.headers
|
|
22
|
+
},
|
|
23
|
+
...request.body === void 0 ? {} : { body: request.body },
|
|
24
|
+
signal: timeoutSignal(request.timeoutMs ?? 1e4, io.signal)
|
|
25
|
+
});
|
|
26
|
+
} catch (error) {
|
|
27
|
+
throw new CliError("unavailable", `${request.service} unreachable: ${describeError(error)}`, {
|
|
28
|
+
code: "network_error",
|
|
29
|
+
cause: error
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A 401 or 403 as an `auth_required` action: the credential is missing,
|
|
35
|
+
* expired or lacks a scope, and `next` says how to get one.
|
|
36
|
+
*/
|
|
37
|
+
function authFailure(response, message, next) {
|
|
38
|
+
if (response.status !== 401 && response.status !== 403) return;
|
|
39
|
+
return new CliError("action", `${message} (HTTP ${String(response.status)})`, {
|
|
40
|
+
code: "auth_required",
|
|
41
|
+
extensions: { status: response.status },
|
|
42
|
+
next
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
export { httpRequest as n, authFailure as t };
|
|
@@ -65,9 +65,8 @@ async function sendResponse(res, response) {
|
|
|
65
65
|
const body = Buffer.from(await response.arrayBuffer());
|
|
66
66
|
res.end(body);
|
|
67
67
|
}
|
|
68
|
-
const fromResponse = sendResponse;
|
|
69
68
|
function isServerResponse(value) {
|
|
70
69
|
return typeof value === "object" && value !== null && "setHeader" in value && typeof value.setHeader === "function" && "end" in value;
|
|
71
70
|
}
|
|
72
71
|
//#endregion
|
|
73
|
-
export {
|
|
72
|
+
export { sendResponse as n, toRequest as r, isServerResponse as t };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { t as validateOpenapi } from "./schema-Bol6gqXA.js";
|
|
2
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
3
2
|
import { t as byCodePoint } from "./compare-pfyVnBjE.js";
|
|
4
3
|
import { i as readJsonFile } from "./files-D_JIzUrP.js";
|
|
4
|
+
import { t as applyFiles } from "./files-C5ZI27eV.js";
|
|
5
|
+
import { n as httpRequest } from "./http-DXJ37RDA.js";
|
|
5
6
|
import { i as schemaExpression, t as emitPermissionsModule } from "./generate-CNU1pIOo.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
7
|
+
import { t as validateOpenapi } from "./schema-yLuBWWsh.js";
|
|
8
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
9
|
+
import { resolve } from "node:path";
|
|
8
10
|
//#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/browser/dist/nodes/identity.js
|
|
9
11
|
const ALIAS = Symbol.for("yaml.alias");
|
|
10
12
|
const DOC = Symbol.for("yaml.document");
|
|
@@ -5813,15 +5815,15 @@ function readMap(cwd, file) {
|
|
|
5813
5815
|
return map;
|
|
5814
5816
|
}
|
|
5815
5817
|
async function readSource(cwd, doc, io) {
|
|
5816
|
-
if (/^https?:\/\//u.test(doc)) {
|
|
5817
|
-
const
|
|
5818
|
-
|
|
5819
|
-
|
|
5820
|
-
|
|
5821
|
-
|
|
5822
|
-
|
|
5823
|
-
|
|
5824
|
-
}
|
|
5818
|
+
if (/^https?:\/\//u.test(doc)) try {
|
|
5819
|
+
const response = await httpRequest(io, {
|
|
5820
|
+
url: doc,
|
|
5821
|
+
service: doc
|
|
5822
|
+
});
|
|
5823
|
+
if (!response.ok) return `could not fetch ${doc}: HTTP ${response.status}`;
|
|
5824
|
+
return { text: await response.text() };
|
|
5825
|
+
} catch {
|
|
5826
|
+
return `could not fetch ${doc}`;
|
|
5825
5827
|
}
|
|
5826
5828
|
const path = resolve(cwd, doc);
|
|
5827
5829
|
if (!existsSync(path)) return `document not found: ${doc}`;
|
|
@@ -5940,14 +5942,17 @@ async function runOpenapiImport(input) {
|
|
|
5940
5942
|
};
|
|
5941
5943
|
return input.schema === void 0 ? resource : Object.assign(resource, { schema: schemaExpression(input.schema, entry.schema ?? { type: "object" }, resolveRef) });
|
|
5942
5944
|
});
|
|
5943
|
-
|
|
5944
|
-
|
|
5945
|
-
|
|
5946
|
-
|
|
5947
|
-
|
|
5948
|
-
|
|
5949
|
-
|
|
5950
|
-
|
|
5945
|
+
applyFiles(input.cwd, [{
|
|
5946
|
+
path: input.out,
|
|
5947
|
+
text: emitPermissionsModule({
|
|
5948
|
+
generator: "openapi import",
|
|
5949
|
+
schema: input.schema,
|
|
5950
|
+
resources
|
|
5951
|
+
})
|
|
5952
|
+
}, ...input.annotate && source.local !== void 0 ? [{
|
|
5953
|
+
path: source.local,
|
|
5954
|
+
text: annotated(source.text, parsed.yaml, document, permissions)
|
|
5955
|
+
}] : []]);
|
|
5951
5956
|
const leaves = resources.reduce((total, item) => total + Object.keys(item.actions).length + Object.keys(item.collection).length, 0);
|
|
5952
5957
|
return {
|
|
5953
5958
|
code: 0,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import {
|
|
2
|
+
import { i as configError, u as usageResult } from "./errors-CWTY6uih.js";
|
|
3
3
|
import { s as writeFileEnsuringDir } from "./files-D_JIzUrP.js";
|
|
4
|
-
import {
|
|
5
|
-
import { C as parseMembershipsFlag, r as HELPERS } from "./shared-
|
|
6
|
-
import {
|
|
7
|
-
import { t as FIELD_VIEWS } from "./fields-
|
|
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
8
|
import { n as emptySchema, r as isSchemaKind, t as emitPermissionsModule } from "./generate-CNU1pIOo.js";
|
|
9
9
|
import { existsSync, readFileSync } from "node:fs";
|
|
10
10
|
import { resolve } from "node:path";
|
|
@@ -89,33 +89,50 @@ function selectFromTable(selectNode) {
|
|
|
89
89
|
const relname = asNode$1(asNode$1(from[0])?.["RangeVar"])?.["relname"];
|
|
90
90
|
return typeof relname === "string" ? relname : void 0;
|
|
91
91
|
}
|
|
92
|
-
function
|
|
92
|
+
function sublinkSelect(value, kinds) {
|
|
93
93
|
const sub = asNode$1(asNode$1(unwrap(value))?.["SubLink"]);
|
|
94
94
|
if (sub === void 0) return;
|
|
95
95
|
const kind = sub["subLinkType"];
|
|
96
96
|
if (kind === void 0 || !kinds.has(kind)) return;
|
|
97
|
-
return selectFromTable(sub["subselect"]);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if (
|
|
108
|
-
|
|
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"]);
|
|
109
125
|
if (expr === void 0) return;
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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"];
|
|
119
136
|
}
|
|
120
137
|
function operatorName(value) {
|
|
121
138
|
const names = asNode$1(asNode$1(unwrap(value))?.["A_Expr"])?.["name"];
|
|
@@ -183,6 +200,122 @@ function isJwtCall(value) {
|
|
|
183
200
|
return name === "auth.jwt" || name === "auth.session";
|
|
184
201
|
}
|
|
185
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
|
|
186
319
|
//#region src/cli/rls/import-ast.ts
|
|
187
320
|
async function conditionFromAst(sql, memberships, functions, unmapped, joins = [], seeds = []) {
|
|
188
321
|
if (sql === void 0 || sql.trim() === "" || sql.trim() === "true") return {
|
|
@@ -407,29 +540,25 @@ function mapNode(value, ctx) {
|
|
|
407
540
|
conditions: children
|
|
408
541
|
};
|
|
409
542
|
}
|
|
410
|
-
const
|
|
411
|
-
if (
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
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;
|
|
420
561
|
}
|
|
421
|
-
if (memberships?.tenant?.table === table) return {
|
|
422
|
-
op: "memberOf",
|
|
423
|
-
scope: "tenant",
|
|
424
|
-
field: memberships.tenant.tenant ?? "tenant_id",
|
|
425
|
-
roles: []
|
|
426
|
-
};
|
|
427
|
-
if (memberships?.team?.table === table) return {
|
|
428
|
-
op: "memberOf",
|
|
429
|
-
scope: "team",
|
|
430
|
-
field: memberships.team.team ?? "team_id",
|
|
431
|
-
roles: []
|
|
432
|
-
};
|
|
433
562
|
joins.push(table);
|
|
434
563
|
return;
|
|
435
564
|
}
|
|
@@ -802,7 +931,7 @@ function emitGenerated(catalog, fieldViews, schema) {
|
|
|
802
931
|
});
|
|
803
932
|
}
|
|
804
933
|
function assertNoServiceRole(sql) {
|
|
805
|
-
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");
|
|
806
935
|
}
|
|
807
936
|
async function seedsFromDb(query) {
|
|
808
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"];
|
|
@@ -883,7 +1012,7 @@ async function runRlsImport(input) {
|
|
|
883
1012
|
policies = splitPolicies(await canonicalDump(sql) ?? sql);
|
|
884
1013
|
if (policies.length === 0) policies = splitPolicies(sql);
|
|
885
1014
|
} else if (input.db !== void 0) try {
|
|
886
|
-
const fromDb = await policiesFromDb(input.db, input.connect ?? pgConnector("permdock rls import --db"));
|
|
1015
|
+
const fromDb = await policiesFromDb(input.db, input.connect ?? pgConnector("permdock rls import --db-url-stdin", input.cwd));
|
|
887
1016
|
policies = fromDb.policies;
|
|
888
1017
|
bodies = fromDb.bodies;
|
|
889
1018
|
seeds = fromDb.seeds;
|
|
@@ -893,16 +1022,24 @@ async function runRlsImport(input) {
|
|
|
893
1022
|
}
|
|
894
1023
|
else return {
|
|
895
1024
|
code: 2,
|
|
896
|
-
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"
|
|
897
1026
|
};
|
|
898
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
|
+
});
|
|
899
1036
|
const functions = input.config.rls?.functions;
|
|
900
1037
|
const unmapped = [];
|
|
901
1038
|
const joins = [];
|
|
902
1039
|
const catalog = [];
|
|
903
1040
|
for (const item of policies) {
|
|
904
1041
|
const sourceSql = item.using ?? item.check ?? "true";
|
|
905
|
-
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);
|
|
906
1043
|
const grants = await helperGrants(item.using ?? item.check, memberships, functions, seeds);
|
|
907
1044
|
catalog.push({
|
|
908
1045
|
table: item.table,
|
|
@@ -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 {}
|