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
package/dist/nest/index.d.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { f as ApprovalStore } from "../types-B8w5PFtS.js";
|
|
1
|
+
import { C as Policy, Nr as Principal, ln as PermDock } from "../policy-CFZAr_Al.js";
|
|
2
|
+
import { f as Permission } from "../permissions-DttnqqxC.js";
|
|
4
3
|
import { n as RevocationFeed } from "../revocations-Cy06JNx2.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { S as ConnectionOptions, b as Connection, g as discoverViaSignatureAgent, h as WebBotAuthVerifier, n as OpenApiHooks, o as TenantOption, r as ProtectOptions, u as InvalidSignatureError, y as verifyWebBotAuth } from "../create-BKF3dgFk.js";
|
|
4
|
+
import { A as ConnectionOptions, O as Connection, h as InvalidSignatureError, i as ProtectOptions, n as OpenApiHooks, w as verifyWebBotAuth, x as discoverViaSignatureAgent } from "../create-BWyx3jua.js";
|
|
5
|
+
import { t as ServerAdapterOptions } from "../bind-CVy3Espv.js";
|
|
8
6
|
import { i as sendResponse, t as NodeRequest } from "../http-DPuDaChb.js";
|
|
9
|
-
import { CanActivate, ExceptionFilter, ExecutionContext, Type } from "@nestjs/common";
|
|
7
|
+
import { CanActivate, DynamicModule, ExceptionFilter, ExecutionContext, Type } from "@nestjs/common";
|
|
10
8
|
//#region src/nest/http.d.ts
|
|
11
9
|
/**
|
|
12
10
|
* `@nestjs/platform-express` hands the guard an `IncomingMessage`;
|
|
@@ -20,27 +18,7 @@ type NestRequest = NodeRequest & {
|
|
|
20
18
|
permdock?: PermDock;
|
|
21
19
|
permdockData?: unknown;
|
|
22
20
|
};
|
|
23
|
-
type NestPermDockOptions<TUser = unknown> = {
|
|
24
|
-
readonly subject: (req: NestRequest) => TUser | Promise<TUser>;
|
|
25
|
-
readonly tenant?: TenantOption<NestRequest>;
|
|
26
|
-
readonly memberships?: MembershipSource | readonly MembershipSource[];
|
|
27
|
-
/** The object graph for relation grants that walk a parent chain; without it they deny. */
|
|
28
|
-
readonly relations?: RelationSource;
|
|
29
|
-
readonly entitlements?: EntitlementSource;
|
|
30
|
-
readonly customRoles?: RoleSource;
|
|
31
|
-
/** Hosted grants, read once per instance; see `PolicySource`. */
|
|
32
|
-
readonly policies?: PolicySource;
|
|
33
|
-
readonly store?: ApprovalStore;
|
|
34
|
-
readonly sink?: DecisionSink;
|
|
35
|
-
readonly limits?: LimitStore;
|
|
36
|
-
/** `createPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
|
|
37
|
-
readonly pdp?: PdpFactory;
|
|
38
|
-
/** Accepted for adapter parity; not read by this adapter. */
|
|
39
|
-
readonly snapshots?: SnapshotSource;
|
|
40
|
-
/** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
|
|
41
|
-
readonly otel?: OtelWrap;
|
|
42
|
-
/** `(request) => verifyWebBotAuth(request, options)`; a verified bot becomes the actor. */
|
|
43
|
-
readonly webBotAuth?: WebBotAuthVerifier;
|
|
21
|
+
type NestPermDockOptions<TUser = unknown> = ServerAdapterOptions<NestRequest, TUser> & {
|
|
44
22
|
/**
|
|
45
23
|
* Maps a `ws`, `rpc` or `graphql` context to the request its subject comes
|
|
46
24
|
* from. Without it, a protected handler outside HTTP is denied.
|
|
@@ -55,13 +33,20 @@ type NestSocket = {
|
|
|
55
33
|
disconnect?(close?: boolean): unknown;
|
|
56
34
|
close?(code?: number, reason?: string): unknown;
|
|
57
35
|
};
|
|
58
|
-
|
|
36
|
+
/** `Protect(null, loadData?, { oauthScopes })` needs a principal and one of the OAuth scopes, but no permission. */
|
|
37
|
+
type NestProtect = (permission: Permission | null, loadData?: (req: NestRequest) => unknown, protectOptions?: ProtectOptions) => ClassDecorator & MethodDecorator;
|
|
59
38
|
type NestHandlerOptions = {
|
|
60
39
|
/** Controller path; may hold route params such as `:org`. Default `api/permdock`. */
|
|
61
40
|
readonly path?: string;
|
|
62
41
|
};
|
|
42
|
+
type PermDockModuleOptions = {
|
|
43
|
+
/** `"global"` registers `PermDockGuard` as `APP_GUARD`, so every `Protect` rule runs without `UseGuards`. */
|
|
44
|
+
readonly guard?: "global";
|
|
45
|
+
};
|
|
63
46
|
type NestPermDock = {
|
|
64
|
-
readonly PermDockModule: Type<unknown
|
|
47
|
+
readonly PermDockModule: Type<unknown> & {
|
|
48
|
+
readonly forRoot: (options?: PermDockModuleOptions) => DynamicModule;
|
|
49
|
+
};
|
|
65
50
|
readonly PermDockGuard: Type<CanActivate>;
|
|
66
51
|
readonly Protect: NestProtect;
|
|
67
52
|
readonly InjectPermDock: () => ParameterDecorator;
|
|
@@ -77,4 +62,14 @@ type NestPermDock = {
|
|
|
77
62
|
};
|
|
78
63
|
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, options: NestPermDockOptions<TUser>): NestPermDock;
|
|
79
64
|
//#endregion
|
|
80
|
-
|
|
65
|
+
//#region src/nest/decorate.d.ts
|
|
66
|
+
/**
|
|
67
|
+
* Applies method decorators to `cls.prototype[key]` without decorator syntax,
|
|
68
|
+
* for projects limited to erasable TypeScript. Decorators apply in the order
|
|
69
|
+
* given; each sees the descriptor the previous one left.
|
|
70
|
+
*/
|
|
71
|
+
export declare function decorateMethod(cls: {
|
|
72
|
+
readonly prototype: object;
|
|
73
|
+
}, key: string, ...decorators: readonly MethodDecorator[]): void;
|
|
74
|
+
//#endregion
|
|
75
|
+
export { InvalidSignatureError, type NestHandlerOptions, type NestPermDock, type NestPermDockOptions, type NestProtect, type NestRequest, type NestSocket, type PermDockModuleOptions, discoverViaSignatureAgent, sendResponse, verifyWebBotAuth };
|
package/dist/nest/index.js
CHANGED
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
import { t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { r as
|
|
5
|
-
import { t as problemFromError } from "../map-error-
|
|
6
|
-
import {
|
|
7
|
-
import { i as
|
|
2
|
+
import { n as PermDockValidationError } from "../validation-error-CnjZ4t92.js";
|
|
3
|
+
import { n as PermDockDeniedError, r as PermDockRevokedError, t as PermDockApprovalRequiredError } from "../errors-Cz5zn0mW.js";
|
|
4
|
+
import { i as discoverViaSignatureAgent, r as InvalidSignatureError, s as verifyWebBotAuth } from "../evaluations-tz6D9A2G.js";
|
|
5
|
+
import { t as problemFromError } from "../map-error-pgUWNNtG.js";
|
|
6
|
+
import { a as socketConnection, r as bindKernel } from "../bind-VnYn2HKq.js";
|
|
7
|
+
import { i as onRevoked, t as POLICY_VIOLATION } from "../stream-DDpvynSB.js";
|
|
8
|
+
import { i as toRequest$1, n as isServerResponse, r as sendResponse } from "../http-BIhmLfCc.js";
|
|
8
9
|
import { Catch, Controller, Get, Inject, Injectable, Module, Post, Req, Res, createParamDecorator } from "@nestjs/common";
|
|
9
|
-
import { APP_FILTER, Reflector } from "@nestjs/core";
|
|
10
|
+
import { APP_FILTER, APP_GUARD, Reflector } from "@nestjs/core";
|
|
11
|
+
//#region src/nest/decorate.ts
|
|
12
|
+
/**
|
|
13
|
+
* Applies method decorators to `cls.prototype[key]` without decorator syntax,
|
|
14
|
+
* for projects limited to erasable TypeScript. Decorators apply in the order
|
|
15
|
+
* given; each sees the descriptor the previous one left.
|
|
16
|
+
*/
|
|
17
|
+
function decorateMethod(cls, key, ...decorators) {
|
|
18
|
+
for (const decorator of decorators) {
|
|
19
|
+
const descriptor = Object.getOwnPropertyDescriptor(cls.prototype, key);
|
|
20
|
+
if (descriptor === void 0) throw new TypeError(`decorateMethod: ${key} is not a method of the class`);
|
|
21
|
+
const next = decorator(cls.prototype, key, descriptor);
|
|
22
|
+
if (next !== void 0) Object.defineProperty(cls.prototype, key, next);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
10
26
|
//#region src/nest/http.ts
|
|
11
27
|
function isReadable(value) {
|
|
12
28
|
return typeof value === "object" && value !== null && typeof value.read === "function";
|
|
@@ -54,17 +70,28 @@ function reflectMeta() {
|
|
|
54
70
|
if (typeof ref.getMetadata !== "function" || typeof ref.defineMetadata !== "function") throw new TypeError("reflect-metadata is required for permdock/nest");
|
|
55
71
|
return ref;
|
|
56
72
|
}
|
|
57
|
-
function applyMethod(cls, key, decorator) {
|
|
58
|
-
const descriptor = Object.getOwnPropertyDescriptor(cls.prototype, key);
|
|
59
|
-
if (descriptor === void 0) throw new TypeError(`missing ${key} handler`);
|
|
60
|
-
decorator(cls.prototype, key, descriptor);
|
|
61
|
-
}
|
|
62
73
|
function applyParameter(cls, key, index, decorator) {
|
|
63
74
|
decorator(cls.prototype, key, index);
|
|
64
75
|
}
|
|
65
76
|
function hasEmit(value) {
|
|
66
77
|
return typeof value === "object" && value !== null && typeof value.emit === "function";
|
|
67
78
|
}
|
|
79
|
+
/** One call per loader for a request, so class and method rules naming the same loader share its row. */
|
|
80
|
+
function loadsFor(req) {
|
|
81
|
+
const loaded = /* @__PURE__ */ new Map();
|
|
82
|
+
return (loader) => {
|
|
83
|
+
if (loader === void 0) return;
|
|
84
|
+
return () => {
|
|
85
|
+
if (req === void 0) return Promise.resolve(void 0);
|
|
86
|
+
let hit = loaded.get(loader);
|
|
87
|
+
if (hit === void 0) {
|
|
88
|
+
hit = Promise.resolve(loader(req));
|
|
89
|
+
loaded.set(loader, hit);
|
|
90
|
+
}
|
|
91
|
+
return hit;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
}
|
|
68
95
|
function rulesOf(target) {
|
|
69
96
|
const found = reflectMeta().getMetadata(PROTECT_KEY, target);
|
|
70
97
|
if (!Array.isArray(found)) return [];
|
|
@@ -84,73 +111,34 @@ const Protect = (permission, loadData, protectOptions) => {
|
|
|
84
111
|
});
|
|
85
112
|
};
|
|
86
113
|
function createPermDock(policy, options) {
|
|
87
|
-
const
|
|
88
|
-
const
|
|
89
|
-
const kernel = createKernel(policy, compact({
|
|
90
|
-
subject: (request) => {
|
|
91
|
-
const req = contexts.get(request);
|
|
92
|
-
return req === void 0 ? null : options.subject(req);
|
|
93
|
-
},
|
|
94
|
-
memberships: options.memberships,
|
|
95
|
-
relations: options.relations,
|
|
96
|
-
entitlements: options.entitlements,
|
|
97
|
-
customRoles: options.customRoles,
|
|
98
|
-
policies: options.policies,
|
|
99
|
-
store: options.store,
|
|
100
|
-
sink: options.sink,
|
|
101
|
-
limits: options.limits,
|
|
102
|
-
pdp: options.pdp,
|
|
103
|
-
webBotAuth: options.webBotAuth,
|
|
104
|
-
revocations: options.revocations,
|
|
105
|
-
adapter: "nest",
|
|
106
|
-
wrap: options.otel
|
|
107
|
-
}));
|
|
108
|
-
const scopeOf = (req) => tenantScope(options.tenant, req);
|
|
109
|
-
const applyProtect = async (remaining, req, request, scope) => {
|
|
114
|
+
const { kernel, bind, rebind, scopeOf, handlerScope } = bindKernel(policy, options, "nest", toRequest);
|
|
115
|
+
const applyProtect = async (remaining, req, request, scope, load) => {
|
|
110
116
|
const [rule, ...rest] = remaining;
|
|
111
117
|
if (rule === void 0) return;
|
|
112
|
-
const
|
|
113
|
-
const guard = await kernel.protect(rule.permission, loader === void 0 ? void 0 : () => loader(req), rule.options)(request, scope);
|
|
118
|
+
const guard = await kernel.protect(rule.permission, load(rule.loadData), rule.options)(request, scope);
|
|
114
119
|
if (!guard.ok) throw new PermDockHttpError(guard.response);
|
|
115
120
|
req.permdock = guard.permdock;
|
|
116
121
|
req.permdockData = guard.data;
|
|
117
|
-
await applyProtect(rest, req, request, scope);
|
|
118
|
-
};
|
|
119
|
-
const bind = (req) => {
|
|
120
|
-
const hit = bound.get(req);
|
|
121
|
-
if (hit !== void 0) return hit;
|
|
122
|
-
const request = toRequest(req);
|
|
123
|
-
bound.set(req, request);
|
|
124
|
-
contexts.set(request, req);
|
|
125
|
-
return request;
|
|
122
|
+
await applyProtect(rest, req, request, scope, load);
|
|
126
123
|
};
|
|
127
124
|
const sockets = /* @__PURE__ */ new WeakMap();
|
|
128
|
-
const connection = (client, req, connectionOptions) => {
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
return conn;
|
|
139
|
-
})();
|
|
140
|
-
sockets.set(client, opened);
|
|
141
|
-
return opened;
|
|
142
|
-
};
|
|
143
|
-
/** Decides each rule for a gateway message against the client's connection. */
|
|
125
|
+
const connection = (client, req, connectionOptions) => socketConnection(sockets, client, async () => {
|
|
126
|
+
const conn = await kernel.connection(bind(req), connectionOptions, await scopeOf(req));
|
|
127
|
+
onRevoked(conn, (problem) => {
|
|
128
|
+
client.emit?.("permdock:error", problem);
|
|
129
|
+
if (typeof client.disconnect === "function") client.disconnect(true);
|
|
130
|
+
else client.close?.(POLICY_VIOLATION, problem.type);
|
|
131
|
+
});
|
|
132
|
+
return conn;
|
|
133
|
+
});
|
|
134
|
+
/** Decides each rule for a gateway message against the client's connection, as `protect` does for HTTP. */
|
|
144
135
|
const checkMessage = async (rules, conn, req) => {
|
|
136
|
+
const request = req === void 0 ? void 0 : bind(req);
|
|
137
|
+
const load = loadsFor(req);
|
|
145
138
|
for (const rule of rules) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (
|
|
149
|
-
data = req === void 0 ? void 0 : await loader(req);
|
|
150
|
-
if (data === null || data === void 0) throw new PermDockHttpError(new Response(null, { status: 404 }));
|
|
151
|
-
}
|
|
152
|
-
const decision = conn.check(rule.permission, data, rule.options?.trusted === true ? { trusted: true } : void 0);
|
|
153
|
-
if (decision.outcome !== "granted") throw new PermDockHttpError(kernel.problem(decision, { permission: rule.permission }));
|
|
139
|
+
if (conn.signal.aborted) throw conn.signal.reason instanceof PermDockRevokedError ? conn.signal.reason : new PermDockRevokedError({ code: "denied" });
|
|
140
|
+
const guard = await kernel.protectOn(conn.permdock, rule.permission, load(rule.loadData), rule.options, request);
|
|
141
|
+
if (!guard.ok) throw new PermDockHttpError(guard.response);
|
|
154
142
|
}
|
|
155
143
|
};
|
|
156
144
|
class PermDockGuard {
|
|
@@ -172,7 +160,7 @@ function createPermDock(policy, options) {
|
|
|
172
160
|
const request = bind(req);
|
|
173
161
|
const scope = await scopeOf(req);
|
|
174
162
|
req.permdock = await kernel.permdock(request, scope);
|
|
175
|
-
await applyProtect(rules, req, request, scope);
|
|
163
|
+
await applyProtect(rules, req, request, scope, loadsFor(req));
|
|
176
164
|
return true;
|
|
177
165
|
}
|
|
178
166
|
rulesFor(context) {
|
|
@@ -186,7 +174,7 @@ function createPermDock(policy, options) {
|
|
|
186
174
|
class PermDockExceptionFilter {
|
|
187
175
|
send = sendNestResponse;
|
|
188
176
|
async catch(exception, host) {
|
|
189
|
-
const problem = exception instanceof PermDockHttpError ? exception.response : problemFromError(exception);
|
|
177
|
+
const problem = exception instanceof PermDockHttpError ? exception.response : problemFromError(exception, { credentials: host.getType() === "http" && host.switchToHttp().getRequest().headers.authorization !== void 0 });
|
|
190
178
|
if (problem === void 0) throw new TypeError("unhandled permdock exception");
|
|
191
179
|
if (host.getType() === "http") {
|
|
192
180
|
await this.send(host.switchToHttp().getResponse(), problem);
|
|
@@ -202,10 +190,18 @@ function createPermDock(policy, options) {
|
|
|
202
190
|
});
|
|
203
191
|
}
|
|
204
192
|
}
|
|
205
|
-
Catch(PermDockHttpError, InvalidSignatureError, PermDockDeniedError, PermDockApprovalRequiredError, PermDockValidationError)(PermDockExceptionFilter);
|
|
193
|
+
Catch(PermDockHttpError, InvalidSignatureError, PermDockDeniedError, PermDockApprovalRequiredError, PermDockRevokedError, PermDockValidationError)(PermDockExceptionFilter);
|
|
206
194
|
Injectable()(PermDockExceptionFilter);
|
|
207
195
|
class PermDockRoot {
|
|
208
|
-
static
|
|
196
|
+
static forRoot(moduleOptions = {}) {
|
|
197
|
+
return {
|
|
198
|
+
module: PermDockRoot,
|
|
199
|
+
providers: moduleOptions.guard === "global" ? [{
|
|
200
|
+
provide: APP_GUARD,
|
|
201
|
+
useExisting: PermDockGuard
|
|
202
|
+
}] : []
|
|
203
|
+
};
|
|
204
|
+
}
|
|
209
205
|
}
|
|
210
206
|
Module({
|
|
211
207
|
providers: [
|
|
@@ -231,24 +227,19 @@ function createPermDock(policy, options) {
|
|
|
231
227
|
});
|
|
232
228
|
const InjectPermDock = () => injectPermDock();
|
|
233
229
|
const permdockHandler = (handlerOptions = {}) => {
|
|
234
|
-
const { POST, GET } = kernel.permdockHandler(
|
|
235
|
-
const req = contexts.get(request);
|
|
236
|
-
return req === void 0 ? { tenant: void 0 } : scopeOf(req);
|
|
237
|
-
});
|
|
230
|
+
const { POST, GET } = kernel.permdockHandler(handlerScope);
|
|
238
231
|
class EvaluationsController {
|
|
239
232
|
send = sendNestResponse;
|
|
240
233
|
async post(req, res) {
|
|
241
|
-
|
|
242
|
-
contexts.set(request, req);
|
|
243
|
-
await this.send(res, await POST(request));
|
|
234
|
+
await this.send(res, await POST(rebind(req)));
|
|
244
235
|
}
|
|
245
236
|
async get(req, res) {
|
|
246
237
|
await this.send(res, await GET(bind(req)));
|
|
247
238
|
}
|
|
248
239
|
}
|
|
249
240
|
Controller(handlerOptions.path ?? "api/permdock")(EvaluationsController);
|
|
250
|
-
|
|
251
|
-
|
|
241
|
+
decorateMethod(EvaluationsController, "post", Post());
|
|
242
|
+
decorateMethod(EvaluationsController, "get", Get());
|
|
252
243
|
applyParameter(EvaluationsController, "post", 0, Req());
|
|
253
244
|
applyParameter(EvaluationsController, "post", 1, Res({ passthrough: false }));
|
|
254
245
|
applyParameter(EvaluationsController, "get", 0, Req());
|
|
@@ -267,4 +258,4 @@ function createPermDock(policy, options) {
|
|
|
267
258
|
};
|
|
268
259
|
}
|
|
269
260
|
//#endregion
|
|
270
|
-
export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent, sendResponse, toRequest, verifyWebBotAuth };
|
|
261
|
+
export { InvalidSignatureError, createPermDock, decorateMethod, discoverViaSignatureAgent, sendResponse, toRequest, verifyWebBotAuth };
|
package/dist/next/client.d.ts
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { t as
|
|
1
|
+
import { t as PermissionBoundaryState } from "../boundary-BmHxVH1J.js";
|
|
2
2
|
import { ComponentType, ReactNode } from "react";
|
|
3
3
|
//#region src/next/client.d.ts
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
readonly retry: () => void;
|
|
7
|
-
};
|
|
4
|
+
/** A fallback node, or a function of what was refused. */
|
|
5
|
+
export type PermissionBoundaryFallback = ReactNode | ((state: PermissionBoundaryState) => ReactNode);
|
|
8
6
|
export type PermissionBoundaryProps = {
|
|
9
7
|
/** Rendered in place of the children when one throws `PermDockDeniedError`. */
|
|
10
|
-
readonly denied?:
|
|
8
|
+
readonly denied?: PermissionBoundaryFallback;
|
|
11
9
|
/** Rendered when a child throws `PermDockApprovalRequiredError`; defaults to `denied`. */
|
|
12
|
-
readonly approval?:
|
|
10
|
+
readonly approval?: PermissionBoundaryFallback;
|
|
13
11
|
};
|
|
14
12
|
/**
|
|
15
13
|
* A component-level boundary for PermDock errors thrown below it, in a Server
|
|
@@ -21,4 +19,5 @@ export declare const PermissionBoundary: ComponentType<PermissionBoundaryProps &
|
|
|
21
19
|
}>;
|
|
22
20
|
/** Inside a `PermissionBoundary` fallback: what was refused, and `retry()`. */
|
|
23
21
|
export declare function usePermissionBoundary(): PermissionBoundaryState | null;
|
|
24
|
-
//#endregion
|
|
22
|
+
//#endregion
|
|
23
|
+
export type { PermissionBoundaryState };
|
package/dist/next/client.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
2
|
+
import { n as boundaryFallback, t as boundaryDigest } from "../boundary-BM8a_P6E.js";
|
|
3
3
|
import { createContext, useContext } from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
|
-
import
|
|
5
|
+
import * as nextError from "next/error.js";
|
|
6
6
|
//#region src/next/client.tsx
|
|
7
|
+
const catchError = nextError.catchError ?? nextError.default.catchError;
|
|
7
8
|
const BoundaryContext = createContext(null);
|
|
8
9
|
function PermissionFallback(props, info) {
|
|
9
|
-
const parsed =
|
|
10
|
+
const parsed = boundaryDigest(info.error);
|
|
10
11
|
if (parsed === null) throw info.error;
|
|
11
|
-
const
|
|
12
|
+
const fallback = boundaryFallback(parsed, props);
|
|
13
|
+
const state = {
|
|
14
|
+
...parsed,
|
|
15
|
+
retry: info.retry
|
|
16
|
+
};
|
|
12
17
|
return /* @__PURE__ */ jsx(BoundaryContext.Provider, {
|
|
13
|
-
value:
|
|
14
|
-
|
|
15
|
-
retry: info.retry
|
|
16
|
-
},
|
|
17
|
-
children: node ?? null
|
|
18
|
+
value: state,
|
|
19
|
+
children: typeof fallback === "function" ? fallback(state) : fallback ?? null
|
|
18
20
|
});
|
|
19
21
|
}
|
|
20
22
|
/**
|
package/dist/next/index.d.ts
CHANGED
|
@@ -1,47 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { f as ApprovalStore } from "../types-
|
|
4
|
-
import {
|
|
1
|
+
import { C as Policy, D as PolicyVocabulary, Nr as Principal, Tt as Snapshot, Yn as Decision, ln as PermDock } from "../policy-CFZAr_Al.js";
|
|
2
|
+
import { f as Permission } from "../permissions-DttnqqxC.js";
|
|
3
|
+
import { f as ApprovalStore } from "../types-vKyAMtcX.js";
|
|
4
|
+
import { t as InstanceOptions } from "../instance-options-BK_rNOSC.js";
|
|
5
|
+
import { o as OtelWrap } from "../types-vNSDF7Dq.js";
|
|
6
|
+
import { a as snapshotHeaders, i as cacheLifeFor, n as SnapshotHeaders, o as snapshotTag, r as SnapshotHeadersOptions, t as CacheLifeForOptions } from "../snapshot-cache-DwQH8ufx.js";
|
|
5
7
|
import { ReactElement, ReactNode } from "react";
|
|
6
|
-
//#region src/next/cache-life.d.ts
|
|
7
|
-
type CacheLifeForOptions = {
|
|
8
|
-
/** Lower bound in seconds. Next.js includes a private entry in per-link prefetches from 30. */
|
|
9
|
-
readonly min?: number;
|
|
10
|
-
/** Upper bound in seconds. Next.js keeps a per-session App Shell entry from 300. */
|
|
11
|
-
readonly max?: number;
|
|
12
|
-
/** Seconds since the epoch; defaults to the snapshot's `issuedAt`, then the clock. */
|
|
13
|
-
readonly now?: number;
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* `{ stale }` for `cacheLife()` inside an app-owned `'use cache: private'` function: `max` when the
|
|
17
|
-
* value never expires, otherwise the seconds left, clamped to `[min, max]`. A value with less than
|
|
18
|
-
* `min` seconds left gets its real remainder, so Next.js leaves it out of prefetches instead of
|
|
19
|
-
* serving it past `expiresAt`.
|
|
20
|
-
*/
|
|
21
|
-
export declare function cacheLifeFor(value: {
|
|
22
|
-
readonly expiresAt?: number | null;
|
|
23
|
-
readonly issuedAt?: number;
|
|
24
|
-
} | null, options?: CacheLifeForOptions): {
|
|
25
|
-
readonly stale: number;
|
|
26
|
-
};
|
|
27
|
-
//#endregion
|
|
28
8
|
//#region src/next/types.d.ts
|
|
29
9
|
type NextSubjectInput = unknown;
|
|
30
|
-
type NextPermDockOptions<TUser = NextSubjectInput> = {
|
|
10
|
+
type NextPermDockOptions<TUser = NextSubjectInput> = InstanceOptions & {
|
|
31
11
|
readonly subject: () => TUser | Promise<TUser>;
|
|
32
12
|
readonly tenant?: string | (() => string | undefined | Promise<string | undefined>);
|
|
33
13
|
readonly onDenied?: (decision: Decision) => never | void;
|
|
34
|
-
readonly memberships?: MembershipSource | readonly MembershipSource[];
|
|
35
|
-
/** The object graph for relation grants that walk a parent chain; without it they deny. */
|
|
36
|
-
readonly relations?: RelationSource;
|
|
37
|
-
readonly entitlements?: EntitlementSource;
|
|
38
|
-
readonly customRoles?: RoleSource;
|
|
39
|
-
/** Hosted grants, read once per instance; see `PolicySource`. */
|
|
40
|
-
readonly policies?: PolicySource;
|
|
41
14
|
readonly store?: ApprovalStore;
|
|
42
|
-
readonly sink?: DecisionSink;
|
|
43
|
-
readonly limits?: LimitStore;
|
|
44
|
-
readonly snapshots?: SnapshotSource;
|
|
45
15
|
/** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
|
|
46
16
|
readonly otel?: OtelWrap;
|
|
47
17
|
/**
|
|
@@ -54,6 +24,14 @@ type NextPermDockOptions<TUser = NextSubjectInput> = {
|
|
|
54
24
|
type GetPermDockQuery = {
|
|
55
25
|
readonly tenant?: string;
|
|
56
26
|
};
|
|
27
|
+
type GetSnapshotQuery = GetPermDockQuery & {
|
|
28
|
+
readonly include?: readonly (Permission | {
|
|
29
|
+
readonly [key: string]: unknown;
|
|
30
|
+
})[];
|
|
31
|
+
readonly tenants?: "all";
|
|
32
|
+
/** Tags added next to `snapshotTag(sub)`, such as the app's own organisation tag. */
|
|
33
|
+
readonly tags?: readonly string[];
|
|
34
|
+
};
|
|
57
35
|
type RequireAccessInput = {
|
|
58
36
|
readonly permission: Permission;
|
|
59
37
|
/** The row for an instance permission; omit it for a collection permission. */
|
|
@@ -75,6 +53,8 @@ type ServerPermDockProviderProps = {
|
|
|
75
53
|
readonly tenants?: "all";
|
|
76
54
|
/** Overrides the factory's `endpoint`; `false` is snapshot-only. */
|
|
77
55
|
readonly endpoint?: string | false;
|
|
56
|
+
/** Suspends permission readers until the snapshot streams in, instead of answering `pending`. */
|
|
57
|
+
readonly suspend?: boolean;
|
|
78
58
|
};
|
|
79
59
|
type PermDockHandler = {
|
|
80
60
|
readonly POST: (request: Request) => Promise<Response>;
|
|
@@ -82,7 +62,18 @@ type PermDockHandler = {
|
|
|
82
62
|
};
|
|
83
63
|
type NextPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
84
64
|
readonly getPermDock: (query?: GetPermDockQuery) => Promise<PermDock<V>>;
|
|
85
|
-
|
|
65
|
+
/**
|
|
66
|
+
* `{ allowed, status: 'ready', decision }`. Any failure to build the
|
|
67
|
+
* instance denies; Next.js interrupts (`redirect()`, `notFound()`,
|
|
68
|
+
* request-time bailouts) from `subject` or `tenant` pass through.
|
|
69
|
+
*/
|
|
70
|
+
readonly getPermission: (permission: Permission, data?: unknown, query?: GetPermDockQuery) => Promise<ServerPermissionState>;
|
|
71
|
+
/**
|
|
72
|
+
* The session's snapshot for a `'use cache: private'` function the app owns:
|
|
73
|
+
* calls `cacheLife(cacheLifeFor(snapshot))` and `cacheTag(snapshotTag(sub), ...tags)`
|
|
74
|
+
* in that scope, and throws outside one.
|
|
75
|
+
*/
|
|
76
|
+
readonly getSnapshot: (query?: GetSnapshotQuery) => Promise<Snapshot>;
|
|
86
77
|
/**
|
|
87
78
|
* Resolves to the granted `Decision`. A denial calls `unauthorized()` for an
|
|
88
79
|
* anonymous subject and `forbidden()` otherwise (`experimental.authInterrupts`);
|
|
@@ -99,12 +90,4 @@ type NextPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
|
99
90
|
//#region src/next/create.d.ts
|
|
100
91
|
export declare function createPermDock<TUser = NextSubjectInput, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: NextPermDockOptions<TUser>): NextPermDock<V>;
|
|
101
92
|
//#endregion
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* The `cacheTag` for one subject's cached snapshots: `permdock:<sub>`, or `permdock:anon`
|
|
105
|
-
* without a subject. Tag the private cache with it and pass it to `updateTag` or
|
|
106
|
-
* `revalidateTag` on every write that changes the subject's snapshot.
|
|
107
|
-
*/
|
|
108
|
-
export declare function snapshotTag(sub?: string | null): string;
|
|
109
|
-
//#endregion
|
|
110
|
-
export type { CacheLifeForOptions, GetPermDockQuery, NextPermDock, NextPermDockOptions, PermDockHandler, RequireAccessInput, ServerPermDockProviderProps, ServerPermissionState };
|
|
93
|
+
export { type CacheLifeForOptions, type GetPermDockQuery, type GetSnapshotQuery, type NextPermDock, type NextPermDockOptions, type PermDockHandler, type RequireAccessInput, type ServerPermDockProviderProps, type ServerPermissionState, type SnapshotHeaders, type SnapshotHeadersOptions, cacheLifeFor, snapshotHeaders, snapshotTag };
|