permdock 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -35
- package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
- package/dist/a2a/index.d.ts +6 -6
- package/dist/a2a/index.js +14 -17
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-B4R5fnMU.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -35
- package/dist/ai-sdk/index.js +37 -23
- package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.js} +20 -14
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-Dg8XsRaO.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +94 -79
- package/dist/automation-BMZPIVUM.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +9 -8
- package/dist/better-supabase/index.d.ts +357 -30
- package/dist/better-supabase/index.js +936 -194
- package/dist/{bind-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
- package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/{build-instance-DIIV9DbC.js → build-instance-BMnAudHn.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/{catalog-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.js} +45 -23
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +24 -27
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +9 -14
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +19 -5
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +239 -340
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/{compile-CtTP7eur.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/{create-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
- package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-DaXVdDhM.js +286 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/{denied-text-DfRk15uw.d.ts → denied-text-D8jDHgsl.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.js} +245 -50
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +2 -2
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +13 -12
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-OD_4c__H.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-C9YJsv3H.js → evaluations-DZ2CbV5k.js} +145 -34
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +22 -28
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +12 -11
- package/dist/fastify/index.d.ts +25 -22
- package/dist/fastify/index.js +13 -12
- package/dist/fetch-adapter-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-D2lZt4Dd.js} +55 -52
- package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.js} +5 -4
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-C9YmyBIa.js → helpers-DTcZOzhF.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-BZIAYvon.js +315 -0
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
- package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
- package/dist/{import-BFIlhetD.js → import-DMmOG27O.js} +190 -53
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/{index-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
- package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +19 -15
- package/dist/index.js +31 -21
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-plkrsAog.d.ts → instance-options-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +156 -135
- package/dist/{kernel-CB3LrIJM.js → kernel-5JatXyND.js} +52 -24
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +2 -2
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-CtKR3GXL.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
- package/dist/{map-error-BE27PYkE.js → map-error-TCAdw-eW.js} +3 -3
- package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
- package/dist/mcp/index.d.ts +22 -12
- package/dist/mcp/index.js +57 -39
- package/dist/{migrate-BwlB5-Wk.js → migrate-BShP7Vf4.js} +53 -14
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +15 -14
- package/dist/next/index.d.ts +18 -21
- package/dist/next/index.js +13 -11
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +17 -24
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
- package/dist/{openapi-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +20 -15
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +30 -7
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
- package/dist/{permission-keys-B26jeyUv.js → ownership-BatFgAA4.js} +1698 -869
- package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
- package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
- package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
- package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +45 -26
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.d.ts +502 -0
- package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-CCJ6lmxB.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +2 -2
- package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
- package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/{protected-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
- package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
- package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -72
- package/dist/react-native/index.js +24 -22
- package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
- package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-COpmZUfx.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.js} +3 -3
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
- package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
- package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DtaA4JuW.js → saas-FO-Q8oj0.js} +16 -14
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
- package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
- package/dist/server/index.d.ts +12 -143
- package/dist/server/index.js +12 -9
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
- package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +11 -12
- package/dist/solid/index.js +7 -7
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-Dljy06zL.d.ts → sources-BV9j0DeZ.d.ts} +7 -13
- package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
- package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
- package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
- package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
- package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +7 -6
- package/dist/supabase/middleware.js +13 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +4 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +10 -10
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +4 -4
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +23 -287
- package/dist/testing/index.d.ts +311 -38
- package/dist/testing/index.js +3475 -201
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
- package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +16 -14
- package/dist/{types-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
- package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
- package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-CIlTojhq.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/{types-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
- package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
- package/dist/{verify-BztUB3GX.js → verify-DbCL9bnB.js} +645 -50
- package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
- package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-D6lPdb4Z.d.ts} +65 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-zeucB7eF.js → watch-CszoTJMq.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/{wrap-Cr93qqdP.d.ts → wrap-Bd1Tejur.d.ts} +2 -1
- package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
- package/package.json +136 -37
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +123 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +9 -8
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +5 -4
- package/skills/permdock-wire/SKILL.md +17 -11
- package/skills/permdock-wire/references/adapters.md +139 -51
- package/skills/permdock-wire/references/policy-options.md +5 -5
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DZL76lKW.js +0 -240
- package/dist/arazzo-CD8d0WLb.js +0 -54
- package/dist/catalog-6yWAX6Ps.js +0 -2
- package/dist/catalog-WHG4kBq7.js +0 -48
- package/dist/cloud-C7bSDgX4.js +0 -50
- package/dist/cloud-PeBN3IEn.js +0 -118
- package/dist/collect-Bw2Jdq1q.js +0 -2
- package/dist/collect-CQx4hX4N.js +0 -83
- package/dist/commands-Cpip4ULx.js +0 -97
- package/dist/config-DLt6BvV7.js +0 -36
- package/dist/diff-Cnghh_Ip.js +0 -48
- package/dist/doctor-CuVJvhV_.js +0 -53
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-fwfXN01n.js +0 -1016
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-DgM7w96K.d.ts +0 -6
- package/dist/index-Dz7didpC.d.ts +0 -201
- package/dist/load-B_shHrmd.js +0 -2
- package/dist/manifest-BngWKryL.js +0 -770
- package/dist/may-use-BOn_dR_w.js +0 -78
- package/dist/openapi-DcQ1Kg40.js +0 -164
- package/dist/ownership-BgnbOJFT.js +0 -851
- package/dist/permdock-L26udHSk.js +0 -3646
- package/dist/powersync-BFSbSElQ.js +0 -62
- package/dist/powersync-DCDgZgfZ.js +0 -2
- package/dist/rls-55DQTuf5.js +0 -250
- package/dist/run-DMcNW_8T.js +0 -174
- package/dist/server-ZYEHtNHS.js +0 -268
- package/dist/sink-BTtmfPnE.js +0 -141
- package/dist/sink-CPN4zLfs.d.ts +0 -104
- package/dist/skills-Dle4ZoLF.js +0 -56
- package/dist/snapshot-Dc9CHPME.js +0 -1078
- package/dist/src-Bb7no-hS.js +0 -639
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-Dbqr141s.js +0 -83
- package/dist/supabase-hook-BULg7Ut_.js +0 -2
- package/dist/thenable-QSmvt-vZ.js +0 -65
- package/dist/types-C0dee0Qf.d.ts +0 -197
- package/dist/types-DvupZE0w.d.ts +0 -9
- package/dist/usage-4G6t643F.js +0 -42
- package/dist/usage-iFLJ0-rr.js +0 -2
- package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
- package/dist/watch-C8TpsAl4.js +0 -2
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
2
|
+
import { n as readBodyText } from "./body-text-QcXok_SI.js";
|
|
3
|
+
//#region src/server/standard-webhooks.ts
|
|
4
|
+
const DEFAULT_TOLERANCE = 300;
|
|
5
|
+
const JWKS_TTL_SECONDS = 300;
|
|
6
|
+
const encoder = /* @__PURE__ */ new TextEncoder();
|
|
7
|
+
function decodeBase64(value) {
|
|
8
|
+
if (!/^[A-Za-z0-9+/]*={0,2}$/u.test(value) || value.length % 4 !== 0) return;
|
|
9
|
+
try {
|
|
10
|
+
const binary = atob(value);
|
|
11
|
+
const bytes = new Uint8Array(binary.length);
|
|
12
|
+
for (let index = 0; index < binary.length; index += 1) bytes[index] = binary.codePointAt(index) ?? 0;
|
|
13
|
+
return bytes;
|
|
14
|
+
} catch {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function encodeBase64(bytes) {
|
|
19
|
+
let binary = "";
|
|
20
|
+
for (const byte of new Uint8Array(bytes)) binary += String.fromCodePoint(byte);
|
|
21
|
+
return btoa(binary);
|
|
22
|
+
}
|
|
23
|
+
function secretBytes(secret) {
|
|
24
|
+
const bytes = decodeBase64(secret.startsWith("whsec_") ? secret.slice(6) : secret);
|
|
25
|
+
if (bytes === void 0 || bytes.length < 24 || bytes.length > 64) throw new TypeError("PermDock: a v1 webhook secret is whsec_ followed by 24 to 64 bytes in base64");
|
|
26
|
+
return bytes;
|
|
27
|
+
}
|
|
28
|
+
function hmacKey(secret, usage) {
|
|
29
|
+
return crypto.subtle.importKey("raw", secretBytes(secret), {
|
|
30
|
+
name: "HMAC",
|
|
31
|
+
hash: "SHA-256"
|
|
32
|
+
}, false, [usage]);
|
|
33
|
+
}
|
|
34
|
+
function isEd25519(jwk) {
|
|
35
|
+
return jwk.kty === "OKP" && jwk.crv === "Ed25519" && typeof jwk.x === "string";
|
|
36
|
+
}
|
|
37
|
+
function signedContent(id, timestamp, body) {
|
|
38
|
+
return encoder.encode(`${id}.${timestamp}.${body}`);
|
|
39
|
+
}
|
|
40
|
+
function validId(id) {
|
|
41
|
+
return id.length > 0 && id.length <= 256 && !/\s/u.test(id);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_`
|
|
45
|
+
* secret, `v1a` Ed25519 with a private JWK. Throws on an invalid key or id,
|
|
46
|
+
* because both come from the sender's own configuration.
|
|
47
|
+
*/
|
|
48
|
+
function webhookSigner(options) {
|
|
49
|
+
if (options.keys.length === 0) throw new TypeError("PermDock: webhookSigner() needs at least one key");
|
|
50
|
+
const keys = options.keys.map(async (key) => {
|
|
51
|
+
switch (key.alg) {
|
|
52
|
+
case "v1": return {
|
|
53
|
+
alg: key.alg,
|
|
54
|
+
key: await hmacKey(key.secret, "sign")
|
|
55
|
+
};
|
|
56
|
+
case "v1a":
|
|
57
|
+
if (!isEd25519(key.privateKey) || typeof key.privateKey.d !== "string") throw new TypeError("PermDock: a v1a webhook key is an Ed25519 private JWK");
|
|
58
|
+
return {
|
|
59
|
+
alg: key.alg,
|
|
60
|
+
key: await importEd25519(key.privateKey, "sign")
|
|
61
|
+
};
|
|
62
|
+
default: return key;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
for (const pending of keys) pending.catch(() => void 0);
|
|
66
|
+
return { async sign(message) {
|
|
67
|
+
if (!validId(message.id)) throw new TypeError("PermDock: a webhook id is 1 to 256 characters without whitespace");
|
|
68
|
+
const timestamp = String(nowSeconds(message.now));
|
|
69
|
+
const content = signedContent(message.id, timestamp, message.body);
|
|
70
|
+
const signatures = await Promise.all(keys.map(async (pending) => {
|
|
71
|
+
const { alg, key } = await pending;
|
|
72
|
+
return `${alg},${encodeBase64(await crypto.subtle.sign(alg === "v1" ? "HMAC" : "Ed25519", key, content))}`;
|
|
73
|
+
}));
|
|
74
|
+
return {
|
|
75
|
+
"webhook-id": message.id,
|
|
76
|
+
"webhook-timestamp": timestamp,
|
|
77
|
+
"webhook-signature": signatures.join(" ")
|
|
78
|
+
};
|
|
79
|
+
} };
|
|
80
|
+
}
|
|
81
|
+
function header(input, name) {
|
|
82
|
+
const headers = input.headers;
|
|
83
|
+
if (headers instanceof Headers) return headers.get(name) ?? void 0;
|
|
84
|
+
return Object.hasOwn(headers, name) ? headers[name] : void 0;
|
|
85
|
+
}
|
|
86
|
+
async function bodyOf(input) {
|
|
87
|
+
if (input instanceof Request) {
|
|
88
|
+
const read = await readBodyText(input);
|
|
89
|
+
return read.ok ? read.text : void 0;
|
|
90
|
+
}
|
|
91
|
+
return input.body;
|
|
92
|
+
}
|
|
93
|
+
function parseSignatures(value) {
|
|
94
|
+
const parsed = [];
|
|
95
|
+
for (const entry of value.split(" ")) {
|
|
96
|
+
const comma = entry.indexOf(",");
|
|
97
|
+
const alg = entry.slice(0, comma);
|
|
98
|
+
if (comma <= 0 || alg !== "v1" && alg !== "v1a") continue;
|
|
99
|
+
const bytes = decodeBase64(entry.slice(comma + 1));
|
|
100
|
+
if (bytes?.length === (alg === "v1" ? 32 : 64)) parsed.push({
|
|
101
|
+
alg,
|
|
102
|
+
bytes
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return parsed;
|
|
106
|
+
}
|
|
107
|
+
function importEd25519(jwk, usage) {
|
|
108
|
+
const material = usage === "sign" ? {
|
|
109
|
+
kty: "OKP",
|
|
110
|
+
crv: "Ed25519",
|
|
111
|
+
x: jwk.x,
|
|
112
|
+
d: jwk.d
|
|
113
|
+
} : {
|
|
114
|
+
kty: "OKP",
|
|
115
|
+
crv: "Ed25519",
|
|
116
|
+
x: jwk.x
|
|
117
|
+
};
|
|
118
|
+
return crypto.subtle.importKey("jwk", material, "Ed25519", false, [usage]);
|
|
119
|
+
}
|
|
120
|
+
async function publicKeys(jwks) {
|
|
121
|
+
return (await Promise.all(jwks.keys.filter(isEd25519).map((jwk) => importEd25519(jwk, "verify").catch(() => void 0)))).filter((key) => key !== void 0);
|
|
122
|
+
}
|
|
123
|
+
async function anyVerifies(algorithm, keys, signatures, content) {
|
|
124
|
+
return (await Promise.all(keys.flatMap((key) => signatures.map((signature) => crypto.subtle.verify(algorithm, key, signature.bytes, content))))).includes(true);
|
|
125
|
+
}
|
|
126
|
+
function isJwks(value) {
|
|
127
|
+
return typeof value === "object" && value !== null && "keys" in value && Array.isArray(value.keys);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Verifies Standard Webhooks deliveries signed `v1` with one of `secret` or
|
|
131
|
+
* `v1a` with a key from `jwks`, within `tolerance` seconds, and records each
|
|
132
|
+
* `webhook-id` in `replay`. Throws only on an invalid `secret`.
|
|
133
|
+
*/
|
|
134
|
+
function webhookVerifier(options) {
|
|
135
|
+
const secrets = options.secret === void 0 ? [] : typeof options.secret === "string" ? [options.secret] : options.secret;
|
|
136
|
+
for (const secret of secrets) secretBytes(secret);
|
|
137
|
+
const hmacKeys = Promise.all(secrets.map((secret) => hmacKey(secret, "verify")));
|
|
138
|
+
const tolerance = options.tolerance ?? DEFAULT_TOLERANCE;
|
|
139
|
+
const jwks = options.jwks;
|
|
140
|
+
let cached;
|
|
141
|
+
async function ed25519Keys(now) {
|
|
142
|
+
if (jwks === void 0) return [];
|
|
143
|
+
if (isJwks(jwks)) {
|
|
144
|
+
cached ??= {
|
|
145
|
+
keys: await publicKeys(jwks),
|
|
146
|
+
until: Number.POSITIVE_INFINITY
|
|
147
|
+
};
|
|
148
|
+
return cached.keys;
|
|
149
|
+
}
|
|
150
|
+
if (cached !== void 0 && cached.until > now) return cached.keys;
|
|
151
|
+
try {
|
|
152
|
+
const response = await (options.fetch ?? fetch)(String(jwks), { headers: { accept: "application/jwk-set+json, application/json" } });
|
|
153
|
+
const parsed = response.ok ? await response.json() : void 0;
|
|
154
|
+
if (!isJwks(parsed)) return;
|
|
155
|
+
cached = {
|
|
156
|
+
keys: await publicKeys(parsed),
|
|
157
|
+
until: now + JWKS_TTL_SECONDS
|
|
158
|
+
};
|
|
159
|
+
return cached.keys;
|
|
160
|
+
} catch {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async function signatureValid(signatures, content, now) {
|
|
165
|
+
const v1 = signatures.filter((signature) => signature.alg === "v1");
|
|
166
|
+
const v1a = signatures.filter((signature) => signature.alg === "v1a");
|
|
167
|
+
if (v1.length > 0 && await anyVerifies("HMAC", await hmacKeys, v1, content)) return;
|
|
168
|
+
if (v1a.length === 0) return "invalid-signature";
|
|
169
|
+
const keys = await ed25519Keys(now);
|
|
170
|
+
if (keys === void 0) return "keys-unavailable";
|
|
171
|
+
if (await anyVerifies("Ed25519", keys, v1a, content)) return;
|
|
172
|
+
return "invalid-signature";
|
|
173
|
+
}
|
|
174
|
+
async function claim(id, expiresAt) {
|
|
175
|
+
const key = `webhook:${id}`;
|
|
176
|
+
try {
|
|
177
|
+
if (options.replay.claim !== void 0) return await options.replay.claim(key, expiresAt);
|
|
178
|
+
if (await options.replay.seen(key)) return false;
|
|
179
|
+
await options.replay.remember(key, expiresAt);
|
|
180
|
+
return true;
|
|
181
|
+
} catch {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return { async verify(input) {
|
|
186
|
+
const id = header(input, "webhook-id");
|
|
187
|
+
const timestamp = header(input, "webhook-timestamp");
|
|
188
|
+
const signature = header(input, "webhook-signature");
|
|
189
|
+
if (id === void 0 || timestamp === void 0 || signature === void 0) return {
|
|
190
|
+
ok: false,
|
|
191
|
+
cause: "missing-headers"
|
|
192
|
+
};
|
|
193
|
+
const body = await bodyOf(input);
|
|
194
|
+
const signatures = parseSignatures(signature);
|
|
195
|
+
if (body === void 0 || !validId(id) || !/^\d{1,12}$/u.test(timestamp) || signatures.length === 0) return {
|
|
196
|
+
ok: false,
|
|
197
|
+
cause: "malformed"
|
|
198
|
+
};
|
|
199
|
+
const now = nowSeconds(options.now?.());
|
|
200
|
+
const sent = Number(timestamp);
|
|
201
|
+
if (Math.abs(now - sent) > tolerance) return {
|
|
202
|
+
ok: false,
|
|
203
|
+
cause: "timestamp-out-of-range"
|
|
204
|
+
};
|
|
205
|
+
let failure;
|
|
206
|
+
try {
|
|
207
|
+
failure = await signatureValid(signatures, signedContent(id, timestamp, body), now);
|
|
208
|
+
} catch {
|
|
209
|
+
failure = "invalid-signature";
|
|
210
|
+
}
|
|
211
|
+
if (failure !== void 0) return {
|
|
212
|
+
ok: false,
|
|
213
|
+
cause: failure
|
|
214
|
+
};
|
|
215
|
+
if (!await claim(id, sent + tolerance)) return {
|
|
216
|
+
ok: false,
|
|
217
|
+
cause: "replayed"
|
|
218
|
+
};
|
|
219
|
+
return {
|
|
220
|
+
ok: true,
|
|
221
|
+
id,
|
|
222
|
+
timestamp: rfc3339(sent),
|
|
223
|
+
body
|
|
224
|
+
};
|
|
225
|
+
} };
|
|
226
|
+
}
|
|
227
|
+
//#endregion
|
|
228
|
+
export { webhookVerifier as n, webhookSigner as t };
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
//#region src/terminal/storage.ts
|
|
6
|
+
const FILE_MODE = 384;
|
|
7
|
+
const DIR_MODE = 448;
|
|
8
|
+
const GROUP_OR_WORLD = 63;
|
|
9
|
+
function credentialsPath(service, runtime) {
|
|
10
|
+
if (runtime.configDir !== void 0) return path.join(runtime.configDir, "credentials.json");
|
|
11
|
+
const home = runtime.homedir ?? homedir;
|
|
12
|
+
const env = runtime.env ?? process.env;
|
|
13
|
+
if ((runtime.platform ?? process.platform) === "win32") {
|
|
14
|
+
const appData = env["APPDATA"] ?? path.join(home(), "AppData", "Roaming");
|
|
15
|
+
return path.join(appData, service, "credentials.json");
|
|
16
|
+
}
|
|
17
|
+
const xdg = env["XDG_CONFIG_HOME"] ?? path.join(home(), ".config");
|
|
18
|
+
return path.join(xdg, service, "credentials.json");
|
|
19
|
+
}
|
|
20
|
+
function parseCredential(value) {
|
|
21
|
+
if (!isRecord(value) || typeof value["access_token"] !== "string") return null;
|
|
22
|
+
return compact({
|
|
23
|
+
access_token: value["access_token"],
|
|
24
|
+
refresh_token: typeof value["refresh_token"] === "string" ? value["refresh_token"] : void 0,
|
|
25
|
+
expires_at: typeof value["expires_at"] === "number" ? value["expires_at"] : void 0,
|
|
26
|
+
token_type: typeof value["token_type"] === "string" ? value["token_type"] : void 0,
|
|
27
|
+
scope: typeof value["scope"] === "string" ? value["scope"] : void 0
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function keyringEntry(storage, profile) {
|
|
31
|
+
if (storage.keyring === void 0) return null;
|
|
32
|
+
try {
|
|
33
|
+
return new storage.keyring(storage.service, profile);
|
|
34
|
+
} catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function readKeyring(storage, profile) {
|
|
39
|
+
const entry = keyringEntry(storage, profile);
|
|
40
|
+
if (entry === null) return null;
|
|
41
|
+
try {
|
|
42
|
+
const raw = entry.getPassword();
|
|
43
|
+
return typeof raw === "string" ? parseCredential(JSON.parse(raw)) : null;
|
|
44
|
+
} catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function readCredentials(storage, profile, runtime) {
|
|
49
|
+
return readKeyring(storage, profile) ?? readFile(storage.service, profile, runtime);
|
|
50
|
+
}
|
|
51
|
+
function readFile(service, profile, runtime) {
|
|
52
|
+
const file = credentialsPath(service, runtime);
|
|
53
|
+
let raw;
|
|
54
|
+
try {
|
|
55
|
+
const stat = statSync(file);
|
|
56
|
+
if ((runtime.platform ?? process.platform) !== "win32" && (stat.mode & GROUP_OR_WORLD) !== 0) return null;
|
|
57
|
+
raw = readFileSync(file, "utf8");
|
|
58
|
+
} catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const parsed = JSON.parse(raw);
|
|
63
|
+
if (!isRecord(parsed) || !isRecord(parsed["profiles"])) return null;
|
|
64
|
+
return parseCredential(parsed["profiles"][profile]);
|
|
65
|
+
} catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The OS keychain when `storage.keyring` is set and works; otherwise the
|
|
71
|
+
* mode-0600 file. Answers the store it wrote.
|
|
72
|
+
*/
|
|
73
|
+
function writeCredentials(storage, profile, credential, runtime) {
|
|
74
|
+
const entry = keyringEntry(storage, profile);
|
|
75
|
+
if (entry !== null) try {
|
|
76
|
+
entry.setPassword(JSON.stringify(credential));
|
|
77
|
+
deleteFile(storage.service, profile, runtime);
|
|
78
|
+
return "keychain";
|
|
79
|
+
} catch {}
|
|
80
|
+
writeFile(storage.service, profile, credential, runtime);
|
|
81
|
+
return "file";
|
|
82
|
+
}
|
|
83
|
+
function writeFile(service, profile, credential, runtime) {
|
|
84
|
+
const file = credentialsPath(service, runtime);
|
|
85
|
+
mkdirSync(path.dirname(file), {
|
|
86
|
+
recursive: true,
|
|
87
|
+
mode: DIR_MODE
|
|
88
|
+
});
|
|
89
|
+
let profiles = {};
|
|
90
|
+
try {
|
|
91
|
+
const existing = JSON.parse(readFileSync(file, "utf8"));
|
|
92
|
+
if (isRecord(existing) && isRecord(existing["profiles"])) profiles = existing["profiles"];
|
|
93
|
+
} catch {
|
|
94
|
+
profiles = {};
|
|
95
|
+
}
|
|
96
|
+
profiles[profile] = credential;
|
|
97
|
+
writeFileSync(file, `${JSON.stringify({ profiles }, null, 2)}\n`, {
|
|
98
|
+
encoding: "utf8",
|
|
99
|
+
mode: FILE_MODE
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function deleteCredentials(storage, profile, runtime) {
|
|
103
|
+
const entry = keyringEntry(storage, profile);
|
|
104
|
+
if (entry !== null) try {
|
|
105
|
+
entry.deletePassword();
|
|
106
|
+
} catch {}
|
|
107
|
+
deleteFile(storage.service, profile, runtime);
|
|
108
|
+
}
|
|
109
|
+
function deleteFile(service, profile, runtime) {
|
|
110
|
+
const file = credentialsPath(service, runtime);
|
|
111
|
+
let parsed;
|
|
112
|
+
try {
|
|
113
|
+
parsed = JSON.parse(readFileSync(file, "utf8"));
|
|
114
|
+
} catch {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (!isRecord(parsed) || !isRecord(parsed["profiles"])) return;
|
|
118
|
+
const profiles = {};
|
|
119
|
+
for (const key of Object.keys(parsed["profiles"])) if (key !== profile) profiles[key] = parsed["profiles"][key];
|
|
120
|
+
if (Object.keys(profiles).length === 0) {
|
|
121
|
+
try {
|
|
122
|
+
unlinkSync(file);
|
|
123
|
+
} catch {}
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
writeFileSync(file, `${JSON.stringify({ profiles }, null, 2)}\n`, {
|
|
127
|
+
encoding: "utf8",
|
|
128
|
+
mode: FILE_MODE
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
//#endregion
|
|
132
|
+
export { writeCredentials as i, deleteCredentials as n, readCredentials as r, credentialsPath as t };
|
|
@@ -1,46 +1,10 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
3
|
import { i as flattenApprovers } from "./approvers-CqPOLD-o.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { n as matchGrantee } from "./grantee-match-
|
|
7
|
-
import {
|
|
8
|
-
//#region src/approvals/types.ts
|
|
9
|
-
const APPROVAL_HEADER = "PermDock-Approval";
|
|
10
|
-
const DEFAULT_APPROVAL_TTL_MS = 36e5;
|
|
11
|
-
/** The approvals a request needs in total: `approvers.quorum` (or 1), or the sum of its stages' quorums. */
|
|
12
|
-
function approvalQuorum(request) {
|
|
13
|
-
const stages = request.approvers?.stages;
|
|
14
|
-
if (stages !== void 0) return stages.reduce((sum, stage) => sum + (stage.quorum ?? 1), 0);
|
|
15
|
-
return request.approvers?.quorum ?? 1;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* The instant from which `approvers.escalation.to` may approve, in epoch
|
|
19
|
-
* milliseconds, or `undefined` when the request has no escalation or its
|
|
20
|
-
* `after` does not parse (then nobody escalates: fail-closed).
|
|
21
|
-
*/
|
|
22
|
-
function escalationOpenAt(request) {
|
|
23
|
-
const after = request.approvers?.escalation?.after;
|
|
24
|
-
const seconds = parseDuration(after);
|
|
25
|
-
if (seconds === void 0) return;
|
|
26
|
-
return Date.parse(request.createdAt) + seconds * 1e3;
|
|
27
|
-
}
|
|
28
|
-
/** 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. */
|
|
29
|
-
function stageEscalationOpenAt(request, stage) {
|
|
30
|
-
const seconds = parseDuration(stage.escalation?.after);
|
|
31
|
-
if (seconds === void 0) return;
|
|
32
|
-
return Date.parse(request.createdAt) + seconds * 1e3;
|
|
33
|
-
}
|
|
34
|
-
/** The key a verdict's `relations` lists a relation approver under. */
|
|
35
|
-
function approverRelationKey(item) {
|
|
36
|
-
return JSON.stringify([
|
|
37
|
-
item.resource,
|
|
38
|
-
item.relation,
|
|
39
|
-
item.through ?? null,
|
|
40
|
-
item.depth ?? null
|
|
41
|
-
]);
|
|
42
|
-
}
|
|
43
|
-
//#endregion
|
|
4
|
+
import { a as durationOf, i as dateAt } from "./time-DkWjdL98.js";
|
|
5
|
+
import { s as rootMembershipId } from "./scopes-CUPSjo9q.js";
|
|
6
|
+
import { n as matchGrantee } from "./grantee-match-DHArqY82.js";
|
|
7
|
+
import { a as escalationOpenAt, i as approverRelationKey, o as stageEscalationOpenAt, r as approvalQuorum, s as ApprovalError } from "./types-DqzsnlSA.js";
|
|
44
8
|
//#region src/approvals/page.ts
|
|
45
9
|
const DEFAULT_PAGE_SIZE = 50;
|
|
46
10
|
const MAX_PAGE_SIZE = 200;
|
|
@@ -187,12 +151,14 @@ function matchesFilter(request, filter) {
|
|
|
187
151
|
function assertSeparateApprover(request, by, requireDistinctApprover) {
|
|
188
152
|
const principal = by.principal;
|
|
189
153
|
if (principal === null) throw new ApprovalError("approver-unauthenticated", "approver must be authenticated");
|
|
154
|
+
if (principal.kind === "link" || principal.kind === "feed" || principal.kind === "contact") throw new ApprovalError("approver-not-eligible", "a link, a feed or a contact cannot approve");
|
|
155
|
+
if (by.actor?.kind === "support") throw new ApprovalError("approver-not-eligible", "a support session cannot approve");
|
|
190
156
|
if (request.subject.actor !== void 0 && principal.id === request.subject.actor.id) throw new ApprovalError("approver-is-actor", "approver is the actor of this request");
|
|
191
157
|
if ((requireDistinctApprover || request.approvers?.distinct !== false) && request.subject.principal !== null && principal.id === request.subject.principal.id) throw new ApprovalError("approver-is-principal", "approver is the principal of this request");
|
|
192
158
|
return principal;
|
|
193
159
|
}
|
|
194
160
|
function assertNotRepeated(request, id) {
|
|
195
|
-
if ((request.approvals ?? []).some((item) => item.by === id)) throw new ApprovalError("approver-repeated", "approver has already approved this request");
|
|
161
|
+
if ((request.approvals ?? []).some((item) => item.by === id || item.onBehalfOf === id)) throw new ApprovalError("approver-repeated", "approver has already approved this request");
|
|
196
162
|
}
|
|
197
163
|
function vouchedRule(verdict) {
|
|
198
164
|
return typeof verdict.vouched === "string" && verdict.vouched !== "" ? verdict.vouched : void 0;
|
|
@@ -207,7 +173,8 @@ function vouchedRule(verdict) {
|
|
|
207
173
|
* two stages. `relations` are the relation approvers `by` holds on the
|
|
208
174
|
* request's resource (see `ApprovalVerdict.relations`).
|
|
209
175
|
*/
|
|
210
|
-
function assertApprover(request, by, requireDistinctApprover,
|
|
176
|
+
function assertApprover(request, by, requireDistinctApprover, at, relations = [], permissions = []) {
|
|
177
|
+
const now = dateAt(at);
|
|
211
178
|
const principal = assertSeparateApprover(request, by, requireDistinctApprover);
|
|
212
179
|
const tenant = request.subject.principal?.tenant;
|
|
213
180
|
if (tenant !== void 0 && !belongsToTenant(by, tenant)) throw new ApprovalError("approver-not-eligible", "approver does not belong to the request tenant");
|
|
@@ -251,13 +218,24 @@ function isSystemSubject(by) {
|
|
|
251
218
|
* should write the result only when the stored row is still pending with the
|
|
252
219
|
* same number of approvals, so two approvers racing both count.
|
|
253
220
|
*/
|
|
254
|
-
function applyApprovalVerdict(request, verdict,
|
|
221
|
+
function applyApprovalVerdict(request, verdict, at) {
|
|
222
|
+
const now = dateAt(at);
|
|
255
223
|
const principal = verdict.by.principal;
|
|
256
224
|
if (principal === null) throw new ApprovalError("approver-unauthenticated", "approver must be authenticated");
|
|
257
225
|
if (request.status !== "pending") throw new ApprovalError("approval-not-pending", "approval is not pending");
|
|
258
226
|
if (Date.parse(request.expiresAt) <= now.getTime()) throw new ApprovalError("approval-expired", "approval has expired");
|
|
259
227
|
const vouched = vouchedRule(verdict);
|
|
260
|
-
const
|
|
228
|
+
const behalf = vouched === void 0 ? verdict.onBehalfOf : void 0;
|
|
229
|
+
let stage;
|
|
230
|
+
if (verdict.status === "rejected" && isSystemSubject(verdict.by) || vouched !== void 0) stage = void 0;
|
|
231
|
+
else if (behalf === void 0) stage = assertApprover(request, verdict.by, false, { epochMilliseconds: now.getTime() }, verdict.relations, verdict.permissions);
|
|
232
|
+
else {
|
|
233
|
+
const delegate = assertSeparateApprover(request, verdict.by, false);
|
|
234
|
+
const tenant = request.subject.principal?.tenant;
|
|
235
|
+
if (tenant !== void 0 && !belongsToTenant(verdict.by, tenant)) throw new ApprovalError("approver-not-eligible", "approver does not belong to the request tenant");
|
|
236
|
+
assertNotRepeated(request, delegate.id);
|
|
237
|
+
stage = assertApprover(request, behalf.subject, false, { epochMilliseconds: now.getTime() }, behalf.relations ?? [], behalf.permissions ?? []);
|
|
238
|
+
}
|
|
261
239
|
if (vouched !== void 0) assertNotRepeated(request, assertSeparateApprover(request, verdict.by, false).id);
|
|
262
240
|
if (verdict.status === "rejected") return freezeDeep(compact({
|
|
263
241
|
...request,
|
|
@@ -271,7 +249,9 @@ function applyApprovalVerdict(request, verdict, now = /* @__PURE__ */ new Date()
|
|
|
271
249
|
by: principal.id,
|
|
272
250
|
at: now.toISOString(),
|
|
273
251
|
stage,
|
|
274
|
-
vouched
|
|
252
|
+
vouched,
|
|
253
|
+
onBehalfOf: behalf === void 0 ? void 0 : behalf.subject.principal?.id,
|
|
254
|
+
delegation: behalf?.delegation
|
|
275
255
|
})];
|
|
276
256
|
if (vouched === void 0 && !isComplete(request, approvals)) return freezeDeep(compact({
|
|
277
257
|
...request,
|
|
@@ -302,26 +282,32 @@ function isStale(request, now) {
|
|
|
302
282
|
return request.status === "expired" || Date.parse(request.expiresAt) <= now.getTime();
|
|
303
283
|
}
|
|
304
284
|
function memoryApprovalStore(options = {}) {
|
|
305
|
-
|
|
285
|
+
if (options.ttl !== void 0 && durationOf(options.ttl) === void 0) throw new RangeError(`PermDock: memoryApprovalStore ttl must be a whole number of seconds above 0, got ${String(options.ttl)}`);
|
|
286
|
+
const ttl = options.ttl ?? 3600;
|
|
306
287
|
const records = /* @__PURE__ */ new Map();
|
|
288
|
+
const clock = (at) => dateAt(at ?? options.now?.());
|
|
307
289
|
return {
|
|
308
290
|
ttl,
|
|
309
291
|
create(request) {
|
|
310
292
|
const current = records.get(request.token);
|
|
311
|
-
if (current !== void 0 && !isStale(current,
|
|
293
|
+
if (current !== void 0 && !isStale(current, clock())) return;
|
|
312
294
|
records.set(request.token, freezeDeep(request));
|
|
313
295
|
},
|
|
314
296
|
get(token) {
|
|
315
297
|
return records.get(token) ?? null;
|
|
316
298
|
},
|
|
299
|
+
getById(id) {
|
|
300
|
+
return records.values().find((request) => request.id === id) ?? null;
|
|
301
|
+
},
|
|
317
302
|
resolve(token, verdict) {
|
|
318
303
|
const current = records.get(token);
|
|
319
304
|
if (current === void 0) throw new ApprovalError("approval-not-found", "approval was not found");
|
|
320
|
-
const next = applyApprovalVerdict(current, verdict
|
|
305
|
+
const next = applyApprovalVerdict(current, verdict);
|
|
321
306
|
records.set(token, next);
|
|
322
307
|
return next;
|
|
323
308
|
},
|
|
324
|
-
consume(token,
|
|
309
|
+
consume(token, at) {
|
|
310
|
+
const now = clock(at);
|
|
325
311
|
const current = records.get(token);
|
|
326
312
|
if (current?.status !== "approved" || current.consumedAt !== void 0 || Date.parse(current.expiresAt) <= now.getTime()) return null;
|
|
327
313
|
const next = freezeDeep({
|
|
@@ -336,12 +322,13 @@ function memoryApprovalStore(options = {}) {
|
|
|
336
322
|
for (const request of records.values()) if (matchesFilter(request, query)) matching.push(request);
|
|
337
323
|
return pageApprovals(matching, query);
|
|
338
324
|
},
|
|
339
|
-
expire(
|
|
325
|
+
expire(at) {
|
|
326
|
+
const now = clock(at);
|
|
340
327
|
let count = 0;
|
|
341
328
|
const instant = now.getTime();
|
|
342
329
|
for (const [token, request] of records) {
|
|
343
330
|
const deadline = Date.parse(request.expiresAt);
|
|
344
|
-
if (request.status !== "pending" && deadline + ttl <= instant) {
|
|
331
|
+
if (request.status !== "pending" && deadline + ttl * 1e3 <= instant) {
|
|
345
332
|
records.delete(token);
|
|
346
333
|
continue;
|
|
347
334
|
}
|
|
@@ -356,7 +343,7 @@ function memoryApprovalStore(options = {}) {
|
|
|
356
343
|
return count;
|
|
357
344
|
},
|
|
358
345
|
cancel(filter, meta) {
|
|
359
|
-
const now =
|
|
346
|
+
const now = clock();
|
|
360
347
|
let count = 0;
|
|
361
348
|
for (const [token, request] of records) {
|
|
362
349
|
if (request.status !== "pending" || !matchesFilter(request, filter)) continue;
|
|
@@ -368,4 +355,4 @@ function memoryApprovalStore(options = {}) {
|
|
|
368
355
|
};
|
|
369
356
|
}
|
|
370
357
|
//#endregion
|
|
371
|
-
export {
|
|
358
|
+
export { approvalPageSize as a, listAllApprovals as c, memoryApprovalStore as i, pageApprovals as l, assertApprover as n, decodeApprovalCursor as o, matchesApprovers as r, encodeApprovalCursor as s, applyApprovalVerdict as t };
|
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import {
|
|
3
|
-
import { c as
|
|
4
|
-
import {
|
|
5
|
-
import { n as
|
|
2
|
+
import { g as secondsOf } from "./time-DkWjdL98.js";
|
|
3
|
+
import { c as rowIdOf } from "./delegation-DaXVdDhM.js";
|
|
4
|
+
import { c as nowSeconds } from "./tenancy-DN2QAx9z.js";
|
|
5
|
+
import { n as payloadDigest } from "./token-BLZcjQgt.js";
|
|
6
|
+
import { n as parseSnapshot } from "./snapshot-CXUWfsNy.js";
|
|
7
|
+
import { s as snapshotClaim } from "./where-scope-Dv-WTP-w.js";
|
|
8
|
+
import { n as fromSnapshot, t as emptySnapshot } from "./from-snapshot-D2lZt4Dd.js";
|
|
6
9
|
import { t as timeoutSignal } from "./timeout-D51niuQP.js";
|
|
10
|
+
//#region src/client/source.ts
|
|
11
|
+
/** A compact JWS: three non-empty dot-separated parts. */
|
|
12
|
+
function isJws(value) {
|
|
13
|
+
const parts = value.split(".");
|
|
14
|
+
return parts.length === 3 && parts.every((part) => part.length > 0);
|
|
15
|
+
}
|
|
16
|
+
function isPromiseLike(value) {
|
|
17
|
+
return typeof value === "object" && value !== null && "then" in value && typeof value.then === "function";
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
7
20
|
//#region src/client/approvals.ts
|
|
8
21
|
/** Ceiling for the approval poll backoff after a failed status request. */
|
|
9
22
|
const APPROVAL_BACKOFF_CAP_MS = 6e4;
|
|
@@ -237,16 +250,6 @@ function storeRequest(fetchImpl, headers) {
|
|
|
237
250
|
});
|
|
238
251
|
}
|
|
239
252
|
//#endregion
|
|
240
|
-
//#region src/client/source.ts
|
|
241
|
-
/** A compact JWS: three non-empty dot-separated parts. */
|
|
242
|
-
function isJws(value) {
|
|
243
|
-
const parts = value.split(".");
|
|
244
|
-
return parts.length === 3 && parts.every((part) => part.length > 0);
|
|
245
|
-
}
|
|
246
|
-
function isPromiseLike(value) {
|
|
247
|
-
return typeof value === "object" && value !== null && "then" in value && typeof value.then === "function";
|
|
248
|
-
}
|
|
249
|
-
//#endregion
|
|
250
253
|
//#region src/client/store.ts
|
|
251
254
|
function withTenant(source, tenant) {
|
|
252
255
|
if (tenant === void 0) return source;
|
|
@@ -380,11 +383,13 @@ function createClientStore(options) {
|
|
|
380
383
|
return "ready";
|
|
381
384
|
};
|
|
382
385
|
const isStale = () => {
|
|
383
|
-
const
|
|
384
|
-
|
|
386
|
+
const issuedAt = secondsOf(snapshot.issuedAt) ?? 0;
|
|
387
|
+
const expiresAt = secondsOf(snapshot.expiresAt);
|
|
388
|
+
const maxAge = issuedAt > 0 ? options.maxAge : void 0;
|
|
389
|
+
if (expiresAt === void 0 && maxAge === void 0) return false;
|
|
385
390
|
const now = nowSeconds();
|
|
386
|
-
if (
|
|
387
|
-
return maxAge !== void 0 && now -
|
|
391
|
+
if (expiresAt !== void 0 && expiresAt <= now) return true;
|
|
392
|
+
return maxAge !== void 0 && now - issuedAt > maxAge;
|
|
388
393
|
};
|
|
389
394
|
const serverOnly = () => {
|
|
390
395
|
hydrate(emptySnapshot());
|
|
@@ -401,8 +406,8 @@ function createClientStore(options) {
|
|
|
401
406
|
const verifyJws = async (raw) => {
|
|
402
407
|
if (options.verifier === void 0) return;
|
|
403
408
|
try {
|
|
404
|
-
const verified = await options.verifier.verify(raw, { typ: "permdock
|
|
405
|
-
return verified.ok ? verified.claims
|
|
409
|
+
const verified = await options.verifier.verify(raw, { typ: "vnd.permdock.snapshot+jwt" });
|
|
410
|
+
return verified.ok ? snapshotClaim(verified.claims) : void 0;
|
|
406
411
|
} catch {
|
|
407
412
|
return;
|
|
408
413
|
}
|
|
@@ -565,7 +570,7 @@ function createClientStore(options) {
|
|
|
565
570
|
signed = body;
|
|
566
571
|
body = await verifyJws(body);
|
|
567
572
|
ok = body !== void 0;
|
|
568
|
-
}
|
|
573
|
+
} else if (ok && options.verifier !== void 0) ok = false;
|
|
569
574
|
refreshing -= 1;
|
|
570
575
|
if (started !== generation || seq !== refreshSeq) {
|
|
571
576
|
emit();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { n as getUi, r as providePermDock, t as getStore } from "./context-
|
|
1
|
+
import { a as livePermDock, c as rolesView, d as subjectView, f as tenantView, n as describeWith, o as permissionSet, r as filterResult, t as approvalHandle } from "./views-DTIIO-oQ.js";
|
|
2
|
+
import { n as getUi, r as providePermDock, t as getStore } from "./context-bbFHR-0D.js";
|
|
3
3
|
import { readable, toStore } from "svelte/store";
|
|
4
4
|
//#region src/svelte/stores.ts
|
|
5
5
|
function fromStore(store, compute) {
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { r as
|
|
4
|
-
import { r as
|
|
5
|
-
import {
|
|
6
|
-
import { n as PermDockSvelteOptions } from "./types-ByUo56un.js";
|
|
1
|
+
import { Nn as Decision, nr as Membership } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { r as Role, w as Permission } from "./vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { r as DescribeOptions, t as DecisionDescription } from "./describe-BZUsixiL.js";
|
|
4
|
+
import { a as FilterResult, c as PermissionSet, d as RolesOptions, f as SubjectView, l as PermissionState, p as TenantView, r as ClientPermDock, t as ApprovalHandle } from "./types-BNORmDM8.js";
|
|
5
|
+
import { n as SveltePermDockOptions } from "./types-fbZ7JEXr.js";
|
|
7
6
|
import { Readable } from "svelte/store";
|
|
8
7
|
//#region src/svelte/stores.d.ts
|
|
9
|
-
declare function setPermDock(options:
|
|
8
|
+
declare function setPermDock(options: SveltePermDockOptions): ClientPermDock;
|
|
10
9
|
declare function getPermDock(): ClientPermDock;
|
|
11
10
|
/** `describe` with the provider's `messages`; a call's own `messages` win. Call it during component init. */
|
|
12
11
|
declare function getDescribe(): (decision: Decision, options?: DescribeOptions) => DecisionDescription;
|
|
@@ -15,7 +14,7 @@ declare function permissions(references: () => readonly Permission[], data?: ()
|
|
|
15
14
|
declare function filtered<T>(reference: Permission<string, T, "instance">, rows: () => readonly T[]): Readable<FilterResult<T>>;
|
|
16
15
|
declare function tenant(): Readable<TenantView>;
|
|
17
16
|
declare function memberships(): Readable<readonly Membership[]>;
|
|
18
|
-
declare function roles(options?: () =>
|
|
17
|
+
declare function roles(options?: () => RolesOptions): Readable<{
|
|
19
18
|
readonly roles: readonly Role[];
|
|
20
19
|
}>;
|
|
21
20
|
declare function assignable(): Readable<readonly Role[]>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { o as ProtectOptions } from "./server-types-
|
|
1
|
+
import { w as Permission } from "./vocabulary-D6lPdb4Z.js";
|
|
2
|
+
import { o as ProtectOptions } from "./server-types-BLd4MnBX.js";
|
|
3
3
|
//#region src/server/stream.d.ts
|
|
4
4
|
type StreamProtectOptions = ProtectOptions & {
|
|
5
5
|
/**
|