permdock 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -47
- package/dist/a2a/index.d.ts +7 -16
- package/dist/a2a/index.js +59 -98
- package/dist/adapter-context-mlWsVGGg.js +23 -0
- package/dist/ai-sdk/index.d.ts +37 -16
- package/dist/ai-sdk/index.js +30 -13
- package/dist/approvals/index.d.ts +3 -3
- package/dist/approvals/index.js +5 -4
- package/dist/{approvals-DaxY-Bdg.js → approvals-DbYAuNkG.js} +17 -11
- package/dist/approvers-DT4AVyIg.js +52 -0
- package/dist/{arazzo-CTeVuXr5.js → arazzo-BAgw9ap6.js} +2 -2
- package/dist/{arazzo-aoTkqYsJ.js → arazzo-CKwwqFWz.js} +2 -2
- package/dist/authzen/index.d.ts +4 -13
- package/dist/authzen/index.js +16 -50
- package/dist/better-auth/index.d.ts +20 -3
- package/dist/better-auth/index.js +27 -7
- package/dist/better-supabase/index.d.ts +223 -0
- package/dist/better-supabase/index.js +648 -0
- package/dist/bind-C_ob3LKa.d.ts +25 -0
- package/dist/bind-CuzGytRf.js +97 -0
- package/dist/boundary-BM8a_P6E.js +13 -0
- package/dist/boundary-BmHxVH1J.d.ts +15 -0
- package/dist/canonical-json-DemiK4Vp.js +26 -0
- package/dist/{capability-BDG_nkxt.d.ts → capability-2kYTMWDv.d.ts} +2 -2
- package/dist/{capability-B68OFnZx.js → capability-4qPdO9gk.js} +7 -5
- package/dist/catalog/index.d.ts +1 -1
- package/dist/catalog/index.js +1 -1
- package/dist/catalog-CRW5Mx_B.js +2 -0
- package/dist/{catalog-H-vFGwWK.js → catalog-DWF5cYqB.js} +4 -4
- package/dist/{catalog-B0E6bggc.js → catalog-dFZdWCGN.js} +2 -2
- package/dist/{catalog-doc-BSo_Q_-6.js → catalog-doc-DdGm82XT.js} +20 -32
- package/dist/claude-agent/index.d.ts +5 -14
- package/dist/claude-agent/index.js +4 -10
- package/dist/clerk/index.d.ts +12 -3
- package/dist/clerk/index.js +26 -5
- package/dist/cli/bin.js +1 -1
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +2 -2
- package/dist/clients-C7zLFuWT.d.ts +12 -0
- package/dist/clients-DjU5ABMy.js +23 -0
- package/dist/cloud/index.d.ts +4 -5
- package/dist/cloud/index.js +20 -6
- package/dist/{cloud-BNQTrmrr.js → cloud-CB_ELYuX.js} +2 -2
- package/dist/{cloud-Cuxr6Czw.js → cloud-DWLXO2af.js} +7 -6
- package/dist/collect-DClJsheJ.js +83 -0
- package/dist/{collect-O-tOtbnk.js → collect-DSTE3ml9.js} +194 -42
- package/dist/collect-DSWOk19R.js +2 -0
- package/dist/{commands-BMh_Etm2.js → commands-DSxCqG9A.js} +16 -12
- package/dist/compile/index.d.ts +3 -0
- package/dist/compile/index.js +2 -0
- package/dist/{compile-D22iwvuV.js → compile-Ba4blROR.js} +85 -30
- package/dist/compile-BkRyBDBw.d.ts +94 -0
- package/dist/config-BJiM-xAm.js +157 -0
- package/dist/config-Dnszbv-6.js +36 -0
- package/dist/config-report-DMvWKUxL.js +44 -0
- package/dist/{connection-JvqwHODC.js → connection-CU8MQxRi.js} +1 -1
- package/dist/{context-CKEAabd7.js → context-Bcy85rGi.js} +36 -27
- package/dist/convex/index.d.ts +9 -4
- package/dist/convex/index.js +14 -4
- package/dist/create-B1d519XK.d.ts +245 -0
- package/dist/create-CMwIl-w2.js +253 -0
- package/dist/{credential-B_rkUNlY.js → credential-8P81ff4u.js} +26 -46
- package/dist/delegation-D8pUEuce.js +103 -0
- package/dist/{describe-Bt1YD5uS.js → describe-B_gVZEVi.js} +10 -15
- package/dist/{describe-DernyItf.d.ts → describe-DMYiCjJV.d.ts} +9 -10
- package/dist/{diff-x5Il8LVa.js → diff-2VaeChzX.js} +44 -11
- package/dist/{diff-BUzf5Poi.js → diff-DBIhz_f2.js} +2 -2
- package/dist/{doctor-Bqo6FwUa.js → doctor-BwCAMLx_.js} +2 -2
- package/dist/doctor-collect-CHk6XWOA.js +665 -0
- package/dist/doctor-igIiM_Hl.js +1194 -0
- package/dist/drizzle/index.d.ts +4 -3
- package/dist/drizzle/index.js +3 -3
- package/dist/elysia/index.d.ts +6 -28
- package/dist/elysia/index.js +16 -60
- package/dist/{errors-DSMnAVNa.js → errors-CWfoNg9N.js} +8 -4
- package/dist/{errors-Iy71s7Oj.js → errors-Cz5zn0mW.js} +17 -71
- package/dist/{errors-DbZ1YOnb.d.ts → errors-DPdqI50v.d.ts} +8 -21
- package/dist/{errors-m3u9TmDu.js → errors-DRnGZHzF.js} +4 -1
- package/dist/evaluation-items-CfCCejQd.js +40 -0
- package/dist/{evaluations-DsAU9ppl.js → evaluations-tz6D9A2G.js} +28 -46
- package/dist/eve/index.d.ts +6 -15
- package/dist/eve/index.js +7 -12
- package/dist/expiry-BoBJ8Tvc.js +7 -0
- package/dist/express/index.d.ts +6 -29
- package/dist/express/index.js +28 -58
- package/dist/fastify/index.d.ts +6 -29
- package/dist/fastify/index.js +16 -65
- package/dist/fields-BMl1RxoX.js +26 -0
- package/dist/{files-B_wAGYmt.js → files-DWUN9PzI.js} +5 -1
- package/dist/{fixtures-Cvaw0gDG.js → fixtures-ht28Cplr.js} +5 -2
- package/dist/{freeze-y1_jQL4v.js → freeze-CrU8nQeX.js} +31 -2
- package/dist/{from-snapshot-BMGnhmgv.js → from-snapshot-CTLijvdm.js} +66 -48
- package/dist/{grantee-Bv04_Vzf.js → grantee-Cv5Sogfv.js} +88 -7
- package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
- package/dist/{headers-B5RRv3Xm.js → headers-BZSDieNT.js} +1 -1
- package/dist/{headers-C8SHQccD.d.ts → headers-Cf-zWvsO.d.ts} +1 -1
- package/dist/helpers-H_KARDVC.js +421 -0
- package/dist/hono/index.d.ts +6 -28
- package/dist/hono/index.js +11 -43
- package/dist/{hosted-BwKQ1BTA.js → hosted-DJQw46hn.js} +6 -5
- package/dist/{http-GgVApX1k.js → http-BIhmLfCc.js} +4 -20
- package/dist/http-SO7qGttf.js +44 -0
- package/dist/ids-DC4V4CFu.js +18 -0
- package/dist/index-0nNqHspG.d.ts +6 -0
- package/dist/{index-xIxJLwOQ.d.ts → index-BNc7Wer_.d.ts} +75 -7
- package/dist/{index-CltcQ4Bf.d.ts → index-C7Tw7MaW.d.ts} +68 -5
- package/dist/{index-LF_hS-yn.d.ts → index-C8z4RjQV.d.ts} +1 -1
- package/dist/index.d.ts +14 -9
- package/dist/index.js +22 -17
- package/dist/instance-options-Dhhcnm3y.js +22 -0
- package/dist/instance-options-jARdwfPN.d.ts +11 -0
- package/dist/{parse-DPfIvFMU.js → json-schema-BsAflUGW.js} +28 -57
- package/dist/jwt/index.d.ts +10 -6
- package/dist/jwt/index.js +32 -13
- package/dist/kernel-_RRHmnMY.js +208 -0
- package/dist/kysely/index.d.ts +4 -3
- package/dist/kysely/index.js +3 -3
- package/dist/live-options-H2eG8dfJ.js +60 -0
- package/dist/{load-BZ24CpZP.js → load-DhWEB9P1.js} +16 -10
- package/dist/load-DwJUafYN.js +2 -0
- package/dist/manifest-iaoBXHKc.js +783 -0
- package/dist/manifest-uDS9y5de.d.ts +206 -0
- package/dist/{map-DowSO96j.js → map-AcxK9o_D.js} +4 -15
- package/dist/{map-claims-B_6I1Rn-.js → map-claims-Z4QZOiFF.js} +13 -4
- package/dist/map-error-pgUWNNtG.js +23 -0
- package/dist/may-use-DndQ5tQ-.js +77 -0
- package/dist/mcp/index.d.ts +54 -22
- package/dist/mcp/index.js +218 -178
- package/dist/nest/index.d.ts +26 -31
- package/dist/nest/index.js +75 -84
- package/dist/next/client.d.ts +7 -8
- package/dist/next/client.js +11 -9
- package/dist/next/index.d.ts +30 -47
- package/dist/next/index.js +45 -60
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +32 -1
- package/dist/node/index.d.ts +9 -28
- package/dist/node/index.js +11 -43
- package/dist/openai/index.d.ts +6 -15
- package/dist/openai/index.js +7 -20
- package/dist/openapi/index.d.ts +87 -4
- package/dist/openapi/index.js +3 -3
- package/dist/{openapi-DcqM8nU7.js → openapi-BqRBvAng.js} +237 -5
- package/dist/{openapi-DWD0Uc_4.js → openapi-CqqEbHsL.js} +5 -5
- package/dist/{openapi-import-BWRUNNeW.js → openapi-import-cmwetbzw.js} +1 -1
- package/dist/{openapi-CwePaF7C.js → openapi-l0xYHkcv.js} +3 -3
- package/dist/{openapi-schema-D8j_T9tO.js → openapi-schema--ARjyfQr.js} +2 -2
- package/dist/orpc/index.d.ts +15 -28
- package/dist/orpc/index.js +74 -117
- package/dist/otel/index.d.ts +2 -2
- package/dist/parse-BuyjxhZV.js +53 -0
- package/dist/parse-local-manifest-BrMozJCo.js +36 -0
- package/dist/parse-local-manifest-JLnaBH0S.d.ts +10 -0
- package/dist/pdp/index.d.ts +2 -2
- package/dist/pdp/index.js +14 -127
- package/dist/{permdock-yoZ7EjxX.js → permdock-CbgvLnuo.js} +672 -149
- package/dist/{permissions-B8vCg_bI.d.ts → permissions-CDgvKG5L.d.ts} +2 -2
- package/dist/{permissions-DC7GROPA.js → permissions-DVoF6dMt.js} +77 -15
- package/dist/{permissions-B4apnahQ.d.ts → permissions-DttnqqxC.d.ts} +34 -5
- package/dist/{permissions-CofRqesP.js → permissions-RJrovw98.js} +3 -3
- package/dist/{pins-CqE1jZuF.js → pins-8ILTftC9.js} +2 -2
- package/dist/{policy-Cq2fB8Q5.d.ts → policy-D2W7uv19.d.ts} +2 -2
- package/dist/{policy-CInmNGkM.d.ts → policy-IB6yxpC3.d.ts} +351 -42
- package/dist/{policy-ANp36PnI.js → policy-xyWg7QdR.js} +173 -22
- package/dist/powersync-BylawD_U.js +540 -0
- package/dist/powersync-DliZK_-y.js +62 -0
- package/dist/powersync-e_AZrKbg.js +2 -0
- package/dist/prisma/index.d.ts +3 -2
- package/dist/prisma/index.js +45 -20
- package/dist/{problem-Cgp9-KZA.js → problem-B43ztKIm.js} +74 -109
- package/dist/problem-details-DX075l9V.d.ts +7 -0
- package/dist/problem-details-_AMOYz-w.js +144 -0
- package/dist/{protected-BuPAycJT.d.ts → protected-BdnIEFkY.d.ts} +5 -4
- package/dist/protected-utU-SLuy.js +100 -0
- package/dist/protected-xAr24FEC.d.ts +40 -0
- package/dist/provider-CSQd7m92.js +52 -0
- package/dist/{provider-wTAUda2v.d.ts → provider-DZY281jO.d.ts} +1 -1
- package/dist/provider-store-Cfbvo4DE.js +43 -0
- package/dist/react/index.d.ts +7 -5
- package/dist/react/index.js +5 -4
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +166 -10
- package/dist/react-native/index.js +607 -85
- package/dist/{refs-ChLSxbST.js → refs-KYb4ntaz.js} +4 -3
- package/dist/{relations-r4soIFZB.js → relations-cjOL01hZ.js} +110 -31
- package/dist/replay-BsOyTrdV.js +28 -0
- package/dist/replay-CYyiLiwO.d.ts +5 -0
- package/dist/resource-ref-CaS9yVPi.js +20 -0
- package/dist/revocations-Bhr0aMIC.js +27 -0
- package/dist/{rls-BOFU3chG.js → rls-B4ur8nKQ.js} +8 -3
- package/dist/rls-DQtdgTHB.js +2521 -0
- package/dist/rls-fields-74oZPXWL.js +3582 -0
- package/dist/{rls-graph-DxQ39PJj.js → rls-graph-CHwx0V8q.js} +100 -36
- package/dist/{rls-import-CXV6LBlS.js → rls-import-BTFVk3jH.js} +7 -6
- package/dist/{rls-migrate-DrFPbf8p.js → rls-migrate-CN4TlJTO.js} +6 -5
- package/dist/rls-ownership-RuFqaqGz.js +843 -0
- package/dist/rls-shared-Cewd_-zI.js +495 -0
- package/dist/rls-verify-CVQTHTh5.js +746 -0
- package/dist/{row-check-BajTgQZ-.d.ts → row-check-Dt35czLy.d.ts} +12 -15
- package/dist/row-conditions-h2HythXQ.js +27 -0
- package/dist/rpc-DL9Sqvb1.js +89 -0
- package/dist/{run-CJ6UvS3a.js → run-DKDbM4Du.js} +31 -12
- package/dist/runtime-CB8gQFvS.js +11 -0
- package/dist/{saas-BRrZzJkM.js → saas-DhpJjnBA.js} +17 -7
- package/dist/{schema-P8yoma__.js → schema-D3MnDMxa.js} +8 -4
- package/dist/scim/index.d.ts +1 -1
- package/dist/scim/index.js +1 -1
- package/dist/{scim-9NFa0XVZ.js → scim-BFGBBAqR.js} +1 -1
- package/dist/{scopes-cKVp_WTw.js → scopes-CVdPrWN-.js} +35 -8
- package/dist/server/index.d.ts +22 -11
- package/dist/server/index.js +11 -8
- package/dist/{credentials-BgRX3WEg.js → server-DlZ28Oz5.js} +1 -1
- package/dist/shared-DRu8VFVM.js +123 -0
- package/dist/{sink-Cfr9-7YC.d.ts → sink-B1fZzIMf.d.ts} +1 -1
- package/dist/skills-Biq5uup3.js +192 -0
- package/dist/{skills-C_lpV4Jx.js → skills-Bx-U0irG.js} +10 -4
- package/dist/{snapshot-DE8dE_hz.js → snapshot-Enxd0n-s.js} +138 -214
- package/dist/snapshot-cache-B-LxUahj.d.ts +45 -0
- package/dist/snapshot-cache-D6jLelln.js +44 -0
- package/dist/solid/index.d.ts +39 -9
- package/dist/solid/index.js +76 -85
- package/dist/sources-4p0-4xQm.js +545 -0
- package/dist/sources-BdOYLw9j.d.ts +192 -0
- package/dist/{sql-Bll1d7y0.js → sql-xdg5f4Fi.js} +6 -1
- package/dist/{src-CTNT-PBW.js → src-BDwEZWrZ.js} +149 -11
- package/dist/ssf/index.d.ts +3 -2
- package/dist/ssf/index.js +3 -29
- package/dist/store-DMAWwAJV.js +371 -0
- package/dist/{store-Bq90395i.d.ts → store-jOBYpiXC.d.ts} +13 -4
- package/dist/store-options-ByhZq1jV.js +716 -0
- package/dist/{stores-CkG2HrSg.js → stores-BT2pSCub.js} +10 -63
- package/dist/{stores-CvOnu_2T.d.ts → stores-C0IMQrGI.d.ts} +20 -9
- package/dist/{stream-BhMfZOwr.d.ts → stream-D1RXubw2.d.ts} +2 -2
- package/dist/{stream-Q_xlB6Ko.js → stream-DDpvynSB.js} +16 -2
- package/dist/subject-settings-BwBmCdTR.js +128 -0
- package/dist/supabase/index.d.ts +133 -6
- package/dist/supabase/index.js +4 -3
- package/dist/supabase/middleware.d.ts +32 -27
- package/dist/supabase/middleware.js +56 -22
- package/dist/{supabase-D8UlBA7Z.js → supabase-Boqb9a_Y.js} +3 -3
- package/dist/{supabase-DTxGtYdi.js → supabase-C0qESOa-.js} +347 -367
- package/dist/supabase-config-BpPXt3x1.js +472 -0
- package/dist/supabase-hook-6sYLXg_u.js +2 -0
- package/dist/{supabase-hook-D_OqGb_V.js → supabase-hook-CSLQ4zJ3.js} +1037 -705
- package/dist/supautils-Cn4R4cJ4.js +91 -0
- package/dist/svelte/PermissionBoundary.svelte +37 -0
- package/dist/svelte/Protected.svelte +8 -2
- package/dist/svelte/index.d.ts +9 -6
- package/dist/svelte/index.js +61 -7
- package/dist/svelte/runtime.d.ts +4 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +9 -6
- package/dist/svelte/source.js +7 -4
- package/dist/terminal/index.d.ts +6 -14
- package/dist/terminal/index.js +44 -32
- package/dist/testing/index.d.ts +105 -16
- package/dist/testing/index.js +504 -40
- 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/token-CIWxJOCh.js +50 -0
- package/dist/trpc/index.d.ts +7 -26
- package/dist/trpc/index.js +17 -100
- package/dist/types-BnIEz1sU.d.ts +48 -0
- package/dist/{types-CxquUByI.d.ts → types-Bvc4oWT6.d.ts} +1 -1
- package/dist/{sources-DOpW5Ila.d.ts → types-C97IskBw.d.ts} +86 -127
- package/dist/types-CKNSyIf_.d.ts +52 -0
- package/dist/types-Cq_H8N_X.d.ts +197 -0
- package/dist/{types-D6Z6-rKJ.d.ts → types-DbjRN55U.d.ts} +273 -22
- package/dist/{types-BBK-exvJ.d.ts → types-Dnemwd77.d.ts} +7 -1
- package/dist/{types-BvBk1wgn.d.ts → types-DxiCGmmd.d.ts} +5 -3
- package/dist/{types-B9dmiiab.d.ts → types-QCuYJh4q.d.ts} +1 -1
- package/dist/{types-B8w5PFtS.d.ts → types-aqOHTHcp.d.ts} +17 -1
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +10 -9
- package/dist/usage-DorAJiU_.js +2 -0
- package/dist/{usage-1ozMubLY.js → usage-GTixvDDU.js} +2 -2
- package/dist/{usage-CUnK6Ou9.js → usage-ItS7nLcl.js} +225 -62
- package/dist/validation-error-Ba264OaJ.d.ts +26 -0
- package/dist/validation-error-CnjZ4t92.js +33 -0
- package/dist/{validity-D0uRmJKJ.js → validity-uOp8UpYn.js} +57 -36
- package/dist/{verifier-B90agnhl.js → verifier-BxBo6I44.js} +10 -5
- package/dist/version-BvacVTZR.js +17 -0
- package/dist/views-Soe7bGSC.js +95 -0
- package/dist/{vocabulary-Dk0fs-Jk.d.ts → vocabulary-DA8a8zif.d.ts} +1 -1
- package/dist/vue/index.d.ts +35 -13
- package/dist/vue/index.js +86 -93
- package/dist/watch-BwxLTYMZ.js +2 -0
- package/dist/watch-DVBJ9cBq.js +128 -0
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +7 -13
- package/package.json +62 -36
- package/schemas/approval-request-v1.json +175 -0
- package/schemas/catalog-v1.json +29 -1
- package/schemas/supabase-claims-v1.json +6 -1
- package/schemas/supabase-manifest-v1.json +150 -6
- package/skills/permdock/SKILL.md +7 -7
- package/skills/permdock-agents/SKILL.md +5 -5
- package/skills/permdock-agents/references/runtimes.md +12 -10
- package/skills/permdock-approvals/SKILL.md +4 -4
- package/skills/permdock-approvals/references/stores-and-resume.md +15 -4
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +4 -4
- package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
- package/skills/permdock-data/SKILL.md +4 -4
- package/skills/permdock-data/references/queries-and-rls.md +14 -6
- package/skills/permdock-data/references/relationships.md +5 -3
- package/skills/permdock-tenancy/SKILL.md +9 -6
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +14 -8
- package/skills/permdock-wire/SKILL.md +4 -4
- package/skills/permdock-wire/references/adapters.md +42 -30
- package/skills/permdock-wire/references/policy-options.md +5 -3
- package/dist/approvers-aH0PJkmf.js +0 -20
- package/dist/catalog-idsHc0vo.js +0 -2
- package/dist/collect-B7_TIfmg.js +0 -49
- package/dist/collect-fRPAQIWb.js +0 -2
- package/dist/compile-CQbvyIBr.d.ts +0 -30
- package/dist/config-BPYmjTOp.js +0 -26
- package/dist/context-gtAwAILx.js +0 -6
- package/dist/create-BKF3dgFk.d.ts +0 -162
- package/dist/create-CSkhDU9T.js +0 -222
- package/dist/doctor-BGle8Gqi.js +0 -1314
- package/dist/helpers-DnSOrhB9.js +0 -682
- package/dist/index-fG6NSXlc.d.ts +0 -9
- package/dist/kernel-YOGCWNLf.js +0 -211
- package/dist/load-QOOm1z70.js +0 -2
- package/dist/manifest-DDQbC6K0.d.ts +0 -118
- package/dist/map-error-RJ3ZsUyA.js +0 -16
- package/dist/may-use-CnFEjVEp.js +0 -37
- package/dist/pg-4GJWDUxG.js +0 -953
- package/dist/plugin-4gr7IxFJ.js +0 -65
- package/dist/protected-B4K3BKoX.js +0 -138
- package/dist/protected-wY7nXhY9.d.ts +0 -23
- package/dist/provider-_wx46HpB.js +0 -48
- package/dist/rls-CJVja9Ww.js +0 -2119
- package/dist/rls-helpers-BxRuif0l.js +0 -1346
- package/dist/runtime-DP9ttFh1.js +0 -27
- package/dist/skills-Dx3QLnMY.js +0 -110
- package/dist/source-DoBBYJi2.js +0 -6
- package/dist/sources-DVHM3Mwq.js +0 -284
- package/dist/store-C6hFW6ta.js +0 -508
- package/dist/subject-settings-xt7V845g.js +0 -82
- package/dist/supabase-hook-DW-xP4hU.js +0 -2
- package/dist/types-DbWdEfcm.d.ts +0 -87
- package/dist/types-bva3i4Gf.d.ts +0 -98
- package/dist/types-i4BAOvdb.d.ts +0 -97
- package/dist/usage-PyEor6GA.js +0 -2
- package/dist/version-CnSh33Fj.js +0 -16
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { r as Role, t as Plan } from "./vocabulary-
|
|
1
|
+
import { g as ResourceInit, u as InferPermissionTree } from "./permissions-DttnqqxC.js";
|
|
2
|
+
import { r as Role, t as Plan } from "./vocabulary-DA8a8zif.js";
|
|
3
3
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
4
|
//#region src/testing/saas/permissions.d.ts
|
|
5
5
|
declare const SaasProjectSchema: StandardSchemaV1<SaasProject>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as isReadonlyArray, t as compact } from "./compact-y6vfu2_f.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
2
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
3
|
//#region src/core/paths.ts
|
|
4
4
|
const FORBIDDEN_KEYS = /* @__PURE__ */ new Set([
|
|
5
5
|
"__proto__",
|
|
@@ -40,6 +40,28 @@ const TREE_REGISTRY = Symbol.for("permdock.registry");
|
|
|
40
40
|
const NODE_RESOURCE = Symbol.for("permdock.resource");
|
|
41
41
|
const TREE_LEAVES = Symbol.for("permdock.leaves");
|
|
42
42
|
const LEAF_FORMER = Symbol.for("permdock.former");
|
|
43
|
+
/** The edge's group resources with their relation and id column. */
|
|
44
|
+
function groupEntries(spec) {
|
|
45
|
+
const groups = spec.groups;
|
|
46
|
+
if (groups === void 0) return [];
|
|
47
|
+
return Object.entries(groups.resources).map(([resource, group]) => typeof group === "string" ? {
|
|
48
|
+
resource,
|
|
49
|
+
relation: group,
|
|
50
|
+
subject: spec.subject ?? "user_id",
|
|
51
|
+
typed: false
|
|
52
|
+
} : {
|
|
53
|
+
resource,
|
|
54
|
+
relation: group.relation,
|
|
55
|
+
subject: group.subject ?? spec.subject ?? "user_id",
|
|
56
|
+
typed: group.subject !== void 0
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function restrictedStops(node, path) {
|
|
60
|
+
return node?.restricted !== void 0 && (node.restrictedStops === void 0 || node.restrictedStops.includes(path));
|
|
61
|
+
}
|
|
62
|
+
function restrictedFor(node, path) {
|
|
63
|
+
return restrictedStops(node, path) ? node?.restricted : void 0;
|
|
64
|
+
}
|
|
43
65
|
function isFieldRelation(relation) {
|
|
44
66
|
return relation !== void 0 && "field" in relation;
|
|
45
67
|
}
|
|
@@ -187,7 +209,20 @@ function resource(schemaOrOptions, options) {
|
|
|
187
209
|
throw new Error("PermDock: resource() first argument must be a schema or options");
|
|
188
210
|
}
|
|
189
211
|
const RESOURCE_NAME = /^[A-Za-z][A-Za-z0-9_-]*$/u;
|
|
212
|
+
/** Level names ride claims and grant keys (`key@level`), so they stay SQL- and claim-safe. */
|
|
213
|
+
const LEVEL_NAME = /^[a-z][a-z0-9_]*$/u;
|
|
190
214
|
const EDGE_TABLE = /^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)?$/u;
|
|
215
|
+
function restrictedStopsOf(name, option, parent, links) {
|
|
216
|
+
if (option.stops === void 0) return;
|
|
217
|
+
if (!Array.isArray(option.stops) || option.stops.length === 0) throw new Error(`PermDock: resource "${name}" restricted.stops must list 'parent' or link names`);
|
|
218
|
+
const stops = /* @__PURE__ */ new Set();
|
|
219
|
+
for (const path of option.stops) {
|
|
220
|
+
if (typeof path !== "string") throw new TypeError(`PermDock: resource "${name}" restricted.stops must list 'parent' or link names`);
|
|
221
|
+
if (path === "parent" ? parent === void 0 : !Object.hasOwn(links, path)) throw new Error(`PermDock: resource "${name}" restricted.stops names '${path}', which it does not declare`);
|
|
222
|
+
stops.add(path);
|
|
223
|
+
}
|
|
224
|
+
return Object.freeze([...stops].toSorted());
|
|
225
|
+
}
|
|
191
226
|
function normaliseRelation(resourceName, relationName, spec) {
|
|
192
227
|
if (typeof spec === "string") {
|
|
193
228
|
assertSafeKey(spec, "relation field");
|
|
@@ -265,25 +300,38 @@ function normaliseMatch(label, match) {
|
|
|
265
300
|
return out;
|
|
266
301
|
}
|
|
267
302
|
function normaliseGroups(label, groups) {
|
|
268
|
-
assertSafeKey(groups.column, "edge groups column");
|
|
303
|
+
if (groups.column !== void 0) assertSafeKey(groups.column, "edge groups column");
|
|
269
304
|
const resources = {};
|
|
270
305
|
const names = Object.keys(groups.resources);
|
|
271
306
|
if (names.length === 0) throw new Error(`PermDock: ${label} groups needs at least one resource`);
|
|
272
307
|
for (const name of names) {
|
|
273
308
|
assertSafeKey(name, "group resource");
|
|
274
|
-
const
|
|
309
|
+
const group = groups.resources[name];
|
|
310
|
+
if (typeof group === "string") {
|
|
311
|
+
assertSafeKey(group, "group relation");
|
|
312
|
+
if (groups.column === void 0) throw new Error(`PermDock: ${label} groups '${name}' needs its own subject column, or groups needs a column naming the resource`);
|
|
313
|
+
resources[name] = group;
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
if (group === null || typeof group !== "object") throw new TypeError(`PermDock: ${label} groups '${name}' must name a relation`);
|
|
317
|
+
const relationName = "relation" in group ? group.relation : void 0;
|
|
275
318
|
if (typeof relationName !== "string") throw new TypeError(`PermDock: ${label} groups '${name}' must name a relation`);
|
|
276
319
|
assertSafeKey(relationName, "group relation");
|
|
277
|
-
|
|
320
|
+
const subject = "subject" in group ? group.subject : void 0;
|
|
321
|
+
if (subject !== void 0 && typeof subject !== "string") throw new TypeError(`PermDock: ${label} groups '${name}' subject must be a column name`);
|
|
322
|
+
if (subject !== void 0) assertSafeKey(subject, "group subject column");
|
|
323
|
+
else if (groups.column === void 0) throw new Error(`PermDock: ${label} groups '${name}' needs its own subject column, or groups needs a column naming the resource`);
|
|
324
|
+
resources[name] = subject === void 0 ? { relation: relationName } : {
|
|
325
|
+
relation: relationName,
|
|
326
|
+
subject
|
|
327
|
+
};
|
|
278
328
|
}
|
|
329
|
+
if (groups.direct !== void 0 && groups.column === void 0) throw new Error(`PermDock: ${label} groups direct needs a column to compare it with`);
|
|
279
330
|
if (groups.direct !== void 0 && groups.direct in resources) throw new Error(`PermDock: ${label} groups direct '${groups.direct}' is also a group resource`);
|
|
280
|
-
return
|
|
281
|
-
column: groups.column,
|
|
282
|
-
resources
|
|
283
|
-
} : {
|
|
284
|
-
column: groups.column,
|
|
331
|
+
return {
|
|
332
|
+
...groups.column === void 0 ? {} : { column: groups.column },
|
|
285
333
|
resources,
|
|
286
|
-
direct: groups.direct
|
|
334
|
+
...groups.direct === void 0 ? {} : { direct: groups.direct }
|
|
287
335
|
};
|
|
288
336
|
}
|
|
289
337
|
/** An included relation must exist on the same resource, be tenancy-free and never include itself back. */
|
|
@@ -322,7 +370,7 @@ function assertGraphTargets(registry) {
|
|
|
322
370
|
for (const [linkName, link] of Object.entries(node.links)) if (!registry.has(link.resource)) throw new Error(`PermDock: link '${linkName}' on '${node.name}' names the undeclared resource '${link.resource}'`);
|
|
323
371
|
for (const [relationName, spec] of Object.entries(node.relations)) {
|
|
324
372
|
if (!isEdgeRelation(spec) || spec.groups === void 0) continue;
|
|
325
|
-
for (const
|
|
373
|
+
for (const { resource: target, relation: targetRelation } of groupEntries(spec)) {
|
|
326
374
|
assertGroupTarget(registry, node, relationName, spec, target, targetRelation);
|
|
327
375
|
if (target !== node.name) {
|
|
328
376
|
const out = edges.get(node.name) ?? /* @__PURE__ */ new Set();
|
|
@@ -381,8 +429,12 @@ function materialiseResource(init, path, registry, leaves, former) {
|
|
|
381
429
|
}
|
|
382
430
|
const version = init.options.version;
|
|
383
431
|
if (version !== void 0) assertSafeKey(version, "version field");
|
|
384
|
-
const
|
|
385
|
-
|
|
432
|
+
const restrictedOption = init.options.restricted;
|
|
433
|
+
const restricted = typeof restrictedOption === "string" ? restrictedOption : restrictedOption?.field;
|
|
434
|
+
if (restrictedOption !== void 0) {
|
|
435
|
+
if (typeof restricted !== "string") throw new TypeError(`PermDock: resource "${name}" restricted must name a field`);
|
|
436
|
+
assertSafeKey(restricted, "restricted field");
|
|
437
|
+
}
|
|
386
438
|
const disclosure = init.options.disclosure ?? "reveal";
|
|
387
439
|
if (disclosure !== "hide" && disclosure !== "reveal") throw new Error(`PermDock: resource "${name}" disclosure must be 'hide' or 'reveal'`);
|
|
388
440
|
const relations = {};
|
|
@@ -401,6 +453,14 @@ function materialiseResource(init, path, registry, leaves, former) {
|
|
|
401
453
|
resource: link.resource
|
|
402
454
|
});
|
|
403
455
|
}
|
|
456
|
+
const restrictedStopList = typeof restrictedOption === "object" ? restrictedStopsOf(name, restrictedOption, parent, links) : void 0;
|
|
457
|
+
const levels = {};
|
|
458
|
+
for (const [levelName, condition] of Object.entries(init.options.levels ?? {})) {
|
|
459
|
+
if (!LEVEL_NAME.test(levelName)) throw new Error(`PermDock: level '${levelName}' on '${name}' must match ^[a-z][a-z0-9_]*$`);
|
|
460
|
+
if (condition === null || typeof condition !== "object" || Array.isArray(condition)) throw new Error(`PermDock: level '${levelName}' on '${name}' must be a condition object`);
|
|
461
|
+
levels[levelName] = freezeDeep({ ...condition });
|
|
462
|
+
}
|
|
463
|
+
if (Object.keys(levels).length > 0 && instanceSet.size === 0) throw new Error(`PermDock: resource '${name}' declares levels but no instance actions`);
|
|
404
464
|
const resourceNode = Object.freeze({
|
|
405
465
|
name,
|
|
406
466
|
path: prefix,
|
|
@@ -411,9 +471,11 @@ function materialiseResource(init, path, registry, leaves, former) {
|
|
|
411
471
|
relations: freezeDeep(relations),
|
|
412
472
|
version,
|
|
413
473
|
restricted,
|
|
474
|
+
...restrictedStopList === void 0 ? {} : { restrictedStops: restrictedStopList },
|
|
414
475
|
disclosure,
|
|
415
476
|
instanceActions: instanceSet,
|
|
416
|
-
collectionActions: collectionSet
|
|
477
|
+
collectionActions: collectionSet,
|
|
478
|
+
levels: Object.freeze(levels)
|
|
417
479
|
});
|
|
418
480
|
assertIncludes(resourceNode);
|
|
419
481
|
registry.set(name, resourceNode);
|
|
@@ -597,4 +659,4 @@ function mergePermissions(...trees) {
|
|
|
597
659
|
return freezeDeep(attachRegistry(merged, registry, leaves));
|
|
598
660
|
}
|
|
599
661
|
//#endregion
|
|
600
|
-
export {
|
|
662
|
+
export { restrictedStops as C, ownKeys as D, ownGet as E, readPath as O, restrictedFor as S, isForbiddenKey as T, listPermissions as _, formerKeys as a, resource as b, getResource as c, isEdgeRelation as d, isFieldRelation as f, isSelfParented as g, isRegistryTree as h, findPermission as i, splitPath as k, groupEntries as l, isPrincipalRelation as m, definePermissions as n, formerScopes as o, isPermission as p, expandRelation as r, getRegistry as s, annotationsFor as t, isComputedRelation as u, mergePermissions as v, assertSafeKey as w, resourceOfNode as x, renamedKeys as y };
|
|
@@ -63,15 +63,28 @@ type FieldRelation = RelationIncludes & {
|
|
|
63
63
|
};
|
|
64
64
|
/** Literal values an edge row's columns must hold, so one table backs several relations. */
|
|
65
65
|
type EdgeMatch = Readonly<Record<string, string | number | boolean>>;
|
|
66
|
+
/**
|
|
67
|
+
* One group resource of an edge: the relation whoever the row names must
|
|
68
|
+
* hold on the group, and, when the group's id has its own typed column, that
|
|
69
|
+
* column in place of the edge's `subject`.
|
|
70
|
+
*/
|
|
71
|
+
type EdgeGroup = string | {
|
|
72
|
+
readonly relation: string;
|
|
73
|
+
readonly subject?: string;
|
|
74
|
+
};
|
|
66
75
|
/**
|
|
67
76
|
* Edge rows that name a group instead of a principal: `column` holds the
|
|
68
77
|
* resource name, `subject` the group's id, and the row holds for whoever
|
|
69
78
|
* holds `resources[<name>]` on that group. A null `column` (or `direct`)
|
|
70
|
-
* names a principal; any other value matches nothing.
|
|
79
|
+
* names a principal; any other value matches nothing. A group with its own
|
|
80
|
+
* `subject` column reads the group's id from it; without `column`, a row
|
|
81
|
+
* names that group when the column is not null, and a principal when the
|
|
82
|
+
* edge's `subject` is not null.
|
|
71
83
|
*/
|
|
72
84
|
type EdgeGroups = {
|
|
73
|
-
|
|
74
|
-
readonly
|
|
85
|
+
/** Required unless every group names its own `subject` column. */
|
|
86
|
+
readonly column?: string;
|
|
87
|
+
readonly resources: Readonly<Record<string, EdgeGroup>>;
|
|
75
88
|
/** The `column` value of a row naming a principal, besides `null`. */
|
|
76
89
|
readonly direct?: string;
|
|
77
90
|
};
|
|
@@ -107,6 +120,10 @@ type ResourceLink = {
|
|
|
107
120
|
readonly field: string;
|
|
108
121
|
readonly resource: string;
|
|
109
122
|
};
|
|
123
|
+
type ResourceRestricted = {
|
|
124
|
+
readonly field: string;
|
|
125
|
+
readonly stops?: readonly string[];
|
|
126
|
+
};
|
|
110
127
|
type ActionList = readonly string[] | Record<string, ActionMeta>;
|
|
111
128
|
type ResourceOptions<A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined> = {
|
|
112
129
|
/**
|
|
@@ -129,13 +146,22 @@ type ResourceOptions<A extends ActionList | undefined = ActionList | undefined,
|
|
|
129
146
|
* A boolean column: a row where it is `true` is reached only by grants on
|
|
130
147
|
* itself, never by relations held on its ancestors.
|
|
131
148
|
*/
|
|
132
|
-
readonly restricted?: string;
|
|
149
|
+
readonly restricted?: string | ResourceRestricted;
|
|
133
150
|
/**
|
|
134
151
|
* `'hide'`: a denied check on a loaded row answers as if the row did not
|
|
135
152
|
* exist (HTTP `404`), so an id never confirms a row the caller cannot read.
|
|
136
153
|
*/
|
|
137
154
|
readonly disclosure?: "hide" | "reveal";
|
|
155
|
+
/**
|
|
156
|
+
* Named grant levels a custom role may pick per permission, each a row
|
|
157
|
+
* condition (`where` shorthand or a `Condition`), such as `own`, `team` and
|
|
158
|
+
* `all`. A level narrows the ceiling grant it applies to and never widens
|
|
159
|
+
* it; it reaches only instance actions. Names match `^[a-z][a-z0-9_]*$`.
|
|
160
|
+
*/
|
|
161
|
+
readonly levels?: Readonly<Record<string, ResourceLevel>>;
|
|
138
162
|
};
|
|
163
|
+
/** A level's row condition: `where` shorthand or a normalised `Condition`, checked by `definePolicy`. */
|
|
164
|
+
type ResourceLevel = Readonly<Record<string, unknown>>;
|
|
139
165
|
type ResourceInit<T = unknown, A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined> = {
|
|
140
166
|
readonly [RESOURCE_BRAND]: true;
|
|
141
167
|
readonly schema: StandardSchemaV1<unknown, T> | undefined;
|
|
@@ -151,9 +177,12 @@ type ResourceNode<T = unknown> = {
|
|
|
151
177
|
readonly relations: Readonly<Record<string, ResourceRelation>>;
|
|
152
178
|
readonly version: string | undefined;
|
|
153
179
|
readonly restricted: string | undefined;
|
|
180
|
+
readonly restrictedStops?: readonly string[];
|
|
154
181
|
readonly disclosure: "hide" | "reveal";
|
|
155
182
|
readonly instanceActions: ReadonlySet<string>;
|
|
156
183
|
readonly collectionActions: ReadonlySet<string>;
|
|
184
|
+
/** Declared level names to their raw condition; `definePolicy` normalises them. */
|
|
185
|
+
readonly levels?: Readonly<Record<string, ResourceLevel>>;
|
|
157
186
|
};
|
|
158
187
|
type PermissionTree = {
|
|
159
188
|
readonly [key: string]: PermissionTree | Permission;
|
|
@@ -182,4 +211,4 @@ declare function findPermission(tree: PermissionTree, keyOrScope: string): Permi
|
|
|
182
211
|
declare function isPermission(value: unknown): value is Permission;
|
|
183
212
|
declare function mergePermissions<const Trees extends readonly PermissionTree[]>(...trees: Trees): PermissionTree;
|
|
184
213
|
//#endregion
|
|
185
|
-
export {
|
|
214
|
+
export { listPermissions as A, ResourceRelationInput as C, formerKeys as D, findPermission as E, resource as M, getResource as O, ResourceRelation as S, definePermissions as T, ResourceLevel as _, EdgeGroup as a, ResourceOptions as b, EdgeRelation as c, MetaValue as d, Permission as f, ResourceInit as g, PrincipalRelation as h, DefinePermissionsOptions as i, mergePermissions as j, isPermission as k, FieldRelation as l, PermissionTree as m, ActionMeta as n, EdgeGroups as o, PermissionKind as p, ComputedRelation as r, EdgeMatch as s, ActionList as t, InferPermissionTree as u, ResourceLink as v, ResourceRestricted as w, ResourceParent as x, ResourceNode as y };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { s as crud } from "./src-
|
|
3
|
-
import {
|
|
1
|
+
import { b as resource, n as definePermissions } from "./permissions-DVoF6dMt.js";
|
|
2
|
+
import { s as crud } from "./src-BDwEZWrZ.js";
|
|
3
|
+
import { b as definePlans, x as defineRoles } from "./grantee-Cv5Sogfv.js";
|
|
4
4
|
//#region src/testing/saas/schema.ts
|
|
5
5
|
function accepts(kind, value) {
|
|
6
6
|
switch (kind) {
|
|
@@ -6,7 +6,7 @@ const DRAFT_PINS = {
|
|
|
6
6
|
};
|
|
7
7
|
const PROFILE_NAMES = { fapi2: "fapi-20-security-profile" };
|
|
8
8
|
/** PermDock's published `supportedParametersSchema` per profile, stable across pins. */
|
|
9
|
-
const PROFILE_PARAMETERS = { fapi2: "https://permdock.
|
|
10
|
-
const GNAP_RESERVED = "scheme.type 'gnap' is reserved and emits nothing. See https://permdock.
|
|
9
|
+
const PROFILE_PARAMETERS = { fapi2: "https://permdock.com/schemas/security-profiles/fapi2.json" };
|
|
10
|
+
const GNAP_RESERVED = "scheme.type 'gnap' is reserved and emits nothing. See https://permdock.com/docs/standards/watch-list#gnap";
|
|
11
11
|
//#endregion
|
|
12
12
|
export { PROFILE_PARAMETERS as i, GNAP_RESERVED as n, PROFILE_NAMES as r, DRAFT_PINS as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as Policy,
|
|
2
|
-
import { c as saasPlans, l as saasRoles, s as saasPermissions } from "./permissions-
|
|
1
|
+
import { C as Policy, Nr as Principal, Pr as Subject } from "./policy-IB6yxpC3.js";
|
|
2
|
+
import { c as saasPlans, l as saasRoles, s as saasPermissions } from "./permissions-CDgvKG5L.js";
|
|
3
3
|
//#region src/testing/saas/policy.d.ts
|
|
4
4
|
/** Daily API-key quota per subject; the bucket should be per tenant too. */
|
|
5
5
|
declare const SAAS_API_KEY_LIMIT = 5;
|