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.
Files changed (349) hide show
  1. package/README.md +106 -47
  2. package/dist/a2a/index.d.ts +7 -16
  3. package/dist/a2a/index.js +59 -98
  4. package/dist/adapter-context-mlWsVGGg.js +23 -0
  5. package/dist/ai-sdk/index.d.ts +37 -16
  6. package/dist/ai-sdk/index.js +30 -13
  7. package/dist/approvals/index.d.ts +3 -3
  8. package/dist/approvals/index.js +5 -4
  9. package/dist/{approvals-DaxY-Bdg.js → approvals-DbYAuNkG.js} +17 -11
  10. package/dist/approvers-DT4AVyIg.js +52 -0
  11. package/dist/{arazzo-CTeVuXr5.js → arazzo-BAgw9ap6.js} +2 -2
  12. package/dist/{arazzo-aoTkqYsJ.js → arazzo-cmvX2jDe.js} +2 -2
  13. package/dist/authzen/index.d.ts +4 -13
  14. package/dist/authzen/index.js +16 -50
  15. package/dist/better-auth/index.d.ts +20 -3
  16. package/dist/better-auth/index.js +27 -7
  17. package/dist/better-supabase/index.d.ts +206 -0
  18. package/dist/better-supabase/index.js +620 -0
  19. package/dist/bind-CVy3Espv.d.ts +25 -0
  20. package/dist/bind-VnYn2HKq.js +97 -0
  21. package/dist/boundary-BM8a_P6E.js +13 -0
  22. package/dist/boundary-BmHxVH1J.d.ts +15 -0
  23. package/dist/canonical-json-DemiK4Vp.js +26 -0
  24. package/dist/{capability-B68OFnZx.js → capability-4qPdO9gk.js} +7 -5
  25. package/dist/{capability-BDG_nkxt.d.ts → capability-Dq43tT1u.d.ts} +2 -2
  26. package/dist/catalog/index.d.ts +1 -1
  27. package/dist/catalog/index.js +1 -1
  28. package/dist/catalog-BjZSovXQ.js +2 -0
  29. package/dist/{catalog-doc-BSo_Q_-6.js → catalog-doc-Dsc9y7sd.js} +23 -12
  30. package/dist/{catalog-B0E6bggc.js → catalog-h2tlKFkq.js} +2 -2
  31. package/dist/{catalog-H-vFGwWK.js → catalog-z8q6bi_r.js} +4 -4
  32. package/dist/claude-agent/index.d.ts +5 -14
  33. package/dist/claude-agent/index.js +4 -10
  34. package/dist/clerk/index.d.ts +12 -3
  35. package/dist/clerk/index.js +26 -5
  36. package/dist/cli/bin.js +1 -1
  37. package/dist/cli/index.d.ts +3 -3
  38. package/dist/cli/index.js +2 -2
  39. package/dist/clients-C7zLFuWT.d.ts +12 -0
  40. package/dist/clients-DjU5ABMy.js +23 -0
  41. package/dist/cloud/index.d.ts +4 -5
  42. package/dist/cloud/index.js +20 -6
  43. package/dist/{cloud-BNQTrmrr.js → cloud-BGhHS-lY.js} +2 -2
  44. package/dist/{cloud-Cuxr6Czw.js → cloud-Bo3e9Ak3.js} +7 -6
  45. package/dist/{collect-O-tOtbnk.js → collect-DDDv_ESs.js} +194 -42
  46. package/dist/collect-DLlujdHC.js +83 -0
  47. package/dist/collect-rG2IQ3t0.js +2 -0
  48. package/dist/{commands-BMh_Etm2.js → commands-DWOrSQic.js} +16 -12
  49. package/dist/compile/index.d.ts +3 -0
  50. package/dist/compile/index.js +2 -0
  51. package/dist/{compile-D22iwvuV.js → compile-Ba4blROR.js} +85 -30
  52. package/dist/compile-CNnl6uIt.d.ts +94 -0
  53. package/dist/config-BJiM-xAm.js +157 -0
  54. package/dist/config-Bn00Z3ks.js +36 -0
  55. package/dist/config-report-Dw_JcUqT.js +44 -0
  56. package/dist/{connection-JvqwHODC.js → connection-CU8MQxRi.js} +1 -1
  57. package/dist/{context-CKEAabd7.js → context-Ttp0ekMT.js} +36 -27
  58. package/dist/convex/index.d.ts +9 -4
  59. package/dist/convex/index.js +14 -4
  60. package/dist/create-BWyx3jua.d.ts +245 -0
  61. package/dist/create-CPhDL6qx.js +253 -0
  62. package/dist/{credential-B_rkUNlY.js → credential-8P81ff4u.js} +26 -46
  63. package/dist/delegation-D8pUEuce.js +103 -0
  64. package/dist/{describe-Bt1YD5uS.js → describe-B_gVZEVi.js} +10 -15
  65. package/dist/{describe-DernyItf.d.ts → describe-PdoqESvg.d.ts} +9 -10
  66. package/dist/{diff-x5Il8LVa.js → diff-B8Tunc3o.js} +44 -11
  67. package/dist/{diff-BUzf5Poi.js → diff-CzqLxZ77.js} +2 -2
  68. package/dist/doctor-WpvG6p4k.js +1194 -0
  69. package/dist/doctor-collect-ByfYlNv1.js +664 -0
  70. package/dist/{doctor-Bqo6FwUa.js → doctor-rOr-4ZfS.js} +2 -2
  71. package/dist/drizzle/index.d.ts +4 -3
  72. package/dist/drizzle/index.js +3 -3
  73. package/dist/elysia/index.d.ts +6 -28
  74. package/dist/elysia/index.js +16 -60
  75. package/dist/{errors-DSMnAVNa.js → errors-CWfoNg9N.js} +8 -4
  76. package/dist/{errors-Iy71s7Oj.js → errors-Cz5zn0mW.js} +17 -71
  77. package/dist/{errors-DbZ1YOnb.d.ts → errors-DAqevpNk.d.ts} +8 -21
  78. package/dist/{errors-m3u9TmDu.js → errors-DRnGZHzF.js} +4 -1
  79. package/dist/evaluation-items-CfCCejQd.js +40 -0
  80. package/dist/{evaluations-DsAU9ppl.js → evaluations-tz6D9A2G.js} +28 -46
  81. package/dist/eve/index.d.ts +6 -15
  82. package/dist/eve/index.js +7 -12
  83. package/dist/expiry-BoBJ8Tvc.js +7 -0
  84. package/dist/express/index.d.ts +6 -29
  85. package/dist/express/index.js +28 -58
  86. package/dist/fastify/index.d.ts +6 -29
  87. package/dist/fastify/index.js +16 -65
  88. package/dist/fields-BMl1RxoX.js +26 -0
  89. package/dist/{files-B_wAGYmt.js → files-DWUN9PzI.js} +5 -1
  90. package/dist/{fixtures-Cvaw0gDG.js → fixtures-ht28Cplr.js} +5 -2
  91. package/dist/{freeze-y1_jQL4v.js → freeze-CrU8nQeX.js} +31 -2
  92. package/dist/{from-snapshot-BMGnhmgv.js → from-snapshot-C3sHpZNS.js} +65 -48
  93. package/dist/{grantee-Bv04_Vzf.js → grantee-Cv5Sogfv.js} +88 -7
  94. package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
  95. package/dist/{headers-B5RRv3Xm.js → headers-BZSDieNT.js} +1 -1
  96. package/dist/{headers-C8SHQccD.d.ts → headers-Cf-zWvsO.d.ts} +1 -1
  97. package/dist/helpers-H_KARDVC.js +421 -0
  98. package/dist/hono/index.d.ts +6 -28
  99. package/dist/hono/index.js +11 -43
  100. package/dist/{hosted-BwKQ1BTA.js → hosted-DJQw46hn.js} +6 -5
  101. package/dist/{http-GgVApX1k.js → http-BIhmLfCc.js} +4 -20
  102. package/dist/http-SO7qGttf.js +44 -0
  103. package/dist/ids-DC4V4CFu.js +18 -0
  104. package/dist/{index-LF_hS-yn.d.ts → index-A0YNL8jZ.d.ts} +1 -1
  105. package/dist/index-CtE07CBF.d.ts +6 -0
  106. package/dist/{index-xIxJLwOQ.d.ts → index-D3vbkoSI.d.ts} +75 -7
  107. package/dist/{index-CltcQ4Bf.d.ts → index-D6_cSa1z.d.ts} +68 -5
  108. package/dist/index.d.ts +14 -9
  109. package/dist/index.js +22 -17
  110. package/dist/instance-options-BK_rNOSC.d.ts +11 -0
  111. package/dist/instance-options-Dhhcnm3y.js +22 -0
  112. package/dist/{parse-DPfIvFMU.js → json-schema-BsAflUGW.js} +28 -57
  113. package/dist/jwt/index.d.ts +10 -6
  114. package/dist/jwt/index.js +32 -13
  115. package/dist/kernel-GSQnMz3O.js +208 -0
  116. package/dist/kysely/index.d.ts +4 -3
  117. package/dist/kysely/index.js +3 -3
  118. package/dist/live-options-H2eG8dfJ.js +60 -0
  119. package/dist/{load-BZ24CpZP.js → load-DhWEB9P1.js} +16 -10
  120. package/dist/load-DwJUafYN.js +2 -0
  121. package/dist/manifest-iaoBXHKc.js +783 -0
  122. package/dist/manifest-uDS9y5de.d.ts +206 -0
  123. package/dist/{map-DowSO96j.js → map-AcxK9o_D.js} +4 -15
  124. package/dist/{map-claims-B_6I1Rn-.js → map-claims-Z4QZOiFF.js} +13 -4
  125. package/dist/map-error-pgUWNNtG.js +23 -0
  126. package/dist/may-use-DndQ5tQ-.js +77 -0
  127. package/dist/mcp/index.d.ts +54 -22
  128. package/dist/mcp/index.js +218 -178
  129. package/dist/nest/index.d.ts +26 -31
  130. package/dist/nest/index.js +75 -84
  131. package/dist/next/client.d.ts +7 -8
  132. package/dist/next/client.js +11 -9
  133. package/dist/next/index.d.ts +30 -47
  134. package/dist/next/index.js +45 -60
  135. package/dist/next/plugin.d.ts +1 -1
  136. package/dist/next/plugin.js +32 -1
  137. package/dist/node/index.d.ts +9 -28
  138. package/dist/node/index.js +11 -43
  139. package/dist/openai/index.d.ts +6 -15
  140. package/dist/openai/index.js +7 -20
  141. package/dist/openapi/index.d.ts +87 -4
  142. package/dist/openapi/index.js +3 -3
  143. package/dist/{openapi-CwePaF7C.js → openapi-Bbg4wGVL.js} +3 -3
  144. package/dist/{openapi-DcqM8nU7.js → openapi-BqRBvAng.js} +237 -5
  145. package/dist/{openapi-DWD0Uc_4.js → openapi-CqqEbHsL.js} +5 -5
  146. package/dist/{openapi-import-BWRUNNeW.js → openapi-import-cmwetbzw.js} +1 -1
  147. package/dist/{openapi-schema-D8j_T9tO.js → openapi-schema--ARjyfQr.js} +2 -2
  148. package/dist/orpc/index.d.ts +15 -28
  149. package/dist/orpc/index.js +74 -117
  150. package/dist/otel/index.d.ts +2 -2
  151. package/dist/parse-BuyjxhZV.js +53 -0
  152. package/dist/parse-local-manifest-BkGQNzAh.d.ts +10 -0
  153. package/dist/parse-local-manifest-BrMozJCo.js +36 -0
  154. package/dist/pdp/index.d.ts +2 -2
  155. package/dist/pdp/index.js +14 -127
  156. package/dist/{permdock-yoZ7EjxX.js → permdock-CzqXjCpU.js} +641 -126
  157. package/dist/{permissions-B8vCg_bI.d.ts → permissions-CDgvKG5L.d.ts} +2 -2
  158. package/dist/{permissions-CofRqesP.js → permissions-CpZrivYv.js} +3 -3
  159. package/dist/{permissions-DC7GROPA.js → permissions-DVoF6dMt.js} +77 -15
  160. package/dist/{permissions-B4apnahQ.d.ts → permissions-DttnqqxC.d.ts} +34 -5
  161. package/dist/{pins-CqE1jZuF.js → pins-8ILTftC9.js} +2 -2
  162. package/dist/{policy-CInmNGkM.d.ts → policy-CFZAr_Al.d.ts} +330 -37
  163. package/dist/{policy-Cq2fB8Q5.d.ts → policy-D8UFyERw.d.ts} +2 -2
  164. package/dist/{policy-ANp36PnI.js → policy-xyWg7QdR.js} +173 -22
  165. package/dist/powersync-A8x_Yyvh.js +2 -0
  166. package/dist/powersync-C7kLglqX.js +540 -0
  167. package/dist/powersync-yW1UUFzp.js +62 -0
  168. package/dist/prisma/index.d.ts +3 -2
  169. package/dist/prisma/index.js +45 -20
  170. package/dist/{problem-Cgp9-KZA.js → problem-B43ztKIm.js} +74 -109
  171. package/dist/problem-details-CkL50EEf.d.ts +7 -0
  172. package/dist/problem-details-_AMOYz-w.js +144 -0
  173. package/dist/{protected-BuPAycJT.d.ts → protected-CNsMzrVd.d.ts} +5 -4
  174. package/dist/protected-Cs6kTaHo.js +100 -0
  175. package/dist/protected-bZs6rbT1.d.ts +40 -0
  176. package/dist/{provider-wTAUda2v.d.ts → provider-Cjr62YMV.d.ts} +1 -1
  177. package/dist/provider-DLzpb2Xz.js +52 -0
  178. package/dist/provider-store-DNyC1y48.js +43 -0
  179. package/dist/react/index.d.ts +7 -5
  180. package/dist/react/index.js +5 -4
  181. package/dist/react/provider-client.d.ts +1 -1
  182. package/dist/react/provider-client.js +1 -1
  183. package/dist/react-native/index.d.ts +166 -10
  184. package/dist/react-native/index.js +607 -85
  185. package/dist/{refs-ChLSxbST.js → refs-KYb4ntaz.js} +4 -3
  186. package/dist/{relations-r4soIFZB.js → relations-cjOL01hZ.js} +110 -31
  187. package/dist/replay-BsOyTrdV.js +28 -0
  188. package/dist/replay-sqBGMnNs.d.ts +5 -0
  189. package/dist/resource-ref-CaS9yVPi.js +20 -0
  190. package/dist/revocations-Bhr0aMIC.js +27 -0
  191. package/dist/rls-BMNydpHk.js +2521 -0
  192. package/dist/{rls-BOFU3chG.js → rls-CEvs64Kj.js} +8 -3
  193. package/dist/rls-fields-BMasREhR.js +3502 -0
  194. package/dist/{rls-graph-DxQ39PJj.js → rls-graph-pc9fuXYm.js} +100 -36
  195. package/dist/{rls-import-CXV6LBlS.js → rls-import-D8F7j35Q.js} +7 -6
  196. package/dist/{rls-migrate-DrFPbf8p.js → rls-migrate-7wikfrVI.js} +6 -5
  197. package/dist/rls-ownership-B5Lkq62W.js +843 -0
  198. package/dist/rls-shared-aOQ4hGTO.js +493 -0
  199. package/dist/rls-verify-D8B7dOTh.js +745 -0
  200. package/dist/{row-check-BajTgQZ-.d.ts → row-check-Dt35czLy.d.ts} +12 -15
  201. package/dist/rpc-DOK54_CS.js +89 -0
  202. package/dist/{run-CJ6UvS3a.js → run-YXCJDNYk.js} +31 -12
  203. package/dist/runtime-CB8gQFvS.js +11 -0
  204. package/dist/{saas-BRrZzJkM.js → saas-Bj_FFkjN.js} +17 -7
  205. package/dist/{schema-P8yoma__.js → schema-D3MnDMxa.js} +8 -4
  206. package/dist/scim/index.d.ts +1 -1
  207. package/dist/scim/index.js +1 -1
  208. package/dist/{scim-9NFa0XVZ.js → scim-BFGBBAqR.js} +1 -1
  209. package/dist/{scopes-cKVp_WTw.js → scopes-CVdPrWN-.js} +35 -8
  210. package/dist/server/index.d.ts +22 -11
  211. package/dist/server/index.js +11 -8
  212. package/dist/{credentials-BgRX3WEg.js → server-DlZ28Oz5.js} +1 -1
  213. package/dist/shared-DRu8VFVM.js +123 -0
  214. package/dist/{sink-Cfr9-7YC.d.ts → sink-Gs6TTVa-.d.ts} +1 -1
  215. package/dist/skills-Biq5uup3.js +192 -0
  216. package/dist/{skills-C_lpV4Jx.js → skills-JaymNCdK.js} +10 -4
  217. package/dist/{snapshot-DE8dE_hz.js → snapshot-Enxd0n-s.js} +138 -214
  218. package/dist/snapshot-cache-D6jLelln.js +44 -0
  219. package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
  220. package/dist/solid/index.d.ts +39 -9
  221. package/dist/solid/index.js +76 -85
  222. package/dist/sources-B0UvrJ21.js +534 -0
  223. package/dist/sources-BcJgw0lt.d.ts +192 -0
  224. package/dist/{sql-Bll1d7y0.js → sql-xdg5f4Fi.js} +6 -1
  225. package/dist/{src-CTNT-PBW.js → src-CSbUiozF.js} +149 -11
  226. package/dist/ssf/index.d.ts +3 -2
  227. package/dist/ssf/index.js +3 -29
  228. package/dist/store-DMAWwAJV.js +371 -0
  229. package/dist/{store-Bq90395i.d.ts → store-D_pjn91-.d.ts} +13 -4
  230. package/dist/store-options-yO0V6gRn.js +716 -0
  231. package/dist/{stores-CkG2HrSg.js → stores-4_sqiOA1.js} +10 -63
  232. package/dist/{stores-CvOnu_2T.d.ts → stores-DVR5NHLE.d.ts} +20 -9
  233. package/dist/{stream-Q_xlB6Ko.js → stream-DDpvynSB.js} +16 -2
  234. package/dist/{stream-BhMfZOwr.d.ts → stream-DlvG2hs-.d.ts} +2 -2
  235. package/dist/subject-settings-BwBmCdTR.js +128 -0
  236. package/dist/supabase/index.d.ts +122 -6
  237. package/dist/supabase/index.js +4 -3
  238. package/dist/supabase/middleware.d.ts +32 -27
  239. package/dist/supabase/middleware.js +56 -22
  240. package/dist/{supabase-D8UlBA7Z.js → supabase-CwafwxxF.js} +3 -3
  241. package/dist/{supabase-DTxGtYdi.js → supabase-DTBaC20O.js} +345 -367
  242. package/dist/supabase-config-Bs44dare.js +472 -0
  243. package/dist/{supabase-hook-D_OqGb_V.js → supabase-hook-BuxLQLpU.js} +994 -708
  244. package/dist/supabase-hook-D5qVd_D8.js +2 -0
  245. package/dist/supautils-DYZnzRWV.js +91 -0
  246. package/dist/svelte/PermissionBoundary.svelte +37 -0
  247. package/dist/svelte/Protected.svelte +8 -2
  248. package/dist/svelte/index.d.ts +9 -6
  249. package/dist/svelte/index.js +61 -7
  250. package/dist/svelte/runtime.d.ts +4 -3
  251. package/dist/svelte/runtime.js +4 -3
  252. package/dist/svelte/source.d.ts +9 -6
  253. package/dist/svelte/source.js +7 -4
  254. package/dist/terminal/index.d.ts +6 -14
  255. package/dist/terminal/index.js +44 -32
  256. package/dist/testing/index.d.ts +105 -16
  257. package/dist/testing/index.js +504 -40
  258. package/dist/testing/saas/index.d.ts +4 -4
  259. package/dist/testing/saas/index.js +2 -2
  260. package/dist/testing/saas/permissions.d.ts +1 -1
  261. package/dist/testing/saas/permissions.js +1 -1
  262. package/dist/token-CIWxJOCh.js +50 -0
  263. package/dist/trpc/index.d.ts +7 -26
  264. package/dist/trpc/index.js +17 -100
  265. package/dist/types-9AWO9EGt.d.ts +197 -0
  266. package/dist/{types-D6Z6-rKJ.d.ts → types-BPxgszlT.d.ts} +260 -22
  267. package/dist/{types-BvBk1wgn.d.ts → types-BVyImy5I.d.ts} +5 -3
  268. package/dist/{types-CxquUByI.d.ts → types-Bvc4oWT6.d.ts} +1 -1
  269. package/dist/types-C3s9xVJG.d.ts +48 -0
  270. package/dist/{types-BBK-exvJ.d.ts → types-Dnemwd77.d.ts} +7 -1
  271. package/dist/types-kxznc7cn.d.ts +52 -0
  272. package/dist/{types-B8w5PFtS.d.ts → types-vKyAMtcX.d.ts} +17 -1
  273. package/dist/{types-B9dmiiab.d.ts → types-vNSDF7Dq.d.ts} +1 -1
  274. package/dist/{sources-DOpW5Ila.d.ts → types-yF5LmQVD.d.ts} +86 -127
  275. package/dist/unplugin/index.d.ts +1 -1
  276. package/dist/unplugin/index.js +10 -9
  277. package/dist/{usage-1ozMubLY.js → usage-D07N9QJ3.js} +2 -2
  278. package/dist/usage-D82l1CwK.js +2 -0
  279. package/dist/{usage-CUnK6Ou9.js → usage-DG1oeCca.js} +225 -62
  280. package/dist/validation-error-CnjZ4t92.js +33 -0
  281. package/dist/validation-error-CtF23SrC.d.ts +26 -0
  282. package/dist/{validity-D0uRmJKJ.js → validity-uOp8UpYn.js} +57 -36
  283. package/dist/{verifier-B90agnhl.js → verifier-BxBo6I44.js} +10 -5
  284. package/dist/version-BvacVTZR.js +17 -0
  285. package/dist/views-Soe7bGSC.js +95 -0
  286. package/dist/{vocabulary-Dk0fs-Jk.d.ts → vocabulary-DA8a8zif.d.ts} +1 -1
  287. package/dist/vue/index.d.ts +35 -13
  288. package/dist/vue/index.js +86 -93
  289. package/dist/watch-Etoa_Mvr.js +2 -0
  290. package/dist/watch-UihESpsJ.js +128 -0
  291. package/dist/webmcp/index.d.ts +2 -2
  292. package/dist/webmcp/index.js +7 -13
  293. package/package.json +62 -36
  294. package/schemas/approval-request-v1.json +175 -0
  295. package/schemas/catalog-v1.json +29 -1
  296. package/schemas/supabase-claims-v1.json +6 -1
  297. package/schemas/supabase-manifest-v1.json +150 -6
  298. package/skills/permdock/SKILL.md +7 -7
  299. package/skills/permdock-agents/SKILL.md +5 -5
  300. package/skills/permdock-agents/references/runtimes.md +12 -10
  301. package/skills/permdock-approvals/SKILL.md +4 -4
  302. package/skills/permdock-approvals/references/stores-and-resume.md +15 -4
  303. package/skills/permdock-audit/SKILL.md +3 -3
  304. package/skills/permdock-credentials/SKILL.md +4 -4
  305. package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
  306. package/skills/permdock-data/SKILL.md +4 -4
  307. package/skills/permdock-data/references/queries-and-rls.md +14 -6
  308. package/skills/permdock-data/references/relationships.md +5 -3
  309. package/skills/permdock-tenancy/SKILL.md +9 -6
  310. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +14 -8
  311. package/skills/permdock-wire/SKILL.md +4 -4
  312. package/skills/permdock-wire/references/adapters.md +42 -30
  313. package/skills/permdock-wire/references/policy-options.md +5 -3
  314. package/dist/approvers-aH0PJkmf.js +0 -20
  315. package/dist/catalog-idsHc0vo.js +0 -2
  316. package/dist/collect-B7_TIfmg.js +0 -49
  317. package/dist/collect-fRPAQIWb.js +0 -2
  318. package/dist/compile-CQbvyIBr.d.ts +0 -30
  319. package/dist/config-BPYmjTOp.js +0 -26
  320. package/dist/context-gtAwAILx.js +0 -6
  321. package/dist/create-BKF3dgFk.d.ts +0 -162
  322. package/dist/create-CSkhDU9T.js +0 -222
  323. package/dist/doctor-BGle8Gqi.js +0 -1314
  324. package/dist/helpers-DnSOrhB9.js +0 -682
  325. package/dist/index-fG6NSXlc.d.ts +0 -9
  326. package/dist/kernel-YOGCWNLf.js +0 -211
  327. package/dist/load-QOOm1z70.js +0 -2
  328. package/dist/manifest-DDQbC6K0.d.ts +0 -118
  329. package/dist/map-error-RJ3ZsUyA.js +0 -16
  330. package/dist/may-use-CnFEjVEp.js +0 -37
  331. package/dist/pg-4GJWDUxG.js +0 -953
  332. package/dist/plugin-4gr7IxFJ.js +0 -65
  333. package/dist/protected-B4K3BKoX.js +0 -138
  334. package/dist/protected-wY7nXhY9.d.ts +0 -23
  335. package/dist/provider-_wx46HpB.js +0 -48
  336. package/dist/rls-CJVja9Ww.js +0 -2119
  337. package/dist/rls-helpers-BxRuif0l.js +0 -1346
  338. package/dist/runtime-DP9ttFh1.js +0 -27
  339. package/dist/skills-Dx3QLnMY.js +0 -110
  340. package/dist/source-DoBBYJi2.js +0 -6
  341. package/dist/sources-DVHM3Mwq.js +0 -284
  342. package/dist/store-C6hFW6ta.js +0 -508
  343. package/dist/subject-settings-xt7V845g.js +0 -82
  344. package/dist/supabase-hook-DW-xP4hU.js +0 -2
  345. package/dist/types-DbWdEfcm.d.ts +0 -87
  346. package/dist/types-bva3i4Gf.d.ts +0 -98
  347. package/dist/types-i4BAOvdb.d.ts +0 -97
  348. package/dist/usage-PyEor6GA.js +0 -2
  349. package/dist/version-CnSh33Fj.js +0 -16
