permdock 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) 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-CKwwqFWz.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 +223 -0
  18. package/dist/better-supabase/index.js +648 -0
  19. package/dist/bind-C_ob3LKa.d.ts +25 -0
  20. package/dist/bind-CuzGytRf.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-BDG_nkxt.d.ts → capability-2kYTMWDv.d.ts} +2 -2
  25. package/dist/{capability-B68OFnZx.js → capability-4qPdO9gk.js} +7 -5
  26. package/dist/catalog/index.d.ts +1 -1
  27. package/dist/catalog/index.js +1 -1
  28. package/dist/catalog-CRW5Mx_B.js +2 -0
  29. package/dist/{catalog-H-vFGwWK.js → catalog-DWF5cYqB.js} +4 -4
  30. package/dist/{catalog-B0E6bggc.js → catalog-dFZdWCGN.js} +2 -2
  31. package/dist/{catalog-doc-BSo_Q_-6.js → catalog-doc-DdGm82XT.js} +20 -32
  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-CB_ELYuX.js} +2 -2
  44. package/dist/{cloud-Cuxr6Czw.js → cloud-DWLXO2af.js} +7 -6
  45. package/dist/collect-DClJsheJ.js +83 -0
  46. package/dist/{collect-O-tOtbnk.js → collect-DSTE3ml9.js} +194 -42
  47. package/dist/collect-DSWOk19R.js +2 -0
  48. package/dist/{commands-BMh_Etm2.js → commands-DSxCqG9A.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-BkRyBDBw.d.ts +94 -0
  53. package/dist/config-BJiM-xAm.js +157 -0
  54. package/dist/config-Dnszbv-6.js +36 -0
  55. package/dist/config-report-DMvWKUxL.js +44 -0
  56. package/dist/{connection-JvqwHODC.js → connection-CU8MQxRi.js} +1 -1
  57. package/dist/{context-CKEAabd7.js → context-Bcy85rGi.js} +36 -27
  58. package/dist/convex/index.d.ts +9 -4
  59. package/dist/convex/index.js +14 -4
  60. package/dist/create-B1d519XK.d.ts +245 -0
  61. package/dist/create-CMwIl-w2.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-DMYiCjJV.d.ts} +9 -10
  66. package/dist/{diff-x5Il8LVa.js → diff-2VaeChzX.js} +44 -11
  67. package/dist/{diff-BUzf5Poi.js → diff-DBIhz_f2.js} +2 -2
  68. package/dist/{doctor-Bqo6FwUa.js → doctor-BwCAMLx_.js} +2 -2
  69. package/dist/doctor-collect-CHk6XWOA.js +665 -0
  70. package/dist/doctor-igIiM_Hl.js +1194 -0
  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-DPdqI50v.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-CTLijvdm.js} +66 -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-0nNqHspG.d.ts +6 -0
  105. package/dist/{index-xIxJLwOQ.d.ts → index-BNc7Wer_.d.ts} +75 -7
  106. package/dist/{index-CltcQ4Bf.d.ts → index-C7Tw7MaW.d.ts} +68 -5
  107. package/dist/{index-LF_hS-yn.d.ts → index-C8z4RjQV.d.ts} +1 -1
  108. package/dist/index.d.ts +14 -9
  109. package/dist/index.js +22 -17
  110. package/dist/instance-options-Dhhcnm3y.js +22 -0
  111. package/dist/instance-options-jARdwfPN.d.ts +11 -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-_RRHmnMY.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-DcqM8nU7.js → openapi-BqRBvAng.js} +237 -5
  144. package/dist/{openapi-DWD0Uc_4.js → openapi-CqqEbHsL.js} +5 -5
  145. package/dist/{openapi-import-BWRUNNeW.js → openapi-import-cmwetbzw.js} +1 -1
  146. package/dist/{openapi-CwePaF7C.js → openapi-l0xYHkcv.js} +3 -3
  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-BrMozJCo.js +36 -0
  153. package/dist/parse-local-manifest-JLnaBH0S.d.ts +10 -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-CbgvLnuo.js} +672 -149
  157. package/dist/{permissions-B8vCg_bI.d.ts → permissions-CDgvKG5L.d.ts} +2 -2
  158. package/dist/{permissions-DC7GROPA.js → permissions-DVoF6dMt.js} +77 -15
  159. package/dist/{permissions-B4apnahQ.d.ts → permissions-DttnqqxC.d.ts} +34 -5
  160. package/dist/{permissions-CofRqesP.js → permissions-RJrovw98.js} +3 -3
  161. package/dist/{pins-CqE1jZuF.js → pins-8ILTftC9.js} +2 -2
  162. package/dist/{policy-Cq2fB8Q5.d.ts → policy-D2W7uv19.d.ts} +2 -2
  163. package/dist/{policy-CInmNGkM.d.ts → policy-IB6yxpC3.d.ts} +351 -42
  164. package/dist/{policy-ANp36PnI.js → policy-xyWg7QdR.js} +173 -22
  165. package/dist/powersync-BylawD_U.js +540 -0
  166. package/dist/powersync-DliZK_-y.js +62 -0
  167. package/dist/powersync-e_AZrKbg.js +2 -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-DX075l9V.d.ts +7 -0
  172. package/dist/problem-details-_AMOYz-w.js +144 -0
  173. package/dist/{protected-BuPAycJT.d.ts → protected-BdnIEFkY.d.ts} +5 -4
  174. package/dist/protected-utU-SLuy.js +100 -0
  175. package/dist/protected-xAr24FEC.d.ts +40 -0
  176. package/dist/provider-CSQd7m92.js +52 -0
  177. package/dist/{provider-wTAUda2v.d.ts → provider-DZY281jO.d.ts} +1 -1
  178. package/dist/provider-store-Cfbvo4DE.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-CYyiLiwO.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-BOFU3chG.js → rls-B4ur8nKQ.js} +8 -3
  192. package/dist/rls-DQtdgTHB.js +2521 -0
  193. package/dist/rls-fields-74oZPXWL.js +3582 -0
  194. package/dist/{rls-graph-DxQ39PJj.js → rls-graph-CHwx0V8q.js} +100 -36
  195. package/dist/{rls-import-CXV6LBlS.js → rls-import-BTFVk3jH.js} +7 -6
  196. package/dist/{rls-migrate-DrFPbf8p.js → rls-migrate-CN4TlJTO.js} +6 -5
  197. package/dist/rls-ownership-RuFqaqGz.js +843 -0
  198. package/dist/rls-shared-Cewd_-zI.js +495 -0
  199. package/dist/rls-verify-CVQTHTh5.js +746 -0
  200. package/dist/{row-check-BajTgQZ-.d.ts → row-check-Dt35czLy.d.ts} +12 -15
  201. package/dist/row-conditions-h2HythXQ.js +27 -0
  202. package/dist/rpc-DL9Sqvb1.js +89 -0
  203. package/dist/{run-CJ6UvS3a.js → run-DKDbM4Du.js} +31 -12
  204. package/dist/runtime-CB8gQFvS.js +11 -0
  205. package/dist/{saas-BRrZzJkM.js → saas-DhpJjnBA.js} +17 -7
  206. package/dist/{schema-P8yoma__.js → schema-D3MnDMxa.js} +8 -4
  207. package/dist/scim/index.d.ts +1 -1
  208. package/dist/scim/index.js +1 -1
  209. package/dist/{scim-9NFa0XVZ.js → scim-BFGBBAqR.js} +1 -1
  210. package/dist/{scopes-cKVp_WTw.js → scopes-CVdPrWN-.js} +35 -8
  211. package/dist/server/index.d.ts +22 -11
  212. package/dist/server/index.js +11 -8
  213. package/dist/{credentials-BgRX3WEg.js → server-DlZ28Oz5.js} +1 -1
  214. package/dist/shared-DRu8VFVM.js +123 -0
  215. package/dist/{sink-Cfr9-7YC.d.ts → sink-B1fZzIMf.d.ts} +1 -1
  216. package/dist/skills-Biq5uup3.js +192 -0
  217. package/dist/{skills-C_lpV4Jx.js → skills-Bx-U0irG.js} +10 -4
  218. package/dist/{snapshot-DE8dE_hz.js → snapshot-Enxd0n-s.js} +138 -214
  219. package/dist/snapshot-cache-B-LxUahj.d.ts +45 -0
  220. package/dist/snapshot-cache-D6jLelln.js +44 -0
  221. package/dist/solid/index.d.ts +39 -9
  222. package/dist/solid/index.js +76 -85
  223. package/dist/sources-4p0-4xQm.js +545 -0
  224. package/dist/sources-BdOYLw9j.d.ts +192 -0
  225. package/dist/{sql-Bll1d7y0.js → sql-xdg5f4Fi.js} +6 -1
  226. package/dist/{src-CTNT-PBW.js → src-BDwEZWrZ.js} +149 -11
  227. package/dist/ssf/index.d.ts +3 -2
  228. package/dist/ssf/index.js +3 -29
  229. package/dist/store-DMAWwAJV.js +371 -0
  230. package/dist/{store-Bq90395i.d.ts → store-jOBYpiXC.d.ts} +13 -4
  231. package/dist/store-options-ByhZq1jV.js +716 -0
  232. package/dist/{stores-CkG2HrSg.js → stores-BT2pSCub.js} +10 -63
  233. package/dist/{stores-CvOnu_2T.d.ts → stores-C0IMQrGI.d.ts} +20 -9
  234. package/dist/{stream-BhMfZOwr.d.ts → stream-D1RXubw2.d.ts} +2 -2
  235. package/dist/{stream-Q_xlB6Ko.js → stream-DDpvynSB.js} +16 -2
  236. package/dist/subject-settings-BwBmCdTR.js +128 -0
  237. package/dist/supabase/index.d.ts +133 -6
  238. package/dist/supabase/index.js +4 -3
  239. package/dist/supabase/middleware.d.ts +32 -27
  240. package/dist/supabase/middleware.js +56 -22
  241. package/dist/{supabase-D8UlBA7Z.js → supabase-Boqb9a_Y.js} +3 -3
  242. package/dist/{supabase-DTxGtYdi.js → supabase-C0qESOa-.js} +347 -367
  243. package/dist/supabase-config-BpPXt3x1.js +472 -0
  244. package/dist/supabase-hook-6sYLXg_u.js +2 -0
  245. package/dist/{supabase-hook-D_OqGb_V.js → supabase-hook-CSLQ4zJ3.js} +1037 -705
  246. package/dist/supautils-Cn4R4cJ4.js +91 -0
  247. package/dist/svelte/PermissionBoundary.svelte +37 -0
  248. package/dist/svelte/Protected.svelte +8 -2
  249. package/dist/svelte/index.d.ts +9 -6
  250. package/dist/svelte/index.js +61 -7
  251. package/dist/svelte/runtime.d.ts +4 -3
  252. package/dist/svelte/runtime.js +4 -3
  253. package/dist/svelte/source.d.ts +9 -6
  254. package/dist/svelte/source.js +7 -4
  255. package/dist/terminal/index.d.ts +6 -14
  256. package/dist/terminal/index.js +44 -32
  257. package/dist/testing/index.d.ts +105 -16
  258. package/dist/testing/index.js +504 -40
  259. package/dist/testing/saas/index.d.ts +4 -4
  260. package/dist/testing/saas/index.js +2 -2
  261. package/dist/testing/saas/permissions.d.ts +1 -1
  262. package/dist/testing/saas/permissions.js +1 -1
  263. package/dist/token-CIWxJOCh.js +50 -0
  264. package/dist/trpc/index.d.ts +7 -26
  265. package/dist/trpc/index.js +17 -100
  266. package/dist/types-BnIEz1sU.d.ts +48 -0
  267. package/dist/{types-CxquUByI.d.ts → types-Bvc4oWT6.d.ts} +1 -1
  268. package/dist/{sources-DOpW5Ila.d.ts → types-C97IskBw.d.ts} +86 -127
  269. package/dist/types-CKNSyIf_.d.ts +52 -0
  270. package/dist/types-Cq_H8N_X.d.ts +197 -0
  271. package/dist/{types-D6Z6-rKJ.d.ts → types-DbjRN55U.d.ts} +273 -22
  272. package/dist/{types-BBK-exvJ.d.ts → types-Dnemwd77.d.ts} +7 -1
  273. package/dist/{types-BvBk1wgn.d.ts → types-DxiCGmmd.d.ts} +5 -3
  274. package/dist/{types-B9dmiiab.d.ts → types-QCuYJh4q.d.ts} +1 -1
  275. package/dist/{types-B8w5PFtS.d.ts → types-aqOHTHcp.d.ts} +17 -1
  276. package/dist/unplugin/index.d.ts +1 -1
  277. package/dist/unplugin/index.js +10 -9
  278. package/dist/usage-DorAJiU_.js +2 -0
  279. package/dist/{usage-1ozMubLY.js → usage-GTixvDDU.js} +2 -2
  280. package/dist/{usage-CUnK6Ou9.js → usage-ItS7nLcl.js} +225 -62
  281. package/dist/validation-error-Ba264OaJ.d.ts +26 -0
  282. package/dist/validation-error-CnjZ4t92.js +33 -0
  283. package/dist/{validity-D0uRmJKJ.js → validity-uOp8UpYn.js} +57 -36
  284. package/dist/{verifier-B90agnhl.js → verifier-BxBo6I44.js} +10 -5
  285. package/dist/version-BvacVTZR.js +17 -0
  286. package/dist/views-Soe7bGSC.js +95 -0
  287. package/dist/{vocabulary-Dk0fs-Jk.d.ts → vocabulary-DA8a8zif.d.ts} +1 -1
  288. package/dist/vue/index.d.ts +35 -13
  289. package/dist/vue/index.js +86 -93
  290. package/dist/watch-BwxLTYMZ.js +2 -0
  291. package/dist/watch-DVBJ9cBq.js +128 -0
  292. package/dist/webmcp/index.d.ts +2 -2
  293. package/dist/webmcp/index.js +7 -13
  294. package/package.json +62 -36
  295. package/schemas/approval-request-v1.json +175 -0
  296. package/schemas/catalog-v1.json +29 -1
  297. package/schemas/supabase-claims-v1.json +6 -1
  298. package/schemas/supabase-manifest-v1.json +150 -6
  299. package/skills/permdock/SKILL.md +7 -7
  300. package/skills/permdock-agents/SKILL.md +5 -5
  301. package/skills/permdock-agents/references/runtimes.md +12 -10
  302. package/skills/permdock-approvals/SKILL.md +4 -4
  303. package/skills/permdock-approvals/references/stores-and-resume.md +15 -4
  304. package/skills/permdock-audit/SKILL.md +3 -3
  305. package/skills/permdock-credentials/SKILL.md +4 -4
  306. package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
  307. package/skills/permdock-data/SKILL.md +4 -4
  308. package/skills/permdock-data/references/queries-and-rls.md +14 -6
  309. package/skills/permdock-data/references/relationships.md +5 -3
  310. package/skills/permdock-tenancy/SKILL.md +9 -6
  311. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +14 -8
  312. package/skills/permdock-wire/SKILL.md +4 -4
  313. package/skills/permdock-wire/references/adapters.md +42 -30
  314. package/skills/permdock-wire/references/policy-options.md +5 -3
  315. package/dist/approvers-aH0PJkmf.js +0 -20
  316. package/dist/catalog-idsHc0vo.js +0 -2
  317. package/dist/collect-B7_TIfmg.js +0 -49
  318. package/dist/collect-fRPAQIWb.js +0 -2
  319. package/dist/compile-CQbvyIBr.d.ts +0 -30
  320. package/dist/config-BPYmjTOp.js +0 -26
  321. package/dist/context-gtAwAILx.js +0 -6
  322. package/dist/create-BKF3dgFk.d.ts +0 -162
  323. package/dist/create-CSkhDU9T.js +0 -222
  324. package/dist/doctor-BGle8Gqi.js +0 -1314
  325. package/dist/helpers-DnSOrhB9.js +0 -682
  326. package/dist/index-fG6NSXlc.d.ts +0 -9
  327. package/dist/kernel-YOGCWNLf.js +0 -211
  328. package/dist/load-QOOm1z70.js +0 -2
  329. package/dist/manifest-DDQbC6K0.d.ts +0 -118
  330. package/dist/map-error-RJ3ZsUyA.js +0 -16
  331. package/dist/may-use-CnFEjVEp.js +0 -37
  332. package/dist/pg-4GJWDUxG.js +0 -953
  333. package/dist/plugin-4gr7IxFJ.js +0 -65
  334. package/dist/protected-B4K3BKoX.js +0 -138
  335. package/dist/protected-wY7nXhY9.d.ts +0 -23
  336. package/dist/provider-_wx46HpB.js +0 -48
  337. package/dist/rls-CJVja9Ww.js +0 -2119
  338. package/dist/rls-helpers-BxRuif0l.js +0 -1346
  339. package/dist/runtime-DP9ttFh1.js +0 -27
  340. package/dist/skills-Dx3QLnMY.js +0 -110
  341. package/dist/source-DoBBYJi2.js +0 -6
  342. package/dist/sources-DVHM3Mwq.js +0 -284
  343. package/dist/store-C6hFW6ta.js +0 -508
  344. package/dist/subject-settings-xt7V845g.js +0 -82
  345. package/dist/supabase-hook-DW-xP4hU.js +0 -2
  346. package/dist/types-DbWdEfcm.d.ts +0 -87
  347. package/dist/types-bva3i4Gf.d.ts +0 -98
  348. package/dist/types-i4BAOvdb.d.ts +0 -97
  349. package/dist/usage-PyEor6GA.js +0 -2
  350. package/dist/version-CnSh33Fj.js +0 -16
