permdock 0.1.0 → 0.2.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-cmvX2jDe.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 +206 -0
- package/dist/better-supabase/index.js +620 -0
- package/dist/bind-CVy3Espv.d.ts +25 -0
- package/dist/bind-VnYn2HKq.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-B68OFnZx.js → capability-4qPdO9gk.js} +7 -5
- package/dist/{capability-BDG_nkxt.d.ts → capability-Dq43tT1u.d.ts} +2 -2
- package/dist/catalog/index.d.ts +1 -1
- package/dist/catalog/index.js +1 -1
- package/dist/catalog-BjZSovXQ.js +2 -0
- package/dist/{catalog-doc-BSo_Q_-6.js → catalog-doc-Dsc9y7sd.js} +23 -12
- package/dist/{catalog-B0E6bggc.js → catalog-h2tlKFkq.js} +2 -2
- package/dist/{catalog-H-vFGwWK.js → catalog-z8q6bi_r.js} +4 -4
- 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-BGhHS-lY.js} +2 -2
- package/dist/{cloud-Cuxr6Czw.js → cloud-Bo3e9Ak3.js} +7 -6
- package/dist/{collect-O-tOtbnk.js → collect-DDDv_ESs.js} +194 -42
- package/dist/collect-DLlujdHC.js +83 -0
- package/dist/collect-rG2IQ3t0.js +2 -0
- package/dist/{commands-BMh_Etm2.js → commands-DWOrSQic.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-CNnl6uIt.d.ts +94 -0
- package/dist/config-BJiM-xAm.js +157 -0
- package/dist/config-Bn00Z3ks.js +36 -0
- package/dist/config-report-Dw_JcUqT.js +44 -0
- package/dist/{connection-JvqwHODC.js → connection-CU8MQxRi.js} +1 -1
- package/dist/{context-CKEAabd7.js → context-Ttp0ekMT.js} +36 -27
- package/dist/convex/index.d.ts +9 -4
- package/dist/convex/index.js +14 -4
- package/dist/create-BWyx3jua.d.ts +245 -0
- package/dist/create-CPhDL6qx.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-PdoqESvg.d.ts} +9 -10
- package/dist/{diff-x5Il8LVa.js → diff-B8Tunc3o.js} +44 -11
- package/dist/{diff-BUzf5Poi.js → diff-CzqLxZ77.js} +2 -2
- package/dist/doctor-WpvG6p4k.js +1194 -0
- package/dist/doctor-collect-ByfYlNv1.js +664 -0
- package/dist/{doctor-Bqo6FwUa.js → doctor-rOr-4ZfS.js} +2 -2
- 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-DAqevpNk.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-C3sHpZNS.js} +65 -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-LF_hS-yn.d.ts → index-A0YNL8jZ.d.ts} +1 -1
- package/dist/index-CtE07CBF.d.ts +6 -0
- package/dist/{index-xIxJLwOQ.d.ts → index-D3vbkoSI.d.ts} +75 -7
- package/dist/{index-CltcQ4Bf.d.ts → index-D6_cSa1z.d.ts} +68 -5
- package/dist/index.d.ts +14 -9
- package/dist/index.js +22 -17
- package/dist/instance-options-BK_rNOSC.d.ts +11 -0
- package/dist/instance-options-Dhhcnm3y.js +22 -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-GSQnMz3O.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-CwePaF7C.js → openapi-Bbg4wGVL.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-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-BkGQNzAh.d.ts +10 -0
- package/dist/parse-local-manifest-BrMozJCo.js +36 -0
- package/dist/pdp/index.d.ts +2 -2
- package/dist/pdp/index.js +14 -127
- package/dist/{permdock-yoZ7EjxX.js → permdock-CzqXjCpU.js} +641 -126
- package/dist/{permissions-B8vCg_bI.d.ts → permissions-CDgvKG5L.d.ts} +2 -2
- package/dist/{permissions-CofRqesP.js → permissions-CpZrivYv.js} +3 -3
- package/dist/{permissions-DC7GROPA.js → permissions-DVoF6dMt.js} +77 -15
- package/dist/{permissions-B4apnahQ.d.ts → permissions-DttnqqxC.d.ts} +34 -5
- package/dist/{pins-CqE1jZuF.js → pins-8ILTftC9.js} +2 -2
- package/dist/{policy-CInmNGkM.d.ts → policy-CFZAr_Al.d.ts} +330 -37
- package/dist/{policy-Cq2fB8Q5.d.ts → policy-D8UFyERw.d.ts} +2 -2
- package/dist/{policy-ANp36PnI.js → policy-xyWg7QdR.js} +173 -22
- package/dist/powersync-A8x_Yyvh.js +2 -0
- package/dist/powersync-C7kLglqX.js +540 -0
- package/dist/powersync-yW1UUFzp.js +62 -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-CkL50EEf.d.ts +7 -0
- package/dist/problem-details-_AMOYz-w.js +144 -0
- package/dist/{protected-BuPAycJT.d.ts → protected-CNsMzrVd.d.ts} +5 -4
- package/dist/protected-Cs6kTaHo.js +100 -0
- package/dist/protected-bZs6rbT1.d.ts +40 -0
- package/dist/{provider-wTAUda2v.d.ts → provider-Cjr62YMV.d.ts} +1 -1
- package/dist/provider-DLzpb2Xz.js +52 -0
- package/dist/provider-store-DNyC1y48.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-sqBGMnNs.d.ts +5 -0
- package/dist/resource-ref-CaS9yVPi.js +20 -0
- package/dist/revocations-Bhr0aMIC.js +27 -0
- package/dist/rls-BMNydpHk.js +2521 -0
- package/dist/{rls-BOFU3chG.js → rls-CEvs64Kj.js} +8 -3
- package/dist/rls-fields-BMasREhR.js +3502 -0
- package/dist/{rls-graph-DxQ39PJj.js → rls-graph-pc9fuXYm.js} +100 -36
- package/dist/{rls-import-CXV6LBlS.js → rls-import-D8F7j35Q.js} +7 -6
- package/dist/{rls-migrate-DrFPbf8p.js → rls-migrate-7wikfrVI.js} +6 -5
- package/dist/rls-ownership-B5Lkq62W.js +843 -0
- package/dist/rls-shared-aOQ4hGTO.js +493 -0
- package/dist/rls-verify-D8B7dOTh.js +745 -0
- package/dist/{row-check-BajTgQZ-.d.ts → row-check-Dt35czLy.d.ts} +12 -15
- package/dist/rpc-DOK54_CS.js +89 -0
- package/dist/{run-CJ6UvS3a.js → run-YXCJDNYk.js} +31 -12
- package/dist/runtime-CB8gQFvS.js +11 -0
- package/dist/{saas-BRrZzJkM.js → saas-Bj_FFkjN.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-Gs6TTVa-.d.ts} +1 -1
- package/dist/skills-Biq5uup3.js +192 -0
- package/dist/{skills-C_lpV4Jx.js → skills-JaymNCdK.js} +10 -4
- package/dist/{snapshot-DE8dE_hz.js → snapshot-Enxd0n-s.js} +138 -214
- package/dist/snapshot-cache-D6jLelln.js +44 -0
- package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
- package/dist/solid/index.d.ts +39 -9
- package/dist/solid/index.js +76 -85
- package/dist/sources-B0UvrJ21.js +534 -0
- package/dist/sources-BcJgw0lt.d.ts +192 -0
- package/dist/{sql-Bll1d7y0.js → sql-xdg5f4Fi.js} +6 -1
- package/dist/{src-CTNT-PBW.js → src-CSbUiozF.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-D_pjn91-.d.ts} +13 -4
- package/dist/store-options-yO0V6gRn.js +716 -0
- package/dist/{stores-CkG2HrSg.js → stores-4_sqiOA1.js} +10 -63
- package/dist/{stores-CvOnu_2T.d.ts → stores-DVR5NHLE.d.ts} +20 -9
- package/dist/{stream-Q_xlB6Ko.js → stream-DDpvynSB.js} +16 -2
- package/dist/{stream-BhMfZOwr.d.ts → stream-DlvG2hs-.d.ts} +2 -2
- package/dist/subject-settings-BwBmCdTR.js +128 -0
- package/dist/supabase/index.d.ts +122 -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-CwafwxxF.js} +3 -3
- package/dist/{supabase-DTxGtYdi.js → supabase-DTBaC20O.js} +345 -367
- package/dist/supabase-config-Bs44dare.js +472 -0
- package/dist/{supabase-hook-D_OqGb_V.js → supabase-hook-BuxLQLpU.js} +994 -708
- package/dist/supabase-hook-D5qVd_D8.js +2 -0
- package/dist/supautils-DYZnzRWV.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-9AWO9EGt.d.ts +197 -0
- package/dist/{types-D6Z6-rKJ.d.ts → types-BPxgszlT.d.ts} +260 -22
- package/dist/{types-BvBk1wgn.d.ts → types-BVyImy5I.d.ts} +5 -3
- package/dist/{types-CxquUByI.d.ts → types-Bvc4oWT6.d.ts} +1 -1
- package/dist/types-C3s9xVJG.d.ts +48 -0
- package/dist/{types-BBK-exvJ.d.ts → types-Dnemwd77.d.ts} +7 -1
- package/dist/types-kxznc7cn.d.ts +52 -0
- package/dist/{types-B8w5PFtS.d.ts → types-vKyAMtcX.d.ts} +17 -1
- package/dist/{types-B9dmiiab.d.ts → types-vNSDF7Dq.d.ts} +1 -1
- package/dist/{sources-DOpW5Ila.d.ts → types-yF5LmQVD.d.ts} +86 -127
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +10 -9
- package/dist/{usage-1ozMubLY.js → usage-D07N9QJ3.js} +2 -2
- package/dist/usage-D82l1CwK.js +2 -0
- package/dist/{usage-CUnK6Ou9.js → usage-DG1oeCca.js} +225 -62
- package/dist/validation-error-CnjZ4t92.js +33 -0
- package/dist/validation-error-CtF23SrC.d.ts +26 -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-Etoa_Mvr.js +2 -0
- package/dist/watch-UihESpsJ.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 { n as freezeDeep } from "./freeze-
|
|
2
|
-
import {
|
|
1
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
2
|
+
import { O as readPath, k as splitPath, w as assertSafeKey } from "./permissions-DVoF6dMt.js";
|
|
3
3
|
//#region src/conditions/ast.ts
|
|
4
4
|
function parentHop(parent) {
|
|
5
5
|
return typeof parent === "string" ? { field: parent } : parent;
|
|
@@ -36,7 +36,8 @@ function hasConditionOp(condition, op) {
|
|
|
36
36
|
case "isNull":
|
|
37
37
|
case "memberOf":
|
|
38
38
|
case "related":
|
|
39
|
-
case "opaque":
|
|
39
|
+
case "opaque":
|
|
40
|
+
case "liveSession": return false;
|
|
40
41
|
default:
|
|
41
42
|
/* v8 ignore next */
|
|
42
43
|
return condition;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { C as ownGet, l as
|
|
1
|
+
import { C as restrictedStops, E as ownGet, d as isEdgeRelation, l as groupEntries, m as isPrincipalRelation, r as expandRelation, s as getRegistry, u as isComputedRelation } from "./permissions-DVoF6dMt.js";
|
|
2
|
+
import { t as idText } from "./ids-DC4V4CFu.js";
|
|
2
3
|
import { n as isThenable } from "./thenable-okc2xDsj.js";
|
|
3
4
|
function isRecord(value) {
|
|
4
5
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
@@ -22,6 +23,10 @@ function asChain(value) {
|
|
|
22
23
|
...value["truncated"] === true ? { truncated: true } : {}
|
|
23
24
|
};
|
|
24
25
|
}
|
|
26
|
+
function asRow(value) {
|
|
27
|
+
if (value === null || value === void 0) return { row: null };
|
|
28
|
+
return isRecord(value) ? { row: value } : void 0;
|
|
29
|
+
}
|
|
25
30
|
function asGroup(value) {
|
|
26
31
|
if (!isRecord(value) || typeof value["resource"] !== "string" || typeof value["id"] !== "string" || typeof value["relation"] !== "string" || value["id"] === "") return;
|
|
27
32
|
return {
|
|
@@ -100,6 +105,17 @@ function relationReader(source, cache, resources) {
|
|
|
100
105
|
}), asHolders);
|
|
101
106
|
return {
|
|
102
107
|
available: source !== void 0,
|
|
108
|
+
row(query) {
|
|
109
|
+
const load = source?.row?.bind(source);
|
|
110
|
+
return read(cache, JSON.stringify([
|
|
111
|
+
"row",
|
|
112
|
+
query.resource,
|
|
113
|
+
query.id
|
|
114
|
+
]), load === void 0 ? void 0 : () => load({
|
|
115
|
+
resource: query.resource,
|
|
116
|
+
id: query.id
|
|
117
|
+
}), asRow);
|
|
118
|
+
},
|
|
103
119
|
chain(query) {
|
|
104
120
|
const through = query.through ?? "parent";
|
|
105
121
|
return read(cache, JSON.stringify([
|
|
@@ -142,9 +158,7 @@ function pendingRelations(cache) {
|
|
|
142
158
|
return out;
|
|
143
159
|
}
|
|
144
160
|
function relationId(value) {
|
|
145
|
-
|
|
146
|
-
if (typeof value === "number" && Number.isFinite(value)) return String(value);
|
|
147
|
-
if (typeof value === "bigint") return String(value);
|
|
161
|
+
return idText(value);
|
|
148
162
|
}
|
|
149
163
|
/** Whether the holder's period covers `now`. */
|
|
150
164
|
function activeNow(holder, now) {
|
|
@@ -176,6 +190,27 @@ function followHops(condition, first, reader) {
|
|
|
176
190
|
}
|
|
177
191
|
return { id };
|
|
178
192
|
}
|
|
193
|
+
function restrictedAbove(condition, row, reader) {
|
|
194
|
+
const above = condition.restrictedAncestors;
|
|
195
|
+
if (above === void 0) return false;
|
|
196
|
+
const parent = relationId(ownGet(row, above.parent));
|
|
197
|
+
if (parent === void 0) return false;
|
|
198
|
+
const chain = reader.chain({
|
|
199
|
+
resource: above.resource,
|
|
200
|
+
id: parent,
|
|
201
|
+
depth: above.depth - 1
|
|
202
|
+
});
|
|
203
|
+
if (chain === "pending" || chain === "failed") return "relation-unavailable";
|
|
204
|
+
if (chain.restricted === true || chain.ancestors.some((ancestor) => ancestor.restricted === true)) return;
|
|
205
|
+
const own = relationId(ownGet(row, above.id));
|
|
206
|
+
const ids = [
|
|
207
|
+
...own === void 0 ? [] : [own],
|
|
208
|
+
parent,
|
|
209
|
+
...chain.ancestors.map((ancestor) => ancestor.id)
|
|
210
|
+
];
|
|
211
|
+
if (new Set(ids).size !== ids.length || chain.truncated === true || chain.ancestors.length > above.depth - 1) return "relation-depth";
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
179
214
|
/** The instances a graph relation reads: the start, then ancestors until a restricted one or `depth`. */
|
|
180
215
|
function relationWalk(condition, row, reader) {
|
|
181
216
|
if (!isRecord(row)) return;
|
|
@@ -184,6 +219,8 @@ function relationWalk(condition, row, reader) {
|
|
|
184
219
|
const rowRestricted = condition.restricted !== void 0 && ownGet(row, condition.restricted) === true;
|
|
185
220
|
const hopped = condition.hops !== void 0 && condition.hops.length > 0;
|
|
186
221
|
if ((condition.parent === true || hopped) && rowRestricted) return;
|
|
222
|
+
const above = restrictedAbove(condition, row, reader);
|
|
223
|
+
if (above !== false) return above;
|
|
187
224
|
const start = hopped ? followHops(condition, first, reader) : { id: first };
|
|
188
225
|
if (start === void 0 || start === "relation-unavailable") return start;
|
|
189
226
|
const id = start.id;
|
|
@@ -198,10 +235,11 @@ function relationWalk(condition, row, reader) {
|
|
|
198
235
|
});
|
|
199
236
|
if (chain === "pending" || chain === "failed") return "relation-unavailable";
|
|
200
237
|
const ids = [id];
|
|
201
|
-
|
|
238
|
+
const stops = condition.passRestricted !== true;
|
|
239
|
+
let stopped = stops && chain.restricted === true;
|
|
202
240
|
if (!stopped) for (const ancestor of chain.ancestors.slice(0, condition.depth)) {
|
|
203
241
|
ids.push(ancestor.id);
|
|
204
|
-
if (ancestor.restricted === true) {
|
|
242
|
+
if (stops && ancestor.restricted === true) {
|
|
205
243
|
stopped = true;
|
|
206
244
|
break;
|
|
207
245
|
}
|
|
@@ -218,7 +256,8 @@ function relationWalk(condition, row, reader) {
|
|
|
218
256
|
* goes on past `depth` with no holder below it. Any read the instance could
|
|
219
257
|
* not answer is `relation-unavailable` unless a holder was found elsewhere.
|
|
220
258
|
*/
|
|
221
|
-
function resolveRelated(condition, row, subject, now, reader) {
|
|
259
|
+
function resolveRelated(condition, row, subject, now, reader, permitted) {
|
|
260
|
+
if (condition.permission !== void 0) return resolveInherited(condition, condition.permission, row, reader, permitted);
|
|
222
261
|
const principal = subject.principal;
|
|
223
262
|
if (principal === null) return false;
|
|
224
263
|
const walk = relationWalk(condition, row, reader);
|
|
@@ -245,6 +284,19 @@ function resolveRelated(condition, row, subject, now, reader) {
|
|
|
245
284
|
if (unavailable) return "relation-unavailable";
|
|
246
285
|
return walk.truncated || deep ? "relation-depth" : false;
|
|
247
286
|
}
|
|
287
|
+
function resolveInherited(condition, permission, row, reader, permitted) {
|
|
288
|
+
const walk = relationWalk(condition, row, reader);
|
|
289
|
+
if (walk === void 0) return false;
|
|
290
|
+
if (walk === "relation-depth" || walk === "relation-unavailable") return walk;
|
|
291
|
+
if (permitted === void 0) return "relation-unavailable";
|
|
292
|
+
let unknown = false;
|
|
293
|
+
for (const id of walk.ids) {
|
|
294
|
+
const verdict = permitted(condition.resource, id, permission);
|
|
295
|
+
if (verdict === true) return true;
|
|
296
|
+
if (verdict !== false && unknown === false) unknown = verdict;
|
|
297
|
+
}
|
|
298
|
+
return unknown;
|
|
299
|
+
}
|
|
248
300
|
function groupKey(group) {
|
|
249
301
|
return JSON.stringify([
|
|
250
302
|
group.resource,
|
|
@@ -288,29 +340,51 @@ function holdsRelation(at, principalId, now, reader, budget, seen, explored) {
|
|
|
288
340
|
if (unavailable) return "relation-unavailable";
|
|
289
341
|
return deep ? "relation-depth" : false;
|
|
290
342
|
}
|
|
291
|
-
/** The
|
|
292
|
-
function
|
|
293
|
-
if (relationId(ownGet(row, spec.object ?? `${resourceName}_id`)) !== id) return;
|
|
294
|
-
for (const [column, value] of Object.entries(spec.match ?? {})) if (ownGet(row, column) !== value) return;
|
|
295
|
-
const subject = relationId(ownGet(row, spec.subject ?? "user_id"));
|
|
296
|
-
if (subject === void 0) return;
|
|
343
|
+
/** The holders one edge-table row names for `spec`: none when the row does not belong to it. */
|
|
344
|
+
function tableHolders(resourceName, spec, row, id) {
|
|
345
|
+
if (relationId(ownGet(row, spec.object ?? `${resourceName}_id`)) !== id) return [];
|
|
346
|
+
for (const [column, value] of Object.entries(spec.match ?? {})) if (ownGet(row, column) !== value) return [];
|
|
297
347
|
const expiresAt = spec.expiresAt === void 0 ? void 0 : seconds(ownGet(row, spec.expiresAt));
|
|
298
348
|
const period = expiresAt === void 0 ? {} : { expiresAt };
|
|
299
349
|
const groups = spec.groups;
|
|
300
|
-
const
|
|
301
|
-
if (groups === void 0
|
|
302
|
-
principal: { id:
|
|
350
|
+
const direct = relationId(ownGet(row, spec.subject ?? "user_id"));
|
|
351
|
+
if (groups === void 0) return direct === void 0 ? [] : [{
|
|
352
|
+
principal: { id: direct },
|
|
303
353
|
...period
|
|
304
|
-
};
|
|
305
|
-
|
|
306
|
-
|
|
354
|
+
}];
|
|
355
|
+
if (groups.column === void 0) {
|
|
356
|
+
const out = direct === void 0 ? [] : [{
|
|
357
|
+
principal: { id: direct },
|
|
358
|
+
...period
|
|
359
|
+
}];
|
|
360
|
+
for (const group of groupEntries(spec)) {
|
|
361
|
+
const groupId = relationId(ownGet(row, group.subject));
|
|
362
|
+
if (groupId !== void 0) out.push({
|
|
363
|
+
group: {
|
|
364
|
+
resource: group.resource,
|
|
365
|
+
id: groupId,
|
|
366
|
+
relation: group.relation
|
|
367
|
+
},
|
|
368
|
+
...period
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
return out;
|
|
372
|
+
}
|
|
373
|
+
const kind = ownGet(row, groups.column);
|
|
374
|
+
if (kind === null || kind === void 0 || kind === groups.direct) return direct === void 0 ? [] : [{
|
|
375
|
+
principal: { id: direct },
|
|
376
|
+
...period
|
|
377
|
+
}];
|
|
378
|
+
const group = groupEntries(spec).find((entry) => entry.resource === kind);
|
|
379
|
+
const groupId = group === void 0 ? void 0 : relationId(ownGet(row, group.subject));
|
|
380
|
+
return group === void 0 || groupId === void 0 ? [] : [{
|
|
307
381
|
group: {
|
|
308
|
-
resource:
|
|
309
|
-
id:
|
|
310
|
-
relation
|
|
382
|
+
resource: group.resource,
|
|
383
|
+
id: groupId,
|
|
384
|
+
relation: group.relation
|
|
311
385
|
},
|
|
312
386
|
...period
|
|
313
|
-
};
|
|
387
|
+
}];
|
|
314
388
|
}
|
|
315
389
|
function seconds(value) {
|
|
316
390
|
if (value instanceof Date) {
|
|
@@ -350,6 +424,9 @@ function memoryRelations(permissions, data = {}) {
|
|
|
350
424
|
}
|
|
351
425
|
const rowOf = (resource, id) => byId.get(resource)?.get(id);
|
|
352
426
|
return {
|
|
427
|
+
row({ resource, id }) {
|
|
428
|
+
return rowOf(resource, id) ?? null;
|
|
429
|
+
},
|
|
353
430
|
ancestors({ resource, id, depth, through }) {
|
|
354
431
|
const node = registry.get(resource);
|
|
355
432
|
const start = rowOf(resource, id);
|
|
@@ -361,7 +438,8 @@ function memoryRelations(permissions, data = {}) {
|
|
|
361
438
|
return { ancestors: [{ id: next }] };
|
|
362
439
|
}
|
|
363
440
|
const restricted = restrictedOf(node, start);
|
|
364
|
-
|
|
441
|
+
const stops = restrictedStops(node, "parent");
|
|
442
|
+
if (restricted && stops || node.parent === void 0 || node.parent.resource !== resource) return restricted ? {
|
|
365
443
|
restricted: true,
|
|
366
444
|
ancestors: []
|
|
367
445
|
} : { ancestors: [] };
|
|
@@ -380,15 +458,19 @@ function memoryRelations(permissions, data = {}) {
|
|
|
380
458
|
id: next,
|
|
381
459
|
restricted: true
|
|
382
460
|
} : { id: next });
|
|
383
|
-
if (seen.has(next) || hidden) {
|
|
461
|
+
if (seen.has(next) || hidden && stops) {
|
|
384
462
|
next = void 0;
|
|
385
463
|
break;
|
|
386
464
|
}
|
|
387
465
|
seen.add(next);
|
|
388
466
|
next = relationId(ownGet(row, field));
|
|
389
467
|
}
|
|
390
|
-
|
|
391
|
-
|
|
468
|
+
const chain = restricted ? {
|
|
469
|
+
restricted: true,
|
|
470
|
+
ancestors
|
|
471
|
+
} : { ancestors };
|
|
472
|
+
return next === void 0 || rowOf(resource, next) === void 0 ? chain : {
|
|
473
|
+
...chain,
|
|
392
474
|
truncated: true
|
|
393
475
|
};
|
|
394
476
|
},
|
|
@@ -397,10 +479,7 @@ function memoryRelations(permissions, data = {}) {
|
|
|
397
479
|
if (spec === void 0 || isComputedRelation(spec)) return [];
|
|
398
480
|
if (isEdgeRelation(spec)) {
|
|
399
481
|
const table = data.tables?.[spec.edge];
|
|
400
|
-
if (table !== void 0) return table.flatMap((row) =>
|
|
401
|
-
const holder = tableHolder(resource, spec, row, id);
|
|
402
|
-
return holder === void 0 ? [] : [holder];
|
|
403
|
-
});
|
|
482
|
+
if (table !== void 0) return table.flatMap((row) => tableHolders(resource, spec, row, id));
|
|
404
483
|
return (data.edges?.[resource]?.[relation] ?? []).filter((edge) => edge.id === id).map(edgeHolder);
|
|
405
484
|
}
|
|
406
485
|
const row = rowOf(resource, id);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/ssf/replay.ts
|
|
2
|
+
function memoryReplayStore() {
|
|
3
|
+
const seen = /* @__PURE__ */ new Map();
|
|
4
|
+
function evict(now = Date.now() / 1e3) {
|
|
5
|
+
for (const [jti, expiresAt] of seen) if (expiresAt !== void 0 && expiresAt <= now) seen.delete(jti);
|
|
6
|
+
}
|
|
7
|
+
return {
|
|
8
|
+
seen(jti) {
|
|
9
|
+
evict();
|
|
10
|
+
return seen.has(jti);
|
|
11
|
+
},
|
|
12
|
+
remember(jti, expiresAt) {
|
|
13
|
+
evict();
|
|
14
|
+
seen.set(jti, expiresAt);
|
|
15
|
+
},
|
|
16
|
+
claim(key, expiresAt) {
|
|
17
|
+
evict();
|
|
18
|
+
if (seen.has(key)) return false;
|
|
19
|
+
seen.set(key, expiresAt);
|
|
20
|
+
return true;
|
|
21
|
+
},
|
|
22
|
+
release(key) {
|
|
23
|
+
seen.delete(key);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { memoryReplayStore as t };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/core/resource-ref.ts
|
|
2
|
+
/** The row's `id` as a string, when it is a string or a number. */
|
|
3
|
+
function resourceIdOf(data) {
|
|
4
|
+
if (data === null || typeof data !== "object" || !("id" in data)) return;
|
|
5
|
+
const id = data.id;
|
|
6
|
+
return typeof id === "string" || typeof id === "number" ? String(id) : void 0;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The `resource` of a decision event: the permission's resource type and the
|
|
10
|
+
* row's `id`, or `wireId` (the id the request named) when the row has none.
|
|
11
|
+
*/
|
|
12
|
+
function resourceRef(permission, data, wireId) {
|
|
13
|
+
const id = resourceIdOf(data) ?? (typeof wireId === "string" || typeof wireId === "number" ? String(wireId) : void 0);
|
|
14
|
+
return id === void 0 ? { type: permission.resource } : {
|
|
15
|
+
type: permission.resource,
|
|
16
|
+
id
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { resourceRef as n, resourceIdOf as t };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/core/revocations.ts
|
|
2
|
+
function isRevocationEvent(value) {
|
|
3
|
+
if (value === null || typeof value !== "object") return false;
|
|
4
|
+
const event = value;
|
|
5
|
+
return typeof event["principal"] === "string" && event["principal"].length > 0 && (event["kind"] === "session-revoked" || event["kind"] === "changed") && (event["session"] === void 0 || typeof event["session"] === "string") && (event["tenant"] === void 0 || typeof event["tenant"] === "string");
|
|
6
|
+
}
|
|
7
|
+
/** In-process feed; a multi-replica app bridges `revoke` to its own pub/sub. */
|
|
8
|
+
function memoryRevocationFeed() {
|
|
9
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
10
|
+
return Object.freeze({
|
|
11
|
+
subscribe(listener) {
|
|
12
|
+
listeners.add(listener);
|
|
13
|
+
return () => {
|
|
14
|
+
listeners.delete(listener);
|
|
15
|
+
};
|
|
16
|
+
},
|
|
17
|
+
revoke(event) {
|
|
18
|
+
if (!isRevocationEvent(event)) throw new TypeError("PermDock: invalid revocation event.");
|
|
19
|
+
const frozen = Object.freeze({ ...event });
|
|
20
|
+
for (const listener of listeners) try {
|
|
21
|
+
listener(frozen);
|
|
22
|
+
} catch {}
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { memoryRevocationFeed as t };
|