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
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { n as isForbiddenKey } from "./paths-DXSHAMIa.js";
|
|
2
3
|
//#region src/core/json-schema.ts
|
|
3
4
|
function issue(issues, path, message) {
|
|
4
5
|
issues.push({
|
|
@@ -38,6 +39,12 @@ function copyJson(value, path, issues, ancestors) {
|
|
|
38
39
|
ancestors.delete(value);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
42
|
+
/** JSON Schema counts string length in code points, not UTF-16 units. */
|
|
43
|
+
function codePoints(value) {
|
|
44
|
+
let count = 0;
|
|
45
|
+
for (const _ of value) count += 1;
|
|
46
|
+
return count;
|
|
47
|
+
}
|
|
41
48
|
function typeMatches(type, value) {
|
|
42
49
|
switch (type) {
|
|
43
50
|
case "object": return isRecord(value);
|
|
@@ -45,6 +52,8 @@ function typeMatches(type, value) {
|
|
|
45
52
|
case "string": return typeof value === "string";
|
|
46
53
|
case "boolean": return typeof value === "boolean";
|
|
47
54
|
case "integer": return Number.isInteger(value);
|
|
55
|
+
case "number": return typeof value === "number" && Number.isFinite(value);
|
|
56
|
+
case "null": return value === null;
|
|
48
57
|
default: return type;
|
|
49
58
|
}
|
|
50
59
|
}
|
|
@@ -69,12 +78,32 @@ function checkSchema(node, value, path, issues, root = node) {
|
|
|
69
78
|
issue(issues, path, `Expected one of ${node.enum.map((item) => JSON.stringify(item)).join(", ")}`);
|
|
70
79
|
return;
|
|
71
80
|
}
|
|
72
|
-
if (node.type !== void 0
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
if (node.type !== void 0) {
|
|
82
|
+
const types = typeof node.type === "string" ? [node.type] : node.type;
|
|
83
|
+
if (!types.some((type) => typeMatches(type, value))) {
|
|
84
|
+
issue(issues, path, `Expected ${types.join(" or ")}`);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (typeof value === "string") {
|
|
89
|
+
if (node.pattern !== void 0 && !new RegExp(node.pattern, "u").test(value)) issue(issues, path, `Expected a string matching ${node.pattern}`);
|
|
90
|
+
if (node.minLength !== void 0 && value.length < node.minLength) issue(issues, path, `Expected at least ${String(node.minLength)} characters`);
|
|
91
|
+
if (node.maxLength !== void 0 && codePoints(value) > node.maxLength) issue(issues, path, `Expected at most ${String(node.maxLength)} characters`);
|
|
92
|
+
}
|
|
93
|
+
if (typeof value === "number") {
|
|
94
|
+
if (node.minimum !== void 0 && value < node.minimum) issue(issues, path, `Expected at least ${String(node.minimum)}`);
|
|
95
|
+
if (node.maximum !== void 0 && value > node.maximum) issue(issues, path, `Expected at most ${String(node.maximum)}`);
|
|
96
|
+
if (node.exclusiveMinimum !== void 0 && value <= node.exclusiveMinimum) issue(issues, path, `Expected more than ${String(node.exclusiveMinimum)}`);
|
|
97
|
+
if (node.exclusiveMaximum !== void 0 && value >= node.exclusiveMaximum) issue(issues, path, `Expected less than ${String(node.exclusiveMaximum)}`);
|
|
75
98
|
}
|
|
76
|
-
if (node.
|
|
77
|
-
|
|
99
|
+
if (node.anyOf !== void 0) {
|
|
100
|
+
if (!node.anyOf.some((option) => {
|
|
101
|
+
const scratch = [];
|
|
102
|
+
checkSchema(option, value, path, scratch, root);
|
|
103
|
+
return scratch.length === 0;
|
|
104
|
+
})) issue(issues, path, "Expected at least one matching form");
|
|
105
|
+
}
|
|
106
|
+
for (const option of node.allOf ?? []) checkSchema(option, value, path, issues, root);
|
|
78
107
|
if (node.oneOf !== void 0) {
|
|
79
108
|
if (node.oneOf.filter((option) => {
|
|
80
109
|
const scratch = [];
|
|
@@ -84,6 +113,7 @@ function checkSchema(node, value, path, issues, root = node) {
|
|
|
84
113
|
}
|
|
85
114
|
if (Array.isArray(value)) {
|
|
86
115
|
if (node.minItems !== void 0 && value.length < node.minItems) issue(issues, path, `Expected at least ${String(node.minItems)} items`);
|
|
116
|
+
if (node.maxItems !== void 0 && value.length > node.maxItems) issue(issues, path, `Expected at most ${String(node.maxItems)} items`);
|
|
87
117
|
if (node.uniqueItems === true && new Set(value.map((item) => JSON.stringify(item))).size !== value.length) issue(issues, path, "Expected unique items");
|
|
88
118
|
if (node.items !== void 0) for (const [index, item] of value.entries()) checkSchema(node.items, item, [...path, index], issues, root);
|
|
89
119
|
}
|
|
@@ -100,5 +130,14 @@ function checkSchema(node, value, path, issues, root = node) {
|
|
|
100
130
|
else if (node.additionalProperties !== void 0) checkSchema(node.additionalProperties, value[key], [...path, key], issues, root);
|
|
101
131
|
}
|
|
102
132
|
}
|
|
133
|
+
/** The path of the first `__proto__`, `constructor` or `prototype` key in `value`, if any. */
|
|
134
|
+
function forbiddenKeyPath(value, path = []) {
|
|
135
|
+
if (value === null || typeof value !== "object") return;
|
|
136
|
+
for (const [key, child] of Object.entries(value)) {
|
|
137
|
+
if (isForbiddenKey(key)) return [...path, key];
|
|
138
|
+
const found = forbiddenKeyPath(child, [...path, key]);
|
|
139
|
+
if (found !== void 0) return found;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
103
142
|
//#endregion
|
|
104
|
-
export { copyJson as n, checkSchema as t };
|
|
143
|
+
export { copyJson as n, forbiddenKeyPath as r, checkSchema as t };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
+
//#region src/core/json-schema.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* The JSON Schema 2020-12 keywords the package's own schemas use;
|
|
5
|
+
* `checkSchema` interprets exactly these. `$ref` resolves only `#/$defs/<name>`
|
|
6
|
+
* against the root node. Annotations (`title`, `description`, `format`) are
|
|
7
|
+
* ignored, so a `format` always sits next to a `pattern` that enforces it.
|
|
8
|
+
*/
|
|
9
|
+
type JsonSchemaNode = {
|
|
10
|
+
readonly $schema?: string;
|
|
11
|
+
readonly $id?: string;
|
|
12
|
+
readonly $ref?: string;
|
|
13
|
+
readonly $defs?: Readonly<Record<string, JsonSchemaNode>>;
|
|
14
|
+
readonly title?: string;
|
|
15
|
+
readonly description?: string;
|
|
16
|
+
readonly type?: JsonSchemaType | readonly JsonSchemaType[];
|
|
17
|
+
readonly format?: string;
|
|
18
|
+
readonly const?: unknown;
|
|
19
|
+
readonly enum?: readonly unknown[];
|
|
20
|
+
readonly pattern?: string;
|
|
21
|
+
readonly minLength?: number;
|
|
22
|
+
readonly maxLength?: number;
|
|
23
|
+
readonly minimum?: number;
|
|
24
|
+
readonly maximum?: number;
|
|
25
|
+
readonly exclusiveMinimum?: number;
|
|
26
|
+
readonly exclusiveMaximum?: number;
|
|
27
|
+
readonly minItems?: number;
|
|
28
|
+
readonly maxItems?: number;
|
|
29
|
+
readonly uniqueItems?: boolean;
|
|
30
|
+
readonly required?: readonly string[];
|
|
31
|
+
readonly properties?: Readonly<Record<string, JsonSchemaNode>>;
|
|
32
|
+
readonly additionalProperties?: JsonSchemaNode | false;
|
|
33
|
+
readonly items?: JsonSchemaNode;
|
|
34
|
+
readonly oneOf?: readonly JsonSchemaNode[];
|
|
35
|
+
readonly anyOf?: readonly JsonSchemaNode[];
|
|
36
|
+
readonly allOf?: readonly JsonSchemaNode[];
|
|
37
|
+
};
|
|
38
|
+
type JsonSchemaType = "object" | "array" | "string" | "boolean" | "integer" | "number" | "null";
|
|
39
|
+
//#endregion
|
|
40
|
+
export { JsonSchemaNode as t };
|
package/dist/jwt/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { t as memoryReplayStore } from "../replay-
|
|
1
|
+
import { Y as JwtClaims, dt as TokenVerifier, ir as Subject, lt as TokenFailureCause, qt as AuthEvent, rr as Principal, ut as TokenSigner } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-BSslw1QV.js";
|
|
3
|
+
import { B as JwtAlgorithm, F as DpopProofResult, H as JwtPrincipal, I as IntrospectionPrincipal, L as JoseTokenSignerOptions, P as DiscoveryInput, R as JoseTokenVerifierOptions, U as JwtSubjectOptions, V as JwtJwks, W as MappedSubject, l as ReplayStore, z as JsonWebKeySet } from "../types-DiQjupG2.js";
|
|
4
|
+
import { t as memoryReplayStore } from "../replay-D7iKcLFe.js";
|
|
5
5
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
6
6
|
//#region src/jwt/capability.d.ts
|
|
7
7
|
/** `on('auth')` causes: a verification failure, or one of the three capability checks. */
|
|
@@ -23,16 +23,23 @@ type CapabilitySubjectOptions = Omit<JoseTokenVerifierOptions, "typ" | "issuer"
|
|
|
23
23
|
readonly replay?: ReplayStore;
|
|
24
24
|
/** The request's own verified subject, checked against the capability's `redeemer`. */
|
|
25
25
|
readonly viewer?: Subject;
|
|
26
|
+
/**
|
|
27
|
+
* The incoming request. A capability with `cnf` resolves only when the
|
|
28
|
+
* request carries a DPoP proof (RFC 9449) signed by the bound key;
|
|
29
|
+
* without one it is refused.
|
|
30
|
+
*/
|
|
31
|
+
readonly request?: Request;
|
|
26
32
|
readonly onAuth?: (event: AuthEvent) => void;
|
|
27
33
|
readonly requestId?: string;
|
|
28
34
|
};
|
|
29
35
|
/**
|
|
30
|
-
* Resolves a `permdock
|
|
36
|
+
* Resolves a `vnd.permdock.capability+jwt` into the `link` subject it acts as.
|
|
31
37
|
* Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim,
|
|
32
38
|
* a revoked link, a replayed one-time token, a redeemer the viewer does not
|
|
33
|
-
* satisfy, a
|
|
39
|
+
* satisfy, a `cnf` without a matching DPoP proof, a throwing store) is the
|
|
40
|
+
* anonymous subject, never a throw.
|
|
34
41
|
*/
|
|
35
|
-
export declare function subjectFromCapability(token: string | undefined | null, options: CapabilitySubjectOptions): Promise<Subject<
|
|
42
|
+
export declare function subjectFromCapability(token: string | undefined | null, options: CapabilitySubjectOptions): Promise<Subject<CapabilityPrincipal>>;
|
|
36
43
|
//#endregion
|
|
37
44
|
//#region src/jwt/ci-oidc.d.ts
|
|
38
45
|
type CiOidcProvider = "github" | "gitlab" | "buildkite";
|
|
@@ -76,16 +83,16 @@ type DpopProofOptions = {
|
|
|
76
83
|
export declare function verifyDpopProof(request: Request, claims: JwtClaims, accessToken?: string, options?: DpopProofOptions): Promise<DpopProofResult>;
|
|
77
84
|
//#endregion
|
|
78
85
|
//#region src/jwt/introspection.d.ts
|
|
79
|
-
export declare function subjectFromIntrospection(response: unknown, options?: JwtSubjectOptions):
|
|
86
|
+
export declare function subjectFromIntrospection(response: unknown, options?: JwtSubjectOptions): Subject<IntrospectionPrincipal>;
|
|
80
87
|
//#endregion
|
|
81
88
|
//#region src/jwt/signer.d.ts
|
|
82
89
|
export declare function joseTokenSigner(options: JoseTokenSignerOptions): TokenSigner;
|
|
83
90
|
//#endregion
|
|
84
91
|
//#region src/jwt/subject.d.ts
|
|
85
|
-
export declare function subjectFromJwt(token: string | undefined | null, options: JwtSubjectOptions, request?: Request): Promise<
|
|
86
|
-
export declare function
|
|
92
|
+
export declare function subjectFromJwt(token: string | undefined | null, options: JwtSubjectOptions, request?: Request): Promise<Subject<JwtPrincipal>>;
|
|
93
|
+
export declare function jwtSubjectResolver(options: JwtSubjectOptions): (token: string | undefined | null, request?: Request) => Promise<MappedSubject>;
|
|
87
94
|
//#endregion
|
|
88
95
|
//#region src/jwt/verifier.d.ts
|
|
89
96
|
export declare function joseTokenVerifier(options: JoseTokenVerifierOptions): TokenVerifier;
|
|
90
97
|
//#endregion
|
|
91
|
-
export { type CapabilityFailureCause, type CapabilitySubjectOptions, type CiOidcPrincipal, type CiOidcProvider, type CiOidcSubjectOptions, type DiscoveryInput, type DpopProofOptions, type DpopProofResult, type JoseTokenSignerOptions, type JoseTokenVerifierOptions, type JsonWebKeySet, type JwtAlgorithm, type
|
|
98
|
+
export { type CapabilityFailureCause, type CapabilitySubjectOptions, type CiOidcPrincipal, type CiOidcProvider, type CiOidcSubjectOptions, type DiscoveryInput, type DpopProofOptions, type DpopProofResult, type IntrospectionPrincipal, type JoseTokenSignerOptions, type JoseTokenVerifierOptions, type JsonWebKeySet, type JwtAlgorithm, type JwtJwks, type JwtPrincipal, type JwtSubjectOptions, type ReplayStore, memoryReplayStore };
|
package/dist/jwt/index.js
CHANGED
|
@@ -1,12 +1,114 @@
|
|
|
1
1
|
import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
|
|
3
|
-
import {
|
|
4
|
-
import { t as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { t as
|
|
8
|
-
import {
|
|
9
|
-
import { t as
|
|
3
|
+
import { o as epochSeconds, p as nowSeconds } from "../time-DkWjdL98.js";
|
|
4
|
+
import { n as sha256, t as bytesToBase64Url } from "../sha256-D9ihqmvd.js";
|
|
5
|
+
import { t as anonymousSubject } from "../subject-BGoM5o8B.js";
|
|
6
|
+
import { i as linkPolicyViolation, r as capabilitySubject, s as redeemerAllows, t as capabilityFromClaims } from "../capability-N1K9IpqS.js";
|
|
7
|
+
import { a as verifierOptions, i as issuerFromDiscovery, n as assertSubjectConfig, o as decodeHeader, r as fail, s as normalizeTyp, t as joseTokenVerifier } from "../verifier-DHuh-okk.js";
|
|
8
|
+
import { t as loadJose } from "../load-jose-DZ4dnjri.js";
|
|
9
|
+
import { n as mapClaimsToSubject, r as validateCustomClaims, t as acceptMismatch } from "../map-claims-D3oRmTk0.js";
|
|
10
|
+
import { t as memoryReplayStore } from "../replay-Du1tJjG7.js";
|
|
11
|
+
//#region src/jwt/dpop.ts
|
|
12
|
+
const DPOP_WINDOW_SECONDS = 60;
|
|
13
|
+
const PROOF_ALGS = /* @__PURE__ */ new Set([
|
|
14
|
+
"ES256",
|
|
15
|
+
"PS256",
|
|
16
|
+
"Ed25519",
|
|
17
|
+
"EdDSA",
|
|
18
|
+
"RS256"
|
|
19
|
+
]);
|
|
20
|
+
const PRIVATE_MEMBERS = [
|
|
21
|
+
"d",
|
|
22
|
+
"p",
|
|
23
|
+
"q",
|
|
24
|
+
"dp",
|
|
25
|
+
"dq",
|
|
26
|
+
"qi",
|
|
27
|
+
"k"
|
|
28
|
+
];
|
|
29
|
+
function headerOf(request) {
|
|
30
|
+
return request.headers.get("DPoP") ?? request.headers.get("dpop");
|
|
31
|
+
}
|
|
32
|
+
function withoutQuery(value) {
|
|
33
|
+
if (typeof value !== "string" || !URL.canParse(value)) return null;
|
|
34
|
+
const url = new URL(value);
|
|
35
|
+
url.search = "";
|
|
36
|
+
url.hash = "";
|
|
37
|
+
return url.href;
|
|
38
|
+
}
|
|
39
|
+
async function claimJti(replay, key, expiresAt) {
|
|
40
|
+
if (replay.claim !== void 0) return replay.claim(key, expiresAt);
|
|
41
|
+
if (await replay.seen(key)) return false;
|
|
42
|
+
await replay.remember(key, expiresAt);
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
function verifyDpopProof(request, claims, accessToken, options = {}) {
|
|
46
|
+
return verify(request, claims, accessToken, options);
|
|
47
|
+
}
|
|
48
|
+
async function verify(request, claims, accessToken, options) {
|
|
49
|
+
const proof = headerOf(request);
|
|
50
|
+
if (proof === null || proof.length === 0) return {
|
|
51
|
+
ok: false,
|
|
52
|
+
cause: "dpop-proof-invalid"
|
|
53
|
+
};
|
|
54
|
+
const expectedJkt = claims["cnf"] !== null && typeof claims["cnf"] === "object" && !Array.isArray(claims["cnf"]) && typeof claims["cnf"].jkt === "string" ? claims["cnf"].jkt : void 0;
|
|
55
|
+
if (expectedJkt === void 0) return {
|
|
56
|
+
ok: false,
|
|
57
|
+
cause: "dpop-proof-invalid"
|
|
58
|
+
};
|
|
59
|
+
const header = decodeHeader(proof);
|
|
60
|
+
if (header?.typ?.toLowerCase() !== "dpop+jwt") return {
|
|
61
|
+
ok: false,
|
|
62
|
+
cause: "dpop-proof-invalid"
|
|
63
|
+
};
|
|
64
|
+
const jwk = header["jwk"];
|
|
65
|
+
if (!PROOF_ALGS.has(header.alg ?? "") || jwk === null || typeof jwk !== "object" || Array.isArray(jwk) || PRIVATE_MEMBERS.some((member) => member in jwk)) return {
|
|
66
|
+
ok: false,
|
|
67
|
+
cause: "dpop-proof-invalid"
|
|
68
|
+
};
|
|
69
|
+
try {
|
|
70
|
+
const jose = await loadJose();
|
|
71
|
+
const key = await jose.importJWK(jwk, header.alg);
|
|
72
|
+
const result = await jose.jwtVerify(proof, key, {
|
|
73
|
+
typ: "dpop+jwt",
|
|
74
|
+
maxTokenAge: DPOP_WINDOW_SECONDS
|
|
75
|
+
});
|
|
76
|
+
const jkt = await jose.calculateJwkThumbprint(jwk, "sha256");
|
|
77
|
+
if (jkt !== expectedJkt) return {
|
|
78
|
+
ok: false,
|
|
79
|
+
cause: "dpop-proof-invalid"
|
|
80
|
+
};
|
|
81
|
+
const htm = result.payload["htm"];
|
|
82
|
+
const htu = result.payload["htu"];
|
|
83
|
+
const expectedHtu = withoutQuery(request.url);
|
|
84
|
+
if (htm !== request.method || expectedHtu === null || withoutQuery(htu) !== expectedHtu) return {
|
|
85
|
+
ok: false,
|
|
86
|
+
cause: "dpop-proof-invalid"
|
|
87
|
+
};
|
|
88
|
+
if (accessToken !== void 0) {
|
|
89
|
+
const ath = bytesToBase64Url(sha256(accessToken));
|
|
90
|
+
if (result.payload["ath"] !== ath) return {
|
|
91
|
+
ok: false,
|
|
92
|
+
cause: "dpop-proof-invalid"
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (options.replay !== void 0) {
|
|
96
|
+
const jti = result.payload.jti;
|
|
97
|
+
const iat = result.payload.iat;
|
|
98
|
+
if (typeof jti !== "string" || jti === "" || typeof iat !== "number" || !await claimJti(options.replay, `dpop\u0000${jkt}\u0000${jti}`, iat + DPOP_WINDOW_SECONDS)) return {
|
|
99
|
+
ok: false,
|
|
100
|
+
cause: "dpop-proof-invalid"
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return { ok: true };
|
|
104
|
+
} catch {
|
|
105
|
+
return {
|
|
106
|
+
ok: false,
|
|
107
|
+
cause: "dpop-proof-invalid"
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//#endregion
|
|
10
112
|
//#region src/jwt/capability.ts
|
|
11
113
|
function emit(options, reason, cause, token) {
|
|
12
114
|
if (options.onAuth === void 0) return;
|
|
@@ -44,10 +146,11 @@ async function stores(options, capability, issuedAt, once) {
|
|
|
44
146
|
}
|
|
45
147
|
}
|
|
46
148
|
/**
|
|
47
|
-
* Resolves a `permdock
|
|
149
|
+
* Resolves a `vnd.permdock.capability+jwt` into the `link` subject it acts as.
|
|
48
150
|
* Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim,
|
|
49
151
|
* a revoked link, a replayed one-time token, a redeemer the viewer does not
|
|
50
|
-
* satisfy, a
|
|
152
|
+
* satisfy, a `cnf` without a matching DPoP proof, a throwing store) is the
|
|
153
|
+
* anonymous subject, never a throw.
|
|
51
154
|
*/
|
|
52
155
|
async function subjectFromCapability(token, options) {
|
|
53
156
|
if (token === void 0 || token === null || token.length === 0) return anonymousSubject();
|
|
@@ -61,7 +164,7 @@ async function subjectFromCapability(token, options) {
|
|
|
61
164
|
try {
|
|
62
165
|
verifier = options.verifier ?? joseTokenVerifier({
|
|
63
166
|
...options,
|
|
64
|
-
typ: "permdock
|
|
167
|
+
typ: "vnd.permdock.capability+jwt"
|
|
65
168
|
});
|
|
66
169
|
} catch {
|
|
67
170
|
return deny("malformed");
|
|
@@ -69,7 +172,7 @@ async function subjectFromCapability(token, options) {
|
|
|
69
172
|
let verified;
|
|
70
173
|
try {
|
|
71
174
|
verified = await verifier.verify(token, compact({
|
|
72
|
-
typ: "permdock
|
|
175
|
+
typ: "vnd.permdock.capability+jwt",
|
|
73
176
|
issuer: options.issuer,
|
|
74
177
|
audience: options.audience,
|
|
75
178
|
clockTolerance: options.clockTolerance
|
|
@@ -78,16 +181,14 @@ async function subjectFromCapability(token, options) {
|
|
|
78
181
|
return deny("malformed");
|
|
79
182
|
}
|
|
80
183
|
if (!verified.ok) return deny(verified.cause);
|
|
81
|
-
if (normalizeTyp(verified.header.typ) !== "permdock
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const capability = {
|
|
86
|
-
...parsed,
|
|
87
|
-
expiresAt: Math.min(parsed.expiresAt, exp)
|
|
88
|
-
};
|
|
89
|
-
const now = Date.now() / 1e3;
|
|
184
|
+
if (normalizeTyp(verified.header.typ) !== "vnd.permdock.capability+jwt") return deny("wrong-token-type");
|
|
185
|
+
const capability = capabilityFromClaims(verified.claims);
|
|
186
|
+
if (capability?.holder !== "link" || verified.claims["cnf"] !== void 0 && capability.cnf === void 0) return deny("invalid-claims");
|
|
187
|
+
const now = epochSeconds();
|
|
90
188
|
if (capability.expiresAt <= now) return deny("expired");
|
|
189
|
+
if (capability.cnf !== void 0) {
|
|
190
|
+
if (!(options.request === void 0 ? { ok: false } : await verifyDpopProof(options.request, verified.claims, token, compact({ replay: options.replay }))).ok) return deny("dpop-proof-invalid");
|
|
191
|
+
}
|
|
91
192
|
if (!redeemerAllows(capability.redeemer, options.viewer, now)) return deny("redeemer-mismatch");
|
|
92
193
|
const jti = verified.claims["jti"];
|
|
93
194
|
if (capability.once === true && (options.replay === void 0 || typeof jti !== "string" || jti === "")) return deny("invalid-claims");
|
|
@@ -217,107 +318,6 @@ async function subjectFromCiOidc(token, options) {
|
|
|
217
318
|
});
|
|
218
319
|
}
|
|
219
320
|
//#endregion
|
|
220
|
-
//#region src/jwt/dpop.ts
|
|
221
|
-
const DPOP_WINDOW_SECONDS = 60;
|
|
222
|
-
const PROOF_ALGS = /* @__PURE__ */ new Set([
|
|
223
|
-
"ES256",
|
|
224
|
-
"PS256",
|
|
225
|
-
"Ed25519",
|
|
226
|
-
"EdDSA",
|
|
227
|
-
"RS256"
|
|
228
|
-
]);
|
|
229
|
-
const PRIVATE_MEMBERS = [
|
|
230
|
-
"d",
|
|
231
|
-
"p",
|
|
232
|
-
"q",
|
|
233
|
-
"dp",
|
|
234
|
-
"dq",
|
|
235
|
-
"qi",
|
|
236
|
-
"k"
|
|
237
|
-
];
|
|
238
|
-
function headerOf(request) {
|
|
239
|
-
return request.headers.get("DPoP") ?? request.headers.get("dpop");
|
|
240
|
-
}
|
|
241
|
-
function withoutQuery(value) {
|
|
242
|
-
if (typeof value !== "string" || !URL.canParse(value)) return null;
|
|
243
|
-
const url = new URL(value);
|
|
244
|
-
url.search = "";
|
|
245
|
-
url.hash = "";
|
|
246
|
-
return url.href;
|
|
247
|
-
}
|
|
248
|
-
async function claimJti(replay, key, expiresAt) {
|
|
249
|
-
if (replay.claim !== void 0) return replay.claim(key, expiresAt);
|
|
250
|
-
if (await replay.seen(key)) return false;
|
|
251
|
-
await replay.remember(key, expiresAt);
|
|
252
|
-
return true;
|
|
253
|
-
}
|
|
254
|
-
function verifyDpopProof(request, claims, accessToken, options = {}) {
|
|
255
|
-
return verify(request, claims, accessToken, options);
|
|
256
|
-
}
|
|
257
|
-
async function verify(request, claims, accessToken, options) {
|
|
258
|
-
const proof = headerOf(request);
|
|
259
|
-
if (proof === null || proof.length === 0) return {
|
|
260
|
-
ok: false,
|
|
261
|
-
cause: "dpop-proof-invalid"
|
|
262
|
-
};
|
|
263
|
-
const expectedJkt = claims["cnf"] !== null && typeof claims["cnf"] === "object" && !Array.isArray(claims["cnf"]) && typeof claims["cnf"].jkt === "string" ? claims["cnf"].jkt : void 0;
|
|
264
|
-
if (expectedJkt === void 0) return {
|
|
265
|
-
ok: false,
|
|
266
|
-
cause: "dpop-proof-invalid"
|
|
267
|
-
};
|
|
268
|
-
const header = decodeHeader(proof);
|
|
269
|
-
if (header?.typ?.toLowerCase() !== "dpop+jwt") return {
|
|
270
|
-
ok: false,
|
|
271
|
-
cause: "dpop-proof-invalid"
|
|
272
|
-
};
|
|
273
|
-
const jwk = header["jwk"];
|
|
274
|
-
if (!PROOF_ALGS.has(header.alg ?? "") || jwk === null || typeof jwk !== "object" || Array.isArray(jwk) || PRIVATE_MEMBERS.some((member) => member in jwk)) return {
|
|
275
|
-
ok: false,
|
|
276
|
-
cause: "dpop-proof-invalid"
|
|
277
|
-
};
|
|
278
|
-
try {
|
|
279
|
-
const jose = await loadJose();
|
|
280
|
-
const key = await jose.importJWK(jwk, header.alg);
|
|
281
|
-
const result = await jose.jwtVerify(proof, key, {
|
|
282
|
-
typ: "dpop+jwt",
|
|
283
|
-
maxTokenAge: DPOP_WINDOW_SECONDS
|
|
284
|
-
});
|
|
285
|
-
const jkt = await jose.calculateJwkThumbprint(jwk, "sha256");
|
|
286
|
-
if (jkt !== expectedJkt) return {
|
|
287
|
-
ok: false,
|
|
288
|
-
cause: "dpop-proof-invalid"
|
|
289
|
-
};
|
|
290
|
-
const htm = result.payload["htm"];
|
|
291
|
-
const htu = result.payload["htu"];
|
|
292
|
-
const expectedHtu = withoutQuery(request.url);
|
|
293
|
-
if (htm !== request.method || expectedHtu === null || withoutQuery(htu) !== expectedHtu) return {
|
|
294
|
-
ok: false,
|
|
295
|
-
cause: "dpop-proof-invalid"
|
|
296
|
-
};
|
|
297
|
-
if (accessToken !== void 0) {
|
|
298
|
-
const ath = bytesToBase64Url(sha256(accessToken));
|
|
299
|
-
if (result.payload["ath"] !== ath) return {
|
|
300
|
-
ok: false,
|
|
301
|
-
cause: "dpop-proof-invalid"
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
if (options.replay !== void 0) {
|
|
305
|
-
const jti = result.payload.jti;
|
|
306
|
-
const iat = result.payload.iat;
|
|
307
|
-
if (typeof jti !== "string" || jti === "" || typeof iat !== "number" || !await claimJti(options.replay, `dpop\u0000${jkt}\u0000${jti}`, iat + DPOP_WINDOW_SECONDS)) return {
|
|
308
|
-
ok: false,
|
|
309
|
-
cause: "dpop-proof-invalid"
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
return { ok: true };
|
|
313
|
-
} catch {
|
|
314
|
-
return {
|
|
315
|
-
ok: false,
|
|
316
|
-
cause: "dpop-proof-invalid"
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
//#endregion
|
|
321
321
|
//#region src/jwt/introspection.ts
|
|
322
322
|
function emitAuth$1(options, cause) {
|
|
323
323
|
if (options.onAuth === void 0) return;
|
|
@@ -426,6 +426,8 @@ function joseTokenSigner(options) {
|
|
|
426
426
|
if (options.alg === "HS256" || options.alg === "EdDSA") throw new Error("PermDock: joseTokenSigner refuses HS* and polymorphic EdDSA on outputs.");
|
|
427
427
|
if (!SIGNING_ALGS.has(options.alg)) throw new Error(`PermDock: unsupported signing alg '${options.alg}'.`);
|
|
428
428
|
if (options.kid.length === 0) throw new Error("PermDock: joseTokenSigner requires kid.");
|
|
429
|
+
if (typeof options.issuer !== "string" || options.issuer.length === 0) throw new Error("PermDock: joseTokenSigner requires issuer.");
|
|
430
|
+
const issuer = options.issuer;
|
|
429
431
|
const importKey = async () => {
|
|
430
432
|
if (options.key instanceof Uint8Array) throw new TypeError("PermDock: HMAC keys cannot sign PermDock outputs.");
|
|
431
433
|
return (await loadJose()).importJWK(options.key, options.alg);
|
|
@@ -441,20 +443,24 @@ function joseTokenSigner(options) {
|
|
|
441
443
|
}
|
|
442
444
|
};
|
|
443
445
|
async function signJwt(payload, signOptions) {
|
|
446
|
+
const audience = signOptions.audience ?? options.audience;
|
|
447
|
+
if (audience === void 0 || audience.length === 0) throw new Error("PermDock: joseTokenSigner requires an audience.");
|
|
448
|
+
const issuedAt = signOptions.issuedAt ?? nowSeconds();
|
|
449
|
+
if (!Number.isSafeInteger(issuedAt)) throw new TypeError("PermDock: iat must be a whole NumericDate.");
|
|
444
450
|
const jose = await loadJose();
|
|
445
451
|
const key = await importKey();
|
|
446
|
-
const
|
|
447
|
-
const jwt = new jose.SignJWT(
|
|
452
|
+
const { iss: _iss, aud: _aud, exp: _exp, iat: _iat, nbf: _nbf, jti: _jti, ...claims } = payload;
|
|
453
|
+
const jwt = new jose.SignJWT(claims);
|
|
448
454
|
jwt.setProtectedHeader({
|
|
449
455
|
alg: options.alg,
|
|
450
456
|
kid: options.kid,
|
|
451
457
|
typ: signOptions.typ
|
|
452
458
|
});
|
|
453
|
-
jwt.setIssuedAt(
|
|
454
|
-
jwt.setJti(globalThis.crypto.randomUUID());
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
jwt.setExpirationTime(signOptions.expiresAt ??
|
|
459
|
+
jwt.setIssuedAt(issuedAt);
|
|
460
|
+
jwt.setJti(signOptions.jti ?? globalThis.crypto.randomUUID());
|
|
461
|
+
jwt.setIssuer(issuer);
|
|
462
|
+
jwt.setAudience(audience);
|
|
463
|
+
jwt.setExpirationTime(signOptions.expiresAt ?? issuedAt + 3600);
|
|
458
464
|
return jwt.sign(key);
|
|
459
465
|
}
|
|
460
466
|
}
|
|
@@ -484,6 +490,20 @@ function mtlsThumbprint(claims) {
|
|
|
484
490
|
const value = cnf["x5t#S256"];
|
|
485
491
|
return typeof value === "string" ? value : void 0;
|
|
486
492
|
}
|
|
493
|
+
/**
|
|
494
|
+
* The sender constraint to enforce. Without a configured `sender`, a token
|
|
495
|
+
* whose `cnf` binds it to a key or a certificate is held to that binding,
|
|
496
|
+
* never accepted as a bearer token (RFC 9449 section 7.1, RFC 8705
|
|
497
|
+
* section 3). An explicit `sender: "none"` is the opt-out for a gateway
|
|
498
|
+
* that verified the binding upstream.
|
|
499
|
+
*/
|
|
500
|
+
function senderFor(options, cnf) {
|
|
501
|
+
if (options.sender !== void 0) return options.sender;
|
|
502
|
+
if (options.profile === "fapi2") return "dpop";
|
|
503
|
+
if (cnf === null || typeof cnf !== "object" || Array.isArray(cnf)) return "none";
|
|
504
|
+
if (Object.hasOwn(cnf, "jkt")) return "dpop";
|
|
505
|
+
return Object.hasOwn(cnf, "x5t#S256") ? "mtls" : "none";
|
|
506
|
+
}
|
|
487
507
|
async function extraMemberships(options, subject, tenant) {
|
|
488
508
|
if (options.memberships === void 0 || subject.principal === null) return subject;
|
|
489
509
|
try {
|
|
@@ -513,9 +533,9 @@ async function extraMemberships(options, subject, tenant) {
|
|
|
513
533
|
function subjectFromJwt(token, options, request) {
|
|
514
534
|
return resolveSubject(token, options, request);
|
|
515
535
|
}
|
|
516
|
-
function
|
|
536
|
+
function jwtSubjectResolver(options) {
|
|
517
537
|
assertSubjectConfig(options);
|
|
518
|
-
const verifier = options.verifier ?? joseTokenVerifier(options);
|
|
538
|
+
const verifier = options.verifier ?? joseTokenVerifier(verifierOptions(options));
|
|
519
539
|
return (token, request) => resolveSubject(token, {
|
|
520
540
|
...options,
|
|
521
541
|
verifier
|
|
@@ -528,12 +548,13 @@ async function resolveSubject(token, options, request) {
|
|
|
528
548
|
emitAuth(options, "token-in-query", token);
|
|
529
549
|
return anonymousSubject();
|
|
530
550
|
}
|
|
531
|
-
const verifier = options.verifier ?? joseTokenVerifier(options);
|
|
551
|
+
const verifier = options.verifier ?? joseTokenVerifier(verifierOptions(options));
|
|
552
|
+
const audience = options.audience === false ? void 0 : options.audience;
|
|
532
553
|
const issuer = options.issuer ?? (options.discovery === void 0 ? void 0 : issuerFromDiscovery(options.discovery));
|
|
533
554
|
let verified;
|
|
534
555
|
try {
|
|
535
556
|
verified = await verifier.verify(token, compact({
|
|
536
|
-
audience
|
|
557
|
+
audience,
|
|
537
558
|
issuer,
|
|
538
559
|
clockTolerance: options.clockTolerance,
|
|
539
560
|
typ: options.accept === "id-token" ? ["JWT"] : options.profile === "fapi2" ? "at+jwt" : ["at+jwt", "JWT"]
|
|
@@ -545,13 +566,13 @@ async function resolveSubject(token, options, request) {
|
|
|
545
566
|
emitAuth(options, verified.cause, token);
|
|
546
567
|
return anonymousSubject();
|
|
547
568
|
}
|
|
548
|
-
if (acceptMismatch(verified.claims, verified.header.typ, options,
|
|
569
|
+
if (acceptMismatch(verified.claims, verified.header.typ, options, audience)) {
|
|
549
570
|
emitAuth(options, "wrong-token-type", token);
|
|
550
571
|
return anonymousSubject();
|
|
551
572
|
}
|
|
552
|
-
const sender = options.sender ?? (options.profile === "fapi2" ? "dpop" : "none");
|
|
553
573
|
const cnf = verified.claims["cnf"];
|
|
554
574
|
const hasCnf = cnf !== null && typeof cnf === "object";
|
|
575
|
+
const sender = senderFor(options, cnf);
|
|
555
576
|
if (options.profile === "fapi2" && !hasCnf) {
|
|
556
577
|
emitAuth(options, "sender-constraint-required", token);
|
|
557
578
|
return anonymousSubject();
|
|
@@ -587,4 +608,4 @@ async function resolveSubject(token, options, request) {
|
|
|
587
608
|
return extraMemberships(options, mapped.subject, mapped.subject.principal.tenant);
|
|
588
609
|
}
|
|
589
610
|
//#endregion
|
|
590
|
-
export {
|
|
611
|
+
export { joseTokenSigner, joseTokenVerifier, jwtSubjectResolver, memoryReplayStore, subjectFromCapability, subjectFromCiOidc, subjectFromIntrospection, subjectFromJwt, verifyDpopProof };
|