@@ -0,0 +1,192 @@
1
+ import { gt as MembershipSource } from "./policy-IB6yxpC3.js";
2
+ import { n as RoleThrough, y as SupabaseSuspension } from "./types-C97IskBw.js";
3
+ import { o as SupabaseManifestMembership } from "./manifest-uDS9y5de.js";
4
+ //#region src/supabase/roles.d.ts
5
+ /** A roles table a role column references, by `schema.table`. */
6
+ type RoleKeys = {
7
+ readonly table: string;
8
+ /** The roles table column the reference points at. */
9
+ readonly id: string;
10
+ /** The roles table column holding the role key. */
11
+ readonly key: string;
12
+ /** The referencing table's column. */
13
+ readonly ref: string;
14
+ };
15
+ //#endregion
16
+ //#region src/supabase/sources.d.ts
17
+ /**
18
+ * Runs one parameterised statement: `pg`'s `client.query` (which resolves
19
+ * `{ rows }`) and `postgres`'s `sql.unsafe` (which resolves the rows) both fit.
20
+ */
21
+ type SqlQuery = (text: string, values: readonly unknown[]) => Promise<readonly Record<string, unknown>[] | {
22
+ readonly rows: readonly Record<string, unknown>[];
23
+ }>;
24
+ type Common = {
25
+ readonly table: string;
26
+ /** Runs the lookups; without it the source only describes SQL (for `permdock supabase hook generate`). */
27
+ readonly query?: SqlQuery;
28
+ /** Drop suspended users and memberships under suspended instances, like `rls.suspension`. */
29
+ readonly suspension?: SupabaseSuspension;
30
+ };
31
+ type MembershipTableOptions = Common & {
32
+ /** Column names; `user`, `scope`, `id` and `role` default to `user_id`, `scope`, `scope_id`, `role`. */
33
+ readonly columns?: {
34
+ /** The user id column, or a reference to a table that holds the user id. */
35
+ readonly user?: string | RoleThrough;
36
+ readonly scope?: string;
37
+ readonly id?: string;
38
+ /** A `jsonb` column of ancestor ids keyed by scope name. */
39
+ readonly within?: string;
40
+ /**
41
+ * The role key column, a reference to a roles table that holds the key,
42
+ * or several of them: the row holds every non-null key.
43
+ */
44
+ readonly role?: string | RoleThrough | readonly (string | RoleThrough)[];
45
+ readonly via?: string;
46
+ readonly expiresAt?: string;
47
+ readonly disabledAt?: string;
48
+ /** The principal id that wrote the membership (`grantedBy`). */
49
+ readonly grantedBy?: string;
50
+ /** Free-text justification recorded on the membership (`reason`). */
51
+ readonly reason?: string;
52
+ /** A subgroup column filling `member.group`. */
53
+ readonly group?: string;
54
+ /** A text column; the value `idp` marks the row as owned by the identity provider. */
55
+ readonly managedBy?: string;
56
+ /** A `text[]` column of seats. */
57
+ readonly seats?: string;
58
+ };
59
+ };
60
+ type MembershipJunctionOptions = Common & {
61
+ /** The declared scope every row is a membership of. */
62
+ readonly scope: string;
63
+ /** The user id column (default `user_id`), or a reference to a table that holds the user id. */
64
+ readonly user?: string | RoleThrough;
65
+ /** The column holding the scope instance id. Default `<scope>_id`. */
66
+ readonly id?: string;
67
+ /** Ancestor id columns keyed by scope name. */
68
+ readonly within?: Readonly<Record<string, string>>;
69
+ /**
70
+ * A role column, a reference to a roles table that holds the key, fixed
71
+ * roles every row holds (a contact table with no role column), or
72
+ * `{ sources }`: several role columns whose non-null keys the row holds.
73
+ */
74
+ readonly roles: string | RoleThrough | readonly string[] | {
75
+ readonly sources: readonly (string | RoleThrough)[];
76
+ };
77
+ /** The membership kind every row has (`contact`, `staff`, `partner`). */
78
+ readonly via?: string;
79
+ readonly expiresAt?: string;
80
+ readonly disabledAt?: string;
81
+ /** The principal id that wrote the membership (`grantedBy`). */
82
+ readonly grantedBy?: string;
83
+ /** Free-text justification recorded on the membership (`reason`). */
84
+ readonly reason?: string;
85
+ /** A subgroup filling `member.group`: a fixed name every row has, or a column. */
86
+ readonly group?: string | {
87
+ readonly column: string;
88
+ };
89
+ /** `idp` when the identity provider owns every row, or a text column holding `idp` per row. */
90
+ readonly managedBy?: "idp" | {
91
+ readonly column: string;
92
+ };
93
+ /** A `text[]` column of seats. */
94
+ readonly seats?: string;
95
+ };
96
+ /** What `permdock supabase hook generate` compiles; the same SQL the source runs. */
97
+ type MembershipSql = {
98
+ readonly table: string;
99
+ /** The table's user column: the user id, or with `userThrough` the reference to the row holding it. */
100
+ readonly user: string;
101
+ /** The table that holds the user id when `user` references it; a change of that id bumps the old and the new user. */
102
+ readonly userThrough?: RoleKeys;
103
+ /** `<table>.<user>%type`: the PL/pgSQL type of the user id column, for a variable `select` compares with. */
104
+ readonly userType: string;
105
+ /**
106
+ * The `select` of claim rows for one user, with every filter applied.
107
+ * `user` must have the column's type (a `userType` variable, or an untyped
108
+ * `$1` Postgres infers): the column is compared uncast so its index applies.
109
+ * `keep` adds the `keep` column; it defaults to `keeps`, and a `union`
110
+ * with a source that keeps passes `true`.
111
+ */
112
+ select(user: string, keep?: boolean): string;
113
+ /** The `select` of member rows for one scope instance (`$1` scope, `$2` id). */
114
+ list(keep?: boolean): string;
115
+ /** A suspended scope on the source keeps permissions: rows of its suspended instances stay, with a `keep` column. */
116
+ readonly keeps: boolean;
117
+ /** A text column holding `idp` for rows the identity provider owns; `''` when every row is owned. */
118
+ readonly managed?: string;
119
+ /** Other tables the `select` reads (suspension tables). */
120
+ readonly reads: readonly string[];
121
+ /** The roles table the role column references; a key change bumps every holder's authorization version. */
122
+ readonly through?: RoleKeys;
123
+ /** Every roles table the role columns reference, `through` first. */
124
+ readonly throughs: readonly RoleKeys[];
125
+ /** Every column that decides who holds which membership: user, scope, id, `within`, role, `via` and expiry. */
126
+ readonly columns: readonly string[];
127
+ /** For a single-scope source: its scope and the scopes whose ids each row carries. */
128
+ readonly scope?: string;
129
+ readonly holds?: readonly string[];
130
+ /** The source's entry in the hook manifest's `memberships`. */
131
+ readonly manifest: SupabaseManifestMembership;
132
+ /** What the ownership triggers count; absent on a source that is not a table. */
133
+ readonly holders?: MembershipHolders;
134
+ };
135
+ /**
136
+ * The rows of a membership table, for the holder-count and transfer-only
137
+ * triggers `permdock rls generate` puts on it. No suspension filter: a
138
+ * suspended holder still holds the role.
139
+ */
140
+ type MembershipHolders = {
141
+ /** `<table>.<id column>%type`: the type of a variable `rows` compares the id column with. */
142
+ readonly idType: string;
143
+ /** The instance id of scope `scope` the PL/pgSQL record `row` holds, as text; null on a row of another scope. */
144
+ id(scope: string, row: string): string;
145
+ /**
146
+ * `select id, user_id, role, via, live` over the rows of scope `scope`
147
+ * in `from` (default the table): one row per held role key, `live` false
148
+ * once expired. `id` is an expression of `idType` the id column must equal.
149
+ */
150
+ rows(scope: string, options?: {
151
+ readonly id?: string;
152
+ readonly from?: string;
153
+ }): string;
154
+ };
155
+ type SqlMembershipSource = MembershipSource & {
156
+ readonly sql: MembershipSql;
157
+ };
158
+ /** The part of `@supabase/server`'s `PostgresApi` a `SqlQuery` needs. */
159
+ type SupabasePostgres = {
160
+ readonly queryRaw: (text: string, params?: unknown[]) => Promise<readonly Record<string, unknown>[]>;
161
+ };
162
+ /**
163
+ * `ctx.postgres` (from `withPostgresClient`) or `ctx.postgresAdmin` as a
164
+ * `SqlQuery` for `fromTable`, `fromJunction` and `supabaseApprovalStore`.
165
+ * `ctx.postgres` runs as the caller under RLS, so the membership tables must
166
+ * be readable by `authenticated`; `ctx.postgresAdmin` bypasses RLS.
167
+ */
168
+ declare function fromSupabasePostgres(postgres: SupabasePostgres): SqlQuery;
169
+ /**
170
+ * Memberships from one table holding every scope: a row per user, scope,
171
+ * instance and role (`user_id, scope, scope_id, role`), with optional
172
+ * `within`, `via`, expiry, owner and seat columns. Rows of the same instance
173
+ * merge into one membership.
174
+ */
175
+ declare function fromTable(options: MembershipTableOptions): SqlMembershipSource;
176
+ /**
177
+ * Memberships from a table of one scope (`customer_contacts`): every row is a
178
+ * membership of `scope`, with roles from a column or fixed (`['contact']`), a
179
+ * fixed `via`, and ancestor ids from `within` columns.
180
+ */
181
+ declare function fromJunction(options: MembershipJunctionOptions): SqlMembershipSource;
182
+ declare const AUTHZ_VERSION_TABLE = "permdock_authz_version";
183
+ /**
184
+ * Reads the authorization version `permdock supabase hook generate` keeps in
185
+ * `<schema>.permdock_authz_version`: pass it to `claimsFirst(sources, { version })`.
186
+ */
187
+ declare function authzVersion(options: {
188
+ readonly query: SqlQuery;
189
+ readonly schema?: string;
190
+ }): NonNullable<MembershipSource["version"]>;
191
+ //#endregion
192
+ export { MembershipTableOptions as a, SupabasePostgres as c, fromSupabasePostgres as d, fromTable as f, MembershipSql as i, authzVersion as l, MembershipHolders as n, SqlMembershipSource as o, MembershipJunctionOptions as r, SqlQuery as s, AUTHZ_VERSION_TABLE as t, fromJunction as u };
@@ -18,5 +18,10 @@ function quoteSqlLiteral(value) {
18
18
  function escapeSqlIdent(name) {
19
19
  return `"${name.replaceAll("\"", "\"\"")}"`;
20
20
  }
21
+ const PLAIN_IDENT = /^[a-z_][a-z0-9_]*$/u;
22
+ /** An identifier left bare when it is already lower snake case, otherwise quoted by `escapeSqlIdent`. */
23
+ function sqlIdent(name) {
24
+ return PLAIN_IDENT.test(name) ? name : escapeSqlIdent(name);
25
+ }
21
26
  //#endregion
22
- export { quoteSqlTable as a, quoteSqlLiteral as i, escapeSqlIdent as n, quoteSqlIdent as r, SQL_IDENT as t };
27
+ export { quoteSqlTable as a, quoteSqlLiteral as i, escapeSqlIdent as n, sqlIdent as o, quoteSqlIdent as r, SQL_IDENT as t };
@@ -1,13 +1,16 @@
1
1
  import { t as compact } from "./compact-y6vfu2_f.js";
2
- import { n as freezeDeep } from "./freeze-y1_jQL4v.js";
3
- import { _ as assertSqlFunctionArg, g as assertPortableTwin, h as normalizeWhere, s as grantList, v as assertSqlFunctionName } from "./policy-ANp36PnI.js";
4
- import { f as tenantOf, u as scopeList } from "./scopes-cKVp_WTw.js";
5
- import { C as listPlans, s as flattenGrantee } from "./grantee-Bv04_Vzf.js";
6
- import { l as canonicalJson } from "./snapshot-DE8dE_hz.js";
7
- import { f as tenantsOf } from "./validity-D0uRmJKJ.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
+ import { i as findPermission } from "./permissions-DVoF6dMt.js";
4
+ import { b as assertSqlFunctionArg, i as declaredRoleNames, s as grantList, u as levelNames, v as normalizeWhere, x as assertSqlFunctionName, y as assertPortableTwin } from "./policy-xyWg7QdR.js";
5
+ import { d as scopeList, m as tenantOf } from "./scopes-CVdPrWN-.js";
6
+ import { r as snapshotGrant, t as buildSnapshot } from "./snapshot-Enxd0n-s.js";
7
+ import { T as listPlans, s as flattenGrantee } from "./grantee-Cv5Sogfv.js";
8
+ import { t as canonicalJson } from "./canonical-json-DemiK4Vp.js";
8
9
  import { n as sha256, t as bytesToBase64Url } from "./sha256-BO0swRXL.js";
10
+ import { g as tenantsOf } from "./validity-uOp8UpYn.js";
9
11
  import { n as isThenable } from "./thenable-okc2xDsj.js";
10
- import { i as snapshotOf, n as resolveSubject, o as declaredRoleNames, r as collectSnapshotGrants } from "./permdock-yoZ7EjxX.js";
12
+ import { a as collectSnapshotGrants, c as rankRoles, l as usesAssigns, m as ceilingGrants, n as resolveSubject, o as snapshotOf, s as snapshotScopes, u as declaredRoleNames$1, y as resolveCustomRole } from "./permdock-CbgvLnuo.js";
13
+ import { n as LOCAL_CUSTOM_ROLE } from "./parse-local-manifest-BrMozJCo.js";
11
14
  //#region src/conditions/sql-function.ts
12
15
  function sqlFunction(name, options) {
13
16
  assertSqlFunctionName(name);
@@ -35,6 +38,41 @@ function memorySettings(settings) {
35
38
  return byTenant.get(tenant);
36
39
  } });
