permdock 0.16.0 → 0.18.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/dist/a2a/index.d.ts +4 -4
- package/dist/a2a/index.js +3 -3
- package/dist/{adapter-context-CIQpQxbE.js → adapter-context-OHikyRqV.js} +1 -1
- package/dist/{adoption-scan-C2BCiUEG.js → adoption-scan-CxExBYSJ.js} +1 -1
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +3 -3
- package/dist/ai-sdk/index.js +3 -3
- package/dist/approval-normalize-CUjgSsOl.js +189 -0
- package/dist/approval-policies-oNnckT12.d.ts +138 -0
- package/dist/{approval-prompt-3BqWczTt.d.ts → approval-prompt-Bg7gDSqd.d.ts} +1 -1
- package/dist/approvals/index.d.ts +5 -4
- package/dist/approvals/index.js +7 -6
- package/dist/{approvals-DnIBTuXE.js → approvals-DGId_hgJ.js} +3 -3
- package/dist/{approvers-B4r0N_Uz.js → approvers-BaNwKYgd.js} +20 -1
- package/dist/{arazzo-ClYz2Z0W.js → arazzo--riLuGY0.js} +4 -4
- package/dist/{arazzo-CHoYnQXO.js → arazzo-CEDbb-uM.js} +2 -2
- package/dist/{args-0FrVs5EH.js → args-iafbHiXn.js} +2 -5
- package/dist/astro/index.d.ts +4 -4
- package/dist/astro/index.js +2 -2
- package/dist/{audience-DTjR8xet.js → audience-B4YR9UpV.js} +1 -1
- package/dist/{auth--yPyZNgr.js → auth-j3Eu-j4h.js} +1 -1
- package/dist/authz-topic-Dbc-HDOS.js +15 -0
- package/dist/authzen/index.d.ts +5 -5
- package/dist/authzen/index.js +2 -2
- package/dist/{automation-C6Jg75xq.d.ts → automation-Bfa_wD1h.d.ts} +1 -1
- package/dist/better-auth/index.d.ts +1 -1
- package/dist/better-auth/index.js +10 -8
- package/dist/better-supabase/index.d.ts +335 -38
- package/dist/better-supabase/index.js +778 -117
- package/dist/{better-supabase-Dirf_8Ec.js → better-supabase-BJtQ-kNf.js} +26 -10
- package/dist/{bind-BNQA9JK9.js → bind-B4pMH9bm.js} +6 -6
- package/dist/{bind-YYjvfpB9.d.ts → bind-DR6ku3A9.d.ts} +7 -7
- package/dist/{budget-BELja5A9.js → budget-BBCPDOGP.js} +1 -1
- package/dist/{budget-hYsPz_yE.d.ts → budget-CNLsV2SL.d.ts} +1 -1
- package/dist/{build-instance-BWXqwQYU.js → build-instance-BFMFQdE_.js} +3 -2
- package/dist/{capability-Di9tiUvi.d.ts → capability-BZ_veK9o.d.ts} +1 -1
- package/dist/{capability-BqX94r07.js → capability-zN6T9fxe.js} +2 -3
- package/dist/{casbin-D_rVQ31U.js → casbin-DCQHkkyj.js} +2 -2
- package/dist/{casbin-C9EvElBb.js → casbin-bKC1FpEx.js} +2 -2
- package/dist/{casl-C4OINZHI.js → casl-CjBVJj8R.js} +2 -2
- package/dist/{casl-CHHoCldP.js → casl-CkBssiB1.js} +1 -1
- package/dist/catalog/index.d.ts +5 -5
- package/dist/catalog/index.js +7 -7
- package/dist/catalog-Caqhbdix.js +1 -0
- package/dist/{catalog-CGlSwU6j.js → catalog-D1fw8qif.js} +5 -5
- package/dist/{catalog-doc-DjMKzJp9.js → catalog-doc-C4DGfJCO.js} +3 -3
- package/dist/{catalog-operations-DeHTrJSV.js → catalog-operations-BD22drQf.js} +4 -4
- package/dist/{catalog-amPDr0JQ.js → catalog-zzNuR3sY.js} +3 -3
- package/dist/{challenge-DImNcR7B.js → challenge-B2O2OLEk.js} +2 -2
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +2 -2
- package/dist/chat-sdk/index.d.ts +3 -3
- package/dist/{checks-CGkP3Z7A.js → checks-fyDOhcz0.js} +33 -1
- package/dist/claude-agent/index.d.ts +3 -3
- package/dist/claude-agent/index.js +2 -2
- package/dist/clerk/index.d.ts +2 -2
- package/dist/clerk/index.js +10 -7
- package/dist/cli/bin.js +1 -1
- package/dist/cli/index.d.ts +5 -5
- package/dist/cli/index.js +3 -3
- package/dist/client-CH7vzSAY.d.ts +32 -0
- package/dist/cloud/index.d.ts +8 -8
- package/dist/cloud/index.js +1 -1
- package/dist/{cloud-DdaJ7ILM.js → cloud-C0vXBmLG.js} +4 -4
- package/dist/{codemod-B1USJS7a.js → codemod-C-L0w-u7.js} +3 -3
- package/dist/{codemod-ammy6wv4.js → codemod-eYI1FbeJ.js} +395 -8
- package/dist/{collect-DnXL4B8c.js → collect-CU85z6Ta.js} +4 -4
- package/dist/{collect-WCl8cJQV.js → collect-D878zLDP.js} +4 -4
- package/dist/collect-KCtOigxx.js +1 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -1
- package/dist/{compile-EzEMB-7v.js → compile-B_oJqmIg.js} +4 -4
- package/dist/{compile-BEklRUYo.d.ts → compile-DBm0ub4p.d.ts} +2 -2
- package/dist/{completion--Y4YItFZ.js → completion-Dauc6pVT.js} +3 -3
- package/dist/{config-CcLlvEYW.js → config-COHmivz9.js} +4 -4
- package/dist/{config-BQ77xMZk.js → config-DWp2PucY.js} +2 -2
- package/dist/{config-report-DVMOLJ7F.js → config-report-DKpFm5ID.js} +2 -2
- package/dist/{context-BnIzxTNE.js → context-DeammvFl.js} +2 -2
- package/dist/convex/index.d.ts +4 -4
- package/dist/convex/index.js +3 -3
- package/dist/{core-lxoANyai.js → core-B8sLve3z.js} +7 -7
- package/dist/{core-CFepFiDP.d.ts → core-D87h2kpR.d.ts} +2 -2
- package/dist/{create-BLPKnJKa.js → create-3A7J9KRR.js} +6 -5
- package/dist/{create-CDd9c22W.d.ts → create-BrQXL-Wt.d.ts} +6 -6
- package/dist/{create-BPUopdfL.d.ts → create-BzwjZuRS.d.ts} +7 -7
- package/dist/{create-Coq5fIrq.js → create-C-tm3KIF.js} +5 -5
- package/dist/{create-DBvUsgzK.d.ts → create-CtoT1lIQ.d.ts} +4 -4
- package/dist/{credential-CyyyvCsL.js → credential-B3Hj4puZ.js} +4 -3
- package/dist/{credentials-CdDxp7jN.js → credentials-dkycUsY3.js} +1 -1
- package/dist/decision-CaG5_eNJ.js +21 -0
- package/dist/{delegation-CDB6_keF.js → delegation-aK4T_5WU.js} +3 -3
- package/dist/delivery/index.d.ts +4 -4
- package/dist/delivery/index.js +1 -1
- package/dist/{denied-text-DHldhVUv.d.ts → denied-text-DlIxt8fh.d.ts} +1 -1
- package/dist/{describe-BbFPBSms.d.ts → describe-BKtC_8PG.d.ts} +1 -1
- package/dist/{describe-Bb4hGK5d.js → describe-BZAlPHxT.js} +2 -1
- package/dist/{diff-DfmYaIhB.js → diff-BnNHqtHj.js} +8 -8
- package/dist/{diff-CxtbOi2l.js → diff-CBCzOTWM.js} +2 -2
- package/dist/{doctor-D1Xnmy6u.js → doctor-CkYKCuX7.js} +233 -30
- package/dist/{doctor-CwYc2lJb.js → doctor-xUpR5rXg.js} +3 -3
- package/dist/drizzle/index.d.ts +3 -3
- package/dist/drizzle/index.js +1 -1
- package/dist/elysia/index.d.ts +4 -4
- package/dist/elysia/index.js +3 -3
- package/dist/{errors-Vpu6rKHl.js → errors-BhRkoNS7.js} +0 -2
- package/dist/{errors-BIM4MFsJ.d.ts → errors-TpzkEKgJ.d.ts} +1 -1
- package/dist/{evaluate-BAmf_AQd.js → evaluate-Czbj7thS.js} +18 -15
- package/dist/{evaluations-DOWuBpWv.d.ts → evaluations-CisTTURl.d.ts} +3 -3
- package/dist/{evaluations-IBceAeKT.js → evaluations-h3KoJAPa.js} +3 -22
- package/dist/eve/index.d.ts +4 -4
- package/dist/eve/index.js +3 -3
- package/dist/express/index.d.ts +4 -4
- package/dist/express/index.js +3 -3
- package/dist/fastify/index.d.ts +4 -4
- package/dist/fastify/index.js +3 -3
- package/dist/{fetch-adapter-BIbBAtPZ.d.ts → fetch-adapter-BdmfnbJM.d.ts} +2 -2
- package/dist/{fetch-adapter-dPTgJVHd.js → fetch-adapter-DH-NJPbL.js} +2 -2
- package/dist/{fields-DI8s3cPl.js → fields-CrjL6A49.js} +3 -3
- package/dist/{files-B3AA05f1.js → files-CfiRtQ-m.js} +1 -1
- package/dist/{fixtures-Bm4_K1ke.js → fixtures-Cemqurt8.js} +10 -4
- package/dist/{flags-DXjoTVbS.js → flags-BlmpmXoY.js} +2 -2
- package/dist/{from-snapshot-DCakWRsr.js → from-snapshot-DMlSSo9b.js} +14 -12
- package/dist/{gen-DwgCSC6V.js → gen-BEIN-DRM.js} +2 -2
- package/dist/{gen-DuAhghDw.js → gen-mf-MRwVr.js} +9 -9
- package/dist/{generate-CRVV5V7l.js → generate-BqkZq8Dr.js} +2 -2
- package/dist/{grantee-conditions-BrYPe-w0.js → grantee-conditions-DX4K_gGI.js} +1 -1
- package/dist/{grantee-match-7RZZvoT_.js → grantee-match-BP-k4vRJ.js} +2 -2
- package/dist/h3/index.d.ts +4 -4
- package/dist/h3/index.js +3 -3
- package/dist/{helpers-DJicaG6f.js → helpers-DmqGy63f.js} +85 -13
- package/dist/hono/index.d.ts +4 -4
- package/dist/hono/index.js +3 -3
- package/dist/{hosted-DVxlLZMe.d.ts → hosted-BFNXwcjd.d.ts} +1 -1
- package/dist/{hosted-D0IzESu_.js → hosted-waouw2V-.js} +12 -10
- package/dist/{http-DOL33cO0.js → http-DhMWeB_h.js} +1 -1
- package/dist/{import-CNBF96hB.js → import-C1XXpG_m.js} +4 -4
- package/dist/{import-Dfe2unKO.js → import-DObwEota.js} +3 -3
- package/dist/{index-BinlXeU-.d.ts → index-BhnOOnp9.d.ts} +2 -2
- package/dist/{index-ymept53A.d.ts → index-CVGio3cH.d.ts} +4 -4
- package/dist/{index-DJwEgYzA.d.ts → index-CdMOd-GY.d.ts} +17 -11
- package/dist/{index-Cay5-Kvx.d.ts → index-CdUTE6qd.d.ts} +11 -10
- package/dist/{index-Dj2qF9VC.d.ts → index-Dfv9Toct.d.ts} +1 -1
- package/dist/{index-CV-7DWeD.d.ts → index-rFp6X_QP.d.ts} +4 -4
- package/dist/index.d.ts +18 -16
- package/dist/index.js +24 -20
- package/dist/{init-BUo2G-FI.js → init-CNJ8lLjo.js} +5 -5
- package/dist/{init-C6cWP3xW.js → init-DS3PEsCG.js} +5 -5
- package/dist/{instance-options-CoHn-0e8.d.ts → instance-options-2sFGSdsf.d.ts} +2 -2
- package/dist/{instance-snapshot-DuWf1cT3.js → instance-snapshot-BWa71my8.js} +15 -12
- package/dist/jwt/index.d.ts +4 -4
- package/dist/jwt/index.js +3 -3
- package/dist/{kernel-BD8QuMnv.js → kernel-30Z2zM_d.js} +10 -10
- package/dist/kysely/index.d.ts +3 -3
- package/dist/kysely/index.js +1 -1
- package/dist/{load-DjSU5KXO.js → load-BaEamml-.js} +1 -1
- package/dist/load-CjnlPxpL.js +1 -0
- package/dist/{login-D1MHOomI.js → login-BgK5Jloo.js} +4 -4
- package/dist/{login-DCKE5pVy.js → login-DUVzBLh7.js} +4 -4
- package/dist/{manifest-BXTbHNIV.js → manifest-BdzBobNK.js} +1 -1
- package/dist/{manifest-schema-DQkBK2Mr.js → manifest-schema-CsFsYLF-.js} +1 -1
- package/dist/{manifest-Cft51TLK.js → manifest-wclLWBVH.js} +37 -37
- package/dist/{map-claims-C-nv08_n.js → map-claims-PQwHynxV.js} +25 -11
- package/dist/{map-error-pasIGqMT.js → map-error-BH16Ah8P.js} +1 -1
- package/dist/mcp/index.d.ts +8 -8
- package/dist/mcp/index.js +9 -9
- package/dist/{migrate-BJHxQqT5.js → migrate-BbY5-Khy.js} +4 -4
- package/dist/{module-values-B1EVTkHP.js → module-values-B8tNIxdd.js} +2 -2
- package/dist/nest/index.d.ts +4 -4
- package/dist/nest/index.js +3 -3
- package/dist/next/index.d.ts +45 -13
- package/dist/next/index.js +68 -30
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +4 -4
- package/dist/node/index.js +2 -2
- package/dist/openai/index.d.ts +4 -4
- package/dist/openai/index.js +3 -3
- package/dist/openapi/index.d.ts +2 -2
- package/dist/{openapi-BwWkHxvW.js → openapi-C4gFqeRz.js} +4 -4
- package/dist/{openapi-DSzQN7Zu.js → openapi-zMEB9qxn.js} +5 -5
- package/dist/{operation-findings-CXtFzlKJ.js → operation-findings-CVwJHEu_.js} +1 -1
- package/dist/operation-risks-BKOcTv8J.js +13 -0
- package/dist/operations-Bm9HFecz.js +89 -0
- package/dist/orpc/index.d.ts +5 -5
- package/dist/orpc/index.js +3 -3
- package/dist/otel/index.d.ts +3 -3
- package/dist/otel/index.js +1 -1
- package/dist/{output-DlICTjBh.js → output-BFWLER4r.js} +1 -1
- package/dist/output-files-BYscrQl-.js +1 -0
- package/dist/{output-files-BIQ_9pIs.js → output-files-CM0BnH05.js} +1 -1
- package/dist/{ownership-qqBuGJXr.js → ownership-D-mIt-w0.js} +6 -6
- package/dist/{parse-1_ZheTW5.js → parse-UTC-sDrt.js} +2 -2
- package/dist/{parse-local-manifest-DEiCF4ah.js → parse-local-manifest-CxcSMQgl.js} +2 -2
- package/dist/{parse-local-manifest-CCmbhnxP.d.ts → parse-local-manifest-DvjTQNuO.d.ts} +1 -1
- package/dist/{parse-request-CwCZpyjV.js → parse-request-DOBVaeiQ.js} +1 -1
- package/dist/pdp/index.d.ts +3 -3
- package/dist/pdp/index.js +3 -3
- package/dist/{peer-Q0fuZ6hx.js → peer-BuK9F53f.js} +1 -1
- package/dist/{peer-C9LvBCcb.js → peer-n-swIV4H.js} +1 -1
- package/dist/{permdock-BvjivVb9.js → permdock-D-_WrdKu.js} +205 -102
- package/dist/{permdock-CprAPN3w.d.ts → permdock-ffY4CMd9.d.ts} +101 -131
- package/dist/{permissions-CYcHj_w7.js → permissions-B3ggI88M.js} +2 -2
- package/dist/{permissions-CVXmRILq.js → permissions-BaoLxy66.js} +1 -13
- package/dist/{pg-DQTqRrou.js → pg-Ddxsd5ZB.js} +2 -2
- package/dist/{policy-BycVKnXv.d.ts → policy-BtKSApSt.d.ts} +1 -1
- package/dist/{policy-CLQ8__GF.js → policy-cV_wwPb8.js} +5 -4
- package/dist/{policy-from-catalog-CU3An8uP.js → policy-from-catalog-B68hGC0S.js} +9 -8
- package/dist/{policy-types-DGIO_gxq.d.ts → policy-types-D-GwfQTc.d.ts} +72 -19
- package/dist/{postgrest-DAxFltvO.js → postgrest-BrjrckDG.js} +74 -19
- package/dist/{postgrest-D5nUGm-c.d.ts → postgrest-D84p5dbA.d.ts} +12 -7
- package/dist/{powersync-CBhTBhG2.js → powersync-9PYOE1wt.js} +158 -21
- package/dist/{powersync-DAfo0EL5.js → powersync-DStC_g0B.js} +3 -3
- package/dist/powersync-xNRlC4jN.js +1 -0
- package/dist/preset/index.js +1 -1
- package/dist/{preset-BjLzeFpp.js → preset-pPrVyGU5.js} +74 -7
- package/dist/prisma/index.d.ts +2 -2
- package/dist/prisma/index.js +1 -1
- package/dist/{protected-action-QEA8arRB.js → protected-action-B40tU3yP.js} +15 -5
- package/dist/{protected-action-D8x73IGm.d.ts → protected-action-Ds_EUY8B.d.ts} +14 -7
- package/dist/{protected-action-DUYqb-Ma.js → protected-action-OpOxtTsN.js} +1 -1
- package/dist/{provider-C55OGXJ7.js → provider-CY4TSSJo.js} +2 -2
- package/dist/{provider-DfLeek9O.d.ts → provider-OtnIiFWm.d.ts} +1 -1
- package/dist/{provider-store-CaTv00tr.js → provider-store-BQP_pp8s.js} +2 -2
- package/dist/{pull-CQCGy1gv.js → pull-DLP4I1Kl.js} +7 -7
- package/dist/pull-UBjDnf4b.js +1 -0
- package/dist/{push-Dq_ca4-j.js → push-BSb8j1EW.js} +8 -8
- package/dist/{pushed-policy-CDuOL2de.js → pushed-policy-BecMsTtM.js} +1 -1
- package/dist/{pushed-policy-CryQheKq.d.ts → pushed-policy-Ck3FZcoy.d.ts} +1 -1
- 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 -1
- package/dist/react-native/index.d.ts +104 -39
- package/dist/react-native/index.js +199 -40
- package/dist/refresh-on-L9UOwATg.d.ts +49 -0
- package/dist/{replay-Bs9Df2fQ.d.ts → replay-E5X9E1lC.d.ts} +1 -1
- package/dist/{request-context-Duzdf0cd.js → request-context-DM6_jY1n.js} +2 -2
- package/dist/{request-schema-DhX7UbfQ.js → request-schema-CMP8Cmxd.js} +5 -0
- package/dist/resend/index.d.ts +4 -4
- package/dist/{resolve-names-Y1Cb22cp.js → resolve-names-CBl4r4_r.js} +6 -6
- package/dist/{rls-tHu7N_Pe.js → rls-DGBL-jDY.js} +20 -20
- package/dist/{rls-C5ZGzR_B.js → rls-pAHGYgTb.js} +4 -4
- package/dist/{role-builder-BK2-T6oD.js → role-builder-CMW4wWzn.js} +3 -157
- package/dist/{rpc-vHIwyXCp.js → rpc-KwX_Jcxz.js} +2 -2
- package/dist/{run-DUq1xU4K.js → run-B7lv3NuK.js} +8 -40
- package/dist/run-UPbacxPg.js +1 -0
- package/dist/{run-ticket-DfnZCh-u.js → run-ticket-CjvXr6wj.js} +1 -1
- package/dist/{run-ticket-ylovhyFQ.d.ts → run-ticket-DPaD27_r.d.ts} +2 -2
- package/dist/{runtime-BGnrOkVH.js → runtime-rf0ZuyF3.js} +1 -1
- package/dist/{saas-DK4V-3Is.js → saas-B8H1MsQ3.js} +13 -10
- package/dist/{scan-C3HRH9Fs.js → scan-0r3OZqqK.js} +1 -1
- package/dist/{schema-DvXvxPhQ.js → schema-B_9tXrbG.js} +1 -1
- package/dist/{schema-BOJjqlWL.js → schema-CuX70xgH.js} +15 -2
- package/dist/scim/index.d.ts +1 -1
- package/dist/scim/index.js +1 -1
- package/dist/{scim-jJBJ7g1Z.js → scim-C30QBBoF.js} +2 -1
- package/dist/{scim-D8YupzX1.js → scim-CovliQUg.js} +2 -2
- package/dist/{scopes-0Up_UA2t.js → scopes-BSdYaGHs.js} +9 -40
- package/dist/server/index.d.ts +11 -11
- package/dist/server/index.js +8 -8
- package/dist/{server-3cVlTLde.js → server-D0PW6ZCw.js} +2 -2
- package/dist/{server-types-CyRN0-Cd.d.ts → server-types-3OnXjZ2D.d.ts} +8 -8
- package/dist/{shared-l0oGGetg.js → shared-BRmCJxDK.js} +2 -2
- package/dist/{shared-DrGLwM3s.js → shared-DyYVEjKC.js} +2 -2
- package/dist/{sink-B5zoUW_O.d.ts → sink-ogbVkyeo.d.ts} +2 -2
- package/dist/{skills-Celu2W6v.js → skills-B4MPRxQd.js} +2 -2
- package/dist/{skills-B2qTbaQa.js → skills-C9sTD70r.js} +2 -2
- package/dist/{snapshot-CXlzi69u.js → snapshot-DN_8J27z.js} +6 -2
- package/dist/{snapshot-cache-BjAWkchD.d.ts → snapshot-cache-B4YvlGG_.d.ts} +20 -6
- package/dist/{snapshot-cache-Bx_4xC_6.js → snapshot-cache-B66h7FBK.js} +25 -8
- package/dist/solid/index.d.ts +7 -7
- package/dist/solid/index.js +6 -6
- package/dist/solid-start/index.d.ts +4 -4
- package/dist/solid-start/index.js +3 -3
- package/dist/{sources-oB1Hg1Fm.d.ts → sources-xdQShLDU.d.ts} +1 -1
- package/dist/{src-C_pi2Rnh.js → src-Brzq_0in.js} +193 -128
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +1 -1
- package/dist/{standard-webhooks-DOYEuOLx.d.ts → standard-webhooks-BfPaZ6T1.d.ts} +2 -2
- package/dist/{types-tQB2CEnY.d.ts → store-DYeB-_U3.d.ts} +114 -113
- package/dist/{store-RNFvaJJv.js → store-DmVqy74I.js} +13 -7
- package/dist/{store-options-Dil3lraY.js → store-options--zWn48PK.js} +76 -7
- package/dist/{stores-DxZWDXCs.js → stores-BYFopOm1.js} +3 -3
- package/dist/{stores-DZJvxFIZ.d.ts → stores-EPul_8MN.d.ts} +5 -6
- package/dist/{stream-9y9qw51m.d.ts → stream-W2RuUYly.d.ts} +1 -1
- package/dist/{subject-BGoM5o8B.js → subject-C7RddW0G.js} +8 -1
- package/dist/supabase/client.d.ts +2 -0
- package/dist/supabase/client.js +21 -0
- package/dist/supabase/index.d.ts +37 -6
- package/dist/supabase/index.js +6 -5
- package/dist/supabase/middleware.d.ts +8 -7
- package/dist/supabase/middleware.js +6 -6
- package/dist/{supabase-CDHMsDD0.js → supabase-BiViJpQ4.js} +31 -8
- package/dist/{supabase-DYWnT800.js → supabase-CogTyJH2.js} +3 -3
- package/dist/supabase-hook-BN46IrVI.js +1 -0
- package/dist/{supabase-hook-HPgwYb9V.js → supabase-hook-DX38Hj8h.js} +393 -32
- package/dist/{supautils-SwE642N1.js → supautils-BGf6zRvM.js} +12 -12
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +8 -8
- 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 +5 -5
- package/dist/sveltekit/index.d.ts +4 -4
- package/dist/sveltekit/index.js +2 -2
- package/dist/{tables-DimBcVWY.js → tables-BfOk0ymL.js} +7 -7
- package/dist/tanstack-start/index.d.ts +4 -4
- package/dist/tanstack-start/index.js +2 -2
- package/dist/{tenancy-5d1zVBvK.js → tenancy-DvOHHk3-.js} +1 -1
- package/dist/terminal/index.d.ts +5 -5
- package/dist/terminal/index.js +6 -6
- package/dist/testing/core.d.ts +1 -1
- package/dist/testing/core.js +1 -1
- package/dist/testing/fixtures/index.d.ts +1 -1
- package/dist/testing/fixtures/index.js +2 -2
- package/dist/testing/index.d.ts +29 -22
- package/dist/testing/index.js +120 -48
- package/dist/testing/saas/index.d.ts +3 -3
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.js +1 -1
- package/dist/token-D6pWn8Uj.d.ts +11 -0
- package/dist/{token-DC9EQiet.js → token-DaMnIU9O.js} +24 -8
- package/dist/{tool-refusal-Qpjs_W6M.js → tool-refusal-D4spOJ7I.js} +1 -1
- package/dist/trpc/index.d.ts +5 -5
- package/dist/trpc/index.js +3 -3
- package/dist/{type-helpers-c7Xo_2Cu.d.ts → type-helpers-i1EJ3Eb1.d.ts} +1 -1
- package/dist/{types-Cklw5hJo.d.ts → types-3Y8UpFkF.d.ts} +40 -1
- package/dist/{types-DlelvQk4.d.ts → types-B8qUkGja.d.ts} +2 -2
- package/dist/{types-CN0LsqbK.d.ts → types-CCEeSCMB.d.ts} +3 -3
- package/dist/{types-B2efzoSX.d.ts → types-CDVXR6YD.d.ts} +1 -1
- package/dist/{types-DsHGPtkR.d.ts → types-Ck1KOfug.d.ts} +2 -2
- package/dist/{types-DLvhVm1r.d.ts → types-CqcsNCaN.d.ts} +16 -7
- package/dist/{types-BB-zWDcR.d.ts → types-D-JO7lh8.d.ts} +5 -5
- package/dist/{types-CEinc15V.d.ts → types-D19MK4t-.d.ts} +3 -4
- package/dist/{types-B6ExllNo.d.ts → types-DGf_cpKF.d.ts} +2 -2
- package/dist/{types-rCRV4Ge-.d.ts → types-DmbfLu2p.d.ts} +4 -4
- package/dist/{types-ZzRGoViD.d.ts → types-NYoj8JBm.d.ts} +2 -2
- package/dist/{types-CWBsAwqn.d.ts → types-o1vu6Ks3.d.ts} +4 -4
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-Cl5eb-e1.js +1 -0
- package/dist/{usage-CPXeuAdT.js → usage-DC0UKe6C.js} +6 -6
- package/dist/{usage-CfZCQd0F.js → usage-DYtRVkcN.js} +2 -2
- package/dist/{validation-error-uvp-kyfO.d.ts → validation-error-Dx8PipbO.d.ts} +1 -1
- package/dist/{verify-DfT0QYNh.js → verify-Bpj0hauG.js} +19 -19
- package/dist/{version-cache-Df11C2Qp.d.ts → version-cache-DzNKWiI6.d.ts} +9 -3
- package/dist/{views-CD8wuL4Z.js → views-MWmJ6Y4P.js} +1 -1
- package/dist/vue/index.d.ts +7 -7
- package/dist/vue/index.js +6 -6
- package/dist/{waiter-CqUKX6CY.d.ts → waiter-NK_UuZbb.d.ts} +2 -2
- package/dist/{watch-DAkjm75Y.js → watch-CBHADqBH.js} +3 -3
- package/dist/watch-OYwAPCzx.js +1 -0
- package/dist/webmcp/index.d.ts +1 -1
- package/dist/webmcp/index.js +1 -1
- package/dist/{where-scope-DlCdCM_8.js → where-scope-BKrqUDVk.js} +5 -5
- package/dist/{who-can-BoDJm0Nc.js → who-can-KhVWMxtf.js} +4 -4
- package/dist/workflow/index.d.ts +3 -3
- package/dist/workflow/index.js +5 -4
- package/dist/workflow-sdk/index.d.ts +4 -4
- package/dist/{wrap-DxXB54Wu.d.ts → wrap-BHGA-SMM.d.ts} +2 -2
- package/dist/{wrap-B2wziJI_.js → wrap-C5PWzgkq.js} +1 -1
- package/package.json +8 -5
- package/schemas/approval-request-v1.json +5 -0
- package/schemas/catalog-v1.json +18 -2
- package/schemas/cli-result-v1.json +0 -2
- package/schemas/snapshot-v1.json +9 -0
- package/schemas/supabase-manifest-v1.json +1 -1
- package/skills/permdock-approvals/SKILL.md +8 -8
- package/skills/permdock-approvals/references/stores-and-resume.md +7 -3
- package/skills/permdock-audit/SKILL.md +1 -1
- package/skills/permdock-wire/references/adapters.md +3 -1
- package/dist/action-result-BcudBQOF.d.ts +0 -19
- package/dist/catalog-D3oS2GH3.js +0 -1
- package/dist/collect-D-eroIfV.js +0 -1
- package/dist/load-Dm0pSYH3.js +0 -1
- package/dist/output-files-BHOIlrfD.js +0 -1
- package/dist/powersync-0QVP_DuR.js +0 -1
- package/dist/pull-CCAChKuy.js +0 -1
- package/dist/renames-CGj7YwcQ.js +0 -175
- package/dist/run-C5P3x1EI.js +0 -1
- package/dist/supabase-hook-qsewAVZY.js +0 -1
- package/dist/usage-DmmO_xjJ.js +0 -1
- package/dist/watch-CuPz0D2M.js +0 -1
|
@@ -54,8 +54,8 @@ function isMembershipRows(value) {
|
|
|
54
54
|
}
|
|
55
55
|
function isRows(value) {
|
|
56
56
|
if (!isRecord(value)) return false;
|
|
57
|
-
const { memberships, roles, customRoles } = value;
|
|
58
|
-
return Array.isArray(memberships) && memberships.every(isMembershipRows) && (roles === void 0 || isRecord(roles) && isText(roles["table"]) && isText(roles["user"]) && Array.isArray(roles["roles"]) && roles["roles"].length > 0 && roles["roles"].every(isColumn)) && (customRoles === void 0 || isRecord(customRoles) && isText(customRoles["permissions"]) && isText(customRoles["includes"]));
|
|
57
|
+
const { memberships, roles, customRoles, version } = value;
|
|
58
|
+
return Array.isArray(memberships) && memberships.every(isMembershipRows) && (roles === void 0 || isRecord(roles) && isText(roles["table"]) && isText(roles["user"]) && Array.isArray(roles["roles"]) && roles["roles"].length > 0 && roles["roles"].every(isColumn)) && (customRoles === void 0 || isRecord(customRoles) && isText(customRoles["permissions"]) && isText(customRoles["includes"])) && (version === void 0 || isRecord(version) && isText(version["table"]) && isText(version["user"]) && isText(version["version"]));
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
61
|
* Whether `value` has the shape `localSnapshotManifest(policy)` writes, with no
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Zt as LocalSnapshotManifest } from "./policy-types-D-GwfQTc.js";
|
|
2
2
|
//#region src/core/parse-local-manifest.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* Whether `value` has the shape `localSnapshotManifest(policy)` writes, with no
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as freezeDeep } from "./freeze-jjan0lCv.js";
|
|
2
2
|
import { n as copyJson, r as forbiddenKeyPath, t as checkSchema } from "./json-schema-BPGa-RjQ.js";
|
|
3
|
-
import { t as APPROVAL_REQUEST_SCHEMA } from "./request-schema-
|
|
3
|
+
import { t as APPROVAL_REQUEST_SCHEMA } from "./request-schema-CMP8Cmxd.js";
|
|
4
4
|
//#region src/approvals/parse-request.ts
|
|
5
5
|
/**
|
|
6
6
|
* Reads an `ApprovalRequest` (parsed, or the JSON text) as an approval store or
|
package/dist/pdp/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { o as PermDockOptions } from "../permdock-
|
|
3
|
-
import { a as RelationMap, c as RemotePdpEndpoints, d as SpiceDbCheck, f as SpiceDbOptions, i as PdpPermDock, l as RemotePdpMapping, n as OpenFgaTuple, o as RemotePdpAuth, r as PdpFactory, s as RemotePdpCache, t as OpenFgaOptions, u as RemotePdpOptions } from "../types-
|
|
1
|
+
import { E as Policy, J as DecisionProvider, M as PolicyVocabulary, _r as Principal } from "../policy-types-D-GwfQTc.js";
|
|
2
|
+
import { o as PermDockOptions } from "../permdock-ffY4CMd9.js";
|
|
3
|
+
import { a as RelationMap, c as RemotePdpEndpoints, d as SpiceDbCheck, f as SpiceDbOptions, i as PdpPermDock, l as RemotePdpMapping, n as OpenFgaTuple, o as RemotePdpAuth, r as PdpFactory, s as RemotePdpCache, t as OpenFgaOptions, u as RemotePdpOptions } from "../types-B8qUkGja.js";
|
|
4
4
|
//#region src/pdp/create.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* The PDP-aware instance, built synchronously like core `getPermDockSync`; use
|
package/dist/pdp/index.js
CHANGED
|
@@ -5,9 +5,9 @@ import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t a
|
|
|
5
5
|
import { n as internalsOf, t as attachInternals } from "../internals-B3IgHrvo.js";
|
|
6
6
|
import { a as getResource, c as listPermissions } from "../permission-registry-B8tYxPIt.js";
|
|
7
7
|
import { n as toWireDelegation } from "../wire-delegation-Cv3W2eaM.js";
|
|
8
|
-
import { r as decideAllAsync, t as canAllAsync } from "../checks-
|
|
9
|
-
import { n as getPermDockSync$1, t as getPermDock$1 } from "../permdock-
|
|
10
|
-
import { a as postJson, c as ttlMs, i as joinUrl, n as denied, o as resourceIdOf, r as granted, s as ttlCache, t as cacheKey } from "../shared-
|
|
8
|
+
import { r as decideAllAsync, t as canAllAsync } from "../checks-fyDOhcz0.js";
|
|
9
|
+
import { n as getPermDockSync$1, t as getPermDock$1 } from "../permdock-D-_WrdKu.js";
|
|
10
|
+
import { a as postJson, c as ttlMs, i as joinUrl, n as denied, o as resourceIdOf, r as granted, s as ttlCache, t as cacheKey } from "../shared-BRmCJxDK.js";
|
|
11
11
|
//#region src/pdp/create.ts
|
|
12
12
|
function withoutProviders(policy) {
|
|
13
13
|
if (policy.providers === void 0 || policy.providers.length === 0) return policy;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as addLine, n as packageManagerOf, r as peerHint, i as requirePeer } from "./peer-
|
|
1
|
+
export { t as addLine, n as packageManagerOf, r as peerHint, i as requirePeer } from "./peer-BuK9F53f.js";
|
|
@@ -6,18 +6,18 @@ import { t as attachInternals } from "./internals-B3IgHrvo.js";
|
|
|
6
6
|
import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-B8tYxPIt.js";
|
|
7
7
|
import { n as isThenable } from "./thenable-BNSM1U2R.js";
|
|
8
8
|
import { i as readAppData } from "./app-data-UNNm07jV.js";
|
|
9
|
-
import {
|
|
9
|
+
import { d as scopeList, o as normalizeMemberships, p as tenantOf } from "./scopes-BSdYaGHs.js";
|
|
10
10
|
import { o as pickVisible, s as sanitizeContext } from "./validity-Buc7w8E9.js";
|
|
11
11
|
import { t as byCodePoint } from "./compare-DTfyUunF.js";
|
|
12
|
-
import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-
|
|
13
|
-
import { d as policyX } from "./policy-
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
12
|
+
import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-DvOHHk3-.js";
|
|
13
|
+
import { d as policyX } from "./policy-cV_wwPb8.js";
|
|
14
|
+
import { r as isSubject, t as anonymousSubject } from "./subject-C7RddW0G.js";
|
|
15
|
+
import { D as emptyListeners, E as emitSafe, N as contactMemberships, O as finish, P as isContact, i as customRolesFor, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as unknownLevelsFor } from "./evaluate-Czbj7thS.js";
|
|
16
|
+
import { c as heldRoleNames, d as audiencesOf, g as asMembershipSource, i as assignableIn, l as roleLeaf, o as collectSnapshotGrants, s as whereGrant, t as snapshotOf, u as applyRoleKinds } from "./instance-snapshot-BWa71my8.js";
|
|
16
17
|
import { r as relationReader, t as pendingRelations } from "./relations-BxvRvDHK.js";
|
|
17
|
-
import { i as snapshotGrant } from "./snapshot-
|
|
18
|
-
import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-
|
|
19
|
-
import { i as decideAllWith, n as canAllWith } from "./checks-
|
|
20
|
-
import { r as isSubject, t as anonymousSubject } from "./subject-BGoM5o8B.js";
|
|
18
|
+
import { i as snapshotGrant } from "./snapshot-DN_8J27z.js";
|
|
19
|
+
import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-BKrqUDVk.js";
|
|
20
|
+
import { i as decideAllWith, n as canAllWith } from "./checks-fyDOhcz0.js";
|
|
21
21
|
//#region src/core/app.ts
|
|
22
22
|
const APP = Symbol.for("permdock.app");
|
|
23
23
|
/**
|
|
@@ -41,6 +41,197 @@ function withApp(policy, options) {
|
|
|
41
41
|
return merged;
|
|
42
42
|
}
|
|
43
43
|
//#endregion
|
|
44
|
+
//#region src/core/freshness.ts
|
|
45
|
+
function versionQuery(principal, issuedAt) {
|
|
46
|
+
return compact({
|
|
47
|
+
id: principal.id,
|
|
48
|
+
roles: principal.roles,
|
|
49
|
+
memberships: principal.memberships,
|
|
50
|
+
authzVersion: principal.authzVersion,
|
|
51
|
+
issuedAt
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/** `known` when it is a version, otherwise the source's answer. */
|
|
55
|
+
function currentVersion(source, query, context, known) {
|
|
56
|
+
return known !== void 0 && Number.isSafeInteger(known) && known >= 0 ? known : source.version?.(query, context);
|
|
57
|
+
}
|
|
58
|
+
function threw(source, auth) {
|
|
59
|
+
auth.push({
|
|
60
|
+
reason: "source-threw",
|
|
61
|
+
source: "memberships",
|
|
62
|
+
...sourceName(source)
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* `onStale: 'reread'`: a token behind the source's version has its memberships
|
|
67
|
+
* (and global roles, with `readRoles`) read live; a version that cannot be read
|
|
68
|
+
* keeps the claims and marks the subject stale.
|
|
69
|
+
*/
|
|
70
|
+
function rereadStale(source, principal, issuedAt, context, read, auth, readRoles, known) {
|
|
71
|
+
const claims = principal.memberships ?? [];
|
|
72
|
+
const claimed = principal.authzVersion;
|
|
73
|
+
const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
|
|
74
|
+
const unknown = () => {
|
|
75
|
+
threw(source, auth);
|
|
76
|
+
return "unknown";
|
|
77
|
+
};
|
|
78
|
+
let freshness;
|
|
79
|
+
try {
|
|
80
|
+
const current = currentVersion(source, versionQuery(principal, issuedAt), context, known);
|
|
81
|
+
freshness = isThenable(current) ? Promise.resolve(current).then(judge, unknown) : judge(current);
|
|
82
|
+
} catch {
|
|
83
|
+
freshness = unknown();
|
|
84
|
+
}
|
|
85
|
+
const failed = () => {
|
|
86
|
+
threw(source, auth);
|
|
87
|
+
return [];
|
|
88
|
+
};
|
|
89
|
+
const rolesOf = (found) => {
|
|
90
|
+
if (found !== "reread" || readRoles === void 0) return;
|
|
91
|
+
try {
|
|
92
|
+
const roles = readRoles();
|
|
93
|
+
return isThenable(roles) ? Promise.resolve(roles).catch(failed) : roles;
|
|
94
|
+
} catch {
|
|
95
|
+
return failed();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
if (isThenable(freshness)) {
|
|
99
|
+
const settled = freshness.then((found) => ({
|
|
100
|
+
found,
|
|
101
|
+
roles: rolesOf(found)
|
|
102
|
+
}));
|
|
103
|
+
return {
|
|
104
|
+
memberships: settled.then(({ found }) => found === "reread" ? read() : claims),
|
|
105
|
+
stale: settled.then(({ found }) => found === "unknown"),
|
|
106
|
+
roles: settled.then(({ roles }) => roles)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return compact({
|
|
110
|
+
memberships: freshness === "reread" ? read() : claims,
|
|
111
|
+
stale: freshness === "unknown",
|
|
112
|
+
roles: rolesOf(freshness)
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Whether the token's memberships are behind the source for `fresh`
|
|
117
|
+
* permissions. Live memberships are never stale; token memberships are stale
|
|
118
|
+
* unless a source reports a version the token's `authzVersion` has reached.
|
|
119
|
+
*/
|
|
120
|
+
function staleness(policy, principal, source, given, auth) {
|
|
121
|
+
if ((policy.fresh ?? []).length === 0 || principal === null || given.live) return false;
|
|
122
|
+
if (given.stale !== void 0) return given.stale;
|
|
123
|
+
const claimed = principal.authzVersion;
|
|
124
|
+
if (source?.version === void 0 || typeof claimed !== "number") return true;
|
|
125
|
+
const compare = (current) => current === void 0 || claimed < current;
|
|
126
|
+
try {
|
|
127
|
+
const current = currentVersion(source, versionQuery(principal, given.issuedAt), given.context, given.known);
|
|
128
|
+
return isThenable(current) ? Promise.resolve(current).then(compare, () => {
|
|
129
|
+
threw(source, auth);
|
|
130
|
+
return true;
|
|
131
|
+
}) : compare(current);
|
|
132
|
+
} catch {
|
|
133
|
+
threw(source, auth);
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//#endregion
|
|
138
|
+
//#region src/core/cached-instance.ts
|
|
139
|
+
/** Options that shape an instance by value; the rest by identity. */
|
|
140
|
+
const DATA_KEYS = /* @__PURE__ */ new Set([
|
|
141
|
+
"tenant",
|
|
142
|
+
"actor",
|
|
143
|
+
"delegation",
|
|
144
|
+
"session",
|
|
145
|
+
"expiresAt",
|
|
146
|
+
"context"
|
|
147
|
+
]);
|
|
148
|
+
function principalOf(policy, user) {
|
|
149
|
+
if (user === null || user === void 0) return null;
|
|
150
|
+
if (isSubject(user)) return user.principal === null ? null : compact({
|
|
151
|
+
principal: user.principal,
|
|
152
|
+
issuedAt: user.issuedAt
|
|
153
|
+
});
|
|
154
|
+
try {
|
|
155
|
+
const principal = policy.subject(user);
|
|
156
|
+
return principal === null ? null : { principal };
|
|
157
|
+
} catch {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function isVersion(value) {
|
|
162
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The cache key of an instance, with the options to build it with: the version
|
|
166
|
+
* read for the key is passed on as `version.known`, so the build reads none.
|
|
167
|
+
* `undefined` when the subject or its version is unknown.
|
|
168
|
+
*/
|
|
169
|
+
async function cacheKey(policy, user, options) {
|
|
170
|
+
const resolved = principalOf(policy, user);
|
|
171
|
+
if (resolved === null) return;
|
|
172
|
+
const intent = options.intent ?? "write";
|
|
173
|
+
let version = options.version?.known;
|
|
174
|
+
if (!isVersion(version) && options.memberships !== void 0) try {
|
|
175
|
+
version = await asMembershipSource(options.memberships).version?.(versionQuery(resolved.principal, resolved.issuedAt), { intent });
|
|
176
|
+
} catch {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (!isVersion(version)) return;
|
|
180
|
+
const data = { intent };
|
|
181
|
+
const owners = [policy];
|
|
182
|
+
for (const name of Object.keys(options).toSorted()) {
|
|
183
|
+
const value = Reflect.get(options, name);
|
|
184
|
+
if (DATA_KEYS.has(name)) data[name] = value;
|
|
185
|
+
else if (name !== "version" && name !== "intent") owners.push(value);
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
key: compact({
|
|
189
|
+
principal: resolved.principal.id,
|
|
190
|
+
version,
|
|
191
|
+
tenant: options.tenant,
|
|
192
|
+
intent,
|
|
193
|
+
parts: {
|
|
194
|
+
user,
|
|
195
|
+
data
|
|
196
|
+
}
|
|
197
|
+
}),
|
|
198
|
+
owners,
|
|
199
|
+
options: {
|
|
200
|
+
...options,
|
|
201
|
+
version: { known: version }
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
function cachedFactory(factory, instances) {
|
|
206
|
+
return (subject) => {
|
|
207
|
+
const source = factory(subject);
|
|
208
|
+
const principal = subject.principal?.id;
|
|
209
|
+
return source === void 0 || principal === void 0 ? source : instances.customRoles(source, {
|
|
210
|
+
owner: factory,
|
|
211
|
+
principal
|
|
212
|
+
});
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
function cachedSources(options, instances) {
|
|
216
|
+
const { customRoles, entitlements } = options;
|
|
217
|
+
return {
|
|
218
|
+
...options,
|
|
219
|
+
...customRoles === void 0 ? {} : { customRoles: typeof customRoles === "function" ? cachedFactory(customRoles, instances) : instances.customRoles(customRoles) },
|
|
220
|
+
...entitlements === void 0 ? {} : { entitlements: instances.entitlements(entitlements) }
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* `create` through `instances`: a subject whose authorization version is known
|
|
225
|
+
* gets the instance built for it at that version, with the cache's custom-role
|
|
226
|
+
* and entitlement memos; a custom-role factory's answers are kept per factory
|
|
227
|
+
* and principal. Any other subject gets a new one.
|
|
228
|
+
*/
|
|
229
|
+
async function cachedInstance(policy, user, options, instances, create) {
|
|
230
|
+
const cached = await cacheKey(policy, user, options);
|
|
231
|
+
if (cached === void 0) return create(options);
|
|
232
|
+
return instances.instance(cached.key, cached.owners, () => Promise.resolve(create(cachedSources(cached.options, instances))));
|
|
233
|
+
}
|
|
234
|
+
//#endregion
|
|
44
235
|
//#region src/core/assert-decision.ts
|
|
45
236
|
/**
|
|
46
237
|
* `assert`'s outcome: the granted decision, or the error a refusal throws after
|
|
@@ -512,96 +703,6 @@ function buildInstance(policy, subject, envBase, team) {
|
|
|
512
703
|
return Object.freeze(instance);
|
|
513
704
|
}
|
|
514
705
|
//#endregion
|
|
515
|
-
//#region src/core/freshness.ts
|
|
516
|
-
function versionQuery(principal, issuedAt) {
|
|
517
|
-
return compact({
|
|
518
|
-
id: principal.id,
|
|
519
|
-
roles: principal.roles,
|
|
520
|
-
memberships: principal.memberships,
|
|
521
|
-
authzVersion: principal.authzVersion,
|
|
522
|
-
issuedAt
|
|
523
|
-
});
|
|
524
|
-
}
|
|
525
|
-
function threw(source, auth) {
|
|
526
|
-
auth.push({
|
|
527
|
-
reason: "source-threw",
|
|
528
|
-
source: "memberships",
|
|
529
|
-
...sourceName(source)
|
|
530
|
-
});
|
|
531
|
-
}
|
|
532
|
-
/**
|
|
533
|
-
* `onStale: 'reread'`: a token behind the source's version has its memberships
|
|
534
|
-
* (and global roles, with `readRoles`) read live; a version that cannot be read
|
|
535
|
-
* keeps the claims and marks the subject stale.
|
|
536
|
-
*/
|
|
537
|
-
function rereadStale(source, principal, issuedAt, context, read, auth, readRoles) {
|
|
538
|
-
const claims = principal.memberships ?? [];
|
|
539
|
-
const claimed = principal.authzVersion;
|
|
540
|
-
const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
|
|
541
|
-
const unknown = () => {
|
|
542
|
-
threw(source, auth);
|
|
543
|
-
return "unknown";
|
|
544
|
-
};
|
|
545
|
-
let freshness;
|
|
546
|
-
try {
|
|
547
|
-
const current = source.version?.(versionQuery(principal, issuedAt), context);
|
|
548
|
-
freshness = isThenable(current) ? Promise.resolve(current).then(judge, unknown) : judge(current);
|
|
549
|
-
} catch {
|
|
550
|
-
freshness = unknown();
|
|
551
|
-
}
|
|
552
|
-
const failed = () => {
|
|
553
|
-
threw(source, auth);
|
|
554
|
-
return [];
|
|
555
|
-
};
|
|
556
|
-
const rolesOf = (found) => {
|
|
557
|
-
if (found !== "reread" || readRoles === void 0) return;
|
|
558
|
-
try {
|
|
559
|
-
const roles = readRoles();
|
|
560
|
-
return isThenable(roles) ? Promise.resolve(roles).catch(failed) : roles;
|
|
561
|
-
} catch {
|
|
562
|
-
return failed();
|
|
563
|
-
}
|
|
564
|
-
};
|
|
565
|
-
if (isThenable(freshness)) {
|
|
566
|
-
const settled = freshness.then((found) => ({
|
|
567
|
-
found,
|
|
568
|
-
roles: rolesOf(found)
|
|
569
|
-
}));
|
|
570
|
-
return {
|
|
571
|
-
memberships: settled.then(({ found }) => found === "reread" ? read() : claims),
|
|
572
|
-
stale: settled.then(({ found }) => found === "unknown"),
|
|
573
|
-
roles: settled.then(({ roles }) => roles)
|
|
574
|
-
};
|
|
575
|
-
}
|
|
576
|
-
return compact({
|
|
577
|
-
memberships: freshness === "reread" ? read() : claims,
|
|
578
|
-
stale: freshness === "unknown",
|
|
579
|
-
roles: rolesOf(freshness)
|
|
580
|
-
});
|
|
581
|
-
}
|
|
582
|
-
/**
|
|
583
|
-
* Whether the token's memberships are behind the source for `fresh`
|
|
584
|
-
* permissions. Live memberships are never stale; token memberships are stale
|
|
585
|
-
* unless a source reports a version the token's `authzVersion` has reached.
|
|
586
|
-
*/
|
|
587
|
-
function staleness(policy, principal, source, given, auth) {
|
|
588
|
-
if ((policy.fresh ?? []).length === 0 || principal === null || given.live) return false;
|
|
589
|
-
if (given.stale !== void 0) return given.stale;
|
|
590
|
-
const claimed = principal.authzVersion;
|
|
591
|
-
if (source?.version === void 0 || typeof claimed !== "number") return true;
|
|
592
|
-
const compare = (current) => current === void 0 || claimed < current;
|
|
593
|
-
try {
|
|
594
|
-
const current = source.version(versionQuery(principal, given.issuedAt), given.context);
|
|
595
|
-
return isThenable(current) ? Promise.resolve(current).then(compare, () => {
|
|
596
|
-
threw(source, auth);
|
|
597
|
-
return true;
|
|
598
|
-
}) : compare(current);
|
|
599
|
-
} catch {
|
|
600
|
-
threw(source, auth);
|
|
601
|
-
return true;
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
//#endregion
|
|
605
706
|
//#region src/core/oauth-scopes.ts
|
|
606
707
|
/**
|
|
607
708
|
* Every OAuth scope a token may carry to the permission keys it reaches: each
|
|
@@ -763,7 +864,7 @@ function assemblePrincipal(policy, user, options, auth, memo) {
|
|
|
763
864
|
}, () => read(source, principal), auth, source.globalRolesFor === void 0 ? void 0 : () => source.globalRolesFor?.(compact({
|
|
764
865
|
id: principal.id,
|
|
765
866
|
kind: principal.kind
|
|
766
|
-
}), { memo }) ?? []);
|
|
867
|
+
}), { memo }) ?? [], options.version?.known);
|
|
767
868
|
memberships = reread.memberships;
|
|
768
869
|
stale = reread.stale;
|
|
769
870
|
roles = reread.roles;
|
|
@@ -942,7 +1043,8 @@ function resolveAssembled(policy, assembled, options, auth, memo) {
|
|
|
942
1043
|
context: {
|
|
943
1044
|
memo,
|
|
944
1045
|
intent: options.intent ?? "write"
|
|
945
|
-
}
|
|
1046
|
+
},
|
|
1047
|
+
known: options.version?.known
|
|
946
1048
|
}, auth);
|
|
947
1049
|
const withPlans = (resolved) => entitlementsOf(assembled, activeTenantOf(policy, assembled, applyRoleKinds(policy, assembled.principal?.roles, normalizeMemberships(resolved, scopeList(policy.scopes))).memberships, options), options, auth);
|
|
948
1050
|
if (isThenable(assembled.context) || isThenable(memberships) || isThenable(stale)) return Promise.all([
|
|
@@ -1050,7 +1152,8 @@ function getPermDockSync(policy, user, options = {}) {
|
|
|
1050
1152
|
* `getPermDockSync` is the synchronous twin.
|
|
1051
1153
|
*/
|
|
1052
1154
|
function getPermDock(policy, user, options = {}) {
|
|
1053
|
-
|
|
1155
|
+
const { instances, ...rest } = options;
|
|
1156
|
+
return Promise.resolve().then(() => instances === void 0 ? create(policy, user, rest) : cachedInstance(policy, user, rest, instances, (cached) => create(policy, user, cached)));
|
|
1054
1157
|
}
|
|
1055
1158
|
//#endregion
|
|
1056
1159
|
export { delegatedScopeMap as a, APP as c, challengeScope as i, withApp as l, getPermDockSync as n, hasScope as o, resolveSubject as r, scopesReaching as s, getPermDock as t };
|