permdock 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -35
- package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
- package/dist/a2a/index.d.ts +8 -6
- package/dist/a2a/index.js +21 -31
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-B4R5fnMU.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -23
- package/dist/ai-sdk/index.js +38 -21
- package/dist/app-data-MuyzVqX8.js +60 -0
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-Dg8XsRaO.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +228 -75
- package/dist/automation-BMZPIVUM.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +11 -23
- package/dist/better-supabase/index.d.ts +438 -86
- package/dist/better-supabase/index.js +1027 -184
- package/dist/bind--9EFVYWF.d.ts +38 -0
- package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/build-instance-BMnAudHn.js +52 -0
- package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
- package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/catalog-BECMPrwc.js +100 -0
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +26 -30
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +15 -45
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +20 -6
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +240 -347
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
- package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
- package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
- package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
- package/dist/constants-DcJABbLW.js +20 -0
- package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +18 -18
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/create-DnrmLnLW.js +323 -0
- package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/deciding-columns-Sq12mEA6.js +123 -0
- package/dist/delegation-DaXVdDhM.js +286 -0
- package/dist/delegation-input-FTxMK3ji.js +19 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/denied-text-D8jDHgsl.d.ts +19 -0
- package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
- package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/doctor-DFjUxf2f.js +2361 -0
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +6 -14
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +14 -13
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +23 -29
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +14 -12
- package/dist/fastify/index.d.ts +26 -13
- package/dist/fastify/index.js +17 -36
- package/dist/fetch-adapter-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
- package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
- package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
- package/dist/grantee-Cn1HyUsI.js +254 -0
- package/dist/grantee-conditions-CcXf8hMM.js +271 -0
- package/dist/grantee-match-DHArqY82.js +142 -0
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +14 -13
- package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
- package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
- package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/index-DOVf7RJv.d.ts +900 -0
- package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +20 -14
- package/dist/index.js +33 -23
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +166 -145
- package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +6 -14
- package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-CtKR3GXL.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
- package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
- package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
- package/dist/mcp/index.d.ts +36 -9
- package/dist/mcp/index.js +476 -448
- package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +20 -20
- package/dist/next/index.d.ts +40 -20
- package/dist/next/index.js +37 -39
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/ocsf-BFp-PZZA.js +126 -0
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +18 -25
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
- package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +23 -20
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +53 -27
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/output-files-DhRBBE4n.js +138 -0
- package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
- package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
- package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
- package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
- package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +47 -29
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.d.ts +502 -0
- package/dist/permission-registry-Br4jSNVi.js +385 -0
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/policy-DLZJ5gAp.js +399 -0
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +6 -12
- package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
- package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/protected-DEPHc2xV.d.ts +38 -0
- package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
- package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
- package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -63
- package/dist/react-native/index.js +45 -27
- package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/relation-walk-3OyDBF0S.js +186 -0
- package/dist/relations-BnCWnJGI.js +163 -0
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/request-context-BTRTG7OT.js +71 -0
- package/dist/request-context-C2_1lchh.d.ts +5 -0
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/resource-relations-D_jw0BFx.js +243 -0
- package/dist/retire-CALjIQ7e.js +240 -0
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
- package/dist/role-builder-CXbis5-X.js +623 -0
- package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
- package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
- package/dist/server/index.d.ts +13 -134
- package/dist/server/index.js +13 -10
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/shared-CD11nBbC.js +304 -0
- package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +24 -25
- package/dist/solid/index.js +41 -11
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
- package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
- package/dist/sql-B5T1IL83.js +55 -0
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +440 -106
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
- package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
- package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
- package/dist/stores-ClZUgeoP.d.ts +30 -0
- package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +13 -6
- package/dist/supabase/middleware.js +16 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
- package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +11 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +26 -12
- package/dist/svelte/runtime.d.ts +10 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +5 -5
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +36 -316
- package/dist/testing/index.d.ts +391 -106
- package/dist/testing/index.js +4574 -1286
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
- package/dist/tool-refusal-CMLN5xhn.js +41 -0
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +18 -17
- package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
- package/dist/types-BNORmDM8.d.ts +172 -0
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
- package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/types-fbZ7JEXr.d.ts +89 -0
- package/dist/types-tIgIeIKJ.d.ts +66 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
- package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
- package/dist/validity-CZ7-y0Cj.js +79 -0
- package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
- package/dist/verify-DbCL9bnB.js +1770 -0
- package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
- package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
- package/dist/vue/index.d.ts +25 -21
- package/dist/vue/index.js +25 -9
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +13 -37
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/wrap-Bd1Tejur.d.ts +15 -0
- package/dist/wrap-gX61EtpB.js +27 -0
- package/package.json +140 -41
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +129 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +13 -8
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
- package/skills/permdock-wire/SKILL.md +18 -12
- package/skills/permdock-wire/references/adapters.md +146 -50
- package/skills/permdock-wire/references/policy-options.md +15 -6
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DbYAuNkG.js +0 -224
- package/dist/arazzo-C9chp3ST.js +0 -54
- package/dist/bind-C_ob3LKa.d.ts +0 -25
- package/dist/catalog-CRW5Mx_B.js +0 -2
- package/dist/catalog-CYj-mX2O.js +0 -48
- package/dist/catalog-DWF5cYqB.js +0 -55
- package/dist/cloud-CfwZ39Rl.js +0 -50
- package/dist/cloud-DWLXO2af.js +0 -118
- package/dist/collect-CHB22Sx4.js +0 -83
- package/dist/collect-DSWOk19R.js +0 -2
- package/dist/commands-BeaGNj_o.js +0 -97
- package/dist/config-ir40y8m0.js +0 -36
- package/dist/create-CMwIl-w2.js +0 -253
- package/dist/delegation-D8pUEuce.js +0 -103
- package/dist/diff-C9RDjjhs.js +0 -48
- package/dist/doctor-Djh6JDEk.js +0 -53
- package/dist/doctor-DvH0IQff.js +0 -1194
- package/dist/doctor-collect-CjdO0wQX.js +0 -665
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/evaluation-items-CfCCejQd.js +0 -40
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-BMl1RxoX.js +0 -26
- package/dist/grantee-Cv5Sogfv.js +0 -602
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-0nNqHspG.d.ts +0 -6
- package/dist/index-BNc7Wer_.d.ts +0 -483
- package/dist/index-C7Tw7MaW.d.ts +0 -201
- package/dist/instance-options-Dhhcnm3y.js +0 -22
- package/dist/load-DwJUafYN.js +0 -2
- package/dist/manifest-iaoBXHKc.js +0 -783
- package/dist/map-AcxK9o_D.js +0 -147
- package/dist/may-use-DndQ5tQ-.js +0 -77
- package/dist/openapi-CQTsgKoB.js +0 -164
- package/dist/permdock-CbgvLnuo.js +0 -3479
- package/dist/permissions-DVoF6dMt.js +0 -662
- package/dist/policy-xyWg7QdR.js +0 -1122
- package/dist/powersync-CrBX8hY6.js +0 -2
- package/dist/powersync-DE19b9dT.js +0 -62
- package/dist/protected-BdnIEFkY.d.ts +0 -27
- package/dist/protected-xAr24FEC.d.ts +0 -40
- package/dist/relations-cjOL01hZ.js +0 -505
- package/dist/rls-P-BeBx0n.js +0 -238
- package/dist/rls-graph-CHwx0V8q.js +0 -435
- package/dist/rls-ownership-DcYlZ09B.js +0 -843
- package/dist/rls-shared-Cewd_-zI.js +0 -495
- package/dist/rls-verify-CMv9H3wV.js +0 -746
- package/dist/run-BWc9qqvE.js +0 -174
- package/dist/server-DlZ28Oz5.js +0 -268
- package/dist/sink-B1fZzIMf.d.ts +0 -104
- package/dist/sink-Bd9PSyfq.js +0 -141
- package/dist/skills-C5CbhhpG.js +0 -56
- package/dist/snapshot-Enxd0n-s.js +0 -975
- package/dist/sql-xdg5f4Fi.js +0 -27
- package/dist/src-BDwEZWrZ.js +0 -568
- package/dist/store-jOBYpiXC.d.ts +0 -36
- package/dist/stores-C0IMQrGI.d.ts +0 -52
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-config-Bj3iDH2I.js +0 -472
- package/dist/supabase-hook-gd3s8bxB.js +0 -2
- package/dist/supabase-s4o9s1O1.js +0 -83
- package/dist/thenable-okc2xDsj.js +0 -10
- package/dist/types-BnIEz1sU.d.ts +0 -48
- package/dist/types-Bvc4oWT6.d.ts +0 -9
- package/dist/types-CKNSyIf_.d.ts +0 -52
- package/dist/types-Cq_H8N_X.d.ts +0 -197
- package/dist/usage-B0YuTQRO.js +0 -42
- package/dist/usage-DorAJiU_.js +0 -2
- package/dist/vocabulary-DA8a8zif.d.ts +0 -56
- package/dist/watch-BwxLTYMZ.js +0 -2
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { t as freezeCopy } from "./freeze-CrU8nQeX.js";
|
|
2
|
+
import { a as ownRecord } from "./paths-DXSHAMIa.js";
|
|
3
|
+
//#region src/core/principal-source.ts
|
|
4
|
+
function nonEmpty(value) {
|
|
5
|
+
return typeof value === "string" && value.trim() !== "";
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A `PrincipalIdentity` in the form sources compare: an email trimmed and
|
|
9
|
+
* lower-cased with no provider or workspace, a chat identity with a
|
|
10
|
+
* provider. Anything else, inherited fields included, is `undefined`.
|
|
11
|
+
*/
|
|
12
|
+
function normalizeIdentity(value) {
|
|
13
|
+
const record = ownRecord(value);
|
|
14
|
+
const kind = record?.["kind"];
|
|
15
|
+
const raw = record?.["value"];
|
|
16
|
+
if (record === void 0 || !nonEmpty(raw)) return;
|
|
17
|
+
if (kind === "email") return Object.freeze({
|
|
18
|
+
kind,
|
|
19
|
+
value: raw.trim().toLowerCase()
|
|
20
|
+
});
|
|
21
|
+
if (kind !== "chat") return;
|
|
22
|
+
const provider = record["provider"];
|
|
23
|
+
const workspace = record["workspace"];
|
|
24
|
+
if (!nonEmpty(provider) || workspace !== void 0 && !nonEmpty(workspace)) return;
|
|
25
|
+
return Object.freeze({
|
|
26
|
+
kind,
|
|
27
|
+
provider,
|
|
28
|
+
value: raw,
|
|
29
|
+
...workspace === void 0 ? {} : { workspace }
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function identityKey(identity) {
|
|
33
|
+
return JSON.stringify([
|
|
34
|
+
identity.kind,
|
|
35
|
+
identity.provider ?? null,
|
|
36
|
+
identity.workspace ?? null,
|
|
37
|
+
identity.value
|
|
38
|
+
]);
|
|
39
|
+
}
|
|
40
|
+
function principalWithId(found, id) {
|
|
41
|
+
const foundId = ownRecord(found)?.["id"];
|
|
42
|
+
if (!nonEmpty(foundId) || id !== void 0 && foundId !== id) return null;
|
|
43
|
+
return found;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* `source.principal(id, { tenant })`, failing closed: no source, `null`, a
|
|
47
|
+
* throw, a rejection or a principal with another id is `null`.
|
|
48
|
+
*/
|
|
49
|
+
async function loadPrincipal(source, id, tenant) {
|
|
50
|
+
if (source === void 0 || !nonEmpty(id)) return null;
|
|
51
|
+
try {
|
|
52
|
+
return principalWithId(await source.principal(id, tenant === void 0 ? {} : { tenant }), id);
|
|
53
|
+
} catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* `source.principalByIdentity(identity)` over the normalised identity,
|
|
59
|
+
* failing closed: no source or method, an invalid identity, `null`, a throw
|
|
60
|
+
* or a rejection is `null`.
|
|
61
|
+
*/
|
|
62
|
+
async function loadPrincipalByIdentity(source, identity) {
|
|
63
|
+
const normalized = normalizeIdentity(identity);
|
|
64
|
+
if (source?.principalByIdentity === void 0 || normalized === void 0) return null;
|
|
65
|
+
try {
|
|
66
|
+
return principalWithId(await source.principalByIdentity(normalized));
|
|
67
|
+
} catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* In-process principals for tests and single-replica apps. `identities`
|
|
73
|
+
* links an email or chat identity to a principal id; each answer is a fresh
|
|
74
|
+
* frozen copy. `tenant` is not a filter, as for a database source.
|
|
75
|
+
*/
|
|
76
|
+
function memoryPrincipalSource(input) {
|
|
77
|
+
const byId = /* @__PURE__ */ new Map();
|
|
78
|
+
for (const principal of input.principals) {
|
|
79
|
+
if (!nonEmpty(principal.id) || byId.has(principal.id)) throw new TypeError("PermDock: memoryPrincipalSource needs a unique, non-empty id per principal");
|
|
80
|
+
byId.set(principal.id, principal);
|
|
81
|
+
}
|
|
82
|
+
const links = /* @__PURE__ */ new Map();
|
|
83
|
+
for (const link of input.identities ?? []) {
|
|
84
|
+
const identity = normalizeIdentity(link.identity);
|
|
85
|
+
if (identity === void 0 || !nonEmpty(link.principal)) throw new TypeError("PermDock: memoryPrincipalSource identities link an email or chat identity to a principal id");
|
|
86
|
+
links.set(identityKey(identity), link.principal);
|
|
87
|
+
}
|
|
88
|
+
const copyOf = (id) => {
|
|
89
|
+
const found = id === void 0 ? void 0 : byId.get(id);
|
|
90
|
+
return found === void 0 ? null : freezeCopy(structuredClone(found));
|
|
91
|
+
};
|
|
92
|
+
return Object.freeze({
|
|
93
|
+
principal(id) {
|
|
94
|
+
return copyOf(id);
|
|
95
|
+
},
|
|
96
|
+
principalByIdentity(identity) {
|
|
97
|
+
const normalized = normalizeIdentity(identity);
|
|
98
|
+
return normalized === void 0 ? null : copyOf(links.get(identityKey(normalized)));
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//#endregion
|
|
103
|
+
export { loadPrincipalByIdentity as n, memoryPrincipalSource as r, loadPrincipal as t };
|
package/dist/prisma/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Rt as Instant, ir as Subject, lr as Condition } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { c as WhereResult } from "../permdock-D7eeLJER.js";
|
|
2
3
|
import { r as RelationsMapping } from "../graph-sql-B-dsAT6j.js";
|
|
3
4
|
import { n as WithSubjectOptions, t as RowCheck } from "../row-check-Dt35czLy.js";
|
|
4
5
|
//#region src/prisma/model-fields.d.ts
|
|
@@ -29,7 +30,8 @@ export declare function prismaModelFields(datamodel: string | PrismaDatamodel, m
|
|
|
29
30
|
type PrismaWhereOptions = {
|
|
30
31
|
readonly fields?: Readonly<Record<string, string>>;
|
|
31
32
|
readonly subject?: Subject;
|
|
32
|
-
|
|
33
|
+
/** The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults to the current time. */
|
|
34
|
+
readonly now?: Instant;
|
|
33
35
|
readonly listFields?: readonly string[];
|
|
34
36
|
readonly requiredFields?: readonly string[];
|
|
35
37
|
/** Required and list fields read from the schema by `prismaModelFields`; adds to `requiredFields` and `listFields`. */
|
|
@@ -93,7 +95,8 @@ type PrismaCombinators = {
|
|
|
93
95
|
type PrismaPredicateOptions = {
|
|
94
96
|
readonly fields?: Readonly<Record<string, string>>;
|
|
95
97
|
readonly subject?: Subject;
|
|
96
|
-
|
|
98
|
+
/** The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults to the current time. */
|
|
99
|
+
readonly now?: Instant;
|
|
97
100
|
/** Required and list fields from `prismaModelFields`; `contains` on a list field is refused. */
|
|
98
101
|
readonly model?: PrismaModelFields;
|
|
99
102
|
readonly listFields?: readonly string[];
|
package/dist/prisma/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { t as compact } from "../compact-
|
|
1
|
+
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
|
|
3
|
-
import {
|
|
4
|
-
import { n as PermDockValidationError } from "../validation-error-
|
|
5
|
-
import { a as relatedRowGuard, l as renderGraphSql, n as escapeLike, s as relatedTargetsSql, t as compileWhere, u as restrictedRowsSql } from "../compile-
|
|
6
|
-
import {
|
|
3
|
+
import { t as assertSafeKey } from "../paths-DXSHAMIa.js";
|
|
4
|
+
import { n as PermDockValidationError } from "../validation-error-ZfUHbKvf.js";
|
|
5
|
+
import { a as relatedRowGuard, l as renderGraphSql, n as escapeLike, s as relatedTargetsSql, t as compileWhere, u as restrictedRowsSql } from "../compile-CMqMx_IN.js";
|
|
6
|
+
import { n as statementText, o as rowCheckOf, r as subjectStatements, s as loadPeer } from "../subject-settings-CkEwrw3W.js";
|
|
7
7
|
//#region src/prisma/to-where.ts
|
|
8
8
|
function fieldTests(options) {
|
|
9
9
|
const mapped = (field) => fieldName(field, options.fields);
|
|
@@ -165,13 +165,7 @@ async function checkRow(delegate, input, unique, options = {}) {
|
|
|
165
165
|
//#region src/prisma/predicate.ts
|
|
166
166
|
function loadCombinators(injected) {
|
|
167
167
|
if (injected !== void 0) return injected;
|
|
168
|
-
|
|
169
|
-
try {
|
|
170
|
-
if (loader === void 0) throw new Error("no module loader");
|
|
171
|
-
return loader.createRequire(import.meta.url)("@prisma/orm-postgres/orm-client");
|
|
172
|
-
} catch {
|
|
173
|
-
throw new Error("PermDock: toPredicate needs @prisma/orm-postgres; pass `combinators` on runtimes without require");
|
|
174
|
-
}
|
|
168
|
+
return loadPeer("@prisma/orm-postgres/orm-client", "PermDock: toPredicate needs @prisma/orm-postgres; pass `combinators` on runtimes without require");
|
|
175
169
|
}
|
|
176
170
|
function refused$1(detail) {
|
|
177
171
|
return new PermDockValidationError({
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
2
|
-
import { n as
|
|
3
|
-
import {
|
|
4
|
-
import { a as
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
+
import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
|
|
4
|
+
import { a as problemType, i as stepUpOf, n as problemDetails, o as statusProblem, t as notFoundDetails } from "./problem-details-cn5X30gZ.js";
|
|
5
|
+
import { a as deniedMessage, i as approvalMessage } from "./errors-BKy0EfhN.js";
|
|
6
|
+
import { a as durationOf, g as secondsOf, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
5
7
|
//#region src/server/problem.ts
|
|
6
8
|
function quoted(value) {
|
|
7
9
|
return `"${value.replaceAll(/["\\]/gu, "")}"`;
|
|
@@ -66,16 +68,11 @@ function problemResponse(details, permission, decision, extra, credentials) {
|
|
|
66
68
|
}
|
|
67
69
|
/** RFC 9457 413 for a batch over `max` evaluations. */
|
|
68
70
|
function batchTooLarge(max) {
|
|
69
|
-
return problemResponse({
|
|
70
|
-
type: `${PROBLEM_BASE}/payload-too-large`,
|
|
71
|
-
title: "Payload too large",
|
|
72
|
-
status: 413,
|
|
73
|
-
detail: `evaluations batch exceeds ${String(max)}`
|
|
74
|
-
});
|
|
71
|
+
return problemResponse(statusProblem(413, `evaluations batch exceeds ${String(max)}`));
|
|
75
72
|
}
|
|
76
73
|
function validationProblem(detail) {
|
|
77
74
|
return problemResponse(compact({
|
|
78
|
-
type:
|
|
75
|
+
type: problemType("validation"),
|
|
79
76
|
title: "Invalid request",
|
|
80
77
|
status: 400,
|
|
81
78
|
detail
|
|
@@ -86,14 +83,14 @@ function resourceRef(permission) {
|
|
|
86
83
|
}
|
|
87
84
|
function isLimitDetail(value) {
|
|
88
85
|
if (value === null || typeof value !== "object") return false;
|
|
89
|
-
const { count,
|
|
90
|
-
return Number.isFinite(count) &&
|
|
86
|
+
const { count, per, resetsAt } = value;
|
|
87
|
+
return Number.isFinite(count) && durationOf(per) !== void 0 && secondsOf(resetsAt) !== void 0;
|
|
91
88
|
}
|
|
92
89
|
/**
|
|
93
90
|
* `Retry-After` plus the `RateLimit` / `RateLimit-Policy` fields of
|
|
94
91
|
* draft-ietf-httpapi-ratelimit-headers-11, one policy per exhausted grant.
|
|
95
92
|
*/
|
|
96
|
-
function rateLimitHeaders(decision, now
|
|
93
|
+
function rateLimitHeaders(decision, now) {
|
|
97
94
|
if (decision.outcome !== "denied") return {};
|
|
98
95
|
const policies = /* @__PURE__ */ new Map();
|
|
99
96
|
for (const denial of decision.denials) {
|
|
@@ -105,12 +102,12 @@ function rateLimitHeaders(decision, now = Date.now() / 1e3) {
|
|
|
105
102
|
const entries = [...policies].map(([name, detail]) => ({
|
|
106
103
|
name: sfString(name),
|
|
107
104
|
detail,
|
|
108
|
-
wait: Math.max(1,
|
|
105
|
+
wait: Math.max(1, (secondsOf(detail.resetsAt) ?? 0) - nowSeconds(now))
|
|
109
106
|
}));
|
|
110
107
|
return {
|
|
111
108
|
"Retry-After": String(Math.min(...entries.map((entry) => entry.wait))),
|
|
112
109
|
RateLimit: entries.map((entry) => `${entry.name};r=0;t=${entry.wait}`).join(", "),
|
|
113
|
-
"RateLimit-Policy": entries.map((entry) => `${entry.name};q=${entry.detail.count};w=${entry.detail.
|
|
110
|
+
"RateLimit-Policy": entries.map((entry) => `${entry.name};q=${entry.detail.count};w=${entry.detail.per}`).join(", ")
|
|
114
111
|
};
|
|
115
112
|
}
|
|
116
113
|
/**
|
|
@@ -162,14 +159,14 @@ function problemFromDecision(decision, permission, subject, options = {}) {
|
|
|
162
159
|
function notFoundProblem(instance) {
|
|
163
160
|
return problemResponse(notFoundDetails(instance));
|
|
164
161
|
}
|
|
165
|
-
const ANONYMOUS = {
|
|
162
|
+
const ANONYMOUS = freezeDeep({
|
|
166
163
|
outcome: "denied",
|
|
167
164
|
denials: [{
|
|
168
165
|
role: null,
|
|
169
166
|
reason: "anonymous"
|
|
170
167
|
}],
|
|
171
168
|
alternatives: []
|
|
172
|
-
};
|
|
169
|
+
});
|
|
173
170
|
/** The `401` for a request with no subject, with the RFC 6750 challenge its credentials call for. */
|
|
174
171
|
function unauthenticatedProblem(credentials) {
|
|
175
172
|
return decisionResponse(problemDetails({
|
|
@@ -177,15 +174,9 @@ function unauthenticatedProblem(credentials) {
|
|
|
177
174
|
detail: "anonymous"
|
|
178
175
|
}), ANONYMOUS, { credentials });
|
|
179
176
|
}
|
|
177
|
+
/** RFC 9110 section 15.5.6: a `405` lists the methods the resource supports in `Allow`. */
|
|
180
178
|
function methodNotAllowed(allow) {
|
|
181
|
-
|
|
182
|
-
type: `${PROBLEM_BASE}/method-not-allowed`,
|
|
183
|
-
title: "Method not allowed",
|
|
184
|
-
status: 405,
|
|
185
|
-
detail: `use ${allow}`
|
|
186
|
-
});
|
|
187
|
-
response.headers.set("Allow", allow);
|
|
188
|
-
return response;
|
|
179
|
+
return problemResponse(statusProblem(405, `use ${allow}`), void 0, void 0, { Allow: allow });
|
|
189
180
|
}
|
|
190
181
|
//#endregion
|
|
191
|
-
export {
|
|
182
|
+
export { methodNotAllowed as a, problemResponse as c, validationProblem as d, wwwAuthenticate as f, decisionResponse as i, protectedResourceMetadataUrl as l, batchTooLarge as n, notFoundProblem as o, bearerChallenge as r, problemFromDecision as s, ANONYMOUS as t, unauthenticatedProblem as u };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Nn as Decision } from "./policy-types-DzwivBgR.js";
|
|
2
2
|
//#region src/core/problem-details.d.ts
|
|
3
3
|
type Disclosure = "hide" | "reveal";
|
|
4
4
|
/** The plans a `not-entitled` denial asks for; empty unless every denial is `not-entitled`. */
|
|
@@ -1,29 +1,41 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
2
|
-
import { t as PROBLEM_BASE } from "./validation-error-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
if (typeof value === "number") return Number.isFinite(value) ? value : void 0;
|
|
9
|
-
if (typeof value !== "object") return;
|
|
10
|
-
try {
|
|
11
|
-
return JSON.parse(JSON.stringify(value));
|
|
12
|
-
} catch {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { t as PROBLEM_BASE } from "./validation-error-ZfUHbKvf.js";
|
|
3
|
+
import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
|
|
4
|
+
//#region src/core/problem-types.ts
|
|
5
|
+
/** The `type` URI of a PermDock problem type. */
|
|
6
|
+
function problemType(type) {
|
|
7
|
+
return `${PROBLEM_BASE}/${type}`;
|
|
15
8
|
}
|
|
16
|
-
|
|
9
|
+
/** RFC 9110 section 15 reason phrases for the statuses PermDock answers with. */
|
|
10
|
+
const REASON_PHRASES = {
|
|
11
|
+
400: "Bad Request",
|
|
12
|
+
401: "Unauthorized",
|
|
13
|
+
403: "Forbidden",
|
|
14
|
+
404: "Not Found",
|
|
15
|
+
405: "Method Not Allowed",
|
|
16
|
+
406: "Not Acceptable",
|
|
17
|
+
409: "Conflict",
|
|
18
|
+
412: "Precondition Failed",
|
|
19
|
+
413: "Content Too Large",
|
|
20
|
+
415: "Unsupported Media Type",
|
|
21
|
+
422: "Unprocessable Content",
|
|
22
|
+
428: "Precondition Required",
|
|
23
|
+
429: "Too Many Requests",
|
|
24
|
+
500: "Internal Server Error",
|
|
25
|
+
501: "Not Implemented",
|
|
26
|
+
502: "Bad Gateway",
|
|
27
|
+
503: "Service Unavailable"
|
|
28
|
+
};
|
|
29
|
+
/** An `about:blank` problem: the `title` is the status's reason phrase. */
|
|
30
|
+
function statusProblem(status, detail, extra = {}) {
|
|
17
31
|
return compact({
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
detail
|
|
32
|
+
type: "about:blank",
|
|
33
|
+
title: REASON_PHRASES[status] ?? "Error",
|
|
34
|
+
status,
|
|
35
|
+
detail,
|
|
36
|
+
...extra
|
|
22
37
|
});
|
|
23
38
|
}
|
|
24
|
-
function wireDenials(denials) {
|
|
25
|
-
return denials.map(wireDenial);
|
|
26
|
-
}
|
|
27
39
|
//#endregion
|
|
28
40
|
//#region src/core/problem-details.ts
|
|
29
41
|
/** Reasons that only arise once a matching grant was found, so they reveal nothing hidden. */
|
|
@@ -63,13 +75,7 @@ function stepUpOf(decision) {
|
|
|
63
75
|
}
|
|
64
76
|
/** The `404` a missing row and a hidden one share, so the two read the same. */
|
|
65
77
|
function notFoundDetails(instance) {
|
|
66
|
-
return compact({
|
|
67
|
-
type: `${PROBLEM_BASE}/not-found`,
|
|
68
|
-
title: "Not found",
|
|
69
|
-
status: 404,
|
|
70
|
-
detail: "No such resource",
|
|
71
|
-
instance
|
|
72
|
-
});
|
|
78
|
+
return statusProblem(404, "No such resource", compact({ instance }));
|
|
73
79
|
}
|
|
74
80
|
/**
|
|
75
81
|
* The RFC 9457 body for a decision that is not `granted`. One status matrix
|
|
@@ -86,7 +92,7 @@ function problemDetails(input) {
|
|
|
86
92
|
resource: input.resource
|
|
87
93
|
});
|
|
88
94
|
if (decision.outcome === "approval-required") return compact({
|
|
89
|
-
type:
|
|
95
|
+
type: problemType("approval-required"),
|
|
90
96
|
title: "Approval required",
|
|
91
97
|
status: 403,
|
|
92
98
|
detail: input.detail,
|
|
@@ -96,16 +102,12 @@ function problemDetails(input) {
|
|
|
96
102
|
});
|
|
97
103
|
const reasons = new Set(decision.denials.map((denial) => denial.reason));
|
|
98
104
|
if (input.disclosure === "hide" && ![...reasons].every((reason) => HOLDS_GRANT.has(reason))) return notFoundDetails(input.instance);
|
|
99
|
-
if (reasons.has("anonymous")) return compact({
|
|
100
|
-
type: `${PROBLEM_BASE}/unauthenticated`,
|
|
101
|
-
title: "Authentication required",
|
|
102
|
-
status: 401,
|
|
103
|
-
detail: "Authenticate and repeat the request",
|
|
105
|
+
if (reasons.has("anonymous")) return statusProblem(401, "Authenticate and repeat the request", compact({
|
|
104
106
|
instance: input.instance,
|
|
105
107
|
permission: input.permission
|
|
106
|
-
});
|
|
108
|
+
}));
|
|
107
109
|
const denied = compact({
|
|
108
|
-
type:
|
|
110
|
+
type: problemType("denied"),
|
|
109
111
|
title: "Permission denied",
|
|
110
112
|
status: 403,
|
|
111
113
|
detail: input.detail,
|
|
@@ -116,29 +118,30 @@ function problemDetails(input) {
|
|
|
116
118
|
if (reasons.has("insufficient-user-authentication")) return {
|
|
117
119
|
...denied,
|
|
118
120
|
status: 401,
|
|
119
|
-
type:
|
|
121
|
+
type: problemType("step-up-required"),
|
|
122
|
+
title: "Step-up required",
|
|
120
123
|
...stepUpOf(decision)
|
|
121
124
|
};
|
|
122
125
|
const plans = requiredPlans(decision);
|
|
123
126
|
if (plans.length > 0) return {
|
|
124
127
|
...denied,
|
|
125
|
-
type:
|
|
128
|
+
type: problemType("not-entitled"),
|
|
126
129
|
title: "Plan upgrade required",
|
|
127
130
|
plans
|
|
128
131
|
};
|
|
129
132
|
if (reasons.size > 0 && [...reasons].every((reason) => reason === "limit")) return {
|
|
130
133
|
...denied,
|
|
131
134
|
status: 429,
|
|
132
|
-
type:
|
|
135
|
+
type: problemType("rate-limited"),
|
|
133
136
|
title: "Rate limit exceeded"
|
|
134
137
|
};
|
|
135
138
|
if (reasons.has("limit-unavailable") && [...reasons].every((reason) => reason === "limit" || reason === "limit-unavailable")) return {
|
|
136
139
|
...denied,
|
|
137
140
|
status: 503,
|
|
138
|
-
type:
|
|
141
|
+
type: problemType("limit-unavailable"),
|
|
139
142
|
title: "Rate limit unavailable"
|
|
140
143
|
};
|
|
141
144
|
return denied;
|
|
142
145
|
}
|
|
143
146
|
//#endregion
|
|
144
|
-
export {
|
|
147
|
+
export { problemType as a, stepUpOf as i, problemDetails as n, statusProblem as o, requiredPlans as r, notFoundDetails as t };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
//#region src/cli/cloud/problem-types.ts
|
|
2
|
+
/** The Problem `type` of `GET /v1/projects/{id}/policy` before the first `cloud push`. */
|
|
3
|
+
const POLICY_NOT_PUBLISHED = "https://permdock.com/problems/policy-not-published";
|
|
4
|
+
//#endregion
|
|
5
|
+
export { POLICY_NOT_PUBLISHED as t };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { cancel, confirm, isCancel, multiselect } from "@clack/prompts";
|
|
2
|
-
//#region src/cli/
|
|
2
|
+
//#region src/cli/core/prompt.ts
|
|
3
3
|
/** What a command reports when the person at the terminal cancels a prompt. */
|
|
4
4
|
const CANCELLED = {
|
|
5
|
-
code:
|
|
5
|
+
code: 130,
|
|
6
6
|
output: "Cancelled."
|
|
7
7
|
};
|
|
8
8
|
/** A yes or no question; `undefined` when cancelled. */
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Nn as Decision, j as PolicyVocabulary, 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, o as GateMode, p as TenantView, r as ClientPermDock, s as GateView, t as ApprovalHandle } from "./types-BNORmDM8.js";
|
|
5
|
+
import { r as ProtectedProps } from "./types-tIgIeIKJ.js";
|
|
6
|
+
import { ReactNode } from "react";
|
|
7
|
+
//#region src/react/hooks.d.ts
|
|
8
|
+
declare function usePermDock<V extends PolicyVocabulary = PolicyVocabulary>(): ClientPermDock<V>;
|
|
9
|
+
declare function usePermission(permission: Permission, data?: unknown): PermissionState;
|
|
10
|
+
declare function usePermissions(permissions: readonly Permission[], data?: unknown): PermissionSet;
|
|
11
|
+
declare function useFilter<T>(permission: Permission<string, T, "instance">, rows: readonly T[]): FilterResult<T>;
|
|
12
|
+
declare function useTenant(): TenantView;
|
|
13
|
+
declare function useMemberships(): readonly Membership[];
|
|
14
|
+
declare function useRoles(options?: RolesOptions): {
|
|
15
|
+
readonly roles: readonly Role[];
|
|
16
|
+
};
|
|
17
|
+
declare function useAssignableRoles(): readonly Role[];
|
|
18
|
+
declare function useAssignablePermissions(options?: {
|
|
19
|
+
readonly tenant?: string;
|
|
20
|
+
}): readonly Permission[];
|
|
21
|
+
declare function useSubject(): SubjectView;
|
|
22
|
+
/** `describe` with the provider's `messages`; a call's own `messages` win. */
|
|
23
|
+
declare function useDescribe(): (decision: Decision, options?: DescribeOptions) => DecisionDescription;
|
|
24
|
+
declare function useApproval(decision: Decision): ApprovalHandle;
|
|
25
|
+
/**
|
|
26
|
+
* What a permission-gated control renders: `hidden`, `disabled`,
|
|
27
|
+
* `needsApproval`, `upgrade` and a localised `reason`, from the same
|
|
28
|
+
* snapshot as `usePermission`. React and React Native share it; a recipe
|
|
29
|
+
* renders the fields and decides nothing.
|
|
30
|
+
*/
|
|
31
|
+
declare function useGate(permission: Permission, data?: unknown, options?: {
|
|
32
|
+
readonly mode?: GateMode;
|
|
33
|
+
}): GateView;
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/react/protected.d.ts
|
|
36
|
+
declare function Protected(props: ProtectedProps): ReactNode;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { useDescribe as a, useMemberships as c, usePermissions as d, useRoles as f, useAssignableRoles as i, usePermDock as l, useTenant as m, useApproval as n, useFilter as o, useSubject as p, useAssignablePermissions as r, useGate as s, Protected as t, usePermission as u };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as storeOf } from "./store-options-
|
|
2
|
-
import {
|
|
3
|
-
import { i as PermDockStoreContext, r as PermDockSnapshotPromiseContext } from "./live-options-
|
|
1
|
+
import { n as storeOf } from "./store-options-BqEakYRa.js";
|
|
2
|
+
import { c as rolesView, d as subjectView, f as tenantView, i as gateView, l as scopedTenant, n as describeWith, o as permissionSet, r as filterResult, s as protectedView, t as approvalHandle, u as slotContent } from "./views-DTIIO-oQ.js";
|
|
3
|
+
import { a as PermDockUiContext, i as PermDockStoreContext, r as PermDockSnapshotPromiseContext } from "./live-options-BaAFCIiu.js";
|
|
4
4
|
import { Suspense, use, useMemo, useSyncExternalStore } from "react";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
//#region src/react/hooks.ts
|
|
@@ -72,29 +72,58 @@ function useSubject() {
|
|
|
72
72
|
const permdock = usePermDock();
|
|
73
73
|
return useMemo(() => subjectView(permdock), [permdock]);
|
|
74
74
|
}
|
|
75
|
+
/** `describe` with the provider's `messages`; a call's own `messages` win. */
|
|
76
|
+
function useDescribe() {
|
|
77
|
+
const { messages } = use(PermDockUiContext);
|
|
78
|
+
return useMemo(() => describeWith(messages), [messages]);
|
|
79
|
+
}
|
|
75
80
|
function useApproval(decision) {
|
|
76
81
|
return approvalHandle(storeOf(usePermDock()), decision);
|
|
77
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* What a permission-gated control renders: `hidden`, `disabled`,
|
|
85
|
+
* `needsApproval`, `upgrade` and a localised `reason`, from the same
|
|
86
|
+
* snapshot as `usePermission`. React and React Native share it; a recipe
|
|
87
|
+
* renders the fields and decides nothing.
|
|
88
|
+
*/
|
|
89
|
+
function useGate(permission, data, options = {}) {
|
|
90
|
+
const state = usePermission(permission, data);
|
|
91
|
+
const describeDecision = useDescribe();
|
|
92
|
+
const mode = options.mode ?? "disable";
|
|
93
|
+
return useMemo(() => gateView(state, (decision) => describeDecision(decision, { permission }), mode), [
|
|
94
|
+
state,
|
|
95
|
+
describeDecision,
|
|
96
|
+
permission,
|
|
97
|
+
mode
|
|
98
|
+
]);
|
|
99
|
+
}
|
|
78
100
|
//#endregion
|
|
79
101
|
//#region src/react/protected.tsx
|
|
80
102
|
function Protected(props) {
|
|
81
|
-
|
|
103
|
+
const { defaults } = use(PermDockUiContext);
|
|
104
|
+
const pending = slotContent("pending", props, defaults);
|
|
105
|
+
if (pending === void 0) return /* @__PURE__ */ jsx(Guard, { ...props });
|
|
82
106
|
return /* @__PURE__ */ jsx(Suspense, {
|
|
83
|
-
fallback:
|
|
107
|
+
fallback: pending,
|
|
84
108
|
children: /* @__PURE__ */ jsx(Guard, { ...props })
|
|
85
109
|
});
|
|
86
110
|
}
|
|
87
111
|
function Guard(props) {
|
|
112
|
+
const { defaults } = use(PermDockUiContext);
|
|
88
113
|
const root = usePermDock();
|
|
89
114
|
const local = usePermission(props.permission, props.data);
|
|
90
115
|
const scoped = useMemo(() => scopedTenant(root, props.tenant), [root, props.tenant]);
|
|
91
116
|
const view = protectedView(local, root, props.permission, props.data, scoped);
|
|
92
117
|
switch (view.slot) {
|
|
93
|
-
case "pending": return
|
|
94
|
-
case "
|
|
118
|
+
case "pending": return slotContent("pending", props, defaults) ?? null;
|
|
119
|
+
case "denied": return render(slotContent("denied", props, defaults), view.decision);
|
|
120
|
+
case "approval": return render(slotContent("approval", props, defaults), view.decision);
|
|
95
121
|
case "default": return typeof props.children === "function" ? props.children(view.decision) : props.children;
|
|
96
122
|
default: return view;
|
|
97
123
|
}
|
|
98
124
|
}
|
|
125
|
+
function render(content, decision) {
|
|
126
|
+
return typeof content === "function" ? content(decision) : content ?? null;
|
|
127
|
+
}
|
|
99
128
|
//#endregion
|
|
100
|
-
export {
|
|
129
|
+
export { useDescribe as a, useMemberships as c, usePermissions as d, useRoles as f, useAssignableRoles as i, usePermDock as l, useTenant as m, useApproval as n, useFilter as o, useSubject as p, useAssignablePermissions as r, useGate as s, Protected as t, usePermission as u };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
2
|
-
import { t as emptySnapshot } from "./from-snapshot-
|
|
3
|
-
import { t as adapterStore } from "./store-options-
|
|
4
|
-
import { i as PermDockStoreContext, n as useKeyed, r as PermDockSnapshotPromiseContext, t as useLiveOptions } from "./live-options-
|
|
5
|
-
import { useLayoutEffect } from "react";
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { t as emptySnapshot } from "./from-snapshot-D2lZt4Dd.js";
|
|
3
|
+
import { t as adapterStore } from "./store-options-BqEakYRa.js";
|
|
4
|
+
import { a as PermDockUiContext, i as PermDockStoreContext, n as useKeyed, r as PermDockSnapshotPromiseContext, t as useLiveOptions } from "./live-options-BaAFCIiu.js";
|
|
5
|
+
import { useLayoutEffect, useMemo } from "react";
|
|
6
6
|
import { jsx } from "react/jsx-runtime";
|
|
7
7
|
//#region src/react/provider.tsx
|
|
8
8
|
function PermDockProvider(props) {
|
|
@@ -20,7 +20,10 @@ function PermDockProvider(props) {
|
|
|
20
20
|
maxAge: props.maxAge,
|
|
21
21
|
verifier: live.verifier,
|
|
22
22
|
awaiting,
|
|
23
|
-
passCache: true
|
|
23
|
+
passCache: true,
|
|
24
|
+
onSnapshot: live.onSnapshot,
|
|
25
|
+
onClear: live.onClear,
|
|
26
|
+
approvalInterval: props.approvalInterval
|
|
24
27
|
}), props.snapshot ?? emptySnapshot()), [
|
|
25
28
|
props.snapshot,
|
|
26
29
|
props.endpoint,
|
|
@@ -31,8 +34,15 @@ function PermDockProvider(props) {
|
|
|
31
34
|
live.headers,
|
|
32
35
|
props.maxAge,
|
|
33
36
|
live.verifier,
|
|
34
|
-
awaiting
|
|
37
|
+
awaiting,
|
|
38
|
+
live.onSnapshot,
|
|
39
|
+
live.onClear,
|
|
40
|
+
props.approvalInterval
|
|
35
41
|
]);
|
|
42
|
+
const ui = useMemo(() => ({
|
|
43
|
+
defaults: props.defaults,
|
|
44
|
+
messages: props.messages
|
|
45
|
+
}), [props.defaults, props.messages]);
|
|
36
46
|
useLayoutEffect(() => {
|
|
37
47
|
if (promise !== null && !suspend) store.track(promise);
|
|
38
48
|
}, [
|
|
@@ -42,9 +52,12 @@ function PermDockProvider(props) {
|
|
|
42
52
|
]);
|
|
43
53
|
return /* @__PURE__ */ jsx(PermDockStoreContext, {
|
|
44
54
|
value: store,
|
|
45
|
-
children: /* @__PURE__ */ jsx(
|
|
46
|
-
value:
|
|
47
|
-
children:
|
|
55
|
+
children: /* @__PURE__ */ jsx(PermDockUiContext, {
|
|
56
|
+
value: ui,
|
|
57
|
+
children: /* @__PURE__ */ jsx(PermDockSnapshotPromiseContext, {
|
|
58
|
+
value: suspend ? promise : null,
|
|
59
|
+
children: props.children
|
|
60
|
+
})
|
|
48
61
|
})
|
|
49
62
|
});
|
|
50
63
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as PermDockProviderProps } from "./types-tIgIeIKJ.js";
|
|
2
2
|
import { ReactElement } from "react";
|
|
3
3
|
//#region src/react/provider.d.ts
|
|
4
4
|
declare function PermDockProvider(props: PermDockProviderProps): ReactElement;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
2
|
-
import { t as emptySnapshot } from "./from-snapshot-
|
|
3
|
-
import { i as isPromiseLike, t as adapterStore } from "./store-options-
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { t as emptySnapshot } from "./from-snapshot-D2lZt4Dd.js";
|
|
3
|
+
import { i as isPromiseLike, t as adapterStore } from "./store-options-BqEakYRa.js";
|
|
4
4
|
//#region src/client/provider-store.ts
|
|
5
5
|
/**
|
|
6
6
|
* Store options that read `read()` on every request, so a rotated token, a
|
|
@@ -30,6 +30,9 @@ function providerStore(options, read, snapshot) {
|
|
|
30
30
|
approvals: options.approvals,
|
|
31
31
|
tenant: options.tenant,
|
|
32
32
|
maxAge: options.maxAge,
|
|
33
|
+
onSnapshot: options.onSnapshot,
|
|
34
|
+
onClear: options.onClear,
|
|
35
|
+
approvalInterval: options.approvalInterval,
|
|
33
36
|
...liveOptions(read)
|
|
34
37
|
}), promised || snapshot === void 0 ? emptySnapshot() : snapshot);
|
|
35
38
|
if (promised) store.follow(snapshot);
|