37
40
  }
41
+ /** Memberships keyed by principal id; `tenant` is not a filter, as for a database source. */
42
+ function memoryMembershipSource(entries) {
43
+ const byPrincipal = new Map(Object.entries(entries));
44
+ return Object.freeze({
45
+ membershipsFor(principal) {
46
+ return [...byPrincipal.get(principal.id) ?? []];
47
+ },
48
+ list(query) {
49
+ const members = [];
50
+ for (const [id, memberships] of byPrincipal) for (const membership of memberships) if (membership.scope === query.scope && membership.id === query.id) members.push({
51
+ principal: { id },
52
+ membership
53
+ });
54
+ return members;
55
+ }
56
+ });
57
+ }
58
+ /** A snapshot held in memory; `set` replaces it and notifies every subscriber. */
59
+ function memorySnapshotSource(initial) {
60
+ let current = initial;
61
+ const listeners = /* @__PURE__ */ new Set();
62
+ return Object.freeze({
63
+ get: () => current,
64
+ subscribe(listener) {
65
+ listeners.add(listener);
66
+ return () => {
67
+ listeners.delete(listener);
68
+ };
69
+ },
70
+ set(snapshot) {
71
+ current = snapshot;
72
+ for (const listener of listeners) listener();
73
+ }
74
+ });
75
+ }
38
76
  function memoryRoleSource(customRoles) {
39
77
  const byTenant = /* @__PURE__ */ new Map();
40
78
  const global = [];
@@ -49,10 +87,10 @@ function memoryRoleSource(customRoles) {
49
87
  }
50
88
  return {
51
89
  rolesFor(tenant) {
52
- return byTenant.get(tenant) ?? [];
90
+ return [...byTenant.get(tenant) ?? []];
53
91
  },
54
92
  globalRoles() {
55
- return global;
93
+ return [...global];
56
94
  }
57
95
  };
58
96
  }
