permdock 0.17.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/{adoption-scan-Ci0xiJ3T.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-4KxMRdJC.js → approval-normalize-CUjgSsOl.js} +1 -1
- package/dist/{approval-policies-9VagPixq.d.ts → approval-policies-oNnckT12.d.ts} +1 -1
- package/dist/{approval-prompt-BSh-yxbH.d.ts → approval-prompt-Bg7gDSqd.d.ts} +1 -1
- package/dist/approvals/index.d.ts +3 -3
- package/dist/approvals/index.js +3 -3
- package/dist/{approvals-DdFcTncq.js → approvals-DGId_hgJ.js} +2 -2
- package/dist/{approvers-CNtl4Vc5.js → approvers-BaNwKYgd.js} +1 -3
- package/dist/{arazzo-_zUmT8ZT.js → arazzo--riLuGY0.js} +2 -2
- package/dist/{arazzo-7kbeh1yi.js → arazzo-CEDbb-uM.js} +1 -1
- package/dist/astro/index.d.ts +4 -4
- package/dist/astro/index.js +2 -2
- package/dist/{audience-jRO819i3.js → audience-B4YR9UpV.js} +1 -1
- package/dist/authzen/index.d.ts +5 -5
- package/dist/authzen/index.js +2 -2
- package/dist/{automation-DCWuVKtd.d.ts → automation-Bfa_wD1h.d.ts} +1 -1
- package/dist/better-auth/index.d.ts +1 -1
- package/dist/better-auth/index.js +1 -1
- package/dist/better-supabase/index.d.ts +153 -91
- package/dist/better-supabase/index.js +332 -62
- package/dist/{bind-BJFeLX1V.js → bind-B4pMH9bm.js} +4 -4
- package/dist/{bind-DjFNX0Pq.d.ts → bind-DR6ku3A9.d.ts} +7 -7
- package/dist/{build-instance-lye7oEqf.js → build-instance-BFMFQdE_.js} +1 -1
- package/dist/{capability-BzjWdKmP.d.ts → capability-BZ_veK9o.d.ts} +1 -1
- package/dist/{casbin-DFzk_so3.js → casbin-DCQHkkyj.js} +1 -1
- package/dist/{casbin-C3O_O9nu.js → casbin-bKC1FpEx.js} +1 -1
- package/dist/catalog/index.d.ts +4 -4
- package/dist/catalog/index.js +5 -5
- package/dist/catalog-Caqhbdix.js +1 -0
- package/dist/{catalog-DGDd_ww1.js → catalog-D1fw8qif.js} +2 -2
- package/dist/{catalog-operations-DVI5QO5R.js → catalog-operations-BD22drQf.js} +2 -2
- package/dist/{catalog-DJJIkR9P.js → catalog-zzNuR3sY.js} +1 -1
- package/dist/{challenge-M_ghKJnT.js → challenge-B2O2OLEk.js} +1 -1
- 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/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/cli/bin.js +1 -1
- package/dist/cli/index.d.ts +4 -4
- package/dist/cli/index.js +2 -2
- 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-DYqzmh5i.js → cloud-C0vXBmLG.js} +2 -2
- package/dist/{codemod-DqB9klYI.js → codemod-C-L0w-u7.js} +2 -2
- package/dist/{codemod-DNGMGqBS.js → codemod-eYI1FbeJ.js} +1 -1
- package/dist/{collect-C44RrKCI.js → collect-CU85z6Ta.js} +2 -2
- package/dist/{collect-HfJXl8Tr.js → collect-D878zLDP.js} +1 -1
- package/dist/collect-KCtOigxx.js +1 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/{compile-BxiwRotu.d.ts → compile-DBm0ub4p.d.ts} +2 -2
- package/dist/{completion-pwVjJlek.js → completion-Dauc6pVT.js} +1 -1
- package/dist/{config-DnfH6_eT.js → config-DWp2PucY.js} +1 -1
- package/dist/{config-report-C1jl7Na-.js → config-report-DKpFm5ID.js} +2 -2
- package/dist/convex/index.d.ts +4 -4
- package/dist/convex/index.js +2 -2
- package/dist/{core-W5f4Rjt0.js → core-B8sLve3z.js} +3 -3
- package/dist/{core-0iYZ5HUx.d.ts → core-D87h2kpR.d.ts} +2 -2
- package/dist/{create-jCPwPWXf.js → create-3A7J9KRR.js} +4 -4
- package/dist/{create-DrHUmKvG.d.ts → create-BrQXL-Wt.d.ts} +6 -6
- package/dist/{create-bzQlBzG4.d.ts → create-BzwjZuRS.d.ts} +7 -7
- package/dist/{create-gqtDb1nU.js → create-C-tm3KIF.js} +3 -3
- package/dist/{create-DNN3OtsO.d.ts → create-CtoT1lIQ.d.ts} +4 -4
- package/dist/delivery/index.d.ts +4 -4
- package/dist/delivery/index.js +1 -1
- package/dist/{denied-text-DyzWwxEB.d.ts → denied-text-DlIxt8fh.d.ts} +1 -1
- package/dist/{describe-nalX_HHE.d.ts → describe-BKtC_8PG.d.ts} +1 -1
- package/dist/{describe-CogP1loh.js → describe-BZAlPHxT.js} +1 -1
- package/dist/{diff-BTsLiW59.js → diff-BnNHqtHj.js} +4 -4
- package/dist/{diff-CcxYooMu.js → diff-CBCzOTWM.js} +1 -1
- package/dist/{doctor-DS-9ApID.js → doctor-CkYKCuX7.js} +55 -17
- package/dist/{doctor-BNRhJegR.js → doctor-xUpR5rXg.js} +2 -2
- package/dist/drizzle/index.d.ts +3 -3
- package/dist/elysia/index.d.ts +4 -4
- package/dist/elysia/index.js +3 -3
- package/dist/{errors-Dc9FdamT.d.ts → errors-TpzkEKgJ.d.ts} +1 -1
- package/dist/{evaluate-CsjXeLRo.js → evaluate-Czbj7thS.js} +2 -2
- package/dist/{evaluations-BasA9zXp.d.ts → evaluations-CisTTURl.d.ts} +3 -3
- package/dist/{evaluations-DG40eSJa.js → evaluations-h3KoJAPa.js} +1 -1
- 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-BgqpOOpd.d.ts → fetch-adapter-BdmfnbJM.d.ts} +2 -2
- package/dist/{fetch-adapter-UZOW0PRC.js → fetch-adapter-DH-NJPbL.js} +2 -2
- package/dist/{fixtures-0VTW5oNq.js → fixtures-Cemqurt8.js} +8 -2
- package/dist/{gen-CNCzG4sB.js → gen-BEIN-DRM.js} +1 -1
- package/dist/{gen-DnpZwQPo.js → gen-mf-MRwVr.js} +3 -3
- package/dist/h3/index.d.ts +4 -4
- package/dist/h3/index.js +3 -3
- package/dist/{helpers-DNnZffrI.js → helpers-DmqGy63f.js} +21 -13
- package/dist/hono/index.d.ts +4 -4
- package/dist/hono/index.js +3 -3
- package/dist/{hosted-DxRLLiFU.d.ts → hosted-BFNXwcjd.d.ts} +1 -1
- package/dist/{hosted-tPZnyjQS.js → hosted-waouw2V-.js} +3 -3
- package/dist/{import-BYVbSKx0.js → import-DObwEota.js} +1 -1
- package/dist/{index-z44pfWar.d.ts → index-BhnOOnp9.d.ts} +2 -2
- package/dist/{index-DFwUOkvt.d.ts → index-CVGio3cH.d.ts} +4 -4
- package/dist/{index-CXXUFWtG.d.ts → index-CdMOd-GY.d.ts} +4 -4
- package/dist/{index-Bt-UoBWu.d.ts → index-CdUTE6qd.d.ts} +8 -8
- package/dist/{index-CZ5mixHO.d.ts → index-Dfv9Toct.d.ts} +1 -1
- package/dist/{index-DtGtDzjb.d.ts → index-rFp6X_QP.d.ts} +4 -4
- package/dist/index.d.ts +17 -17
- package/dist/index.js +15 -13
- package/dist/{init-YSDySeMy.js → init-CNJ8lLjo.js} +1 -1
- package/dist/{init-Dr1qAStu.js → init-DS3PEsCG.js} +3 -3
- package/dist/{instance-options-BOCRxEFb.d.ts → instance-options-2sFGSdsf.d.ts} +1 -1
- package/dist/{instance-snapshot-BgOGtyCy.js → instance-snapshot-BWa71my8.js} +2 -2
- package/dist/jwt/index.d.ts +4 -4
- package/dist/{kernel-CDDU93dI.js → kernel-30Z2zM_d.js} +6 -6
- package/dist/kysely/index.d.ts +3 -3
- package/dist/{login-CXgEKLaW.js → login-BgK5Jloo.js} +1 -1
- package/dist/{login-DEVXDTX8.js → login-DUVzBLh7.js} +3 -3
- 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-Dij1U0hx.js → manifest-wclLWBVH.js} +35 -35
- package/dist/{map-error-B_f3C5cs.js → map-error-BH16Ah8P.js} +1 -1
- package/dist/mcp/index.d.ts +8 -8
- package/dist/mcp/index.js +5 -5
- package/dist/nest/index.d.ts +4 -4
- package/dist/nest/index.js +3 -3
- package/dist/next/index.d.ts +23 -10
- package/dist/next/index.js +29 -9
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +1 -1
- 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-D3wkvOoU.js → openapi-C4gFqeRz.js} +2 -2
- package/dist/{openapi-GM-kTdkq.js → openapi-zMEB9qxn.js} +2 -2
- 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/{output-DhTpe8v1.js → output-BFWLER4r.js} +1 -1
- package/dist/{ownership-moSRhxl_.js → ownership-D-mIt-w0.js} +1 -1
- package/dist/{parse-local-manifest-DEiCF4ah.js → parse-local-manifest-CxcSMQgl.js} +2 -2
- package/dist/{parse-local-manifest-BgTYdR3q.d.ts → parse-local-manifest-DvjTQNuO.d.ts} +1 -1
- package/dist/pdp/index.d.ts +3 -3
- package/dist/pdp/index.js +1 -1
- package/dist/{permdock-DdzMv5-F.js → permdock-D-_WrdKu.js} +18 -8
- package/dist/{permdock-DUWZEOLR.d.ts → permdock-ffY4CMd9.d.ts} +20 -7
- package/dist/{permissions-CvpPtz5O.js → permissions-B3ggI88M.js} +2 -2
- package/dist/{permissions-CVXmRILq.js → permissions-BaoLxy66.js} +1 -13
- package/dist/{policy-CTNl7pvN.d.ts → policy-BtKSApSt.d.ts} +1 -1
- package/dist/{policy-DxQyHKPB.js → policy-cV_wwPb8.js} +2 -2
- package/dist/{policy-from-catalog-DVa1faOr.js → policy-from-catalog-B68hGC0S.js} +6 -6
- package/dist/{policy-types-IRJVABmm.d.ts → policy-types-D-GwfQTc.d.ts} +9 -0
- package/dist/{postgrest-B_cEDd4e.d.ts → postgrest-D84p5dbA.d.ts} +1 -1
- package/dist/{powersync-C0nsyULQ.js → powersync-9PYOE1wt.js} +150 -13
- package/dist/{powersync-BZxw_v-A.js → powersync-DStC_g0B.js} +2 -2
- package/dist/powersync-xNRlC4jN.js +1 -0
- package/dist/prisma/index.d.ts +2 -2
- package/dist/{protected-action-qowj6nxN.js → protected-action-B40tU3yP.js} +2 -2
- package/dist/{protected-action-D3S9U4nc.d.ts → protected-action-Ds_EUY8B.d.ts} +5 -5
- package/dist/{protected-action-B6n6w7Rl.js → protected-action-OpOxtTsN.js} +1 -1
- package/dist/{provider-CjAu39fJ.d.ts → provider-OtnIiFWm.d.ts} +1 -1
- package/dist/{pull-DVoZ0V9_.js → pull-DLP4I1Kl.js} +2 -2
- package/dist/pull-UBjDnf4b.js +1 -0
- package/dist/{push-eJl1Tvqm.js → push-BSb8j1EW.js} +3 -3
- package/dist/{pushed-policy-DMXAOmEW.js → pushed-policy-BecMsTtM.js} +1 -1
- package/dist/{pushed-policy-CUQuvlS3.d.ts → pushed-policy-Ck3FZcoy.d.ts} +1 -1
- package/dist/react/index.d.ts +6 -6
- package/dist/react/index.js +3 -3
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react-native/index.d.ts +103 -38
- package/dist/react-native/index.js +194 -35
- package/dist/{replay-Dc3d8LhG.d.ts → replay-E5X9E1lC.d.ts} +1 -1
- package/dist/{request-context-Ch052blg.js → request-context-DM6_jY1n.js} +1 -1
- package/dist/resend/index.d.ts +4 -4
- package/dist/{resolve-names-1nCei24V.js → resolve-names-CBl4r4_r.js} +1 -1
- package/dist/{rls-ClJRblnR.js → rls-DGBL-jDY.js} +10 -10
- package/dist/{rls-BVzoZCn3.js → rls-pAHGYgTb.js} +1 -1
- package/dist/{role-builder-BrmOcXch.js → role-builder-CMW4wWzn.js} +1 -1
- package/dist/{rpc-BOu3FD6X.js → rpc-KwX_Jcxz.js} +1 -1
- package/dist/{run-CnCaTjWX.js → run-B7lv3NuK.js} +2 -2
- package/dist/run-UPbacxPg.js +1 -0
- package/dist/{run-ticket-C6lXvHM_.d.ts → run-ticket-DPaD27_r.d.ts} +2 -2
- package/dist/{runtime-CBXkOcg9.js → runtime-rf0ZuyF3.js} +1 -1
- package/dist/{saas-BqM9mJkk.js → saas-B8H1MsQ3.js} +4 -4
- package/dist/{scan-CepUXrFt.js → scan-0r3OZqqK.js} +1 -1
- package/dist/{schema-9_NDz8fx.js → schema-B_9tXrbG.js} +1 -1
- package/dist/scim/index.d.ts +1 -1
- package/dist/server/index.d.ts +10 -10
- package/dist/server/index.js +3 -3
- package/dist/{server-types-Bw-lWqzR.d.ts → server-types-3OnXjZ2D.d.ts} +8 -8
- package/dist/{sink-DUzt0e4B.d.ts → sink-ogbVkyeo.d.ts} +2 -2
- package/dist/{skills-BUuH-QFt.js → skills-B4MPRxQd.js} +1 -1
- package/dist/{skills-a4N6Y2Xm.js → skills-C9sTD70r.js} +1 -1
- package/dist/{snapshot-cache-Dbk-Gnij.d.ts → snapshot-cache-B4YvlGG_.d.ts} +1 -1
- package/dist/solid/index.d.ts +5 -5
- package/dist/solid/index.js +3 -3
- package/dist/solid-start/index.d.ts +4 -4
- package/dist/solid-start/index.js +3 -3
- package/dist/{sources-CXY05xtB.d.ts → sources-xdQShLDU.d.ts} +1 -1
- package/dist/{src-nYNBfmgq.js → src-Brzq_0in.js} +21 -104
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +1 -1
- package/dist/{standard-webhooks-BFeEpjxy.d.ts → standard-webhooks-BfPaZ6T1.d.ts} +2 -2
- package/dist/{store-g5ctUrOI.d.ts → store-DYeB-_U3.d.ts} +4 -4
- package/dist/{store-XgBMbfDy.js → store-DmVqy74I.js} +2 -2
- package/dist/{stores-53_kOwPi.js → stores-BYFopOm1.js} +2 -2
- package/dist/{stores-BtdN3eDO.d.ts → stores-EPul_8MN.d.ts} +5 -5
- package/dist/{stream-BMJg56jU.d.ts → stream-W2RuUYly.d.ts} +1 -1
- package/dist/supabase/client.d.ts +2 -31
- package/dist/supabase/index.d.ts +5 -5
- package/dist/supabase/index.js +3 -3
- package/dist/supabase/middleware.d.ts +5 -5
- package/dist/supabase/middleware.js +4 -4
- package/dist/{supabase-C8cNzp4i.js → supabase-BiViJpQ4.js} +1 -1
- package/dist/{supabase-C6FyUeSh.js → supabase-CogTyJH2.js} +2 -2
- package/dist/supabase-hook-BN46IrVI.js +1 -0
- package/dist/{supabase-hook-Cj85nccs.js → supabase-hook-DX38Hj8h.js} +238 -23
- package/dist/{supautils-BP_5WAIc.js → supautils-BGf6zRvM.js} +6 -6
- package/dist/svelte/index.d.ts +5 -5
- package/dist/svelte/index.js +5 -5
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +2 -2
- package/dist/svelte/source.d.ts +5 -5
- package/dist/svelte/source.js +3 -3
- package/dist/sveltekit/index.d.ts +4 -4
- package/dist/sveltekit/index.js +2 -2
- package/dist/{tables-BsGE6HBR.js → tables-BfOk0ymL.js} +1 -1
- package/dist/tanstack-start/index.d.ts +4 -4
- package/dist/tanstack-start/index.js +2 -2
- package/dist/terminal/index.d.ts +5 -5
- package/dist/terminal/index.js +3 -3
- package/dist/testing/core.d.ts +1 -1
- package/dist/testing/core.js +1 -1
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/testing/index.d.ts +22 -22
- package/dist/testing/index.js +15 -15
- 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/{tool-refusal-C1UlhU0V.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-C_OnZW8c.d.ts → type-helpers-i1EJ3Eb1.d.ts} +1 -1
- package/dist/{types-CAAN7evk.d.ts → types-3Y8UpFkF.d.ts} +17 -1
- package/dist/{types-B3BOcI0J.d.ts → types-B8qUkGja.d.ts} +2 -2
- package/dist/{types-UfpcY575.d.ts → types-CCEeSCMB.d.ts} +3 -3
- package/dist/{types-AOP5HQku.d.ts → types-CDVXR6YD.d.ts} +1 -1
- package/dist/{types-CJC1aaoJ.d.ts → types-Ck1KOfug.d.ts} +2 -2
- package/dist/{types-BvBbkAu1.d.ts → types-CqcsNCaN.d.ts} +1 -1
- package/dist/{types-CA-A33Q5.d.ts → types-D-JO7lh8.d.ts} +4 -4
- package/dist/{types-DVZNTkU0.d.ts → types-D19MK4t-.d.ts} +3 -3
- package/dist/{types-Sj1U8HMm.d.ts → types-DGf_cpKF.d.ts} +2 -2
- package/dist/{types-e82uzrTn.d.ts → types-DmbfLu2p.d.ts} +4 -4
- package/dist/{types-D29K5ZNP.d.ts → types-o1vu6Ks3.d.ts} +4 -4
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +1 -1
- package/dist/usage-Cl5eb-e1.js +1 -0
- package/dist/{usage-COsGLht5.js → usage-DC0UKe6C.js} +3 -3
- package/dist/{usage-CqcMeQgX.js → usage-DYtRVkcN.js} +1 -1
- package/dist/{validation-error-DpvsBwZJ.d.ts → validation-error-Dx8PipbO.d.ts} +1 -1
- package/dist/{verify-C8G8D5mk.js → verify-Bpj0hauG.js} +8 -8
- package/dist/{version-cache-9Vq5QVFC.d.ts → version-cache-DzNKWiI6.d.ts} +1 -1
- package/dist/{views-TrZYlDnM.js → views-MWmJ6Y4P.js} +1 -1
- package/dist/vue/index.d.ts +5 -5
- package/dist/vue/index.js +3 -3
- package/dist/{waiter-C2cXXLFZ.d.ts → waiter-NK_UuZbb.d.ts} +2 -2
- package/dist/{watch-DXRDBSCu.js → watch-CBHADqBH.js} +1 -1
- package/dist/watch-OYwAPCzx.js +1 -0
- package/dist/webmcp/index.d.ts +1 -1
- package/dist/webmcp/index.js +1 -1
- package/dist/{who-can-BY5d3HPw.js → who-can-KhVWMxtf.js} +1 -1
- package/dist/workflow/index.d.ts +3 -3
- package/dist/workflow/index.js +2 -2
- package/dist/workflow-sdk/index.d.ts +4 -4
- package/dist/{wrap-DpZAbxuD.d.ts → wrap-BHGA-SMM.d.ts} +2 -2
- package/package.json +1 -1
- package/schemas/supabase-manifest-v1.json +1 -1
- package/skills/permdock-approvals/references/stores-and-resume.md +1 -1
- package/skills/permdock-wire/references/adapters.md +3 -1
- package/dist/catalog-BpnjesqX.js +0 -1
- package/dist/collect-CAibhmCi.js +0 -1
- package/dist/powersync-Cqzx25dI.js +0 -1
- package/dist/pull-CUVdB04v.js +0 -1
- package/dist/run-D9N6V5WQ.js +0 -1
- package/dist/supabase-hook-CPBX4dy5.js +0 -1
- package/dist/usage-D1cpHO7p.js +0 -1
- package/dist/watch-DnymTAfe.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as PolicyVocabulary } from "./policy-types-
|
|
2
|
-
import { a as PermDock } from "./permdock-
|
|
1
|
+
import { M as PolicyVocabulary } from "./policy-types-D-GwfQTc.js";
|
|
2
|
+
import { a as PermDock } from "./permdock-ffY4CMd9.js";
|
|
3
3
|
//#region src/core/wrap.d.ts
|
|
4
4
|
/** A wrapper an adapter applies to each instance it builds, as `withOtel` does. */
|
|
5
5
|
type PermDockWrap = <V extends PolicyVocabulary>(permdock: PermDock<V>) => PermDock<V>;
|
package/package.json
CHANGED
|
@@ -510,7 +510,7 @@
|
|
|
510
510
|
},
|
|
511
511
|
"helperName": {
|
|
512
512
|
"type": "string",
|
|
513
|
-
"pattern": "^(permdock_has(_for)?|permitted_[a-z][a-z0-9_]*_(ids|permission_keys)(_for)?|permitted_[a-z][a-z0-9_]*_users|member_[a-z][a-z0-9_]*_ids(_for|_of)?|permdock_can_assign(_any|_custom_role)?(_for)?|permdock_api_key_allows|permdock_token_scope_allows|permdock_actor_may_write|permdock_is_approver|permdock_user_id)$"
|
|
513
|
+
"pattern": "^(permdock_has(_for)?|permitted_[a-z][a-z0-9_]*_(ids|permission_keys)(_for)?|permitted_[a-z][a-z0-9_]*_users|member_[a-z][a-z0-9_]*_ids(_for|_of)?|permdock_can_assign(_any|_custom_role)?(_for)?|permdock_api_key_allows|permdock_token_scope_allows|permdock_actor_may_write|permdock_is_approver|permdock_manages|permdock_user_id)$"
|
|
514
514
|
},
|
|
515
515
|
"column": {
|
|
516
516
|
"type": "object",
|
|
@@ -106,7 +106,7 @@ Send the prompt with `approvalPrompt` and `permdock/delivery`: `approvalEmail` f
|
|
|
106
106
|
|
|
107
107
|
## Approvers
|
|
108
108
|
|
|
109
|
-
`by` takes roles, `user(id)`, `relation()`, `manager({ levels? })` (whoever holds `manager` on the requester's `user` record, up to `levels` steps), `holder(permission)` and `anyOf(...)`. A list is all-of; use `anyOf(user(id), holder(permissions.x.approve))` for "this person or anyone who holds the permission". `holder()` needs `approvalsHandler(store, { permdockFor: (approver, request) => createPermDock(policy, approver, { customRoles }) })`, so custom roles count. Stages may carry their own `escalation`.
|
|
109
|
+
`by` takes roles, `user(id)`, `relation()`, `manager({ levels? })` (whoever holds `manager` on the requester's `user` record, up to `levels` steps; with better-supabase, set `rls.approvals.managers: { table, user, manager }` so SQL matches it too), `holder(permission)` and `anyOf(...)`. A list is all-of; use `anyOf(user(id), holder(permissions.x.approve))` for "this person or anyone who holds the permission". `holder()` needs `approvalsHandler(store, { permdockFor: (approver, request) => createPermDock(policy, approver, { customRoles }) })`, so custom roles count. Stages may carry their own `escalation`.
|
|
110
110
|
|
|
111
111
|
## Operation fingerprints
|
|
112
112
|
|
|
@@ -137,6 +137,8 @@ To answer guards from synced rows, write `localSnapshotManifest(policy)` (from `
|
|
|
137
137
|
|
|
138
138
|
For an offline app on PowerSync, set `powersync: { out: 'sync-config.yaml' }` in `permdock.config.ts` and run `permdock powersync generate`: one edition 3 Sync Stream per resource, from the `rls.tables` and `rls.memberships` the RLS generator reads. It under-syncs, never over-syncs: a resource with a deny grant gets no stream, and a grant with a global role, approval, break-glass, validity, request context or a condition without a Sync Streams form syncs nothing, each with a warning. The app reads what does not sync from the server. It also writes `permdock_*` streams for the user's own membership, global-role and custom-role rows; with `powersync.manifest` set it writes the manifest too, and `powerSyncSource(db, { manifest, queries, read })` from `permdock/react-native` builds the local snapshot from `db.watch` queries. `permdock powersync verify` fails when a stream holds a fixture row the policy denies; doctor PD058 flags a stale file or manifest. Doctor PD065 lists server-only grants read from React Native code, which the device denies offline. Docs: [`permdock powersync`](https://permdock.com/docs/cli/powersync).
|
|
139
139
|
|
|
140
|
+
For role and tenant changes on Supabase, pass `refreshOn={nativeRefresh({ supabase, appState: AppState, netInfo, powersync: { db, connector, manifest } })}`: on the user's private `authz:<uid>` topic it refreshes the session, reconnects PowerSync so streams that read token claims see the new ones, then refreshes the snapshot. The generated `permdock_authz_version` stream lets `powerSyncSource` set `snapshot.authzVersion`. PD084 names streams that read token claims; a fixture with `after` and `expected: "changed"` makes `permdock powersync verify` check that their rows follow the change. Docs: [role and tenant changes](https://permdock.com/docs/adapters/react-native#role-and-tenant-changes).
|
|
141
|
+
|
|
140
142
|
## Express — `permdock/express`
|
|
141
143
|
|
|
142
144
|
```ts
|
|
@@ -501,7 +503,7 @@ const subject = subjectFromSupabase(claims, {
|
|
|
501
503
|
|
|
502
504
|
Write the claims with `permdock supabase hook generate`; `permdock supabase inspect --out` writes the manifest (helper names, tenant claim, budget, claims written) that `authorizationProvider` from `permdock/better-supabase` turns into better-supabase's `authorization` config. No `@supabase/supabase-js` peer. Pair with `permdock rls generate`, or keep SQL as authority and run `permdock rls verify --db-url-stdin` against `sqlFunction` twins ([database-first](https://permdock.com/docs/adapters/rls)); the generic RLS workflow is in the `permdock-data` skill.
|
|
503
505
|
|
|
504
|
-
With better-supabase, set `auth.authorization: authorizationProvider({ manifest, catalog })` in `better-supabase.config.ts` (with `rls.customRoles` its `canAssign` and `canAssignFor` call `permdock_can_assign_any` and its `_for` form, so custom roles are assignable through better-supabase; regenerate the manifest after turning custom roles on), pass `authorizer({ policy })` to the server (`createNext`, `createHono`, `createMcp`) so every `permission` a resource, action, route guard or tool declares is decided by PermDock from the verified claims (`operations` maps tables for `permissions: true`; a missing or anonymous claim denies), build bucket and topic `access` policies with `bucketPolicy` and `topicPolicy`, and map its session with `subjectFromBetterSupabase(session)` (all from `permdock/better-supabase`): the active tenant's `features` become `principal.plans`. Pass `plans: { keys }` when better-supabase's `entitlements.claim.keys` shortens feature keys, and `apiKeys: { permissions, manifest }` so an `apiKey` session maps to the key's credential subject instead of the anonymous one. For `createMcp` tools, put the permission in `meta` and spread `toolPolicy({ permdock })` into the options: tools without one are hidden and refused, and approval-required calls are refused because `createMcp` collects no approvals. Wrap a `CredentialProvider` with `credentialGuard(provider, { permdock, use, revoke? })` so PermDock decides each token use. `authorizationProvider({ ..., approver })` lets holders of that permission approve AI tool calls, never their own. `approvers: { 'ai-tool': holder(p), 'support-session': ..., 'invoice.send': ... }` fills `isApprover` through `permdock_is_approver` (needs `rls.approvals`); only `user()`, `holder()` and `anyOf()` approvers, and a kind it does not name has no approver. `accessReviewApplier({ client, reviews, policy, demoteTo?, email?, permdockFor? })` applies a review's revoked items: `update_member_role` to the `demoteTo` role when that role lacks the permission, else `remove_member`, plus `revoke_invitation` for the member's matching invitations, then `markApplied`; pass the reviewer's client so the blocks' own checks run. better-supabase's `createAgentRuntime({ toolApproval })` takes `toolApproval` from `permdock/ai-sdk` as it is. Validate its claims with `betterSupabase.claims(supabaseClaims().extend(appSchema))` (`supabaseClaims` from `permdock/supabase`, any Standard Schema as `appSchema`) instead of a hand-written copy of the claim shape. A `supabase.hook.claims` function that needs the user's organizations calls `<schema>.member_organization_ids_for(user_id)` (generated by `rls generate`, executable by `supabase_auth_admin` only) instead of querying the membership tables itself. With a scope named `team` or `teams`, `authorizationProvider` fills better-supabase's `teamIdsOf` with `<schema>.member_team_ids_of(user)`, which answers only for the caller, so with `blocks.permissions.model: 'provider'` better-supabase's `team_ids_of()` and team-sharing policies read PermDock's memberships. A token Supabase's OAuth server issued to a third-party app (`client_id`) becomes an `oauth-client` actor limited to its `scope`; `deny(permission, { to: actor('oauth-client') })` keeps such apps out, in the app and, through `rls generate`, in Postgres. A better-supabase support session (`act.kind: 'support'`) is actor kind `support` with `sessionId` and `readOnly`, and `actingAs` (`act.kind: 'impersonation'`) is kind `impersonation`; neither has a delegation, so they reach nothing until a policy delegation names `actor('support')` or `actor('impersonation')`, and `readOnly: true` (also when `read_only` is absent) narrows that to read-only permissions. Generated RLS reads memberships, not `act`, so a support token sent to the Data API writes as the user: add a restrictive `for update` (and `insert` / `delete`) policy per writable table that requires `act ->> 'read_only' = 'false'` when `act` is a support or session level ([support access](https://permdock.com/docs/guides/support-access)). With `rls.anonymousSignIns: 'deny'`, pass `anonymousSignIns: 'deny'` to the subject mapper too (doctor PD057). Check a deployed database against the generated policies with `permdock rls verify --introspect`.
|
|
506
|
+
With better-supabase, set `auth.authorization: authorizationProvider({ manifest, catalog })` in `better-supabase.config.ts` (with `rls.customRoles` its `canAssign` and `canAssignFor` call `permdock_can_assign_any` and its `_for` form, so custom roles are assignable through better-supabase; regenerate the manifest after turning custom roles on), pass `authorizer({ policy })` (or `authorizer({ policy, permdockFor })` to share one instance cache with `permdockFor(...).sources(versions)` in oRPC, MCP and `permdock/next`) to the server (`createNext`, `createHono`, `createMcp`) so every `permission` a resource, action, route guard or tool declares is decided by PermDock from the verified claims (`operations` maps tables for `permissions: true`; a missing or anonymous claim denies), build bucket and topic `access` policies with `bucketPolicy` and `topicPolicy`, and map its session with `subjectFromBetterSupabase(session)` (all from `permdock/better-supabase`): the active tenant's `features` become `principal.plans`. Pass `plans: { keys }` when better-supabase's `entitlements.claim.keys` shortens feature keys, and `apiKeys: { permissions, manifest }` so an `apiKey` session maps to the key's credential subject instead of the anonymous one. For `createMcp` tools, put the permission in `meta` and spread `toolPolicy({ permdock })` into the options: tools without one are hidden and refused, and approval-required calls are refused because `createMcp` collects no approvals. Wrap a `CredentialProvider` with `credentialGuard(provider, { permdock, use, revoke? })` so PermDock decides each token use. `authorizationProvider({ ..., approver })` lets holders of that permission approve AI tool calls, never their own. `approvers: { 'ai-tool': holder(p), 'support-session': ..., 'invoice.send': ... }` fills `isApprover` through `permdock_is_approver` (needs `rls.approvals`); only `user()`, `holder()` and `anyOf()` approvers, and a kind it does not name has no approver. `requestApprovers: true` also passes better-supabase's `{approvers}` (the request's current step) to the five-argument `permdock_is_approver`, so a cover from `rls.approvals.delegations` reaches users and managers a block policy names; it needs a better-supabase release that fills `{approvers}`. `rls.approvals: { store: false, delegations: true }` writes the covers without PermDock's store. `blockApprovalStore(approvals, { tenantless })` resolves through the block's `approve` and `reject` with `decidedBy`, and `blockApprovalPolicySource(approvals, { platform, permissions, effects })` maps conditions, effects, `*` and platform policies, dropping what it cannot express so a policy only gets stricter. `accessReviewApplier({ client, reviews, policy, demoteTo?, email?, permdockFor? })` applies a review's revoked items: `update_member_role` to the `demoteTo` role when that role lacks the permission, else `remove_member`, plus `revoke_invitation` for the member's matching invitations, then `markApplied`; pass the reviewer's client so the blocks' own checks run. better-supabase's `createAgentRuntime({ toolApproval })` takes `toolApproval` from `permdock/ai-sdk` as it is. Validate its claims with `betterSupabase.claims(supabaseClaims().extend(appSchema))` (`supabaseClaims` from `permdock/supabase`, any Standard Schema as `appSchema`) instead of a hand-written copy of the claim shape. A `supabase.hook.claims` function that needs the user's organizations calls `<schema>.member_organization_ids_for(user_id)` (generated by `rls generate`, executable by `supabase_auth_admin` only) instead of querying the membership tables itself. With a scope named `team` or `teams`, `authorizationProvider` fills better-supabase's `teamIdsOf` with `<schema>.member_team_ids_of(user)`, which answers only for the caller, so with `blocks.permissions.model: 'provider'` better-supabase's `team_ids_of()` and team-sharing policies read PermDock's memberships. A token Supabase's OAuth server issued to a third-party app (`client_id`) becomes an `oauth-client` actor limited to its `scope`; `deny(permission, { to: actor('oauth-client') })` keeps such apps out, in the app and, through `rls generate`, in Postgres. A better-supabase support session (`act.kind: 'support'`) is actor kind `support` with `sessionId` and `readOnly`, and `actingAs` (`act.kind: 'impersonation'`) is kind `impersonation`; neither has a delegation, so they reach nothing until a policy delegation names `actor('support')` or `actor('impersonation')`, and `readOnly: true` (also when `read_only` is absent) narrows that to read-only permissions. Generated RLS reads memberships, not `act`, so a support token sent to the Data API writes as the user: add a restrictive `for update` (and `insert` / `delete`) policy per writable table that requires `act ->> 'read_only' = 'false'` when `act` is a support or session level ([support access](https://permdock.com/docs/guides/support-access)). With `rls.anonymousSignIns: 'deny'`, pass `anonymousSignIns: 'deny'` to the subject mapper too (doctor PD057). Check a deployed database against the generated policies with `permdock rls verify --introspect`.
|
|
505
507
|
|
|
506
508
|
The other better-supabase slots, all from `permdock/better-supabase` ([better-supabase](https://permdock.com/docs/adapters/better-supabase)): `hookCan(permdock)` and `handlerCan({ getPermDock })` are the `can` options of `authorizeHook` and `protectWebHandler` in `better-supabase/workflow-sdk`; they decide with no row unless the `data` option loads one (`hookCan(permdock, { data: (tenant, key) => row })`, `handlerCan(source, { data: (request, key) => row })`), so without it a permission with a row condition denies, and `handlerCan` answers `undefined` (401) without a signed-in principal. `supportPolicy({ policy, options?, writable?, approval?, approved? })` is the `authorize` option of `supportSessions`; it decides each start with `decideSupportSession` as the admin, and an `approval-required` start passes only once `approved(input, pending)` returns `{ approvedBy }` for an approver other than the admin. `subscriberPolicy({ policy, principals, events, row?, sender? })` filters outbox, webhook or realtime subscribers to those who may read the event (exact type, then the longest `prefix.*`, then `*`; a type with no entry reaches no one). `principalSource({ claims, identities? })` is a `PrincipalSource` over the claims better-supabase mints, for `decideFor`, `subscribersFor` and delivery; only links the app created through a signed-in flow or a verified address go in `identities`. `authorizationHooks({ policy, claims, service?, principals?, events?, approvers?, support?, tickets? })` is the `authorization` option of `createServer`: it answers automation publish and run-as, delegated OAuth scopes, `approverOf`, identities, delivery audiences, support sessions and run tickets from the claims better-supabase mints now, never from the request.
|
|
507
509
|
|
package/dist/catalog-BpnjesqX.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { t as catalogFile, n as runCatalog } from "./catalog-DGDd_ww1.js";
|
package/dist/collect-CAibhmCi.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { r as runCollect } from "./collect-HfJXl8Tr.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { n as runPowerSync } from "./powersync-C0nsyULQ.js";
|
package/dist/pull-CUVdB04v.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { n as runCloudPull } from "./pull-DVoZ0V9_.js";
|
package/dist/run-D9N6V5WQ.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { t as run } from "./run-CnCaTjWX.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { i as runSupabase } from "./supabase-hook-Cj85nccs.js";
|
package/dist/usage-D1cpHO7p.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { t as runUsage } from "./usage-COsGLht5.js";
|
package/dist/watch-DnymTAfe.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { i as watchCollect } from "./watch-DXRDBSCu.js";
|