@@ -1,12 +1,10 @@
1
- import { $ as DecisionSink, C as Policy, Zt as PermDock, at as LimitStore, ct as MembershipSource, ft as RelationSource, mr as Principal, pt as RoleSource, sn as PolicySource, tt as EntitlementSource, xt as SnapshotSource } from "../policy-CInmNGkM.js";
2
- import { d as Permission } from "../permissions-B4apnahQ.js";
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 { o as OtelWrap } from "../types-B9dmiiab.js";
6
- import { r as PdpFactory } from "../types-BvBk1wgn.js";
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
- type NestProtect = (permission: Permission, loadData?: (req: NestRequest) => unknown, protectOptions?: ProtectOptions) => ClassDecorator & MethodDecorator;
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
- export { InvalidSignatureError, type NestHandlerOptions, type NestPermDock, type NestPermDockOptions, type NestProtect, type NestRequest, type NestSocket, discoverViaSignatureAgent, sendResponse, verifyWebBotAuth };
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 };
@@ -1,12 +1,28 @@
1
1
  import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { i as PermDockValidationError, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-Iy71s7Oj.js";
3
- import { i as discoverViaSignatureAgent, r as InvalidSignatureError, s as verifyWebBotAuth } from "../evaluations-DsAU9ppl.js";
4
- import { r as tenantScope, t as createKernel } from "../create-CSkhDU9T.js";
5
- import { t as problemFromError } from "../map-error-RJ3ZsUyA.js";
6
- import { i as onRevoked, t as POLICY_VIOLATION } from "../stream-Q_xlB6Ko.js";
7
- import { i as toRequest$1, n as isServerResponse, r as sendResponse } from "../http-GgVApX1k.js";
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 contexts = /* @__PURE__ */ new WeakMap();
88
- const bound = /* @__PURE__ */ new WeakMap();
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 loader = rule.loadData;
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 hit = sockets.get(client);
130
- if (hit !== void 0) return hit;
131
- const opened = (async () => {
132
- const conn = await kernel.connection(bind(req), connectionOptions, await scopeOf(req));
133
- onRevoked(conn, (problem) => {
134
- client.emit?.("permdock:error", problem);
135
- if (typeof client.disconnect === "function") client.disconnect(true);
136
- else client.close?.(POLICY_VIOLATION, problem.type);
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
- const loader = rule.loadData;
147
- let data;
148
- if (loader !== void 0) {
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 adapter = "nest";
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((request) => {
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
- const request = toRequest(req);
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
- applyMethod(EvaluationsController, "post", Post());
251
- applyMethod(EvaluationsController, "get", Get());
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 };
@@ -1,15 +1,13 @@
1
- import { t as PermDockDigest } from "../digest-B3kc_PgQ.js";
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
- export type PermissionBoundaryState = PermDockDigest & {
5
- /** Re-fetches and re-renders the boundary's children, e.g. after an approval or a role change. */
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?: ReactNode;
8
+ readonly denied?: PermissionBoundaryFallback;
11
9
  /** Rendered when a child throws `PermDockApprovalRequiredError`; defaults to `denied`. */
12
- readonly approval?: ReactNode;
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 };
@@ -1,20 +1,22 @@
1
1
  "use client";
2
- import { r as parsePermDockDigest } from "../digest-BI-6aa6d.js";
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 { catchError } from "next/error";
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 = parsePermDockDigest(info.error.digest);
10
+ const parsed = boundaryDigest(info.error);
10
11
  if (parsed === null) throw info.error;
11
- const node = parsed.outcome === "approval-required" ? props.approval ?? props.denied : props.denied;
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
- ...parsed,
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
  /**
@@ -1,47 +1,17 @@
1
- import { $ as DecisionSink, C as Policy, E as PolicyVocabulary, Mn as Decision, Zt as PermDock, at as LimitStore, ct as MembershipSource, ft as RelationSource, mr as Principal, pt as RoleSource, sn as PolicySource, tt as EntitlementSource, xt as SnapshotSource } from "../policy-CInmNGkM.js";
2
- import { d as Permission } from "../permissions-B4apnahQ.js";
3
- import { f as ApprovalStore } from "../types-B8w5PFtS.js";
4
- import { o as OtelWrap } from "../types-B9dmiiab.js";
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
- readonly getPermission: (permission: Permission, data?: unknown) => Promise<ServerPermissionState>;
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
- //#region src/next/snapshot-tag.d.ts
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 };