@@ -91,6 +129,83 @@ function fromStripeEntitlements(options) {
91
129
  } };
92
130
  }
93
131
  //#endregion
132
+ //#region src/core/local-manifest.ts
133
+ /** A relation grantee needs the relation graph, which a device does not hold: the grant decides on the server only. */
134
+ function localGrant(grant) {
135
+ const relational = flattenGrantee(grant.to).some((item) => item.kind === "relation");
136
+ return snapshotGrant(relational ? {
137
+ ...grant,
138
+ portable: false
139
+ } : grant, void 0);
140
+ }
141
+ function customTable(policy, scope, roles) {
142
+ const keys = [...new Set(ceilingGrants(policy, scope).map((grant) => grant.permission.key))];
143
+ if (keys.length === 0) return;
144
+ const resolve = (body) => resolveCustomRole(policy, scope === "global" ? {
145
+ name: LOCAL_CUSTOM_ROLE,
146
+ scope: "global",
147
+ ...body
148
+ } : {
149
+ name: LOCAL_CUSTOM_ROLE,
150
+ tenant: LOCAL_CUSTOM_ROLE,
151
+ scope,
152
+ ...body
153
+ }).grants.map(localGrant);
154
+ const permissions = {};
155
+ for (const key of keys) {
156
+ const leaf = findPermission(policy.permissions, key);
157
+ const names = leaf?.kind === "instance" ? levelNames(policy, leaf.resource) : [];
158
+ permissions[key] = compact({
159
+ all: resolve({ grants: [{ permission: key }] }),
160
+ levels: names.length === 0 ? void 0 : Object.fromEntries(names.map((level) => [level, resolve({ grants: [{
161
+ permission: key,
162
+ level
163
+ }] })]))
164
+ });
165
+ }
166
+ const includes = {};
167
+ for (const role of roles) {
168
+ const grants = resolve({ includes: [role] });
169
+ if (grants.length > 0) includes[role] = grants;
170
+ }
171
+ return {
172
+ permissions,
173
+ includes
174
+ };
175
+ }
176
+ /**
177
+ * What the policy grants, as JSON a device turns into snapshots from its own
178
+ * membership rows (`localSnapshot` in `permdock/react-native`). Write it at
179
+ * build time; the policy itself never ships to the client.
180
+ */
181
+ function localSnapshotManifest(policy) {
182
+ const roles = [...declaredRoleNames(policy)].toSorted();
183
+ const custom = {};
184
+ for (const scope of [...scopeList(policy.scopes).map((item) => item.name), "global"]) {
185
+ const table = customTable(policy, scope, roles);
186
+ if (table !== void 0) custom[scope] = table;
187
+ }
188
+ const scopes = snapshotScopes(policy);
189
+ const { vocabulary } = buildSnapshot({
190
+ subject: {
191
+ principal: null,
192
+ context: {}
193
+ },
194
+ roles: [],
195
+ grants: [],
196
+ vocabulary: policy.vocabulary
197
+ });
198
+ return freezeDeep(compact({
199
+ v: 1,
200
+ scopes,
201
+ vocabulary,
202
+ roles,
203
+ rank: usesAssigns(policy) ? rankRoles(policy, roles) : void 0,
204
+ grants: grantList(policy).map(localGrant),
205
+ custom
206
+ }));
207
+ }
208
+ //#endregion
94
209
  //#region src/core/may-access.ts
