permdock 0.3.0 → 0.4.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 +7 -5
- package/dist/a2a/index.js +14 -21
- package/dist/ai-sdk/index.d.ts +18 -6
- package/dist/ai-sdk/index.js +8 -5
- package/dist/app-data-CV8pqqMi.js +59 -0
- package/dist/approvals/index.d.ts +2 -2
- package/dist/approvals/index.js +3 -3
- package/dist/{approvals-DbYAuNkG.js → approvals-DZL76lKW.js} +35 -19
- package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
- package/dist/{arazzo-BAgw9ap6.js → arazzo-C4BcskbX.js} +6 -5
- package/dist/{arazzo-CKwwqFWz.js → arazzo-CD8d0WLb.js} +2 -2
- package/dist/authzen/index.d.ts +3 -3
- package/dist/authzen/index.js +161 -23
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +6 -19
- package/dist/better-supabase/index.d.ts +112 -87
- package/dist/better-supabase/index.js +257 -156
- package/dist/{bind-C_ob3LKa.d.ts → bind-BzqG8SMb.d.ts} +16 -5
- package/dist/{bind-CuzGytRf.js → bind-kk-uyCwH.js} +14 -6
- package/dist/build-instance-DIIV9DbC.js +51 -0
- package/dist/{canonical-json-DemiK4Vp.js → canonical-json-CFKyFOke.js} +1 -3
- package/dist/{capability-2kYTMWDv.d.ts → capability-CksyCWDH.d.ts} +2 -2
- package/dist/{capability-4qPdO9gk.js → capability-txATtKV4.js} +3 -2
- package/dist/catalog/index.d.ts +1 -1
- package/dist/catalog/index.js +1 -1
- package/dist/catalog-6yWAX6Ps.js +2 -0
- package/dist/{catalog-dFZdWCGN.js → catalog-WHG4kBq7.js} +2 -2
- package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-DWtg0gGR.js} +17 -10
- package/dist/{catalog-DWF5cYqB.js → catalog-tZUyOfOv.js} +4 -4
- package/dist/claude-agent/index.d.ts +4 -4
- package/dist/claude-agent/index.js +4 -5
- package/dist/clerk/index.d.ts +3 -3
- package/dist/clerk/index.js +8 -33
- package/dist/cli/bin.js +1 -1
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +3 -3
- package/dist/cloud/index.d.ts +4 -4
- package/dist/cloud/index.js +9 -15
- package/dist/{cloud-CB_ELYuX.js → cloud-C7bSDgX4.js} +2 -2
- package/dist/{cloud-DWLXO2af.js → cloud-PeBN3IEn.js} +5 -5
- package/dist/{collect-DSTE3ml9.js → collect-2SrB7lfk.js} +6 -8
- package/dist/collect-Bw2Jdq1q.js +2 -0
- package/dist/{collect-DClJsheJ.js → collect-CQx4hX4N.js} +3 -3
- package/dist/{commands-DSxCqG9A.js → commands-Cpip4ULx.js} +13 -13
- 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 -1
- package/dist/{compile-Ba4blROR.js → compile-CcEu2ZQ1.js} +6 -5
- package/dist/{compile-BkRyBDBw.d.ts → compile-CtTP7eur.d.ts} +2 -2
- package/dist/{config-BJiM-xAm.js → config-BIjREpyE.js} +4 -4
- package/dist/{config-Dnszbv-6.js → config-DLt6BvV7.js} +2 -2
- package/dist/{config-report-DMvWKUxL.js → config-report--Xb9APJS.js} +5 -6
- package/dist/{connection-CU8MQxRi.js → connection-DUsczpB5.js} +3 -2
- package/dist/constants-DcJABbLW.js +20 -0
- package/dist/{context-Bcy85rGi.js → context-DieZVJXu.js} +16 -5
- package/dist/convex/index.d.ts +4 -4
- package/dist/convex/index.js +14 -16
- package/dist/create-BBO24vj6.js +324 -0
- package/dist/{credential-8P81ff4u.js → credential-kue0qpbm.js} +4 -4
- package/dist/deciding-columns-Sq12mEA6.js +123 -0
- package/dist/delegation-input-FTxMK3ji.js +19 -0
- package/dist/denied-text-DfRk15uw.d.ts +19 -0
- package/dist/{describe-DMYiCjJV.d.ts → describe-C3ldA9os.d.ts} +11 -2
- package/dist/{describe-B_gVZEVi.js → describe-Cgkp7eP0.js} +5 -4
- package/dist/{diff-DBIhz_f2.js → diff-Cnghh_Ip.js} +2 -2
- package/dist/{diff-2VaeChzX.js → diff-rpqoe7Ag.js} +9 -9
- package/dist/{doctor-BwCAMLx_.js → doctor-CuVJvhV_.js} +2 -2
- package/dist/doctor-owlv6ddh.js +2166 -0
- package/dist/drizzle/index.d.ts +2 -2
- package/dist/drizzle/index.js +6 -14
- package/dist/elysia/index.d.ts +4 -4
- package/dist/elysia/index.js +7 -7
- package/dist/{errors-DPdqI50v.d.ts → errors-OD_4c__H.d.ts} +2 -2
- package/dist/{errors-Cz5zn0mW.js → errors-drnfxYtm.js} +3 -3
- package/dist/{evaluations-tz6D9A2G.js → evaluations-C9YJsv3H.js} +45 -7
- package/dist/eve/index.d.ts +5 -5
- package/dist/eve/index.js +5 -5
- package/dist/express/index.d.ts +4 -4
- package/dist/express/index.js +8 -7
- package/dist/fastify/index.d.ts +15 -5
- package/dist/fastify/index.js +9 -29
- package/dist/fields-fwfXN01n.js +1016 -0
- package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
- package/dist/{fixtures-ht28Cplr.js → fixtures-h2eG2OZV.js} +5 -6
- package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-7REQZe0H.js} +32 -22
- package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
- package/dist/grantee-CXY-0C87.js +254 -0
- package/dist/grantee-conditions-MQs5NIuX.js +270 -0
- package/dist/grantee-match-fxYp9Nmt.js +141 -0
- package/dist/{helpers-H_KARDVC.js → helpers-C9YmyBIa.js} +7 -6
- package/dist/hono/index.d.ts +4 -4
- package/dist/hono/index.js +8 -8
- package/dist/hosted-CBHgkzDl.js +655 -0
- package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
- package/dist/{http-BIhmLfCc.js → http-BEbdMZ05.js} +2 -24
- package/dist/{rls-import-BTFVk3jH.js → import-BFIlhetD.js} +86 -80
- package/dist/{openapi-import-cmwetbzw.js → import-UHk1N7vH.js} +6 -7
- package/dist/{index-C8z4RjQV.d.ts → index-BwMe94Xq.d.ts} +1 -1
- package/dist/{index-0nNqHspG.d.ts → index-DgM7w96K.d.ts} +2 -2
- package/dist/{index-C7Tw7MaW.d.ts → index-Dz7didpC.d.ts} +3 -3
- package/dist/{index-BNc7Wer_.d.ts → index-UdVQgq48.d.ts} +105 -38
- package/dist/index.d.ts +15 -13
- package/dist/index.js +22 -22
- package/dist/{instance-options-jARdwfPN.d.ts → instance-options-plkrsAog.d.ts} +1 -1
- package/dist/{json-schema-BsAflUGW.js → json-schema-DBkdUuCO.js} +1 -3
- package/dist/jwt/index.d.ts +4 -4
- package/dist/jwt/index.js +13 -13
- package/dist/{kernel-_RRHmnMY.js → kernel-CB3LrIJM.js} +81 -32
- package/dist/kysely/index.d.ts +2 -2
- package/dist/kysely/index.js +6 -14
- package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
- package/dist/load-B_shHrmd.js +2 -0
- package/dist/{load-DhWEB9P1.js → load-C3_oTHyO.js} +11 -3
- package/dist/{manifest-iaoBXHKc.js → manifest-BngWKryL.js} +5 -18
- package/dist/{map-claims-Z4QZOiFF.js → map-claims-AVlBaJoa.js} +7 -16
- package/dist/{map-error-pgUWNNtG.js → map-error-BE27PYkE.js} +5 -5
- package/dist/{markers-B0hYLvMD.js → markers-CiwAOZtO.js} +6 -2
- package/dist/{may-use-DndQ5tQ-.js → may-use-BOn_dR_w.js} +4 -3
- package/dist/mcp/index.d.ts +26 -9
- package/dist/mcp/index.js +456 -446
- package/dist/{rls-migrate-CN4TlJTO.js → migrate-BwlB5-Wk.js} +75 -15
- package/dist/nest/index.d.ts +4 -4
- package/dist/nest/index.js +11 -12
- package/dist/next/index.d.ts +31 -8
- package/dist/next/index.js +29 -33
- 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 +4 -4
- package/dist/ocsf-uYFXGVw2.js +115 -0
- package/dist/openai/index.d.ts +5 -5
- package/dist/openai/index.js +4 -4
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-CqqEbHsL.js → openapi-BJdBmYDG.js} +19 -23
- package/dist/{openapi-BqRBvAng.js → openapi-DBzHQbov.js} +2 -5
- package/dist/{openapi-l0xYHkcv.js → openapi-DcQ1Kg40.js} +3 -3
- package/dist/orpc/index.d.ts +5 -5
- package/dist/orpc/index.js +9 -11
- package/dist/otel/index.d.ts +2 -2
- package/dist/otel/index.js +26 -23
- package/dist/output-files-CgIsvdSa.js +140 -0
- package/dist/{rls-ownership-RuFqaqGz.js → ownership-BgnbOJFT.js} +387 -379
- package/dist/{package-root-zGkxO3oN.js → package-root-DtNnpmUd.js} +3 -2
- package/dist/{parse-BuyjxhZV.js → parse-CVFQHk6c.js} +3 -3
- package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-C-q02Pal.js} +2 -4
- package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DvYUR0QL.d.ts} +1 -1
- package/dist/pdp/index.d.ts +2 -2
- package/dist/pdp/index.js +8 -9
- package/dist/{permdock-CbgvLnuo.js → permdock-L26udHSk.js} +1387 -1220
- package/dist/{rls-fields-74oZPXWL.js → permission-keys-B26jeyUv.js} +1289 -2066
- package/dist/permission-registry-BsblpB-z.js +385 -0
- package/dist/{permissions-DttnqqxC.d.ts → permission-types-Dg39z9Kv.d.ts} +59 -31
- package/dist/{permissions-RJrovw98.js → permissions-CCJ6lmxB.js} +3 -3
- package/dist/{permissions-CDgvKG5L.d.ts → permissions-COH-KRgT.d.ts} +2 -2
- package/dist/{policy-IB6yxpC3.d.ts → policy-types-sp9P1iIV.d.ts} +661 -582
- package/dist/{policy-D2W7uv19.d.ts → policy-ur0BBK_e.d.ts} +2 -2
- package/dist/{powersync-DliZK_-y.js → powersync-BFSbSElQ.js} +2 -2
- package/dist/powersync-DCDgZgfZ.js +2 -0
- package/dist/{powersync-BylawD_U.js → powersync-cZe4kzhL.js} +26 -27
- package/dist/prisma/index.d.ts +1 -1
- package/dist/prisma/index.js +6 -12
- package/dist/{problem-B43ztKIm.js → problem-CnWraVhC.js} +8 -7
- package/dist/{problem-details-_AMOYz-w.js → problem-details-DECUnXAn.js} +2 -2
- package/dist/{problem-details-DX075l9V.d.ts → problem-details-rIIo8B2C.d.ts} +1 -1
- package/dist/{protected-BdnIEFkY.d.ts → protected-B3_P7xuw.d.ts} +9 -6
- package/dist/{protected-utU-SLuy.js → protected-BN7BUdY1.js} +20 -8
- package/dist/{provider-CSQd7m92.js → provider-Bi-0HNL3.js} +23 -10
- package/dist/{provider-DZY281jO.d.ts → provider-kwHC9CZD.d.ts} +1 -1
- package/dist/{provider-store-Cfbvo4DE.js → provider-store-Ctt-81Ni.js} +6 -3
- package/dist/react/index.d.ts +7 -7
- package/dist/react/index.js +5 -5
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +20 -11
- package/dist/react-native/index.js +33 -17
- package/dist/{refs-KYb4ntaz.js → refs-f3imMjNW.js} +1 -1
- package/dist/relation-walk-BXnlLtg2.js +186 -0
- package/dist/relations-CvmSpG67.js +163 -0
- package/dist/{replay-CYyiLiwO.d.ts → replay-COpmZUfx.d.ts} +1 -1
- package/dist/request-context-BVM7aWNs.js +71 -0
- package/dist/request-context-C2_1lchh.d.ts +5 -0
- package/dist/resource-relations-D1Un3pcz.js +243 -0
- package/dist/retire-BFcxL6un.js +240 -0
- package/dist/{rls-B4ur8nKQ.js → rls-55DQTuf5.js} +14 -2
- package/dist/{rls-DQtdgTHB.js → rls-BEktUaqg.js} +884 -484
- package/dist/{policy-xyWg7QdR.js → role-builder-B4GbKM-i.js} +235 -541
- package/dist/{rpc-DL9Sqvb1.js → rpc-nYC3cR_u.js} +15 -5
- package/dist/{run-DKDbM4Du.js → run-DMcNW_8T.js} +3 -3
- package/dist/{runtime-CB8gQFvS.js → runtime-D_tMXnsq.js} +1 -1
- package/dist/{saas-DhpJjnBA.js → saas-DtaA4JuW.js} +9 -8
- package/dist/{openapi-schema--ARjyfQr.js → schema-Bol6gqXA.js} +3 -5
- package/dist/{schema-D3MnDMxa.js → schema-DjQBcAP9.js} +4 -2
- package/dist/scim/index.d.ts +1 -1
- package/dist/scim/index.js +1 -1
- package/dist/{scim-BFGBBAqR.js → scim-vFR1O5oG.js} +6 -12
- package/dist/{scopes-CVdPrWN-.js → scopes-tvpa34ep.js} +10 -2
- package/dist/server/index.d.ts +18 -8
- package/dist/server/index.js +8 -8
- package/dist/{server-DlZ28Oz5.js → server-ZYEHtNHS.js} +4 -4
- package/dist/{create-B1d519XK.d.ts → server-types-DdqBwZN_.d.ts} +69 -33
- package/dist/shared-1uhI-e-b.js +294 -0
- package/dist/{shared-DRu8VFVM.js → shared-JhMeOsDF.js} +1 -1
- package/dist/{sink-Bd9PSyfq.js → sink-BTtmfPnE.js} +1 -1
- package/dist/{sink-B1fZzIMf.d.ts → sink-CPN4zLfs.d.ts} +1 -1
- package/dist/{skills-Biq5uup3.js → skills-BZdRQkxs.js} +4 -3
- package/dist/{skills-Bx-U0irG.js → skills-Dle4ZoLF.js} +2 -2
- package/dist/{snapshot-Enxd0n-s.js → snapshot-Dc9CHPME.js} +116 -13
- package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-Cod40D-X.js} +1 -1
- package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-J5T7t_vD.d.ts} +1 -1
- package/dist/solid/index.d.ts +22 -22
- package/dist/solid/index.js +40 -10
- package/dist/{sources-4p0-4xQm.js → sources-B1-b-R0t.js} +25 -26
- package/dist/{sources-BdOYLw9j.d.ts → sources-Dljy06zL.d.ts} +6 -2
- package/dist/{sql-xdg5f4Fi.js → sql-t8teWOfo.js} +19 -3
- package/dist/{src-BDwEZWrZ.js → src-Bb7no-hS.js} +194 -123
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +58 -61
- package/dist/store-9KO4BlkB.d.ts +147 -0
- package/dist/{store-DMAWwAJV.js → store-ILkLUj_o.js} +4 -4
- package/dist/{store-options-ByhZq1jV.js → store-options-CbUHDoSe.js} +16 -7
- package/dist/{stores-BT2pSCub.js → stores-BHXdSbw9.js} +7 -3
- package/dist/stores-Cxz_80g-.d.ts +31 -0
- package/dist/{stream-DDpvynSB.js → stream-BMui98KK.js} +2 -1
- package/dist/{stream-D1RXubw2.d.ts → stream-Dwsg6WwE.d.ts} +2 -2
- package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
- package/dist/supabase/index.d.ts +4 -4
- package/dist/supabase/index.js +3 -3
- package/dist/supabase/middleware.d.ts +11 -5
- package/dist/supabase/middleware.js +10 -7
- package/dist/{supabase-C0qESOa-.js → supabase-C1TWlnYt.js} +36 -52
- package/dist/{supabase-Boqb9a_Y.js → supabase-Dbqr141s.js} +2 -2
- package/dist/supabase-hook-BULg7Ut_.js +2 -0
- package/dist/{supabase-hook-CSLQ4zJ3.js → supabase-hook-Cva3ikXz.js} +731 -782
- package/dist/{supautils-Cn4R4cJ4.js → supautils-B6HYL9eL.js} +2 -2
- package/dist/svelte/Protected.svelte +9 -2
- package/dist/svelte/index.d.ts +6 -6
- package/dist/svelte/index.js +25 -11
- package/dist/svelte/runtime.d.ts +10 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +6 -6
- package/dist/svelte/source.js +4 -4
- package/dist/{validity-uOp8UpYn.js → tenancy-DshjqY0n.js} +3 -39
- package/dist/terminal/index.d.ts +5 -5
- package/dist/terminal/index.js +18 -34
- package/dist/testing/index.d.ts +89 -77
- package/dist/testing/index.js +1276 -1262
- package/dist/testing/saas/index.d.ts +4 -4
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -1
- package/dist/thenable-QSmvt-vZ.js +65 -0
- package/dist/{token-CIWxJOCh.js → token-Bx9qy30p.js} +1 -1
- package/dist/tool-refusal-CQ7OEia9.js +41 -0
- package/dist/trpc/index.d.ts +5 -5
- package/dist/trpc/index.js +7 -8
- package/dist/{types-DbjRN55U.d.ts → types-7rJVLWe5.d.ts} +82 -4
- package/dist/{types-aqOHTHcp.d.ts → types-Br9IXUBG.d.ts} +1 -1
- package/dist/types-ByUo56un.d.ts +88 -0
- package/dist/{types-Cq_H8N_X.d.ts → types-C0dee0Qf.d.ts} +2 -2
- package/dist/{types-DxiCGmmd.d.ts → types-CIlTojhq.d.ts} +2 -2
- package/dist/{types-QCuYJh4q.d.ts → types-CUcFZfpU.d.ts} +1 -1
- package/dist/{types-C97IskBw.d.ts → types-CqrjB9o6.d.ts} +1 -1
- package/dist/{types-BnIEz1sU.d.ts → types-DHrmBJLH.d.ts} +24 -6
- package/dist/{types-Dnemwd77.d.ts → types-DpWfQdSh.d.ts} +5 -1
- package/dist/{types-Bvc4oWT6.d.ts → types-DvupZE0w.d.ts} +1 -1
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +1 -1
- package/dist/{usage-GTixvDDU.js → usage-4G6t643F.js} +2 -2
- package/dist/{usage-ItS7nLcl.js → usage-CG9nOYZw.js} +7 -7
- package/dist/usage-iFLJ0-rr.js +2 -0
- package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-BSSw0l_8.d.ts} +1 -1
- package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
- package/dist/validity-dVrUEPJt.js +62 -0
- package/dist/{verifier-BxBo6I44.js → verifier-DMr_Zmb_.js} +51 -15
- package/dist/{rls-verify-CVQTHTh5.js → verify-BztUB3GX.js} +668 -239
- package/dist/{version-BvacVTZR.js → version-BEogC-rB.js} +1 -1
- package/dist/{views-Soe7bGSC.js → views-CJsrBS1f.js} +23 -1
- package/dist/{vocabulary-DA8a8zif.d.ts → vocabulary-hhEFLFoL.d.ts} +15 -6
- package/dist/vue/index.d.ts +24 -19
- package/dist/vue/index.js +24 -8
- package/dist/watch-C8TpsAl4.js +2 -0
- package/dist/{watch-DVBJ9cBq.js → watch-zeucB7eF.js} +6 -6
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +13 -37
- package/dist/wrap-Cr93qqdP.d.ts +14 -0
- package/dist/wrap-DWsU_5Bd.js +26 -0
- package/package.json +8 -8
- package/schemas/catalog-v1.json +6 -0
- package/skills/permdock-credentials/SKILL.md +1 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
- package/skills/permdock-data/references/queries-and-rls.md +4 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +1 -0
- package/skills/permdock-wire/SKILL.md +2 -2
- package/skills/permdock-wire/references/adapters.md +9 -1
- package/skills/permdock-wire/references/policy-options.md +10 -1
- package/dist/catalog-CRW5Mx_B.js +0 -2
- package/dist/collect-DSWOk19R.js +0 -2
- package/dist/create-CMwIl-w2.js +0 -253
- package/dist/delegation-D8pUEuce.js +0 -103
- package/dist/doctor-collect-CHk6XWOA.js +0 -665
- package/dist/doctor-igIiM_Hl.js +0 -1194
- package/dist/evaluation-items-CfCCejQd.js +0 -40
- package/dist/fields-BMl1RxoX.js +0 -26
- package/dist/grantee-Cv5Sogfv.js +0 -602
- package/dist/hosted-DJQw46hn.js +0 -266
- package/dist/instance-options-Dhhcnm3y.js +0 -22
- package/dist/load-DwJUafYN.js +0 -2
- package/dist/map-AcxK9o_D.js +0 -147
- package/dist/permissions-DVoF6dMt.js +0 -662
- package/dist/powersync-e_AZrKbg.js +0 -2
- package/dist/protected-xAr24FEC.d.ts +0 -40
- package/dist/relations-cjOL01hZ.js +0 -505
- package/dist/rls-graph-CHwx0V8q.js +0 -435
- package/dist/rls-shared-Cewd_-zI.js +0 -495
- package/dist/store-jOBYpiXC.d.ts +0 -36
- package/dist/stores-C0IMQrGI.d.ts +0 -52
- package/dist/supabase-config-BpPXt3x1.js +0 -472
- package/dist/supabase-hook-6sYLXg_u.js +0 -2
- package/dist/thenable-okc2xDsj.js +0 -10
- package/dist/types-CKNSyIf_.d.ts +0 -52
- package/dist/usage-DorAJiU_.js +0 -2
- package/dist/watch-BwxLTYMZ.js +0 -2
package/dist/a2a/index.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { f as ApprovalStore } from "../types-
|
|
4
|
-
import { a as ProblemDetails } from "../errors-
|
|
5
|
-
import { t as InstanceOptions } from "../instance-options-
|
|
1
|
+
import { E as Policy, Or as Principal, br as AuthorizationDetail } from "../policy-types-sp9P1iIV.js";
|
|
2
|
+
import { d as Permission } from "../permission-types-Dg39z9Kv.js";
|
|
3
|
+
import { f as ApprovalStore } from "../types-Br9IXUBG.js";
|
|
4
|
+
import { a as ProblemDetails } from "../errors-OD_4c__H.js";
|
|
5
|
+
import { t as InstanceOptions } from "../instance-options-plkrsAog.js";
|
|
6
6
|
//#region src/a2a/types.d.ts
|
|
7
7
|
type A2aAuth = {
|
|
8
8
|
readonly clientId?: string;
|
|
9
9
|
readonly scopes?: readonly string[];
|
|
10
10
|
readonly extra?: {
|
|
11
11
|
readonly authorizationDetails?: readonly AuthorizationDetail[];
|
|
12
|
+
/** The RFC 9396 claim name; read when `authorizationDetails` is absent. */
|
|
13
|
+
readonly authorization_details?: readonly AuthorizationDetail[];
|
|
12
14
|
readonly approval?: string;
|
|
13
15
|
};
|
|
14
16
|
};
|
package/dist/a2a/index.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { t as compact } from "../compact-
|
|
2
|
-
import { n as
|
|
3
|
-
import { t as
|
|
1
|
+
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
+
import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
|
|
3
|
+
import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-drnfxYtm.js";
|
|
4
|
+
import { t as canonicalJson } from "../canonical-json-CFKyFOke.js";
|
|
4
5
|
import { t as bytesToBase64Url } from "../sha256-BO0swRXL.js";
|
|
5
|
-
import {
|
|
6
|
+
import { a as scopesReaching, i as hasScope, r as challengeScope } from "../permdock-L26udHSk.js";
|
|
6
7
|
import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
|
|
7
|
-
import { t as mayUse } from "../may-use-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { n as createAgentKernel } from "../kernel-
|
|
8
|
+
import { t as mayUse } from "../may-use-BOn_dR_w.js";
|
|
9
|
+
import { f as wwwAuthenticate, r as bearerChallenge } from "../problem-CnWraVhC.js";
|
|
10
|
+
import { r as instanceOptions } from "../build-instance-DIIV9DbC.js";
|
|
11
|
+
import { n as createAgentKernel } from "../kernel-CB3LrIJM.js";
|
|
12
|
+
import { t as delegationFrom } from "../delegation-input-FTxMK3ji.js";
|
|
11
13
|
//#region src/a2a/create.ts
|
|
12
14
|
function firstScheme(options) {
|
|
13
15
|
return Object.keys(options.securitySchemes)[0];
|
|
@@ -75,29 +77,20 @@ function cardOf(options, skills) {
|
|
|
75
77
|
});
|
|
76
78
|
}
|
|
77
79
|
const DEFAULT_MODES = ["text/plain"];
|
|
78
|
-
function delegationOf(auth) {
|
|
79
|
-
return compact({
|
|
80
|
-
scopes: auth.scopes,
|
|
81
|
-
authorizationDetails: auth.extra?.authorizationDetails
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
80
|
function actorOf(auth) {
|
|
85
81
|
return typeof auth.clientId === "string" && auth.clientId !== "" ? {
|
|
86
82
|
id: auth.clientId,
|
|
87
83
|
kind: "oauth-client"
|
|
88
84
|
} : void 0;
|
|
89
85
|
}
|
|
90
|
-
|
|
91
|
-
return scopes.some((scope) => auth.scopes?.includes(scope) === true);
|
|
92
|
-
}
|
|
93
|
-
const LOAD_FAILED = {
|
|
86
|
+
const LOAD_FAILED = freezeDeep({
|
|
94
87
|
outcome: "denied",
|
|
95
88
|
denials: [{
|
|
96
89
|
role: null,
|
|
97
90
|
reason: "validation"
|
|
98
91
|
}],
|
|
99
92
|
alternatives: []
|
|
100
|
-
};
|
|
93
|
+
});
|
|
101
94
|
const NO_SUBJECT = {
|
|
102
95
|
principal: null,
|
|
103
96
|
context: {}
|
|
@@ -174,7 +167,7 @@ function createPermDock(policy, options) {
|
|
|
174
167
|
const kernel = createAgentKernel(policy, compact({
|
|
175
168
|
subject: options.subject,
|
|
176
169
|
actor: actorOf,
|
|
177
|
-
delegation:
|
|
170
|
+
delegation: (auth) => delegationFrom(auth.scopes, auth.extra),
|
|
178
171
|
tenant: options.tenant,
|
|
179
172
|
store: options.store,
|
|
180
173
|
adapter: "a2a",
|
|
@@ -207,7 +200,7 @@ function createPermDock(policy, options) {
|
|
|
207
200
|
detail: "unknown skill"
|
|
208
201
|
}
|
|
209
202
|
};
|
|
210
|
-
if (!hasScope(auth, scopesReaching(policy, config.permission))) return missingScope(config.permission, challengeScope(policy, config.permission));
|
|
203
|
+
if (!hasScope(auth.scopes, scopesReaching(policy, config.permission))) return missingScope(config.permission, challengeScope(policy, config.permission));
|
|
211
204
|
const checked = await kernel.check(compact({
|
|
212
205
|
permission: config.permission,
|
|
213
206
|
data: config.data
|
package/dist/ai-sdk/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { f as ApprovalStore } from "../types-
|
|
4
|
-
import { t as InstanceOptions } from "../instance-options-
|
|
5
|
-
import { t as
|
|
1
|
+
import { E as Policy, Or as Principal, wr as Delegation } from "../policy-types-sp9P1iIV.js";
|
|
2
|
+
import { d as Permission } from "../permission-types-Dg39z9Kv.js";
|
|
3
|
+
import { f as ApprovalStore } from "../types-Br9IXUBG.js";
|
|
4
|
+
import { t as InstanceOptions } from "../instance-options-plkrsAog.js";
|
|
5
|
+
import { n as OnDeniedText, t as DeniedTextEvent } from "../denied-text-DfRk15uw.js";
|
|
6
|
+
import { t as RequestContext } from "../request-context-C2_1lchh.js";
|
|
7
|
+
import { t as ToolMap } from "../types-DvupZE0w.js";
|
|
8
|
+
import { n as PermDockWrap } from "../wrap-Cr93qqdP.js";
|
|
6
9
|
//#region src/ai-sdk/create.d.ts
|
|
7
10
|
type AiSdkContext = {
|
|
8
11
|
readonly runtimeContext?: unknown;
|
|
@@ -22,6 +25,15 @@ type AiSdkPermDockOptions<TUser = unknown> = InstanceOptions & {
|
|
|
22
25
|
* pass through both, to the application's own `toolApproval`.
|
|
23
26
|
*/
|
|
24
27
|
readonly unmapped?: "deny" | "allow";
|
|
28
|
+
/**
|
|
29
|
+
* Request values merged into `subject.context`, under `policy.context`.
|
|
30
|
+
* Only values the server derived belong here, never model output.
|
|
31
|
+
*/
|
|
32
|
+
readonly context?: (context: AiSdkContext) => RequestContext | undefined | Promise<RequestContext | undefined>;
|
|
33
|
+
/** Wraps each instance; build it with `wrapPermDock` to cover derived instances. */
|
|
34
|
+
readonly wrap?: PermDockWrap;
|
|
35
|
+
/** Replaces the denial reason or approval summary text; nothing else. */
|
|
36
|
+
readonly onDenied?: OnDeniedText;
|
|
25
37
|
};
|
|
26
38
|
/** What an AI SDK tool approval function may return; `undefined` is `not-applicable`. */
|
|
27
39
|
type ToolApprovalResult = ToolApprovalStatus | undefined | "not-applicable" | "denied" | "user-approval" | {
|
|
@@ -92,4 +104,4 @@ type AiSdkPermDock = {
|
|
|
92
104
|
};
|
|
93
105
|
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, options: AiSdkPermDockOptions<TUser>): AiSdkPermDock;
|
|
94
106
|
//#endregion
|
|
95
|
-
export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, LanguageModelMiddleware, NeedsApprovalOptions, ToolApprovalCall, ToolApprovalResult, ToolApprovalStatus };
|
|
107
|
+
export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, DeniedTextEvent, LanguageModelMiddleware, NeedsApprovalOptions, OnDeniedText, ToolApprovalCall, ToolApprovalResult, ToolApprovalStatus };
|
package/dist/ai-sdk/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as compact } from "../compact-
|
|
2
|
-
import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-
|
|
3
|
-
import {
|
|
4
|
-
import { n as createAgentKernel, t as approvalTokenOf } from "../kernel-
|
|
1
|
+
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
+
import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-drnfxYtm.js";
|
|
3
|
+
import { r as instanceOptions } from "../build-instance-DIIV9DbC.js";
|
|
4
|
+
import { n as createAgentKernel, t as approvalTokenOf } from "../kernel-CB3LrIJM.js";
|
|
5
5
|
//#region src/ai-sdk/create.ts
|
|
6
6
|
const APPROVAL_STATUSES = /* @__PURE__ */ new Set([
|
|
7
7
|
"approved",
|
|
@@ -67,7 +67,10 @@ function createPermDock(policy, options) {
|
|
|
67
67
|
actor: options.actor,
|
|
68
68
|
delegation: options.delegation,
|
|
69
69
|
tenant: options.tenant,
|
|
70
|
-
store: options.store
|
|
70
|
+
store: options.store,
|
|
71
|
+
context: options.context,
|
|
72
|
+
wrap: options.wrap,
|
|
73
|
+
onDenied: options.onDenied
|
|
71
74
|
}),
|
|
72
75
|
...instanceOptions(options),
|
|
73
76
|
subject: options.subject,
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { a as assertSafeKey, i as validateSync } from "./thenable-QSmvt-vZ.js";
|
|
2
|
+
//#region src/core/app-data.ts
|
|
3
|
+
const MAX_META_DEPTH = 8;
|
|
4
|
+
/** Throws unless `value` is plain, prototype-safe JSON at most eight levels deep. */
|
|
5
|
+
function assertMetaValue(value, label, depth = 0) {
|
|
6
|
+
if (depth > MAX_META_DEPTH) throw new Error(`PermDock: ${label} nests deeper than ${MAX_META_DEPTH}`);
|
|
7
|
+
if (value === null || typeof value === "string" || typeof value === "boolean" || typeof value === "number" && Number.isFinite(value)) return;
|
|
8
|
+
if (Array.isArray(value)) {
|
|
9
|
+
for (const item of value) assertMetaValue(item, label, depth + 1);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype) {
|
|
13
|
+
for (const key of Object.keys(value)) {
|
|
14
|
+
assertSafeKey(key, "meta.x key");
|
|
15
|
+
assertMetaValue(Reflect.get(value, key), label, depth + 1);
|
|
16
|
+
}
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
throw new Error(`PermDock: ${label} must be plain JSON`);
|
|
20
|
+
}
|
|
21
|
+
/** Throws unless `value` is a plain JSON object (an `x` field). */
|
|
22
|
+
function assertAppData(value, label) {
|
|
23
|
+
assertMetaValue(value, label, 0);
|
|
24
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) throw new TypeError(`PermDock: ${label} must be a JSON object`);
|
|
25
|
+
}
|
|
26
|
+
function runSchema(schema, value) {
|
|
27
|
+
const result = validateSync(schema, value);
|
|
28
|
+
if (result.ok) return result;
|
|
29
|
+
return {
|
|
30
|
+
ok: false,
|
|
31
|
+
message: result.issues === void 0 ? "schema must validate synchronously" : result.issues.map((issue) => issue.message).join("; ")
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Checks code-declared app data: plain JSON, then the schema when one is
|
|
36
|
+
* given. Throws on failure, because a bad definition is an author error.
|
|
37
|
+
*/
|
|
38
|
+
function parseAppData(schema, value, label) {
|
|
39
|
+
assertAppData(value, label);
|
|
40
|
+
if (schema === void 0) return value;
|
|
41
|
+
const result = runSchema(schema, value);
|
|
42
|
+
if (!result.ok) throw new Error(`PermDock: ${label} is invalid: ${result.message}`);
|
|
43
|
+
assertAppData(result.value, label);
|
|
44
|
+
return result.value;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Checks app data read from a source (a membership, a stored custom role).
|
|
48
|
+
* Never throws: `undefined` means the value is dropped, and the caller
|
|
49
|
+
* reports it.
|
|
50
|
+
*/
|
|
51
|
+
function readAppData(schema, value) {
|
|
52
|
+
try {
|
|
53
|
+
return parseAppData(schema, value, "x");
|
|
54
|
+
} catch {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
export { readAppData as i, assertMetaValue as n, parseAppData as r, assertAppData as t };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { _ as approverRelationKey, a as ApprovalListFilter, c as ApprovalRequest, d as ApprovalStatus, f as ApprovalStore, g as approvalQuorum, h as DEFAULT_APPROVAL_TTL_MS, i as ApprovalInspectResult, l as ApprovalResumeFailure, m as ApprovalVerdict, n as ApprovalApprovers, o as ApprovalListQuery, p as ApprovalSubjectSummary, r as ApprovalCancelMeta, s as ApprovalPage, t as APPROVAL_HEADER, u as ApprovalSignature, v as escalationOpenAt } from "../types-
|
|
2
|
-
import { C as ApproverRelationsOptions, D as ApprovalError, E as approvalsHandler, O as ApprovalErrorCode, S as vouchApproval, T as ApprovalsHandlerOptions, _ as resolveApproval, a as approverPermissions, b as storedApprovalToken, c as decodeApprovalCursor, d as pageApprovals, f as cancelApprovals, g as requestApproval, h as readApprovalHeader, i as memoryApprovalStore, k as isApprovalError, l as encodeApprovalCursor, m as inspectApproval, n as applyApprovalVerdict, o as ApprovalCursorPosition, p as consumeApproval, r as assertApprover, s as approvalPageSize, t as MemoryApprovalStore, u as listAllApprovals, v as resumeDecision, w as approverRelations, x as summariseSubject, y as resumeFromHeader } from "../index-
|
|
1
|
+
import { _ as approverRelationKey, a as ApprovalListFilter, c as ApprovalRequest, d as ApprovalStatus, f as ApprovalStore, g as approvalQuorum, h as DEFAULT_APPROVAL_TTL_MS, i as ApprovalInspectResult, l as ApprovalResumeFailure, m as ApprovalVerdict, n as ApprovalApprovers, o as ApprovalListQuery, p as ApprovalSubjectSummary, r as ApprovalCancelMeta, s as ApprovalPage, t as APPROVAL_HEADER, u as ApprovalSignature, v as escalationOpenAt } from "../types-Br9IXUBG.js";
|
|
2
|
+
import { C as ApproverRelationsOptions, D as ApprovalError, E as approvalsHandler, O as ApprovalErrorCode, S as vouchApproval, T as ApprovalsHandlerOptions, _ as resolveApproval, a as approverPermissions, b as storedApprovalToken, c as decodeApprovalCursor, d as pageApprovals, f as cancelApprovals, g as requestApproval, h as readApprovalHeader, i as memoryApprovalStore, k as isApprovalError, l as encodeApprovalCursor, m as inspectApproval, n as applyApprovalVerdict, o as ApprovalCursorPosition, p as consumeApproval, r as assertApprover, s as approvalPageSize, t as MemoryApprovalStore, u as listAllApprovals, v as resumeDecision, w as approverRelations, x as summariseSubject, y as resumeFromHeader } from "../index-Dz7didpC.js";
|
|
3
3
|
export { APPROVAL_HEADER, type ApprovalApprovers, type ApprovalCancelMeta, type ApprovalCursorPosition, ApprovalError, type ApprovalErrorCode, type ApprovalInspectResult, type ApprovalListFilter, type ApprovalListQuery, type ApprovalPage, type ApprovalRequest, type ApprovalResumeFailure, type ApprovalSignature, type ApprovalStatus, type ApprovalStore, type ApprovalSubjectSummary, type ApprovalVerdict, type ApprovalsHandlerOptions, type ApproverRelationsOptions, DEFAULT_APPROVAL_TTL_MS, type MemoryApprovalStore, applyApprovalVerdict, approvalPageSize, approvalQuorum, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, inspectApproval, isApprovalError, listAllApprovals, memoryApprovalStore, pageApprovals, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, storedApprovalToken, summariseSubject, vouchApproval };
|
package/dist/approvals/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as isApprovalError, t as ApprovalError } from "../errors-DRnGZHzF.js";
|
|
2
|
-
import { a as decodeApprovalCursor, c as pageApprovals, d as approvalQuorum, f as approverRelationKey, i as approvalPageSize, l as APPROVAL_HEADER, n as assertApprover, o as encodeApprovalCursor, p as escalationOpenAt, r as memoryApprovalStore, s as listAllApprovals, t as applyApprovalVerdict, u as DEFAULT_APPROVAL_TTL_MS } from "../store-
|
|
3
|
-
import { a as requestApproval, c as resumeFromHeader, d as vouchApproval, f as approverPermissions, i as readApprovalHeader, l as storedApprovalToken, m as approverRelations, n as consumeApproval, o as resolveApproval, r as inspectApproval, s as resumeDecision, t as cancelApprovals, u as summariseSubject } from "../helpers-
|
|
4
|
-
import { t as approvalsHandler } from "../approvals-
|
|
2
|
+
import { a as decodeApprovalCursor, c as pageApprovals, d as approvalQuorum, f as approverRelationKey, i as approvalPageSize, l as APPROVAL_HEADER, n as assertApprover, o as encodeApprovalCursor, p as escalationOpenAt, r as memoryApprovalStore, s as listAllApprovals, t as applyApprovalVerdict, u as DEFAULT_APPROVAL_TTL_MS } from "../store-ILkLUj_o.js";
|
|
3
|
+
import { a as requestApproval, c as resumeFromHeader, d as vouchApproval, f as approverPermissions, i as readApprovalHeader, l as storedApprovalToken, m as approverRelations, n as consumeApproval, o as resolveApproval, r as inspectApproval, s as resumeDecision, t as cancelApprovals, u as summariseSubject } from "../helpers-C9YmyBIa.js";
|
|
4
|
+
import { t as approvalsHandler } from "../approvals-DZL76lKW.js";
|
|
5
5
|
export { APPROVAL_HEADER, ApprovalError, DEFAULT_APPROVAL_TTL_MS, applyApprovalVerdict, approvalPageSize, approvalQuorum, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, inspectApproval, isApprovalError, listAllApprovals, memoryApprovalStore, pageApprovals, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, storedApprovalToken, summariseSubject, vouchApproval };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { t as compact } from "./compact-
|
|
2
|
-
import { t as PROBLEM_BASE } from "./validation-error-
|
|
3
|
-
import { s as rootMembershipId } from "./scopes-
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { t as PROBLEM_BASE } from "./validation-error-ZfUHbKvf.js";
|
|
3
|
+
import { s as rootMembershipId } from "./scopes-tvpa34ep.js";
|
|
4
4
|
import { n as isApprovalError } from "./errors-DRnGZHzF.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { n as assertApprover } from "./store-
|
|
8
|
-
import { m as approverRelations, p as heldPermissions } from "./helpers-
|
|
5
|
+
import { r as hasCredentials } from "./http-BBoKefeS.js";
|
|
6
|
+
import { u as unauthenticatedProblem } from "./problem-CnWraVhC.js";
|
|
7
|
+
import { n as assertApprover } from "./store-ILkLUj_o.js";
|
|
8
|
+
import { m as approverRelations, p as heldPermissions } from "./helpers-C9YmyBIa.js";
|
|
9
9
|
//#region src/approvals/handler.ts
|
|
10
10
|
function problem(status, title, detail, slug) {
|
|
11
11
|
const body = {
|
|
@@ -78,13 +78,18 @@ async function mayResolve(request, subject, requireDistinct, options) {
|
|
|
78
78
|
return false;
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
-
|
|
81
|
+
/**
|
|
82
|
+
* The requester, a tenant member for a tenant request, and for a request
|
|
83
|
+
* without a tenant only who answered it or may answer it.
|
|
84
|
+
*/
|
|
85
|
+
function canView(request, subject, requireDistinct, options) {
|
|
82
86
|
const principal = subject.principal;
|
|
83
|
-
if (principal === null) return false;
|
|
84
|
-
if (request.subject.principal?.id === principal.id) return true;
|
|
87
|
+
if (principal === null) return Promise.resolve(false);
|
|
88
|
+
if (request.subject.principal?.id === principal.id) return Promise.resolve(true);
|
|
85
89
|
const tenant = request.subject.principal?.tenant;
|
|
86
|
-
if (tenant !== void 0) return belongsToTenant(subject, tenant);
|
|
87
|
-
return true;
|
|
90
|
+
if (tenant !== void 0) return Promise.resolve(belongsToTenant(subject, tenant));
|
|
91
|
+
if (request.resolvedBy === principal.id || (request.approvals ?? []).some((item) => item.by === principal.id)) return Promise.resolve(true);
|
|
92
|
+
return mayResolve(request, subject, requireDistinct, options);
|
|
88
93
|
}
|
|
89
94
|
/**
|
|
90
95
|
* The tenants whose pending requests the approver may list: the requested one,
|
|
@@ -136,16 +141,25 @@ function signedApproval(request, signer, audience) {
|
|
|
136
141
|
expiresAt: Math.floor(Date.parse(request.expiresAt) / 1e3)
|
|
137
142
|
}));
|
|
138
143
|
}
|
|
144
|
+
const MAX_BODY_BYTES = 16384;
|
|
145
|
+
const MAX_NOTE_LENGTH = 2e3;
|
|
146
|
+
function tooLarge() {
|
|
147
|
+
return problem(413, "Payload too large", `request body exceeds ${String(MAX_BODY_BYTES)} bytes`, "payload-too-large");
|
|
148
|
+
}
|
|
149
|
+
/** An unreadable body is no note; an oversized body or note is refused, never truncated. */
|
|
139
150
|
async function readNote(request) {
|
|
140
151
|
const contentType = request.headers.get("content-type") ?? "";
|
|
141
|
-
if (request.method !== "POST" || contentType
|
|
142
|
-
if (
|
|
152
|
+
if (request.method !== "POST" || !contentType.includes("application/json")) return {};
|
|
153
|
+
if (Number(request.headers.get("content-length") ?? 0) > MAX_BODY_BYTES) return { refusal: tooLarge() };
|
|
143
154
|
try {
|
|
144
|
-
const
|
|
145
|
-
if (
|
|
155
|
+
const text = await request.text();
|
|
156
|
+
if (text.length > MAX_BODY_BYTES) return { refusal: tooLarge() };
|
|
157
|
+
const body = JSON.parse(text);
|
|
158
|
+
if (body !== null && typeof body === "object" && "note" in body && typeof body.note === "string") return body.note.length > MAX_NOTE_LENGTH ? { refusal: problem(400, "Invalid request", `note exceeds ${String(MAX_NOTE_LENGTH)} characters`, "validation") } : { note: body.note };
|
|
146
159
|
} catch {
|
|
147
|
-
return;
|
|
160
|
+
return {};
|
|
148
161
|
}
|
|
162
|
+
return {};
|
|
149
163
|
}
|
|
150
164
|
function mapError(error, credentials) {
|
|
151
165
|
if (!isApprovalError(error)) return problem(500, "Internal error", "approval store failed", "internal");
|
|
@@ -194,7 +208,7 @@ function approvalsHandler(store, options) {
|
|
|
194
208
|
}
|
|
195
209
|
if (route.kind === "get") {
|
|
196
210
|
const current = await store.get(route.token);
|
|
197
|
-
if (current === null || !canView(current, subject)) return problem(404, "Not found", "approval was not found", "not-found");
|
|
211
|
+
if (current === null || !await canView(current, subject, requireDistinct, options)) return problem(404, "Not found", "approval was not found", "not-found");
|
|
198
212
|
return json(200, current);
|
|
199
213
|
}
|
|
200
214
|
const current = await store.get(route.token);
|
|
@@ -202,7 +216,9 @@ function approvalsHandler(store, options) {
|
|
|
202
216
|
const relations = await approverRelations(current, subject, options);
|
|
203
217
|
const permissions = await heldPermissions(current, subject, options.permdockFor);
|
|
204
218
|
assertApprover(current, subject, requireDistinct, /* @__PURE__ */ new Date(), relations, permissions);
|
|
205
|
-
const
|
|
219
|
+
const read = await readNote(request);
|
|
220
|
+
if (read.refusal !== void 0) return read.refusal;
|
|
221
|
+
const note = read.note;
|
|
206
222
|
const resolved = await store.resolve(route.token, compact({
|
|
207
223
|
status: route.kind === "approve" ? "approved" : "rejected",
|
|
208
224
|
by: subject,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as isReadonlyArray } from "./compact-
|
|
1
|
+
import { n as isReadonlyArray } from "./compact-CAf557ZB.js";
|
|
2
2
|
//#region src/core/approvers.ts
|
|
3
3
|
/** Approves when the approver holds `permission` in the request's tenant (any role, custom roles included). */
|
|
4
4
|
function holder(permission) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { m as arazzoFindings } from "./snapshot-Dc9CHPME.js";
|
|
2
|
+
import { i as readJsonFile } from "./files-D_JIzUrP.js";
|
|
3
|
+
import { a as loadModule, s as pickNamed, t as asPermissionTree } from "./load-C3_oTHyO.js";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
4
5
|
import { resolve } from "node:path";
|
|
5
6
|
//#region src/cli/arazzo.ts
|
|
6
7
|
async function runArazzo(input) {
|
|
@@ -23,8 +24,8 @@ async function runArazzo(input) {
|
|
|
23
24
|
let arazzo;
|
|
24
25
|
let openapi;
|
|
25
26
|
try {
|
|
26
|
-
arazzo =
|
|
27
|
-
openapi =
|
|
27
|
+
arazzo = readJsonFile(arazzoFile);
|
|
28
|
+
openapi = readJsonFile(openapiFile);
|
|
28
29
|
} catch {
|
|
29
30
|
return {
|
|
30
31
|
code: 2,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-
|
|
1
|
+
import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-Cpip4ULx.js";
|
|
2
2
|
import { defineCommand } from "citty";
|
|
3
3
|
//#region src/cli/commands/arazzo.ts
|
|
4
4
|
function arazzo(ctx) {
|
|
@@ -36,7 +36,7 @@ function arazzo(ctx) {
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
async run({ args: parsed, rawArgs }) {
|
|
39
|
-
const result = await (await import("./arazzo-
|
|
39
|
+
const result = await (await import("./arazzo-C4BcskbX.js")).runArazzo({
|
|
40
40
|
cwd: ctx.cwd,
|
|
41
41
|
config: ctx.config,
|
|
42
42
|
rest: parsed._,
|
package/dist/authzen/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { f as ApprovalStore } from "../types-
|
|
3
|
-
import { t as InstanceOptions } from "../instance-options-
|
|
1
|
+
import { E as Policy, Or as Principal } from "../policy-types-sp9P1iIV.js";
|
|
2
|
+
import { f as ApprovalStore } from "../types-Br9IXUBG.js";
|
|
3
|
+
import { t as InstanceOptions } from "../instance-options-plkrsAog.js";
|
|
4
4
|
//#region src/authzen/types.d.ts
|
|
5
5
|
type AuthzenResourceAdapter = {
|
|
6
6
|
readonly load?: (id: string) => unknown;
|
package/dist/authzen/index.js
CHANGED
|
@@ -1,14 +1,153 @@
|
|
|
1
|
-
import { t as compact } from "../compact-
|
|
2
|
-
import {
|
|
3
|
-
import { t as PROBLEM_BASE } from "../validation-error-
|
|
4
|
-
import {
|
|
1
|
+
import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
+
import { s as ownGet } from "../thenable-QSmvt-vZ.js";
|
|
3
|
+
import { t as PROBLEM_BASE } from "../validation-error-ZfUHbKvf.js";
|
|
4
|
+
import { a as getResource, c as listPermissions } from "../permission-registry-BsblpB-z.js";
|
|
5
5
|
import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { t as
|
|
9
|
-
import { t as
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
import { r as hasCredentials } from "../http-BBoKefeS.js";
|
|
7
|
+
import { a as methodNotAllowed, c as problemResponse, d as validationProblem, n as batchTooLarge, u as unauthenticatedProblem } from "../problem-CnWraVhC.js";
|
|
8
|
+
import { n as resolveOrNull, t as buildInstance } from "../build-instance-DIIV9DbC.js";
|
|
9
|
+
import { c as itemResourceData, l as permissionLookup, t as applyApprovalResume } from "../evaluations-C9YJsv3H.js";
|
|
10
|
+
//#region src/authzen/map.ts
|
|
11
|
+
const UNKNOWN = {
|
|
12
|
+
outcome: "denied",
|
|
13
|
+
denials: [{
|
|
14
|
+
role: null,
|
|
15
|
+
reason: "no-grant",
|
|
16
|
+
detail: "unknown-permission"
|
|
17
|
+
}],
|
|
18
|
+
alternatives: []
|
|
19
|
+
};
|
|
20
|
+
const UNAVAILABLE = {
|
|
21
|
+
outcome: "denied",
|
|
22
|
+
denials: [{
|
|
23
|
+
role: null,
|
|
24
|
+
reason: "no-grant",
|
|
25
|
+
detail: "resource-unavailable"
|
|
26
|
+
}],
|
|
27
|
+
alternatives: []
|
|
28
|
+
};
|
|
29
|
+
function actionNameOf(item) {
|
|
30
|
+
if (typeof item.action?.name === "string") return item.action.name;
|
|
31
|
+
if (!isRecord(item.action?.properties)) return;
|
|
32
|
+
const scope = item.action.properties["scope"];
|
|
33
|
+
return typeof scope === "string" ? scope : void 0;
|
|
34
|
+
}
|
|
35
|
+
function permissionOf(lookup, item) {
|
|
36
|
+
return lookup(actionNameOf(item), item.resource);
|
|
37
|
+
}
|
|
38
|
+
function resourceData(item) {
|
|
39
|
+
return itemResourceData(item.resource);
|
|
40
|
+
}
|
|
41
|
+
function resourceIdOf(item) {
|
|
42
|
+
const id = item.resource?.id;
|
|
43
|
+
if (typeof id === "string" || typeof id === "number") return String(id);
|
|
44
|
+
}
|
|
45
|
+
function userFromEntity(entity) {
|
|
46
|
+
if (entity === void 0) return null;
|
|
47
|
+
const result = {};
|
|
48
|
+
if (typeof entity.id === "string" || typeof entity.id === "number") result["id"] = String(entity.id);
|
|
49
|
+
if (isRecord(entity.properties)) for (const [key, value] of Object.entries(entity.properties)) {
|
|
50
|
+
if (key === "actor" || key === "delegation") continue;
|
|
51
|
+
result[key] = value;
|
|
52
|
+
}
|
|
53
|
+
return Object.keys(result).length === 0 ? null : result;
|
|
54
|
+
}
|
|
55
|
+
function actorOf(item) {
|
|
56
|
+
const context = isRecord(item.context) ? item.context : {};
|
|
57
|
+
const fromSubject = isRecord(item.subject?.properties) ? item.subject.properties["actor"] : void 0;
|
|
58
|
+
const raw = context["actor"] ?? fromSubject;
|
|
59
|
+
if (!isRecord(raw) || typeof raw["id"] !== "string") return;
|
|
60
|
+
const kind = typeof raw["kind"] === "string" ? raw["kind"] : "oauth-client";
|
|
61
|
+
return {
|
|
62
|
+
id: raw["id"],
|
|
63
|
+
kind
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function delegationOf(item) {
|
|
67
|
+
const context = isRecord(item.context) ? item.context : {};
|
|
68
|
+
const fromSubject = isRecord(item.subject?.properties) ? item.subject.properties["delegation"] : void 0;
|
|
69
|
+
const raw = context["delegation"] ?? fromSubject;
|
|
70
|
+
if (!isRecord(raw)) return;
|
|
71
|
+
const scopes = raw["scopes"];
|
|
72
|
+
const authorizationDetails = raw["authorizationDetails"];
|
|
73
|
+
return compact({
|
|
74
|
+
scopes: Array.isArray(scopes) ? scopes.filter((scope) => typeof scope === "string") : void 0,
|
|
75
|
+
authorizationDetails: Array.isArray(authorizationDetails) ? authorizationDetails : void 0
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function tenantOf(item) {
|
|
79
|
+
if (!isRecord(item.context) || typeof item.context["tenant"] !== "string") return;
|
|
80
|
+
return item.context["tenant"];
|
|
81
|
+
}
|
|
82
|
+
function permdockContext(decision) {
|
|
83
|
+
switch (decision.outcome) {
|
|
84
|
+
case "granted": return { outcome: "granted" };
|
|
85
|
+
case "denied": {
|
|
86
|
+
const unknown = decision.denials.some((denial) => denial.detail === "unknown-permission");
|
|
87
|
+
return compact({
|
|
88
|
+
outcome: "denied",
|
|
89
|
+
denials: decision.denials.map((denial) => ({
|
|
90
|
+
role: denial.role,
|
|
91
|
+
reason: denial.reason
|
|
92
|
+
})),
|
|
93
|
+
reason: unknown ? "unknown-permission" : void 0
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
case "approval-required": return {
|
|
97
|
+
outcome: "approval-required",
|
|
98
|
+
token: decision.token
|
|
99
|
+
};
|
|
100
|
+
default: return decision;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function evaluationContext(decision) {
|
|
104
|
+
return { permdock: permdockContext(decision) };
|
|
105
|
+
}
|
|
106
|
+
function evaluationRow(decision) {
|
|
107
|
+
return {
|
|
108
|
+
decision: decision.outcome === "granted",
|
|
109
|
+
context: evaluationContext(decision)
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function pathnameOf(request) {
|
|
113
|
+
return new URL(request.url).pathname;
|
|
114
|
+
}
|
|
115
|
+
function endsWithPath(pathname, suffix) {
|
|
116
|
+
return pathname === suffix || pathname.endsWith(suffix);
|
|
117
|
+
}
|
|
118
|
+
function mergeItem(shared, item) {
|
|
119
|
+
if (!isRecord(item)) return shared;
|
|
120
|
+
return compact({
|
|
121
|
+
subject: isRecord(item["subject"]) ? item["subject"] : shared.subject,
|
|
122
|
+
action: isRecord(item["action"]) ? item["action"] : shared.action,
|
|
123
|
+
resource: isRecord(item["resource"]) ? item["resource"] : shared.resource,
|
|
124
|
+
context: item["context"] ?? shared.context
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
function pageOf(body) {
|
|
128
|
+
const page = isRecord(body["page"]) ? body["page"] : {};
|
|
129
|
+
const raw = typeof page["token"] === "string" ? page["token"] : typeof page["next_token"] === "string" ? page["next_token"] : "0";
|
|
130
|
+
const parsed = Math.trunc(Number(raw));
|
|
131
|
+
const sizeRaw = page["limit"] ?? page["size"];
|
|
132
|
+
const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) : 50;
|
|
133
|
+
return {
|
|
134
|
+
offset: Number.isFinite(parsed) && parsed > 0 ? parsed : 0,
|
|
135
|
+
size
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function paged(items, offset, size) {
|
|
139
|
+
const slice = items.slice(offset, offset + size);
|
|
140
|
+
const next = offset + slice.length;
|
|
141
|
+
return {
|
|
142
|
+
results: slice,
|
|
143
|
+
page: {
|
|
144
|
+
next_token: next < items.length ? String(next) : "",
|
|
145
|
+
count: slice.length,
|
|
146
|
+
total: items.length
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//#endregion
|
|
12
151
|
//#region src/authzen/create.ts
|
|
13
152
|
function notFound(detail) {
|
|
14
153
|
return problemResponse({
|
|
@@ -56,24 +195,23 @@ const createPermDock = (policy, options) => {
|
|
|
56
195
|
};
|
|
57
196
|
const allowAnonymous = options.anonymous === true;
|
|
58
197
|
async function authenticate(request) {
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
pep = await options.subject(request);
|
|
62
|
-
} catch {
|
|
63
|
-
pep = null;
|
|
64
|
-
}
|
|
198
|
+
const pep = await resolveOrNull(() => options.subject(request));
|
|
65
199
|
if ((pep === null || pep === void 0) && !allowAnonymous) return unauthenticatedProblem(hasCredentials(request));
|
|
66
200
|
return { pep: pep ?? null };
|
|
67
201
|
}
|
|
68
|
-
function instantiate(pep, item) {
|
|
202
|
+
async function instantiate(pep, item) {
|
|
69
203
|
const trusted = trusts(pep);
|
|
70
204
|
const user = (trusted ? userFromEntity(item.subject) : null) ?? pep;
|
|
71
|
-
return
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
205
|
+
return (await buildInstance({
|
|
206
|
+
policy,
|
|
207
|
+
user,
|
|
208
|
+
sources: options,
|
|
209
|
+
scope: {
|
|
210
|
+
actor: trusted ? actorOf(item) : void 0,
|
|
211
|
+
delegation: trusted ? delegationOf(item) : void 0,
|
|
212
|
+
tenant: tenantOf(item)
|
|
213
|
+
}
|
|
214
|
+
})).permdock;
|
|
77
215
|
}
|
|
78
216
|
async function resourceOf(item) {
|
|
79
217
|
const properties = item.resource?.properties;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { N as RoleBinding, Or as Principal, W as DecisionSink, kr as Subject, nt as RoleSource } from "../policy-types-sp9P1iIV.js";
|
|
2
|
+
import { p as PermissionTree } from "../permission-types-Dg39z9Kv.js";
|
|
3
3
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
4
|
//#region src/better-auth/types.d.ts
|
|
5
5
|
type BetterAuthPrincipal = Principal & {
|