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,2 @@
1
+ import { n as createCollectScheduler } from "./watch-DVBJ9cBq.js";
2
+ export { createCollectScheduler };
@@ -0,0 +1,128 @@
1
+ import { i as describeError } from "./errors-CWfoNg9N.js";
2
+ import { t as defaultSrcPath } from "./files-DWUN9PzI.js";
3
+ import { r as runCollect } from "./collect-DSTE3ml9.js";
4
+ import { n as isConfigFile, r as loadConfig } from "./config-BJiM-xAm.js";
5
+ import { watch } from "node:fs";
6
+ import { basename, dirname, relative, resolve, sep } from "node:path";
7
+ //#region src/cli/watch.ts
8
+ const DEBOUNCE_MS = 50;
9
+ function report(message) {
10
+ if (message !== void 0) process.stderr.write(`permdock: ${message}\n`);
11
+ }
12
+ function watchRoot(cwd, entry) {
13
+ const wildcard = entry.search(/[*?[{]/u);
14
+ return resolve(cwd, wildcard === -1 ? entry : dirname(`${entry.slice(0, wildcard)}x`));
15
+ }
16
+ function within(dirs, file) {
17
+ return dirs.some((dir) => {
18
+ const path = relative(dir, file);
19
+ return path !== "" && !path.startsWith("..") && !path.startsWith(sep);
20
+ });
21
+ }
22
+ async function collectOnce(cwd, options, check, fresh, configFile) {
23
+ const config = await loadConfig(cwd, configFile, { fresh });
24
+ const collect = {
25
+ ...config.collect,
26
+ ...options?.collect
27
+ };
28
+ const result = await runCollect({
29
+ cwd,
30
+ config,
31
+ collect,
32
+ check,
33
+ now: /* @__PURE__ */ new Date(),
34
+ fresh
35
+ });
36
+ const inputs = [
37
+ configFile,
38
+ config.permissions,
39
+ config.policy
40
+ ].filter((path) => path !== void 0).map((path) => resolve(cwd, path));
41
+ const sources = (collect.srcPath ?? defaultSrcPath()).map((entry) => watchRoot(cwd, entry));
42
+ const run = {
43
+ written: result.written ?? [],
44
+ inputs,
45
+ sources
46
+ };
47
+ if (result.code === 0) return {
48
+ message: void 0,
49
+ ...run
50
+ };
51
+ if (check && options?.onDrift !== "warn" && result.code === 1) throw new Error(result.message);
52
+ return {
53
+ message: result.message,
54
+ ...run
55
+ };
56
+ }
57
+ function createCollectScheduler(cwd, options, settings) {
58
+ const log = settings?.report ?? report;
59
+ let loaded = false;
60
+ let ignored = /* @__PURE__ */ new Set();
61
+ let inputs = [];
62
+ let sources = (options?.collect?.srcPath ?? defaultSrcPath()).map((entry) => watchRoot(cwd, entry));
63
+ let running = false;
64
+ let pending = false;
65
+ let timer;
66
+ const watchers = [];
67
+ async function run(check) {
68
+ const fresh = loaded;
69
+ loaded = true;
70
+ const result = await collectOnce(cwd, options, check, fresh, settings?.configFile);
71
+ ignored = new Set(result.written);
72
+ inputs = result.inputs;
73
+ sources = result.sources;
74
+ return result.message;
75
+ }
76
+ async function drain() {
77
+ running = true;
78
+ while (pending) {
79
+ pending = false;
80
+ try {
81
+ log(await run(false));
82
+ } catch (error) {
83
+ log(describeError(error));
84
+ }
85
+ }
86
+ running = false;
87
+ }
88
+ function changed(file) {
89
+ if (file !== void 0 && ignored.has(resolve(cwd, file))) return;
90
+ pending = true;
91
+ if (running) return;
92
+ clearTimeout(timer);
93
+ timer = setTimeout(() => {
94
+ drain();
95
+ }, DEBOUNCE_MS);
96
+ }
97
+ function watchDir(dir, recursive, accept) {
98
+ try {
99
+ watchers.push(watch(dir, { recursive }, (_event, name) => {
100
+ if (name === null) {
101
+ changed(void 0);
102
+ return;
103
+ }
104
+ const file = resolve(dir, name);
105
+ if (accept(file)) changed(file);
106
+ }));
107
+ } catch {}
108
+ }
109
+ function startWatch() {
110
+ if (watchers.length > 0) return;
111
+ for (const dir of sources) watchDir(dir, true, () => true);
112
+ const loose = inputs.filter((file) => !within(sources, file));
113
+ const dirs = /* @__PURE__ */ new Set([cwd, ...loose.map((file) => dirname(file))]);
114
+ for (const dir of dirs) watchDir(dir, false, (file) => loose.includes(file) || dir === cwd && isConfigFile(basename(file)));
115
+ }
116
+ function close() {
117
+ clearTimeout(timer);
118
+ for (const watcher of watchers.splice(0)) watcher.close();
119
+ }
120
+ return {
121
+ run,
122
+ changed,
123
+ watch: startWatch,
124
+ close
125
+ };
126
+ }
127
+ //#endregion
128
+ export { createCollectScheduler as n, report as r, collectOnce as t };
@@ -1,5 +1,5 @@
1
- import { Mn as Decision, gt as Snapshot } from "../policy-CInmNGkM.js";
2
- import { d as Permission, p as PermissionTree } from "../permissions-B4apnahQ.js";
1
+ import { Tt as Snapshot, Yn as Decision } from "../policy-IB6yxpC3.js";
2
+ import { f as Permission, m as PermissionTree } from "../permissions-DttnqqxC.js";
3
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
4
  //#region src/webmcp/types.d.ts
5
5
  type WebMcpClientStatus = "ready" | "pending" | "stale" | "server-only";
@@ -1,8 +1,10 @@
1
1
  import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { b as resourceOfNode, g as listPermissions, m as isRegistryTree, s as getRegistry, t as annotationsFor } from "../permissions-DC7GROPA.js";
3
- import { t as describe } from "../describe-Bt1YD5uS.js";
4
- import { i as PermDockValidationError, s as wireDenials } from "../errors-Iy71s7Oj.js";
2
+ import { _ as listPermissions, h as isRegistryTree, s as getRegistry, t as annotationsFor, x as resourceOfNode } from "../permissions-DVoF6dMt.js";
3
+ import { n as PermDockValidationError } from "../validation-error-CnjZ4t92.js";
4
+ import { a as wireDenials } from "../problem-details-_AMOYz-w.js";
5
+ import { t as describe } from "../describe-B_gVZEVi.js";
5
6
  import { n as isThenable, t as ignoreRejection } from "../thenable-okc2xDsj.js";
7
+ import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
6
8
  //#region src/webmcp/register.ts
7
9
  const MISSING_CONTEXT = "permdock/webmcp: document.modelContext is absent; registerTools is a no-op.";
8
10
  function isRecord(value) {
@@ -98,14 +100,6 @@ function bindTenant(input, tenantKey, tenant) {
98
100
  }
99
101
  };
100
102
  }
101
- function resourceRef(permission, data) {
102
- if (permission.kind === "collection" || !isRecord(data)) return { type: permission.resource };
103
- const id = data["id"];
104
- return typeof id === "string" || typeof id === "number" ? {
105
- type: permission.resource,
106
- id: String(id)
107
- } : { type: permission.resource };
108
- }
109
103
  function alternativesOf(decision) {
110
104
  return decision.alternatives.map((leaf) => leaf.key);
111
105
  }
@@ -122,7 +116,7 @@ function deniedResult(decision, permission, data) {
122
116
  structuredContent: compact({
123
117
  outcome: "denied",
124
118
  permission: permission.key,
125
- resource: resourceRef(permission, data),
119
+ resource: resourceRef(permission, permission.kind === "collection" ? void 0 : data),
126
120
  denials: wireDenials(decision.denials),
127
121
  alternatives,
128
122
  detail: described.detail
@@ -138,7 +132,7 @@ function approvalResult(decision, permission, data) {
138
132
  structuredContent: {
139
133
  outcome: "approval-required",
140
134
  permission: permission.key,
141
- resource: resourceRef(permission, data),
135
+ resource: resourceRef(permission, permission.kind === "collection" ? void 0 : data),
142
136
  token: decision.token
143
137
  }
144
138
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "permdock",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Typed permissions for TypeScript apps, APIs, databases, and AI agents, with the permdock CLI and test runners.",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -13,7 +13,7 @@
13
13
  "tanstack-intent",
14
14
  "typescript"
15
15
  ],
16
- "homepage": "https://permdock.dev",
16
+ "homepage": "https://permdock.com",
17
17
  "bugs": {
18
18
  "url": "https://github.com/ScaleDockHQ/permdock/issues"
19
19
  },
@@ -35,6 +35,12 @@
35
35
  ],
36
36
  "type": "module",
37
37
  "sideEffects": false,
38
+ "imports": {
39
+ "#next/navigation": {
40
+ "react-server": "next/navigation",
41
+ "default": "next/navigation.js"
42
+ }
43
+ },
38
44
  "exports": {
39
45
  ".": {
40
46
  "types": "./dist/index.d.ts",
@@ -197,6 +203,10 @@
197
203
  "types": "./dist/better-auth/index.d.ts",
198
204
  "default": "./dist/better-auth/index.js"
199
205
  },
206
+ "./better-supabase": {
207
+ "types": "./dist/better-supabase/index.d.ts",
208
+ "default": "./dist/better-supabase/index.js"
209
+ },
200
210
  "./clerk": {
201
211
  "types": "./dist/clerk/index.d.ts",
202
212
  "default": "./dist/clerk/index.js"
@@ -221,6 +231,10 @@
221
231
  "types": "./dist/testing/saas/permissions.d.ts",
222
232
  "default": "./dist/testing/saas/permissions.js"
223
233
  },
234
+ "./compile": {
235
+ "types": "./dist/compile/index.d.ts",
236
+ "default": "./dist/compile/index.js"
237
+ },
224
238
  "./catalog": {
225
239
  "types": "./dist/catalog/index.d.ts",
226
240
  "default": "./dist/catalog/index.js"
@@ -249,31 +263,37 @@
249
263
  "smol-toml": "1.9.0"
250
264
  },
251
265
  "devDependencies": {
252
- "@anthropic-ai/claude-agent-sdk": "0.3.287",
266
+ "@anthropic-ai/claude-agent-sdk": "0.3.288",
253
267
  "@arethetypeswrong/cli": "0.18.5",
254
- "@modelcontextprotocol/client": "2.2.0",
255
- "@modelcontextprotocol/server": "2.2.0",
268
+ "@babel/core": "8.0.6",
269
+ "@modelcontextprotocol/client": "2.3.0",
270
+ "@modelcontextprotocol/server": "2.3.0",
256
271
  "@nestjs/common": "12.1.2",
257
272
  "@nestjs/core": "12.1.2",
258
273
  "@nestjs/platform-express": "12.1.2",
259
274
  "@openai/agents": "0.18.0",
275
+ "@orpc/contract": "2.0.0-beta.41",
276
+ "@orpc/openapi": "2.0.0-beta.41",
260
277
  "@orpc/server": "2.0.0-beta.41",
261
278
  "@permdock/ox-config": "0.0.0",
262
279
  "@permdock/typescript-config": "0.0.0",
263
280
  "@supabase/middleware": "1.0.0",
281
+ "@supabase/supabase-js": "2.117.2",
264
282
  "@sveltejs/vite-plugin-svelte": "7.3.1",
265
283
  "@trpc/server": "11.19.0",
266
284
  "@types/express": "5.0.6",
267
- "@types/node": "24.19.1",
285
+ "@types/node": "26.6.4",
268
286
  "@types/pg": "8.23.1",
269
287
  "@types/react": "19.3.0",
270
288
  "@types/react-dom": "19.3.0",
271
289
  "@vitest/coverage-v8": "5.0.3",
272
290
  "ai": "7.0.127",
273
291
  "ajv": "8.20.0",
274
- "drizzle-orm": "1.0.0-rc.4",
292
+ "babel-plugin-react-compiler": "1.0.0",
293
+ "better-supabase": "0.7.0",
294
+ "drizzle-orm": "1.0.0-rc.5-5935859",
275
295
  "elysia": "1.4.30",
276
- "eve": "0.70.0",
296
+ "eve": "0.71.3",
277
297
  "express": "5.2.1",
278
298
  "fastify": "5.12.5",
279
299
  "happy-dom": "20.14.5",
@@ -292,6 +312,7 @@
292
312
  "rxjs": "7.8.2",
293
313
  "solid-js": "1.9.15",
294
314
  "svelte": "5.57.1",
315
+ "temporal-polyfill": "1.0.5",
295
316
  "tsdown": "0.23.0",
296
317
  "typescript": "7.0.2",
297
318
  "unplugin": "3.4.0",
@@ -304,15 +325,16 @@
304
325
  "peerDependencies": {
305
326
  "@anthropic-ai/claude-agent-sdk": ">=0.2",
306
327
  "@modelcontextprotocol/server": ">=2",
307
- "@nestjs/common": ">=12",
308
- "@nestjs/core": ">=12",
309
- "@nestjs/platform-express": ">=12",
328
+ "@nestjs/common": ">=11",
329
+ "@nestjs/core": ">=11",
330
+ "@nestjs/platform-express": ">=11",
310
331
  "@openai/agents": ">=0.1",
311
332
  "@opentelemetry/api": ">=1",
312
333
  "@orpc/server": ">=2.0.0-0",
313
334
  "@supabase/middleware": ">=1",
314
335
  "@trpc/server": ">=11",
315
336
  "ai": ">=5",
337
+ "better-supabase": ">=0.6.0 <0.8.0",
316
338
  "drizzle-orm": ">=0.40 || >=1.0.0-rc.0",
317
339
  "elysia": ">=1",
318
340
  "eve": ">=0.40",
@@ -328,7 +350,7 @@
328
350
  "reflect-metadata": ">=0.1",
329
351
  "rxjs": ">=7",
330
352
  "solid-js": ">=1.9",
331
- "svelte": ">=5",
353
+ "svelte": ">=5.3",
332
354
  "unplugin": ">=2",
333
355
  "vitest": ">=3",
334
356
  "vue": ">=3"
@@ -340,46 +362,43 @@
340
362
  "@modelcontextprotocol/server": {
341
363
  "optional": true
342
364
  },
343
- "@openai/agents": {
344
- "optional": true
345
- },
346
- "@orpc/server": {
365
+ "@nestjs/common": {
347
366
  "optional": true
348
367
  },
349
- "@supabase/middleware": {
368
+ "@nestjs/core": {
350
369
  "optional": true
351
370
  },
352
- "@trpc/server": {
371
+ "@nestjs/platform-express": {
353
372
  "optional": true
354
373
  },
355
- "ai": {
374
+ "@openai/agents": {
356
375
  "optional": true
357
376
  },
358
- "elysia": {
377
+ "@opentelemetry/api": {
359
378
  "optional": true
360
379
  },
361
- "@nestjs/common": {
380
+ "@orpc/server": {
362
381
  "optional": true
363
382
  },
364
- "@nestjs/core": {
383
+ "@supabase/middleware": {
365
384
  "optional": true
366
385
  },
367
- "@nestjs/platform-express": {
386
+ "@trpc/server": {
368
387
  "optional": true
369
388
  },
370
- "reflect-metadata": {
389
+ "ai": {
371
390
  "optional": true
372
391
  },
373
- "rxjs": {
392
+ "better-supabase": {
374
393
  "optional": true
375
394
  },
376
395
  "drizzle-orm": {
377
396
  "optional": true
378
397
  },
379
- "eve": {
398
+ "elysia": {
380
399
  "optional": true
381
400
  },
382
- "kysely": {
401
+ "eve": {
383
402
  "optional": true
384
403
  },
385
404
  "express": {
@@ -394,41 +413,48 @@
394
413
  "jose": {
395
414
  "optional": true
396
415
  },
397
- "next": {
416
+ "kysely": {
398
417
  "optional": true
399
418
  },
400
- "react": {
419
+ "next": {
401
420
  "optional": true
402
421
  },
403
- "solid-js": {
422
+ "pg": {
404
423
  "optional": true
405
424
  },
406
- "svelte": {
425
+ "pgsql-parser": {
407
426
  "optional": true
408
427
  },
409
- "vue": {
428
+ "react": {
410
429
  "optional": true
411
430
  },
412
- "@opentelemetry/api": {
431
+ "reflect-metadata": {
413
432
  "optional": true
414
433
  },
415
- "vitest": {
434
+ "rxjs": {
416
435
  "optional": true
417
436
  },
418
- "pg": {
437
+ "solid-js": {
419
438
  "optional": true
420
439
  },
421
- "pgsql-parser": {
440
+ "svelte": {
422
441
  "optional": true
423
442
  },
424
443
  "unplugin": {
425
444
  "optional": true
445
+ },
446
+ "vitest": {
447
+ "optional": true
448
+ },
449
+ "vue": {
450
+ "optional": true
426
451
  }
427
452
  },
428
453
  "engines": {
429
454
  "node": ">=24"
430
455
  },
431
456
  "scripts": {
457
+ "bench": "vitest bench --run --project \"node (bench)\" --reporter=verbose",
432
458
  "build": "tsdown",
433
459
  "check:publish": "publint && pnpm pack --out pack.tgz && attw --profile esm-only pack.tgz && rm -f pack.tgz",
434
460
  "lint": "oxlint --disable-nested-config --type-aware",
@@ -0,0 +1,175 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://permdock.com/schemas/approval-request-v1.json",
4
+ "title": "PermDock approval request",
5
+ "description": "An ApprovalRequest as an ApprovalStore holds it, wire format v1. Unknown properties are allowed so a v1 minor release can add one.",
6
+ "type": "object",
7
+ "required": [
8
+ "v",
9
+ "token",
10
+ "permission",
11
+ "scope",
12
+ "resource",
13
+ "subject",
14
+ "detail",
15
+ "createdAt",
16
+ "expiresAt",
17
+ "status"
18
+ ],
19
+ "properties": {
20
+ "v": {
21
+ "const": 1
22
+ },
23
+ "token": {
24
+ "type": "string",
25
+ "minLength": 1
26
+ },
27
+ "permission": {
28
+ "type": "string",
29
+ "minLength": 1
30
+ },
31
+ "scope": {
32
+ "type": "string"
33
+ },
34
+ "resource": {
35
+ "type": "object",
36
+ "required": ["type"],
37
+ "properties": {
38
+ "type": {
39
+ "type": "string"
40
+ },
41
+ "id": {
42
+ "type": "string"
43
+ }
44
+ }
45
+ },
46
+ "subject": {
47
+ "$ref": "#/$defs/subject"
48
+ },
49
+ "membership": {
50
+ "type": "object",
51
+ "required": ["roles"],
52
+ "properties": {
53
+ "roles": {
54
+ "type": "array",
55
+ "items": {
56
+ "type": "string"
57
+ }
58
+ }
59
+ }
60
+ },
61
+ "approvers": {
62
+ "type": "object"
63
+ },
64
+ "detail": {
65
+ "type": "string"
66
+ },
67
+ "adapter": {
68
+ "type": "string"
69
+ },
70
+ "createdAt": {
71
+ "$ref": "#/$defs/instant"
72
+ },
73
+ "expiresAt": {
74
+ "$ref": "#/$defs/instant"
75
+ },
76
+ "status": {
77
+ "enum": ["pending", "approved", "rejected", "expired"]
78
+ },
79
+ "approvals": {
80
+ "type": "array",
81
+ "items": {
82
+ "$ref": "#/$defs/signature"
83
+ }
84
+ },
85
+ "resolvedAt": {
86
+ "$ref": "#/$defs/instant"
87
+ },
88
+ "resolvedBy": {
89
+ "type": "string"
90
+ },
91
+ "vouched": {
92
+ "type": "string"
93
+ },
94
+ "note": {
95
+ "type": "string"
96
+ },
97
+ "consumedAt": {
98
+ "$ref": "#/$defs/instant"
99
+ }
100
+ },
101
+ "$defs": {
102
+ "instant": {
103
+ "type": "string",
104
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$"
105
+ },
106
+ "subject": {
107
+ "type": "object",
108
+ "required": ["principal"],
109
+ "properties": {
110
+ "principal": {
111
+ "anyOf": [
112
+ {
113
+ "type": "null"
114
+ },
115
+ {
116
+ "type": "object",
117
+ "required": ["id", "roles"],
118
+ "properties": {
119
+ "id": {
120
+ "type": "string"
121
+ },
122
+ "roles": {
123
+ "type": "array",
124
+ "items": {
125
+ "type": "string"
126
+ }
127
+ },
128
+ "tenant": {
129
+ "type": "string"
130
+ }
131
+ }
132
+ }
133
+ ]
134
+ },
135
+ "actor": {
136
+ "type": "object",
137
+ "required": ["id", "kind"],
138
+ "properties": {
139
+ "id": {
140
+ "type": "string"
141
+ },
142
+ "kind": {
143
+ "type": "string"
144
+ }
145
+ }
146
+ },
147
+ "session": {
148
+ "type": "string"
149
+ },
150
+ "delegation": {
151
+ "type": "object"
152
+ }
153
+ }
154
+ },
155
+ "signature": {
156
+ "type": "object",
157
+ "required": ["by", "at"],
158
+ "properties": {
159
+ "by": {
160
+ "type": "string"
161
+ },
162
+ "at": {
163
+ "$ref": "#/$defs/instant"
164
+ },
165
+ "stage": {
166
+ "type": "integer",
167
+ "minimum": 0
168
+ },
169
+ "vouched": {
170
+ "type": "string"
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://permdock.dev/schemas/catalog-v1.json",
3
+ "$id": "https://permdock.com/schemas/catalog-v1.json",
4
4
  "type": "object",
5
5
  "required": [
6
6
  "$schema",
@@ -47,6 +47,12 @@
47
47
  },
48
48
  "restricted": {
49
49
  "type": "string"
50
+ },
51
+ "restrictedStops": {
52
+ "type": "array",
53
+ "items": {
54
+ "type": "string"
55
+ }
50
56
  }
51
57
  }
52
58
  }
@@ -227,6 +233,12 @@
227
233
  "type": "string"
228
234
  }
229
235
  },
236
+ "levels": {
237
+ "type": "array",
238
+ "items": {
239
+ "type": "string"
240
+ }
241
+ },
230
242
  "hostable": {
231
243
  "const": true
232
244
  },
@@ -442,6 +454,19 @@
442
454
  "type": "string"
443
455
  }
444
456
  },
457
+ "requires": {
458
+ "oneOf": [
459
+ {
460
+ "type": "string"
461
+ },
462
+ {
463
+ "type": "array",
464
+ "items": {
465
+ "type": "string"
466
+ }
467
+ }
468
+ ]
469
+ },
445
470
  "limit": {
446
471
  "type": "object",
447
472
  "required": ["count", "per"],
@@ -480,6 +505,9 @@
480
505
  },
481
506
  "id": {
482
507
  "type": "string"
508
+ },
509
+ "client": {
510
+ "type": "string"
483
511
  }
484
512
  }
485
513
  },