95
210
  function policyPlans(policy) {
96
211
  const names = new Set(listPlans(policy.vocabulary?.plans).map((p) => p.key));
@@ -114,7 +229,7 @@ function mayAccess(policy, user, permission, options = {}) {
114
229
  const principal = resolved.principal;
115
230
  const relevant = policy.index.grantsByKey.get(permission.key) ?? [];
116
231
  if (principal !== null) {
117
- const declared = declaredRoleNames(policy);
232
+ const declared = declaredRoleNames$1(policy);
118
233
  if (heldRoleNames(principal).some((name) => !declared.has(name))) return true;
119
234
  if ((principal.memberships ?? []).length === 0 && relevant.some((grant) => grant.scope !== "global")) return true;
120
235
  }
@@ -138,6 +253,29 @@ function mayAccess(policy, user, permission, options = {}) {
138
253
  }
139
254
  }
140
255
  //#endregion
256
+ //#region src/core/custom-role-source.ts
257
+ function ofTenant(tenant, roles) {
258
+ return Array.isArray(roles) ? roles.filter((role) => role !== null && typeof role === "object" && Reflect.get(role, "tenant") === tenant) : [];
259
+ }
260
+ /**
261
+ * A `RoleSource` over a reader that returns every custom role of a tenant.
262
+ * It keeps only the roles of the requested tenant. With `read: 'held'` it
263
+ * skips a tenant's read, and `globalRoles`, when the subject holds only
264
+ * declared roles there.
265
+ */
266
+ function customRoleSource(reader, options = {}) {
267
+ const declared = options.read === "held" ? declaredRoleNames(options.policy) : void 0;
268
+ return Object.freeze({
269
+ rolesFor(tenant, context) {
270
+ if (declared !== void 0 && context?.held.every((name) => declared.has(name)) === true) return [];
271
+ const roles = reader.rolesOf(tenant);
272
+ return isThenable(roles) ? roles.then((list) => ofTenant(tenant, list)) : ofTenant(tenant, roles);
273
+ },
274
+ ...reader.assignable === void 0 ? {} : { assignable: (tenant) => reader.assignable?.(tenant) ?? [] },
275
+ ...reader.globalRoles === void 0 ? {} : { globalRoles: (context) => declared !== void 0 && context?.held.every((name) => declared.has(name)) === true ? [] : reader.globalRoles?.() ?? [] }
276
+ });
277
+ }
278
+ //#endregion
141
279
  //#region src/core/snapshot-for.ts
142
280
  function withPlans(subject, plans) {
143
281
  if (plans === void 0 || subject.principal === null) return subject;
@@ -427,4 +565,4 @@ function catalogFingerprint(catalog) {
427
565
  return bytesToBase64Url(sha256(canonicalJson(fingerprintInput(catalog))));
428
566
  }
429
567
  //#endregion
430
- export { accessToOcsf as a, readable as c, mayAccess as d, fromStripeEntitlements as f, sqlFunction as g, memorySettings as h, OCSF_VERSION as i, writable as l, memoryRoleSource as m, CSV_COLUMNS as n, toOcsf as o, memoryEntitlementSource as p, toCsvRow as r, crud as s, catalogFingerprint as t, snapshotFor as u };
568
+ export { memoryRoleSource as _, accessToOcsf as a, sqlFunction as b, readable as c, customRoleSource as d, mayAccess as f, memoryMembershipSource as g, memoryEntitlementSource as h, OCSF_VERSION as i, writable as l, fromStripeEntitlements as m, CSV_COLUMNS as n, toOcsf as o, localSnapshotManifest as p, toCsvRow as r, crud as s, catalogFingerprint as t, snapshotFor as u, memorySettings as v, memorySnapshotSource as y };
@@ -1,3 +1,4 @@
1
- import { a as ReplayStore, c as SsfEventHandler, d as SsfOnEvent, f as SsfPermDock, g as SsfSubjectMapper, h as SsfSubject, i as PollResult, l as SsfEventInput, m as SsfReceiver, n as PollHandle, o as SetSubject, p as SsfPermDockOptions, r as PollOptions, s as SsfAuditEvent, t as CaepEventName, u as SsfEventListener } from "../types-i4BAOvdb.js";
2
- import { n as createPermDock, t as memoryReplayStore } from "../index-fG6NSXlc.js";
1
+ import { C as SsfPermDock, D as SsfSubjectMapper, E as SsfSubject, S as SsfOnEvent, T as SsfReceiver, _ as SetSubject, b as SsfEventInput, f as CaepEventName, g as ReplayStore, h as PollResult, m as PollOptions, p as PollHandle, v as SsfAuditEvent, w as SsfPermDockOptions, x as SsfEventListener, y as SsfEventHandler } from "../types-Cq_H8N_X.js";
2
+ import { t as memoryReplayStore } from "../replay-CYyiLiwO.js";
3
+ import { t as createPermDock } from "../index-0nNqHspG.js";
3
4
  export { type CaepEventName, type PollHandle, type PollOptions, type PollResult, type ReplayStore, type SetSubject, type SsfAuditEvent, type SsfEventHandler, type SsfEventInput, type SsfEventListener, type SsfOnEvent, type SsfPermDock, type SsfPermDockOptions, type SsfReceiver, type SsfSubject, type SsfSubjectMapper, createPermDock, memoryReplayStore };
package/dist/ssf/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { t as cancelApprovals } from "../helpers-DnSOrhB9.js";
3
- import { i as issuerFromDiscovery, t as joseTokenVerifier } from "../verifier-B90agnhl.js";
2
+ import { t as cancelApprovals } from "../helpers-H_KARDVC.js";
3
+ import { i as issuerFromDiscovery, t as joseTokenVerifier } from "../verifier-BxBo6I44.js";
4
+ import { t as memoryReplayStore } from "../replay-BsOyTrdV.js";
4
5
  import { t as timeoutSignal } from "../timeout-D51niuQP.js";
5
6
  //#region src/ssf/wire.ts
6
7
  const SET_TYP = "secevent+jwt";
@@ -564,33 +565,6 @@ function createReceiver(config) {
564
565
  };
565
566
  }
566
567
  //#endregion
567
- //#region src/ssf/replay.ts
568
- function memoryReplayStore() {
569
- const seen = /* @__PURE__ */ new Map();
570
- function evict(now = Date.now() / 1e3) {
571
- for (const [jti, expiresAt] of seen) if (expiresAt !== void 0 && expiresAt <= now) seen.delete(jti);
572
- }
573
- return {
574
- seen(jti) {
575
- evict();
576
- return seen.has(jti);
577
- },
578
- remember(jti, expiresAt) {
579
- evict();
580
- seen.set(jti, expiresAt);
581
- },
582
- claim(key, expiresAt) {
583
- evict();
584
- if (seen.has(key)) return false;
585
- seen.set(key, expiresAt);
586
- return true;
587
- },
588
- release(key) {
589
- seen.delete(key);
590
- }
591
- };
592
- }
593
- //#endregion
594
568
  //#region src/ssf/create.ts
595
569
  function createPermDock(policy, options) {
596
570
  if (typeof options.subject !== "function") throw new TypeError("PermDock: permdock/ssf requires subject.");