permdock 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -35
- package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
- package/dist/a2a/index.d.ts +6 -6
- package/dist/a2a/index.js +14 -17
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-B4R5fnMU.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -35
- package/dist/ai-sdk/index.js +37 -23
- package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.js} +20 -14
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-Dg8XsRaO.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +94 -79
- package/dist/automation-BMZPIVUM.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +9 -8
- package/dist/better-supabase/index.d.ts +357 -30
- package/dist/better-supabase/index.js +936 -194
- package/dist/{bind-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
- package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/{build-instance-DIIV9DbC.js → build-instance-BMnAudHn.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/{catalog-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.js} +45 -23
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +24 -27
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +9 -14
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +19 -5
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +239 -340
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/{compile-CtTP7eur.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/{create-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
- package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-DaXVdDhM.js +286 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/{denied-text-DfRk15uw.d.ts → denied-text-D8jDHgsl.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.js} +245 -50
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +2 -2
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +13 -12
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-OD_4c__H.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-C9YJsv3H.js → evaluations-DZ2CbV5k.js} +145 -34
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +22 -28
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +12 -11
- package/dist/fastify/index.d.ts +25 -22
- package/dist/fastify/index.js +13 -12
- package/dist/fetch-adapter-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-D2lZt4Dd.js} +55 -52
- package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.js} +5 -4
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-C9YmyBIa.js → helpers-DTcZOzhF.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-BZIAYvon.js +315 -0
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
- package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
- package/dist/{import-BFIlhetD.js → import-DMmOG27O.js} +190 -53
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/{index-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
- package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +19 -15
- package/dist/index.js +31 -21
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-plkrsAog.d.ts → instance-options-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +156 -135
- package/dist/{kernel-CB3LrIJM.js → kernel-5JatXyND.js} +52 -24
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +2 -2
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-CtKR3GXL.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
- package/dist/{map-error-BE27PYkE.js → map-error-TCAdw-eW.js} +3 -3
- package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
- package/dist/mcp/index.d.ts +22 -12
- package/dist/mcp/index.js +57 -39
- package/dist/{migrate-BwlB5-Wk.js → migrate-BShP7Vf4.js} +53 -14
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +15 -14
- package/dist/next/index.d.ts +18 -21
- package/dist/next/index.js +13 -11
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +17 -24
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
- package/dist/{openapi-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +20 -15
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +30 -7
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
- package/dist/{permission-keys-B26jeyUv.js → ownership-BatFgAA4.js} +1698 -869
- package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
- package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
- package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
- package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +45 -26
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.d.ts +502 -0
- package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-CCJ6lmxB.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +2 -2
- package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
- package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/{protected-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
- package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
- package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -72
- package/dist/react-native/index.js +24 -22
- package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
- package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-COpmZUfx.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.js} +3 -3
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
- package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
- package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DtaA4JuW.js → saas-FO-Q8oj0.js} +16 -14
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
- package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
- package/dist/server/index.d.ts +12 -143
- package/dist/server/index.js +12 -9
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
- package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +11 -12
- package/dist/solid/index.js +7 -7
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-Dljy06zL.d.ts → sources-BV9j0DeZ.d.ts} +7 -13
- package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
- package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
- package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
- package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
- package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +7 -6
- package/dist/supabase/middleware.js +13 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +4 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +10 -10
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +4 -4
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +23 -287
- package/dist/testing/index.d.ts +311 -38
- package/dist/testing/index.js +3475 -201
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
- package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +16 -14
- package/dist/{types-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
- package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
- package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-CIlTojhq.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/{types-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
- package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
- package/dist/{verify-BztUB3GX.js → verify-DbCL9bnB.js} +645 -50
- package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
- package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-D6lPdb4Z.d.ts} +65 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-zeucB7eF.js → watch-CszoTJMq.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/{wrap-Cr93qqdP.d.ts → wrap-Bd1Tejur.d.ts} +2 -1
- package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
- package/package.json +136 -37
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +123 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +9 -8
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +5 -4
- package/skills/permdock-wire/SKILL.md +17 -11
- package/skills/permdock-wire/references/adapters.md +139 -51
- package/skills/permdock-wire/references/policy-options.md +5 -5
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DZL76lKW.js +0 -240
- package/dist/arazzo-CD8d0WLb.js +0 -54
- package/dist/catalog-6yWAX6Ps.js +0 -2
- package/dist/catalog-WHG4kBq7.js +0 -48
- package/dist/cloud-C7bSDgX4.js +0 -50
- package/dist/cloud-PeBN3IEn.js +0 -118
- package/dist/collect-Bw2Jdq1q.js +0 -2
- package/dist/collect-CQx4hX4N.js +0 -83
- package/dist/commands-Cpip4ULx.js +0 -97
- package/dist/config-DLt6BvV7.js +0 -36
- package/dist/diff-Cnghh_Ip.js +0 -48
- package/dist/doctor-CuVJvhV_.js +0 -53
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-fwfXN01n.js +0 -1016
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-DgM7w96K.d.ts +0 -6
- package/dist/index-Dz7didpC.d.ts +0 -201
- package/dist/load-B_shHrmd.js +0 -2
- package/dist/manifest-BngWKryL.js +0 -770
- package/dist/may-use-BOn_dR_w.js +0 -78
- package/dist/openapi-DcQ1Kg40.js +0 -164
- package/dist/ownership-BgnbOJFT.js +0 -851
- package/dist/permdock-L26udHSk.js +0 -3646
- package/dist/powersync-BFSbSElQ.js +0 -62
- package/dist/powersync-DCDgZgfZ.js +0 -2
- package/dist/rls-55DQTuf5.js +0 -250
- package/dist/run-DMcNW_8T.js +0 -174
- package/dist/server-ZYEHtNHS.js +0 -268
- package/dist/sink-BTtmfPnE.js +0 -141
- package/dist/sink-CPN4zLfs.d.ts +0 -104
- package/dist/skills-Dle4ZoLF.js +0 -56
- package/dist/snapshot-Dc9CHPME.js +0 -1078
- package/dist/src-Bb7no-hS.js +0 -639
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-Dbqr141s.js +0 -83
- package/dist/supabase-hook-BULg7Ut_.js +0 -2
- package/dist/thenable-QSmvt-vZ.js +0 -65
- package/dist/types-C0dee0Qf.d.ts +0 -197
- package/dist/types-DvupZE0w.d.ts +0 -9
- package/dist/usage-4G6t643F.js +0 -42
- package/dist/usage-iFLJ0-rr.js +0 -2
- package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
- package/dist/watch-C8TpsAl4.js +0 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { qt as AuthEvent, rr as Principal } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { t as ClaimsMap } from "./claims-map-Ca-QX8C6.js";
|
|
2
3
|
import { t as ClientNames } from "./clients-C7zLFuWT.js";
|
|
3
4
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
5
|
//#region src/supabase/claims.d.ts
|
|
@@ -18,14 +19,14 @@ type SupabaseMembershipClaim = {
|
|
|
18
19
|
readonly roles: readonly string[];
|
|
19
20
|
readonly via?: string;
|
|
20
21
|
/** Seconds since the epoch. */
|
|
21
|
-
readonly
|
|
22
|
-
readonly
|
|
22
|
+
readonly expires_at?: number;
|
|
23
|
+
readonly granted_by?: string;
|
|
23
24
|
readonly reason?: string;
|
|
24
25
|
/** The subgroup a membership source's `group` fills: a fixed name or a column. */
|
|
25
26
|
readonly member?: {
|
|
26
27
|
readonly group: string;
|
|
27
28
|
};
|
|
28
|
-
readonly
|
|
29
|
+
readonly managed_by?: "idp";
|
|
29
30
|
readonly entitlements?: readonly string[];
|
|
30
31
|
/** The instance or an ancestor is suspended: the permission keys the membership still grants. */
|
|
31
32
|
readonly keep?: readonly string[];
|
|
@@ -247,14 +248,17 @@ type SupabaseSessionLike = {
|
|
|
247
248
|
readonly claims?: unknown;
|
|
248
249
|
};
|
|
249
250
|
type SupabaseSubjectOptions = {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
/**
|
|
252
|
+
* Where the token carries roles (default `user_role`), the active tenant
|
|
253
|
+
* (default `tenant_id`), memberships (default `memberships`) and plan names
|
|
254
|
+
* per tenant id (no default; the active tenant's entry becomes
|
|
255
|
+
* `principal.plans`). A name is read at the top level, then in
|
|
256
|
+
* `app_metadata`.
|
|
257
|
+
*/
|
|
258
|
+
readonly claims?: Pick<ClaimsMap, "roles" | "tenant" | "memberships" | "plans">;
|
|
253
259
|
readonly schema?: StandardSchemaV1;
|
|
254
260
|
readonly include?: readonly SupabaseInclude[];
|
|
255
261
|
readonly declared?: readonly string[];
|
|
256
|
-
/** Claim holding plan names per tenant id; the active tenant's entry becomes `principal.plans`. */
|
|
257
|
-
readonly plans?: string;
|
|
258
262
|
/** Names for OAuth client ids: an `oauth-client` actor gets `client` set to the name of its id, which a policy delegation matches with `to: { kind: 'oauth-client', client }`. */
|
|
259
263
|
readonly clients?: ClientNames;
|
|
260
264
|
/** `'deny'` maps a token with `is_anonymous: true` (`signInAnonymously()`) to the anonymous subject, as `rls.anonymousSignIns: 'deny'` does in RLS. */
|
|
@@ -271,8 +275,9 @@ type SupabaseSubjectOptions = {
|
|
|
271
275
|
/**
|
|
272
276
|
* Who acts for the user. `oauth-client`: a third-party app or an agent chain (`client_id`, or an
|
|
273
277
|
* `act` without `kind`). `support`: a support session (`act.kind: "support"` with `session_id`).
|
|
274
|
-
* `impersonation`: an admin acting as the user (`act.kind: "impersonation"`). `
|
|
275
|
-
*
|
|
278
|
+
* `impersonation`: an admin acting as the user (`act.kind: "impersonation"`). `agent`: an agent
|
|
279
|
+
* run better-supabase's `agentClaims` minted (`act.kind: "agent"`), with the `tools` it may call.
|
|
280
|
+
* `chain` is a copy of the token's `act` claim when it has one.
|
|
276
281
|
*/
|
|
277
282
|
type SupabaseActor = {
|
|
278
283
|
readonly id: string;
|
|
@@ -290,6 +295,13 @@ type SupabaseActor = {
|
|
|
290
295
|
readonly kind: "impersonation";
|
|
291
296
|
readonly reason?: string;
|
|
292
297
|
readonly chain: SupabaseActClaim;
|
|
298
|
+
} | {
|
|
299
|
+
readonly id: string;
|
|
300
|
+
readonly kind: "agent";
|
|
301
|
+
readonly tools?: readonly string[];
|
|
302
|
+
/** `act.read_only`, default `false`: a read-only agent never writes. */
|
|
303
|
+
readonly readOnly: boolean;
|
|
304
|
+
readonly chain: SupabaseActClaim;
|
|
293
305
|
};
|
|
294
306
|
/** `actorOf` output: `{ ok: false }` must deny. */
|
|
295
307
|
type SupabaseActorResult = {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Nn as Decision, Rn as ExplainedDecision, T as Policy, ir as Subject, j as PolicyVocabulary, nr as Membership, rr as Principal } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { E as PermissionTree, w as Permission } from "./vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { c as WhereResult, i as PermDockOptions, n as DeriveOptions, o as SimulateOptions, r as PermDock, t as DecideOptions } from "./permdock-D7eeLJER.js";
|
|
3
4
|
//#region src/pdp/types.d.ts
|
|
4
5
|
type RemotePdpAuth = {
|
|
5
6
|
readonly bearer: string | (() => string | Promise<string>);
|
|
@@ -25,7 +26,8 @@ type RemotePdpEndpoints = {
|
|
|
25
26
|
readonly searchResource?: string;
|
|
26
27
|
};
|
|
27
28
|
type RemotePdpCache = {
|
|
28
|
-
|
|
29
|
+
/** Seconds, at most 30. */
|
|
30
|
+
readonly ttl: number;
|
|
29
31
|
};
|
|
30
32
|
type RemotePdpOptions = {
|
|
31
33
|
readonly url: string;
|
|
@@ -84,9 +86,9 @@ type SpiceDbOptions = {
|
|
|
84
86
|
readonly cache?: RemotePdpCache;
|
|
85
87
|
readonly fetch?: typeof fetch;
|
|
86
88
|
};
|
|
87
|
-
type PdpPermDock<V extends PolicyVocabulary = PolicyVocabulary> = Omit<PermDock<V>, "can" | "decide" | "assert" | "explain" | "filter" | "where" | "simulate" | "tenant" | "team" | "derive"> & {
|
|
89
|
+
type PdpPermDock<V extends PolicyVocabulary = PolicyVocabulary> = Omit<PermDock<V>, "can" | "decide" | "decideEach" | "assert" | "explain" | "filter" | "where" | "simulate" | "tenant" | "team" | "derive"> & {
|
|
88
90
|
/** `permdock.derive` with the same providers: the result asks the PDP too. */
|
|
89
|
-
readonly derive: (options: DeriveOptions) =>
|
|
91
|
+
readonly derive: (options: DeriveOptions) => Promise<PdpPermDock<V>>;
|
|
90
92
|
/**
|
|
91
93
|
* For a delegated permission whose provider lists ids, an `in` over them
|
|
92
94
|
* (AND the local condition when local grants exist); otherwise the local
|
|
@@ -95,6 +97,8 @@ type PdpPermDock<V extends PolicyVocabulary = PolicyVocabulary> = Omit<PermDock<
|
|
|
95
97
|
readonly where: (permission: Permission) => Promise<WhereResult>;
|
|
96
98
|
readonly can: (permission: Permission, data?: unknown, options?: DecideOptions) => Promise<boolean>;
|
|
97
99
|
readonly decide: (permission: Permission, data?: unknown, options?: DecideOptions) => Promise<Decision>;
|
|
100
|
+
/** `decide` for each row, in row order, asking the PDP per row. */
|
|
101
|
+
readonly decideEach: (permission: Permission, rows: readonly unknown[], options?: DecideOptions) => Promise<readonly Decision[]>;
|
|
98
102
|
readonly assert: (permission: Permission, data?: unknown, options?: DecideOptions) => Promise<Extract<Decision, {
|
|
99
103
|
readonly outcome: "granted";
|
|
100
104
|
}>>;
|
|
@@ -103,7 +107,6 @@ type PdpPermDock<V extends PolicyVocabulary = PolicyVocabulary> = Omit<PermDock<
|
|
|
103
107
|
readonly filter: <T>(permission: Permission<string, T, "instance">, rows: readonly T[], options?: DecideOptions) => Promise<T[]>;
|
|
104
108
|
readonly simulate: {
|
|
105
109
|
(checks: readonly (readonly [Permission, unknown?])[], options?: SimulateOptions): Promise<readonly Decision[]>;
|
|
106
|
-
(plan: ArazzoSimulateInput): ArazzoPlan;
|
|
107
110
|
(preview: {
|
|
108
111
|
readonly roles?: readonly (string | {
|
|
109
112
|
readonly key: string;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { $t as DeliveryFailureCause, Qt as DeliveryEvent, Zt as DeliveryChannel, tn as EmailCategory, zn as GrantedDecision } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { s as CloudEvent } from "./sink-Bj_lDUDq.js";
|
|
3
|
+
import { t as ApprovalPrompt } from "./approval-prompt-Djo_PyZc.js";
|
|
4
|
+
//#region src/delivery/types.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Who a delivery goes to. `{ principal }` names an app principal and the
|
|
7
|
+
* address the server loaded for it on `channel`. `{ address }` alone is an
|
|
8
|
+
* email or chat identity that resolves through
|
|
9
|
+
* `PrincipalSource.principalByIdentity`; with no principal linked it is
|
|
10
|
+
* refused unless `trusted` is set for an address the server loaded itself,
|
|
11
|
+
* such as a customer's billing email, and then the sender must hold the
|
|
12
|
+
* permission.
|
|
13
|
+
*/
|
|
14
|
+
type Recipient = {
|
|
15
|
+
readonly principal: string;
|
|
16
|
+
readonly channel: DeliveryChannel;
|
|
17
|
+
/** An RFC 5322 `addr-spec`, a chat platform user id, or an https webhook endpoint. */
|
|
18
|
+
readonly address: string;
|
|
19
|
+
/** The chat platform (`slack`, `teams`, …). */
|
|
20
|
+
readonly provider?: string;
|
|
21
|
+
readonly workspace?: string;
|
|
22
|
+
} | {
|
|
23
|
+
readonly principal?: undefined;
|
|
24
|
+
readonly channel: "email" | "chat";
|
|
25
|
+
readonly address: string;
|
|
26
|
+
/** The chat platform; required for a chat address. */
|
|
27
|
+
readonly provider?: string;
|
|
28
|
+
readonly workspace?: string;
|
|
29
|
+
/** `true` only for an address the server loaded itself, never one from a request. */
|
|
30
|
+
readonly trusted?: boolean;
|
|
31
|
+
};
|
|
32
|
+
/** One-click unsubscribe (RFC 8058): an https URL, plus an optional `mailto:` address. */
|
|
33
|
+
type EmailUnsubscribe = {
|
|
34
|
+
readonly url: string;
|
|
35
|
+
readonly mailto?: string;
|
|
36
|
+
};
|
|
37
|
+
type EmailMessage = {
|
|
38
|
+
/** Defaults to the router's `from`. A name-addr (`Acme <billing@acme.test>`) is allowed here. */
|
|
39
|
+
readonly from?: string;
|
|
40
|
+
readonly replyTo?: string;
|
|
41
|
+
readonly subject: string;
|
|
42
|
+
readonly text: string;
|
|
43
|
+
readonly html?: string;
|
|
44
|
+
/** Extra headers. `Auto-Submitted` and the `List-Unsubscribe` pair are the router's. */
|
|
45
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
46
|
+
readonly category: EmailCategory;
|
|
47
|
+
/** Required on `notification`, ignored on every other category. */
|
|
48
|
+
readonly unsubscribe?: EmailUnsubscribe | ((target: DeliveryTarget<"email">) => EmailUnsubscribe);
|
|
49
|
+
};
|
|
50
|
+
/** An email as a transport receives it: `from` set and the standards headers added. */
|
|
51
|
+
type OutgoingEmail = Omit<EmailMessage, "from" | "unsubscribe" | "headers"> & {
|
|
52
|
+
readonly from: string;
|
|
53
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
54
|
+
};
|
|
55
|
+
type ChatMessage = {
|
|
56
|
+
readonly text: string;
|
|
57
|
+
/** Rendered by the transport as its approval card, linking to `url`. */
|
|
58
|
+
readonly approval?: {
|
|
59
|
+
readonly prompt: ApprovalPrompt;
|
|
60
|
+
readonly url: string;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
/** A CloudEvents 1.0 event, posted as `application/cloudevents+json`. */
|
|
64
|
+
type WebhookMessage = {
|
|
65
|
+
readonly event: CloudEvent;
|
|
66
|
+
};
|
|
67
|
+
type DeliveryMessages = {
|
|
68
|
+
readonly email: EmailMessage;
|
|
69
|
+
readonly chat: ChatMessage;
|
|
70
|
+
readonly webhook: WebhookMessage;
|
|
71
|
+
};
|
|
72
|
+
/** What a transport of channel `C` receives. */
|
|
73
|
+
type TransportMessages = {
|
|
74
|
+
readonly email: OutgoingEmail;
|
|
75
|
+
readonly chat: ChatMessage;
|
|
76
|
+
readonly webhook: WebhookMessage;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* A recipient the router checked: the granted decision that let it through
|
|
80
|
+
* and the address in the form the channel compares. A transport refuses a
|
|
81
|
+
* target without a granted `decision` (`isDeliveryTarget`).
|
|
82
|
+
*/
|
|
83
|
+
type DeliveryTarget<C extends DeliveryChannel = DeliveryChannel> = {
|
|
84
|
+
readonly channel: C;
|
|
85
|
+
readonly address: string;
|
|
86
|
+
/** Absent for a trusted address no principal is linked to. */
|
|
87
|
+
readonly principal?: string;
|
|
88
|
+
readonly provider?: string;
|
|
89
|
+
readonly workspace?: string;
|
|
90
|
+
readonly trusted?: true;
|
|
91
|
+
readonly decision: GrantedDecision;
|
|
92
|
+
};
|
|
93
|
+
type TransportOptions = {
|
|
94
|
+
/** Stable for one delivery id and recipient: the provider's `Idempotency-Key` and the `webhook-id`. */
|
|
95
|
+
readonly idempotencyKey: string;
|
|
96
|
+
/** The delivery id every recipient of one `deliver` call shares. */
|
|
97
|
+
readonly delivery: string;
|
|
98
|
+
};
|
|
99
|
+
type DeliveryResult = {
|
|
100
|
+
readonly status: "sent";
|
|
101
|
+
readonly providerId?: string;
|
|
102
|
+
} | {
|
|
103
|
+
readonly status: "failed";
|
|
104
|
+
readonly cause: DeliveryFailureCause;
|
|
105
|
+
/** Whether a retry with the same idempotency key may succeed. */
|
|
106
|
+
readonly retryable: boolean;
|
|
107
|
+
readonly reason?: string;
|
|
108
|
+
};
|
|
109
|
+
/** One delivery as a transport receives it. */
|
|
110
|
+
type TransportItem<C extends DeliveryChannel = DeliveryChannel> = {
|
|
111
|
+
readonly target: DeliveryTarget<C>;
|
|
112
|
+
readonly message: TransportMessages[C];
|
|
113
|
+
readonly options: TransportOptions;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* One channel's sender. `deliver` resolves to a result; a throw or a
|
|
117
|
+
* rejection counts as a retryable `unavailable` failure.
|
|
118
|
+
*/
|
|
119
|
+
type DeliveryTransport<C extends DeliveryChannel = DeliveryChannel> = {
|
|
120
|
+
readonly channel: C;
|
|
121
|
+
/** The provider name delivery events carry (`resend`, `chat-sdk`, `webhook`). */
|
|
122
|
+
readonly name: string;
|
|
123
|
+
deliver(target: DeliveryTarget<C>, message: TransportMessages[C], options: TransportOptions): DeliveryResult | Promise<DeliveryResult>;
|
|
124
|
+
/**
|
|
125
|
+
* Sends several deliveries in one provider call, one result per item in
|
|
126
|
+
* item order. The router uses it for two or more ready recipients.
|
|
127
|
+
*/
|
|
128
|
+
deliverBatch?(items: readonly TransportItem<C>[]): readonly DeliveryResult[] | Promise<readonly DeliveryResult[]>;
|
|
129
|
+
/** The most items one `deliverBatch` call takes. Defaults to 100. */
|
|
130
|
+
readonly batchSize?: number;
|
|
131
|
+
};
|
|
132
|
+
type EmailTransport = DeliveryTransport<"email"> & {
|
|
133
|
+
/** The `from` of an email whose message and router set none. */
|
|
134
|
+
readonly from?: string;
|
|
135
|
+
};
|
|
136
|
+
type ChatTransport = DeliveryTransport<"chat">;
|
|
137
|
+
type WebhookTransport = DeliveryTransport<"webhook">;
|
|
138
|
+
type DeliveryTransports = {
|
|
139
|
+
readonly email?: EmailTransport;
|
|
140
|
+
readonly chat?: ChatTransport;
|
|
141
|
+
readonly webhook?: WebhookTransport;
|
|
142
|
+
};
|
|
143
|
+
type DeliverOptions = {
|
|
144
|
+
/** Keep it across retries so each recipient's idempotency key repeats. Defaults to `dlv_` and a random UUID. */
|
|
145
|
+
readonly id?: string;
|
|
146
|
+
/** The approval request id a prompt is delivered for, on every event. */
|
|
147
|
+
readonly approval?: string;
|
|
148
|
+
};
|
|
149
|
+
type DeliveryReport = {
|
|
150
|
+
readonly id: string;
|
|
151
|
+
/** One event per recipient, in recipient order. */
|
|
152
|
+
readonly events: readonly DeliveryEvent[];
|
|
153
|
+
readonly sent: number;
|
|
154
|
+
readonly failed: number;
|
|
155
|
+
};
|
|
156
|
+
//#endregion
|
|
157
|
+
export { TransportOptions as _, DeliveryReport as a, DeliveryTransport as c, EmailTransport as d, EmailUnsubscribe as f, TransportMessages as g, TransportItem as h, DeliveryMessages as i, DeliveryTransports as l, Recipient as m, ChatTransport as n, DeliveryResult as o, OutgoingEmail as p, DeliverOptions as r, DeliveryTarget as s, ChatMessage as t, EmailMessage as u, WebhookMessage as v, WebhookTransport as y };
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
import { Y as JwtClaims, dt as TokenVerifier, et as MembershipSource, ir as Subject, lt as TokenFailureCause, qn as Actor, qt as AuthEvent, rr as Principal } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { m as ApprovalStore } from "./types-CCpc2Dcv.js";
|
|
3
|
+
import { n as RevocationFeed } from "./revocations-R07lFBnX.js";
|
|
4
|
+
import { t as ClaimsMap } from "./claims-map-Ca-QX8C6.js";
|
|
5
|
+
import { t as ClientNames } from "./clients-C7zLFuWT.js";
|
|
6
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
7
|
+
//#region src/jwt/types.d.ts
|
|
8
|
+
type JwtAlgorithm = "ES256" | "PS256" | "Ed25519" | "RS256" | "HS256" | "EdDSA";
|
|
9
|
+
type JwtProfile = "fapi2";
|
|
10
|
+
type JsonWebKeySet = {
|
|
11
|
+
readonly keys: readonly Record<string, unknown>[];
|
|
12
|
+
};
|
|
13
|
+
type JwtJwks = URL | string | JsonWebKeySet | {
|
|
14
|
+
readonly secret: Uint8Array | string;
|
|
15
|
+
};
|
|
16
|
+
type DiscoveryInput = string | {
|
|
17
|
+
readonly issuer: string;
|
|
18
|
+
readonly metadata?: {
|
|
19
|
+
readonly issuer?: string;
|
|
20
|
+
readonly jwks_uri?: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
type JwksCacheOptions = {
|
|
24
|
+
readonly minTtl?: number;
|
|
25
|
+
readonly maxTtl?: number;
|
|
26
|
+
readonly cooldown?: number;
|
|
27
|
+
/** Milliseconds a discovery or JWKS request may take before it counts as failed. Default 5000. */
|
|
28
|
+
readonly timeout?: number;
|
|
29
|
+
};
|
|
30
|
+
type JoseTokenVerifierOptions = {
|
|
31
|
+
readonly jwks?: JwtJwks;
|
|
32
|
+
readonly discovery?: DiscoveryInput;
|
|
33
|
+
readonly issuer?: string;
|
|
34
|
+
readonly algorithms?: readonly JwtAlgorithm[];
|
|
35
|
+
readonly typ?: string | readonly string[];
|
|
36
|
+
readonly audience?: string | readonly string[];
|
|
37
|
+
readonly clockTolerance?: number;
|
|
38
|
+
readonly decryptionKeys?: JsonWebKeySet | Record<string, unknown>;
|
|
39
|
+
readonly decryptionAlgorithms?: readonly string[];
|
|
40
|
+
readonly profile?: JwtProfile;
|
|
41
|
+
readonly jwksCache?: JwksCacheOptions;
|
|
42
|
+
readonly fetch?: typeof fetch;
|
|
43
|
+
};
|
|
44
|
+
type JoseTokenSignerOptions = {
|
|
45
|
+
readonly key: Record<string, unknown> | Uint8Array;
|
|
46
|
+
readonly alg: JwtAlgorithm;
|
|
47
|
+
readonly kid: string;
|
|
48
|
+
/** `iss` of every output; required. */
|
|
49
|
+
readonly issuer: string;
|
|
50
|
+
/** `aud` for an output whose `sign` call names none; without either, `sign` rejects. */
|
|
51
|
+
readonly audience?: string | readonly string[];
|
|
52
|
+
};
|
|
53
|
+
type JwtDelegationPaths = {
|
|
54
|
+
readonly scopes?: string;
|
|
55
|
+
readonly authorizationDetails?: string;
|
|
56
|
+
readonly access?: string;
|
|
57
|
+
};
|
|
58
|
+
type JwtSubjectOptions = Omit<JoseTokenVerifierOptions, "audience"> & {
|
|
59
|
+
/**
|
|
60
|
+
* The `aud` this resource server accepts. Required unless a `verifier` is
|
|
61
|
+
* passed: `false` accepts any audience and must be a deliberate choice.
|
|
62
|
+
*/
|
|
63
|
+
readonly audience?: string | readonly string[] | false;
|
|
64
|
+
readonly accept?: "access-token" | "id-token";
|
|
65
|
+
readonly claims?: ClaimsMap;
|
|
66
|
+
readonly groupRoles?: Readonly<Record<string, readonly string[]>>;
|
|
67
|
+
readonly schema?: StandardSchemaV1;
|
|
68
|
+
readonly delegation?: JwtDelegationPaths;
|
|
69
|
+
readonly actor?: {
|
|
70
|
+
readonly from?: "act";
|
|
71
|
+
readonly kind?: string;
|
|
72
|
+
/** Names for client ids (`ClientNames`): the actor gets `client` set to the name of `act.sub`. */
|
|
73
|
+
readonly clients?: ClientNames;
|
|
74
|
+
} | ((claims: JwtClaims) => Actor | undefined);
|
|
75
|
+
readonly sender?: "none" | "dpop" | "mtls";
|
|
76
|
+
/** With `sender: "dpop"`, rejects a proof `jti` already used by the same key within 60 seconds. */
|
|
77
|
+
readonly replay?: ReplayStore;
|
|
78
|
+
readonly memberships?: MembershipSource;
|
|
79
|
+
readonly verifier?: TokenVerifier;
|
|
80
|
+
readonly certificateThumbprint?: string;
|
|
81
|
+
readonly onAuth?: (event: AuthEvent) => void;
|
|
82
|
+
readonly requestId?: string;
|
|
83
|
+
};
|
|
84
|
+
type JwtPrincipal = Principal & {
|
|
85
|
+
readonly issuer?: string;
|
|
86
|
+
readonly claims?: Readonly<Record<string, unknown>>;
|
|
87
|
+
};
|
|
88
|
+
type DpopProofResult = {
|
|
89
|
+
readonly ok: true;
|
|
90
|
+
} | {
|
|
91
|
+
readonly ok: false;
|
|
92
|
+
readonly cause: TokenFailureCause;
|
|
93
|
+
};
|
|
94
|
+
/** The principal `subjectFromIntrospection` maps an RFC 7662 response to. */
|
|
95
|
+
type IntrospectionPrincipal = JwtPrincipal;
|
|
96
|
+
type MappedSubject = Subject<JwtPrincipal>;
|
|
97
|
+
//#endregion
|
|
98
|
+
//#region src/ssf/types.d.ts
|
|
99
|
+
/** Every CAEP 1.0 event type, by the last segment of its URI. */
|
|
100
|
+
type CaepEventName = "session-revoked" | "credential-change" | "assurance-level-change" | "token-claims-change" | "device-compliance-change" | "session-established" | "session-presented" | "risk-level-change";
|
|
101
|
+
/** The RISC 1.0 event types PermDock treats as a revocation of every session. */
|
|
102
|
+
type RiscEventName = "account-disabled" | "account-purged" | "credential-compromise";
|
|
103
|
+
type SsfEventName = CaepEventName | RiscEventName;
|
|
104
|
+
/** An SSF 1.0 stream `verification` event: the `state` the receiver asked the transmitter to echo. */
|
|
105
|
+
type SsfVerification = {
|
|
106
|
+
readonly state?: string;
|
|
107
|
+
readonly jti: string;
|
|
108
|
+
readonly issuer?: string;
|
|
109
|
+
};
|
|
110
|
+
type SetSubject = {
|
|
111
|
+
readonly format: string;
|
|
112
|
+
readonly [key: string]: unknown;
|
|
113
|
+
};
|
|
114
|
+
type SsfSubject = {
|
|
115
|
+
readonly id: string;
|
|
116
|
+
readonly session?: string;
|
|
117
|
+
readonly issuer?: string;
|
|
118
|
+
};
|
|
119
|
+
type SsfSubjectResolver = (setSubject: SetSubject, meta?: {
|
|
120
|
+
readonly session?: string;
|
|
121
|
+
readonly issuer?: string;
|
|
122
|
+
}) => string | SsfSubject | null | undefined | Promise<string | SsfSubject | null | undefined>;
|
|
123
|
+
type SsfEventInput = {
|
|
124
|
+
readonly subject: SsfSubject;
|
|
125
|
+
readonly event: Readonly<Record<string, unknown>>;
|
|
126
|
+
readonly event_timestamp?: number;
|
|
127
|
+
readonly jti: string;
|
|
128
|
+
readonly type: string;
|
|
129
|
+
};
|
|
130
|
+
type SsfEventHandler = (input: SsfEventInput) => void | Promise<void>;
|
|
131
|
+
type SsfOnEvent = { readonly [K in SsfEventName]?: SsfEventHandler; } & {
|
|
132
|
+
readonly "*"?: SsfEventHandler;
|
|
133
|
+
/** SSF 1.0 section 8.1.4.1 stream verification; it names a stream, never a subject. */
|
|
134
|
+
readonly verification?: (input: SsfVerification) => void | Promise<void>;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Keys are opaque strings namespaced by issuer. A store that implements both
|
|
138
|
+
* `claim` and `release` makes concurrent deliveries of one SET dispatch once;
|
|
139
|
+
* one with only `seen` and `remember` is checked and recorded non-atomically.
|
|
140
|
+
*/
|
|
141
|
+
type ReplayStore = {
|
|
142
|
+
/** Names the implementation in errors and events. */
|
|
143
|
+
readonly name?: string;
|
|
144
|
+
seen(key: string): boolean | Promise<boolean>;
|
|
145
|
+
remember(key: string, expiresAt?: number): void | Promise<void>;
|
|
146
|
+
/** Records `key` and returns `true` only if it was not already recorded. */
|
|
147
|
+
claim?(key: string, expiresAt?: number): boolean | Promise<boolean>;
|
|
148
|
+
/** Forgets a claimed `key` so a failed delivery can be retried. */
|
|
149
|
+
release?(key: string): void | Promise<void>;
|
|
150
|
+
};
|
|
151
|
+
type SsfAuditEvent = {
|
|
152
|
+
readonly type: string;
|
|
153
|
+
readonly subject?: SsfSubject;
|
|
154
|
+
readonly transmitter?: string;
|
|
155
|
+
readonly jti?: string;
|
|
156
|
+
readonly replayed?: true;
|
|
157
|
+
readonly cancelled?: number;
|
|
158
|
+
readonly unknown?: "event" | "subject";
|
|
159
|
+
/** The `state` of a stream `verification` event. */
|
|
160
|
+
readonly state?: string;
|
|
161
|
+
readonly err?: string;
|
|
162
|
+
readonly cause?: TokenFailureCause;
|
|
163
|
+
};
|
|
164
|
+
type SsfEventListener = (event: SsfAuditEvent) => void;
|
|
165
|
+
type PollOptions = {
|
|
166
|
+
readonly endpoint: string;
|
|
167
|
+
readonly every?: number | string;
|
|
168
|
+
readonly token?: string;
|
|
169
|
+
readonly fetch?: typeof fetch;
|
|
170
|
+
readonly signal?: AbortSignal;
|
|
171
|
+
};
|
|
172
|
+
type PollHandle = {
|
|
173
|
+
readonly stop: () => void;
|
|
174
|
+
};
|
|
175
|
+
type PollResult = {
|
|
176
|
+
readonly acked: readonly string[];
|
|
177
|
+
};
|
|
178
|
+
type SsfPermDockOptions = {
|
|
179
|
+
readonly issuer?: string;
|
|
180
|
+
readonly audience: string | readonly string[];
|
|
181
|
+
readonly jwks?: JwtJwks | string;
|
|
182
|
+
readonly discovery?: DiscoveryInput;
|
|
183
|
+
readonly verifier?: TokenVerifier;
|
|
184
|
+
readonly subject: SsfSubjectResolver;
|
|
185
|
+
readonly onEvent?: SsfOnEvent;
|
|
186
|
+
readonly replay?: ReplayStore;
|
|
187
|
+
readonly approvals?: ApprovalStore;
|
|
188
|
+
/**
|
|
189
|
+
* Publishes `session-revoked` for a revoked session and `changed` for
|
|
190
|
+
* credential, assurance and claims changes, so open connections end or
|
|
191
|
+
* revalidate.
|
|
192
|
+
*/
|
|
193
|
+
readonly revocations?: RevocationFeed;
|
|
194
|
+
readonly clockTolerance?: number;
|
|
195
|
+
/**
|
|
196
|
+
* Seconds a SET without `exp` is accepted after its `iat`; default one
|
|
197
|
+
* day. The replay record is kept at least that long, so a replayed SET
|
|
198
|
+
* is refused for as long as its signature would verify.
|
|
199
|
+
*/
|
|
200
|
+
readonly maxTokenAge?: number;
|
|
201
|
+
};
|
|
202
|
+
type SsfReceiver = {
|
|
203
|
+
push(request: Request): Promise<Response>;
|
|
204
|
+
logout(request: Request): Promise<Response>;
|
|
205
|
+
poll(options: PollOptions): Promise<PollResult> | PollHandle;
|
|
206
|
+
on(event: "event", handler: SsfEventListener): () => void;
|
|
207
|
+
};
|
|
208
|
+
type SsfPermDock = {
|
|
209
|
+
readonly receiver: SsfReceiver;
|
|
210
|
+
};
|
|
211
|
+
/** One event of a SET: the event-type URI, the RFC 9493 subject and the event's own claims. */
|
|
212
|
+
type SetEvent = {
|
|
213
|
+
readonly type: string;
|
|
214
|
+
readonly subject: SetSubject;
|
|
215
|
+
readonly payload: Readonly<Record<string, unknown>>;
|
|
216
|
+
};
|
|
217
|
+
/** `initiating_entity` (CAEP 1.0 section 2). */
|
|
218
|
+
type CaepInitiatingEntity = "admin" | "user" | "policy" | "system";
|
|
219
|
+
/** A reason as text, or a map of language tag to text (CAEP 1.0 section 2). */
|
|
220
|
+
type CaepReason = string | Readonly<Record<string, string>>;
|
|
221
|
+
/** The CAEP 1.0 common claims every event builder accepts. */
|
|
222
|
+
type CaepCommon = {
|
|
223
|
+
readonly subject: SetSubject;
|
|
224
|
+
/** NumericDate seconds the event happened at; the signing time when absent. */
|
|
225
|
+
readonly eventTimestamp?: number;
|
|
226
|
+
readonly initiatingEntity?: CaepInitiatingEntity;
|
|
227
|
+
readonly reasonAdmin?: CaepReason;
|
|
228
|
+
readonly reasonUser?: CaepReason;
|
|
229
|
+
};
|
|
230
|
+
type SignSetOptions = {
|
|
231
|
+
/** `aud`: the receiver the stream delivers to. */
|
|
232
|
+
readonly audience: string | readonly string[];
|
|
233
|
+
/** `jti`; a fresh UUID when absent. */
|
|
234
|
+
readonly jti?: string;
|
|
235
|
+
/** `txn` (RFC 8417 section 2.2): ties SETs from one transaction together. */
|
|
236
|
+
readonly txn?: string;
|
|
237
|
+
/** `iat`, NumericDate seconds; the signer's clock when absent. */
|
|
238
|
+
readonly issuedAt?: number;
|
|
239
|
+
};
|
|
240
|
+
/** Why `pushSet` did not deliver: the RFC 8935 `err` code in kebab case, or a transport failure. */
|
|
241
|
+
type SetDeliveryFailureCause = "invalid-request" | "invalid-key" | "invalid-issuer" | "invalid-audience" | "authentication-failed" | "access-denied" | "unavailable";
|
|
242
|
+
type SetDelivery = {
|
|
243
|
+
readonly ok: true;
|
|
244
|
+
} | {
|
|
245
|
+
readonly ok: false;
|
|
246
|
+
readonly cause: SetDeliveryFailureCause;
|
|
247
|
+
readonly description?: string;
|
|
248
|
+
/** `true` when the same SET may be pushed again: a network failure, a timeout or a `5xx`. */
|
|
249
|
+
readonly retry: boolean;
|
|
250
|
+
};
|
|
251
|
+
type PushSetOptions = {
|
|
252
|
+
/** The receiver's RFC 8935 push endpoint, the stream's `delivery.endpoint_url`. */
|
|
253
|
+
readonly endpoint: string;
|
|
254
|
+
/** The `Authorization` header value, the stream's `delivery.authorization_header`. */
|
|
255
|
+
readonly authorization?: string;
|
|
256
|
+
readonly fetch?: typeof fetch;
|
|
257
|
+
readonly signal?: AbortSignal;
|
|
258
|
+
};
|
|
259
|
+
/** A receiver's report that one SET failed (RFC 8936 section 2.4 `setErrs`). */
|
|
260
|
+
type SetError = {
|
|
261
|
+
readonly err: string;
|
|
262
|
+
readonly description: string;
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* The SETs a transmitter holds for RFC 8936 poll delivery, per stream. A SET
|
|
266
|
+
* stays pending until the receiver acknowledges it or reports it failed.
|
|
267
|
+
*/
|
|
268
|
+
type SetQueue = {
|
|
269
|
+
/** Names the implementation in errors and events. */
|
|
270
|
+
readonly name?: string;
|
|
271
|
+
enqueue(stream: string, jti: string, set: string): void | Promise<void>;
|
|
272
|
+
/** Up to `max` pending SETs, oldest first. */
|
|
273
|
+
pending(stream: string, max: number): readonly {
|
|
274
|
+
readonly jti: string;
|
|
275
|
+
readonly set: string;
|
|
276
|
+
}[] | Promise<readonly {
|
|
277
|
+
readonly jti: string;
|
|
278
|
+
readonly set: string;
|
|
279
|
+
}[]>;
|
|
280
|
+
ack(stream: string, jti: string): void | Promise<void>;
|
|
281
|
+
fail(stream: string, jti: string, error: SetError): void | Promise<void>;
|
|
282
|
+
};
|
|
283
|
+
type SetPollHandlerOptions = {
|
|
284
|
+
readonly queue: SetQueue;
|
|
285
|
+
/** The stream id the request's credentials may poll, or `null` to refuse it with `401`. */
|
|
286
|
+
readonly authorize: (request: Request) => string | null | Promise<string | null>;
|
|
287
|
+
/** The largest `maxEvents` honoured; default 100. */
|
|
288
|
+
readonly maxEvents?: number;
|
|
289
|
+
};
|
|
290
|
+
/** SSF 1.0 section 7.1: the document at `/.well-known/ssf-configuration`. */
|
|
291
|
+
type SsfTransmitterConfiguration = {
|
|
292
|
+
readonly spec_version?: string;
|
|
293
|
+
readonly issuer: string;
|
|
294
|
+
readonly jwks_uri?: string;
|
|
295
|
+
readonly delivery_methods_supported?: readonly string[];
|
|
296
|
+
readonly configuration_endpoint?: string;
|
|
297
|
+
readonly status_endpoint?: string;
|
|
298
|
+
readonly add_subject_endpoint?: string;
|
|
299
|
+
readonly remove_subject_endpoint?: string;
|
|
300
|
+
readonly verification_endpoint?: string;
|
|
301
|
+
readonly critical_subject_members?: readonly string[];
|
|
302
|
+
readonly authorization_schemes?: readonly {
|
|
303
|
+
readonly spec_urn: string;
|
|
304
|
+
}[];
|
|
305
|
+
readonly default_subjects?: "ALL" | "NONE";
|
|
306
|
+
};
|
|
307
|
+
/** SSF 1.0 section 8.1.1: one stream as the configuration endpoint returns it. */
|
|
308
|
+
type SsfStreamConfiguration = {
|
|
309
|
+
readonly stream_id: string;
|
|
310
|
+
readonly iss: string;
|
|
311
|
+
readonly aud: string | readonly string[];
|
|
312
|
+
readonly events_supported?: readonly string[];
|
|
313
|
+
readonly events_requested?: readonly string[];
|
|
314
|
+
readonly events_delivered?: readonly string[];
|
|
315
|
+
readonly delivery: {
|
|
316
|
+
/** `urn:ietf:rfc:8935` (push) or `urn:ietf:rfc:8936` (poll). */
|
|
317
|
+
readonly method: string;
|
|
318
|
+
readonly endpoint_url?: string;
|
|
319
|
+
readonly authorization_header?: string;
|
|
320
|
+
};
|
|
321
|
+
readonly min_verification_interval?: number;
|
|
322
|
+
readonly inactivity_timeout?: number;
|
|
323
|
+
readonly description?: string;
|
|
324
|
+
};
|
|
325
|
+
/** SSF 1.0 section 8.1.2: a stream's status. */
|
|
326
|
+
type SsfStreamStatus = {
|
|
327
|
+
readonly stream_id: string;
|
|
328
|
+
readonly status: "enabled" | "paused" | "disabled";
|
|
329
|
+
readonly reason?: string;
|
|
330
|
+
};
|
|
331
|
+
//#endregion
|
|
332
|
+
export { SsfSubject as A, JwtAlgorithm as B, SsfEventName as C, SsfReceiver as D, SsfPermDockOptions as E, DpopProofResult as F, JwtPrincipal as H, IntrospectionPrincipal as I, JoseTokenSignerOptions as L, SsfTransmitterConfiguration as M, SsfVerification as N, SsfStreamConfiguration as O, DiscoveryInput as P, JoseTokenVerifierOptions as R, SsfEventListener as S, SsfPermDock as T, JwtSubjectOptions as U, JwtJwks as V, MappedSubject as W, SetSubject as _, PollHandle as a, SsfEventHandler as b, PushSetOptions as c, SetDelivery as d, SetDeliveryFailureCause as f, SetQueue as g, SetPollHandlerOptions as h, CaepReason as i, SsfSubjectResolver as j, SsfStreamStatus as k, ReplayStore as l, SetEvent as m, CaepEventName as n, PollOptions as o, SetError as p, CaepInitiatingEntity as r, PollResult as s, CaepCommon as t, RiscEventName as u, SignSetOptions as v, SsfOnEvent as w, SsfEventInput as x, SsfAuditEvent as y, JsonWebKeySet as z };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { a as durationOf } from "./time-DkWjdL98.js";
|
|
2
|
+
//#region src/approvals/errors.ts
|
|
3
|
+
var ApprovalError = class extends Error {
|
|
4
|
+
name = "ApprovalError";
|
|
5
|
+
code;
|
|
6
|
+
constructor(code, message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = code;
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const CODES = /* @__PURE__ */ new Set([
|
|
12
|
+
"approval-not-found",
|
|
13
|
+
"approval-not-pending",
|
|
14
|
+
"approval-expired",
|
|
15
|
+
"approver-unauthenticated",
|
|
16
|
+
"approver-is-actor",
|
|
17
|
+
"approver-is-principal",
|
|
18
|
+
"approver-not-eligible",
|
|
19
|
+
"approver-repeated"
|
|
20
|
+
]);
|
|
21
|
+
function isApprovalErrorCode(value) {
|
|
22
|
+
return typeof value === "string" && CODES.has(value);
|
|
23
|
+
}
|
|
24
|
+
/** Matches by `name` and `code`, so an error from another copy of the module still maps. */
|
|
25
|
+
function isApprovalError(value) {
|
|
26
|
+
if (!(value instanceof Error) || value.name !== "ApprovalError") return false;
|
|
27
|
+
const code = Reflect.get(value, "code");
|
|
28
|
+
return typeof code === "string" && CODES.has(code);
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
//#region src/approvals/types.ts
|
|
32
|
+
const APPROVAL_HEADER = "PermDock-Approval";
|
|
33
|
+
/** Seconds a request stays open when neither the store nor the call sets a `ttl`. */
|
|
34
|
+
const DEFAULT_APPROVAL_TTL = 3600;
|
|
35
|
+
/** The approvals a request needs in total: `approvers.quorum` (or 1), or the sum of its stages' quorums. */
|
|
36
|
+
function approvalQuorum(request) {
|
|
37
|
+
const stages = request.approvers?.stages;
|
|
38
|
+
if (stages !== void 0) return stages.reduce((sum, stage) => sum + (stage.quorum ?? 1), 0);
|
|
39
|
+
return request.approvers?.quorum ?? 1;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The instant from which `approvers.escalation.to` may approve, in epoch
|
|
43
|
+
* milliseconds, or `undefined` when the request has no escalation or its
|
|
44
|
+
* `after` does not parse (then nobody escalates: fail-closed).
|
|
45
|
+
*/
|
|
46
|
+
function escalationOpenAt(request) {
|
|
47
|
+
const seconds = durationOf(request.approvers?.escalation?.after);
|
|
48
|
+
if (seconds === void 0) return;
|
|
49
|
+
return Date.parse(request.createdAt) + seconds * 1e3;
|
|
50
|
+
}
|
|
51
|
+
/** The instant from which a stage's own `escalation.to` may approve it, in epoch milliseconds; `undefined` when it has none or `after` does not parse. */
|
|
52
|
+
function stageEscalationOpenAt(request, stage) {
|
|
53
|
+
const seconds = durationOf(stage.escalation?.after);
|
|
54
|
+
if (seconds === void 0) return;
|
|
55
|
+
return Date.parse(request.createdAt) + seconds * 1e3;
|
|
56
|
+
}
|
|
57
|
+
/** The key a verdict's `relations` lists a relation approver under. */
|
|
58
|
+
function approverRelationKey(item) {
|
|
59
|
+
return JSON.stringify([
|
|
60
|
+
item.resource,
|
|
61
|
+
item.relation,
|
|
62
|
+
item.through ?? null,
|
|
63
|
+
item.depth ?? null
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
export { escalationOpenAt as a, isApprovalError as c, approverRelationKey as i, isApprovalErrorCode as l, DEFAULT_APPROVAL_TTL as n, stageEscalationOpenAt as o, approvalQuorum as r, ApprovalError as s, APPROVAL_HEADER as t };
|