@pyric/cli 0.1.0-alpha.10 → 0.1.0-alpha.11

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 (304) hide show
  1. package/README.md.orig +2 -2
  2. package/dist/assurance/.generated/conformance-verdicts.d.ts +16 -0
  3. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
  4. package/dist/assurance/.generated/conformance-verdicts.js +16 -0
  5. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
  6. package/dist/bridge/server/peer.d.ts +1 -1
  7. package/dist/bridge/server.d.ts +1 -1
  8. package/dist/bridge/server.js +1 -1
  9. package/dist/cli/index.d.ts +11 -0
  10. package/dist/cli/index.d.ts.map +1 -1
  11. package/dist/cli/index.js +13 -1
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/cli/init.d.ts +3 -3
  14. package/dist/cli/init.d.ts.map +1 -1
  15. package/dist/cli/init.js +5 -5
  16. package/dist/cli/init.js.map +1 -1
  17. package/dist/cli/serve.d.ts.map +1 -1
  18. package/dist/cli/serve.js +8 -2
  19. package/dist/cli/serve.js.map +1 -1
  20. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
  21. package/dist/conformance/.generated/can-i-use-browser.js +1 -1
  22. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
  23. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
  24. package/dist/conformance/.generated/can-i-use.js +1 -1
  25. package/dist/conformance/.generated/can-i-use.js.map +1 -1
  26. package/dist/conformance/.generated/conformance-docs.d.ts +12 -0
  27. package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -0
  28. package/dist/conformance/.generated/conformance-docs.js +2 -0
  29. package/dist/conformance/.generated/conformance-docs.js.map +1 -0
  30. package/dist/conformance/docs.d.ts +6 -0
  31. package/dist/conformance/docs.d.ts.map +1 -0
  32. package/dist/conformance/docs.js +6 -0
  33. package/dist/conformance/docs.js.map +1 -0
  34. package/dist/remote/index.d.ts.map +1 -1
  35. package/dist/remote/index.js +1 -0
  36. package/dist/remote/index.js.map +1 -1
  37. package/dist/serve/activity-guard.d.ts +4 -0
  38. package/dist/serve/activity-guard.d.ts.map +1 -0
  39. package/dist/serve/activity-guard.js +22 -0
  40. package/dist/serve/activity-guard.js.map +1 -0
  41. package/dist/serve/activity-route.d.ts +4 -0
  42. package/dist/serve/activity-route.d.ts.map +1 -0
  43. package/dist/serve/activity-route.js +157 -0
  44. package/dist/serve/activity-route.js.map +1 -0
  45. package/dist/serve/activity-warning.d.ts +4 -0
  46. package/dist/serve/activity-warning.d.ts.map +1 -0
  47. package/dist/serve/activity-warning.js +21 -0
  48. package/dist/serve/activity-warning.js.map +1 -0
  49. package/dist/serve/bridge-mount.d.ts +5 -0
  50. package/dist/serve/bridge-mount.d.ts.map +1 -1
  51. package/dist/serve/bridge-mount.js +1 -0
  52. package/dist/serve/bridge-mount.js.map +1 -1
  53. package/dist/serve/docs-ui/404.html +3 -0
  54. package/dist/serve/docs-ui/_astro/{_slug_.DPUwShm2.css → _slug_.CXh9yTP1.css} +1 -1
  55. package/dist/serve/docs-ui/_astro/_slug_.DUci-duz.css +1 -0
  56. package/dist/serve/docs-ui/docs/_rhythm/index.html +2 -1
  57. package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +3 -2
  58. package/dist/serve/docs-ui/docs/agent/set-up-your-agent.md +1 -1
  59. package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +2 -1
  60. package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +2 -1
  61. package/dist/serve/docs-ui/docs/ai-compat/index.html +2 -1
  62. package/dist/serve/docs-ui/docs/api-reference/index.html +51 -49
  63. package/dist/serve/docs-ui/docs/api-reference.md +2 -2
  64. package/dist/serve/docs-ui/docs/app-compat/index.html +2 -1
  65. package/dist/serve/docs-ui/docs/auth-compat/index.html +2 -1
  66. package/dist/serve/docs-ui/docs/build/ai-logic/index.html +18 -3
  67. package/dist/serve/docs-ui/docs/build/ai-logic.md +30 -2
  68. package/dist/serve/docs-ui/docs/build/authentication/index.html +2 -1
  69. package/dist/serve/docs-ui/docs/build/authentication.md +1 -1
  70. package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +2 -1
  71. package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +46 -2
  72. package/dist/serve/docs-ui/docs/build/cloud-messaging.md +56 -1
  73. package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +2 -1
  74. package/dist/serve/docs-ui/docs/build/cloud-storage.md +1 -1
  75. package/dist/serve/docs-ui/docs/build/realtime-database/index.html +21 -3
  76. package/dist/serve/docs-ui/docs/build/realtime-database.md +25 -1
  77. package/dist/serve/docs-ui/docs/conformance-scores/index.html +2 -1
  78. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +61 -28
  79. package/dist/serve/docs-ui/docs/create-pyric-reference-api.md +65 -20
  80. package/dist/serve/docs-ui/docs/database-compat/index.html +2 -1
  81. package/dist/serve/docs-ui/docs/firestore-compat/index.html +6 -5
  82. package/dist/serve/docs-ui/docs/firestore-compat.md +4 -4
  83. package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +2 -1
  84. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +2 -1
  85. package/dist/serve/docs-ui/docs/get-started/start-building/index.html +4 -3
  86. package/dist/serve/docs-ui/docs/get-started/start-building.md +2 -2
  87. package/dist/serve/docs-ui/docs/index.json +800 -575
  88. package/dist/serve/docs-ui/docs/messaging-compat/index.html +2 -1
  89. package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +2 -1
  90. package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +2 -1
  91. package/dist/serve/docs-ui/docs/overview/index.html +2 -1
  92. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +5 -4
  93. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api.md +3 -4
  94. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +5 -4
  95. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api.md +3 -4
  96. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +5 -4
  97. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api.md +3 -4
  98. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +2503 -12
  99. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +2219 -8
  100. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +4 -3
  101. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api.md +2 -3
  102. package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +16 -11
  103. package/dist/serve/docs-ui/docs/pyric-ai-reference-api.md +14 -13
  104. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +4 -3
  105. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api.md +2 -3
  106. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +7 -2
  107. package/dist/serve/docs-ui/docs/pyric-app-reference-api.md +5 -2
  108. package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +23 -12
  109. package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +15 -12
  110. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +10 -48
  111. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api.md +11 -24
  112. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +87 -97
  113. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api.md +53 -65
  114. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +14 -15
  115. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api.md +19 -28
  116. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +4 -3
  117. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api.md +2 -3
  118. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +3 -2
  119. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api.md +1 -2
  120. package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +51 -0
  121. package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api.md +36 -0
  122. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +3 -2
  123. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api.md +1 -2
  124. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +3 -2
  125. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api.md +1 -2
  126. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +3 -2
  127. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api.md +1 -2
  128. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +3 -2
  129. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api.md +1 -2
  130. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1067 -83
  131. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api.md +1291 -160
  132. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +123 -92
  133. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +49 -20
  134. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +72 -7
  135. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api.md +22 -7
  136. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +33 -12
  137. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +15 -12
  138. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +18 -17
  139. package/dist/serve/docs-ui/docs/pyric-database-reference-api.md +19 -22
  140. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +1512 -545
  141. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +1311 -316
  142. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +3 -2
  143. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +1 -2
  144. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +5 -4
  145. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api.md +3 -4
  146. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +69 -369
  147. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api.md +103 -216
  148. package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +10 -9
  149. package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +9 -10
  150. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +8 -7
  151. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api.md +6 -7
  152. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +10 -9
  153. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api.md +9 -10
  154. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +374 -910
  155. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +377 -911
  156. package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +25 -17
  157. package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +21 -19
  158. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +3 -2
  159. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api.md +1 -2
  160. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +63 -776
  161. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api.md +69 -510
  162. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +22 -21
  163. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api.md +29 -30
  164. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +15 -168
  165. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api.md +17 -87
  166. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +6 -5
  167. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api.md +5 -6
  168. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +82 -970
  169. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api.md +104 -479
  170. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +30 -29
  171. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api.md +54 -55
  172. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +3 -2
  173. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api.md +1 -2
  174. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +5 -4
  175. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api.md +3 -4
  176. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +9 -124
  177. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api.md +7 -58
  178. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +24 -23
  179. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api.md +31 -34
  180. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +104 -1385
  181. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api.md +133 -817
  182. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +34 -33
  183. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api.md +37 -38
  184. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +116 -1169
  185. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api.md +142 -590
  186. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +4 -3
  187. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api.md +3 -4
  188. package/dist/serve/docs-ui/docs/rules-compat/index.html +34 -1
  189. package/dist/serve/docs-ui/docs/rules-compat.md +32 -0
  190. package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +19 -2
  191. package/dist/serve/docs-ui/docs/secure/audit-your-rules.md +32 -0
  192. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +2 -1
  193. package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +2 -1
  194. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +2 -1
  195. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript.md +1 -1
  196. package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +2 -1
  197. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +2 -1
  198. package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +2 -1
  199. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +2 -1
  200. package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +2 -1
  201. package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +2 -1
  202. package/dist/serve/docs-ui/docs/storage-compat/index.html +2 -1
  203. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +2 -1
  204. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +2 -1
  205. package/dist/serve/docs-ui/llms.txt +1 -0
  206. package/dist/serve/entries/ai.d.ts.map +1 -1
  207. package/dist/serve/entries/ai.js +39 -1
  208. package/dist/serve/entries/ai.js.map +1 -1
  209. package/dist/serve/entries/messaging-sw.d.ts.map +1 -1
  210. package/dist/serve/entries/messaging-sw.js +5 -1
  211. package/dist/serve/entries/messaging-sw.js.map +1 -1
  212. package/dist/serve/entries/messaging.d.ts.map +1 -1
  213. package/dist/serve/entries/messaging.js +7 -1
  214. package/dist/serve/entries/messaging.js.map +1 -1
  215. package/dist/serve/entries/runtime.d.ts.map +1 -1
  216. package/dist/serve/entries/runtime.js +20 -1
  217. package/dist/serve/entries/runtime.js.map +1 -1
  218. package/dist/serve/init-payload.d.ts +25 -0
  219. package/dist/serve/init-payload.d.ts.map +1 -1
  220. package/dist/serve/namespace.d.ts +39 -0
  221. package/dist/serve/namespace.d.ts.map +1 -1
  222. package/dist/serve/namespace.js +80 -1
  223. package/dist/serve/namespace.js.map +1 -1
  224. package/dist/serve/standalone-assets.d.ts +11 -9
  225. package/dist/serve/standalone-assets.d.ts.map +1 -1
  226. package/dist/serve/standalone-assets.js +6 -5
  227. package/dist/serve/standalone-assets.js.map +1 -1
  228. package/dist/serve/studio-ui/assets/{RulesCodeEditor-CXdSLKhO.js → RulesCodeEditor-CxVYcZXw.js} +1 -1
  229. package/dist/serve/studio-ui/assets/index-cpSfgQ7H.js +1218 -0
  230. package/dist/serve/studio-ui/assets/seed-DeuFKi4J.js +20 -0
  231. package/dist/serve/studio-ui/index.html +1 -1
  232. package/dist/serve/vite-plugin.d.ts +92 -15
  233. package/dist/serve/vite-plugin.d.ts.map +1 -1
  234. package/dist/serve/vite-plugin.js +281 -11
  235. package/dist/serve/vite-plugin.js.map +1 -1
  236. package/dist/serve/worker/activity-bootstrap.d.ts +8 -0
  237. package/dist/serve/worker/activity-bootstrap.d.ts.map +1 -0
  238. package/dist/serve/worker/activity-bootstrap.js +11 -0
  239. package/dist/serve/worker/activity-bootstrap.js.map +1 -0
  240. package/dist/serve/worker/client/connection.d.ts.map +1 -1
  241. package/dist/serve/worker/client/connection.js +17 -5
  242. package/dist/serve/worker/client/connection.js.map +1 -1
  243. package/dist/serve/worker/client/core.d.ts +2 -2
  244. package/dist/serve/worker/client/core.d.ts.map +1 -1
  245. package/dist/serve/worker/client/core.js +33 -5
  246. package/dist/serve/worker/client/core.js.map +1 -1
  247. package/dist/serve/worker/client/firestore-writes.d.ts.map +1 -1
  248. package/dist/serve/worker/client/firestore-writes.js +1 -0
  249. package/dist/serve/worker/client/firestore-writes.js.map +1 -1
  250. package/dist/serve/worker/client/messaging.d.ts +9 -1
  251. package/dist/serve/worker/client/messaging.d.ts.map +1 -1
  252. package/dist/serve/worker/client/messaging.js +15 -0
  253. package/dist/serve/worker/client/messaging.js.map +1 -1
  254. package/dist/serve/worker/client/studio.d.ts +10 -0
  255. package/dist/serve/worker/client/studio.d.ts.map +1 -1
  256. package/dist/serve/worker/client/studio.js +11 -0
  257. package/dist/serve/worker/client/studio.js.map +1 -1
  258. package/dist/serve/worker/durable-persistence.d.ts +12 -0
  259. package/dist/serve/worker/durable-persistence.d.ts.map +1 -0
  260. package/dist/serve/worker/durable-persistence.js +118 -0
  261. package/dist/serve/worker/durable-persistence.js.map +1 -0
  262. package/dist/serve/worker/entry.d.ts +7 -3
  263. package/dist/serve/worker/entry.d.ts.map +1 -1
  264. package/dist/serve/worker/entry.js +7 -3
  265. package/dist/serve/worker/entry.js.map +1 -1
  266. package/dist/serve/worker/host/core.d.ts +9 -5
  267. package/dist/serve/worker/host/core.d.ts.map +1 -1
  268. package/dist/serve/worker/host/core.js +33 -8
  269. package/dist/serve/worker/host/core.js.map +1 -1
  270. package/dist/serve/worker/host/dispatch.d.ts.map +1 -1
  271. package/dist/serve/worker/host/dispatch.js +9 -2
  272. package/dist/serve/worker/host/dispatch.js.map +1 -1
  273. package/dist/serve/worker/host/studio.d.ts +1 -1
  274. package/dist/serve/worker/host/studio.d.ts.map +1 -1
  275. package/dist/serve/worker/host/studio.js +36 -1
  276. package/dist/serve/worker/host/studio.js.map +1 -1
  277. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -1
  278. package/dist/serve/worker/host/subscriptions.js +27 -7
  279. package/dist/serve/worker/host/subscriptions.js.map +1 -1
  280. package/dist/serve/worker/host-context.d.ts +15 -0
  281. package/dist/serve/worker/host-context.d.ts.map +1 -1
  282. package/dist/serve/worker/host-context.js +10 -0
  283. package/dist/serve/worker/host-context.js.map +1 -1
  284. package/dist/serve/worker/host-messaging.d.ts.map +1 -1
  285. package/dist/serve/worker/host-messaging.js +9 -2
  286. package/dist/serve/worker/host-messaging.js.map +1 -1
  287. package/dist/serve/worker/index.d.ts +1 -1
  288. package/dist/serve/worker/index.d.ts.map +1 -1
  289. package/dist/serve/worker/index.js +2 -0
  290. package/dist/serve/worker/index.js.map +1 -1
  291. package/dist/serve/worker/protocol.d.ts +25 -3
  292. package/dist/serve/worker/protocol.d.ts.map +1 -1
  293. package/dist/serve/worker/protocol.js.map +1 -1
  294. package/dist/serve/worker/serve-init.d.ts +23 -37
  295. package/dist/serve/worker/serve-init.d.ts.map +1 -1
  296. package/dist/serve/worker/serve-init.js +95 -172
  297. package/dist/serve/worker/serve-init.js.map +1 -1
  298. package/dist/vite.d.ts +4 -4
  299. package/dist/vite.d.ts.map +1 -1
  300. package/dist/vite.js +3 -3
  301. package/dist/vite.js.map +1 -1
  302. package/package.json +8 -4
  303. package/dist/serve/studio-ui/assets/index-BvtQIpGn.js +0 -1211
  304. package/dist/serve/studio-ui/assets/seed-3DMedLL3.js +0 -2
@@ -1,1241 +1,188 @@
1
- <!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>API reference: @pyric/ui/traffic/hooks · Pyric Studio</title><meta name="description" content="Published declarations for @pyric/ui/traffic/hooks."><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.DPUwShm2.css"></head> <body> <header class="studio__bar"> <div class="studio__bar-inner"> <a class="studio__brand" href="/__pyric/ui/" aria-label="Pyric Studio">Pyric</a> <nav class="studio__nav" aria-label="Studio tabs"> <a class="studio__nav-tab" href="/__pyric/ui/"> Home </a><a class="studio__nav-tab" href="/__pyric/ui/firestore"> Firestore </a><a class="studio__nav-tab" href="/__pyric/ui/auth"> Auth </a><a class="studio__nav-tab" href="/__pyric/ui/rtdb"> RTDB </a><a class="studio__nav-tab" href="/__pyric/ui/storage"> Storage </a><a class="studio__nav-tab" href="/__pyric/ui/traffic"> Traffic </a><a class="studio__nav-tab" href="/__pyric/ui/settings"> Settings </a><a class="studio__nav-tab" href="/__pyric/ui/docs" aria-current="page"> Docs </a> </nav> </div> </header> <div class="docs-shell"> <details class="docs-nav-drawer"> <summary>Navigate</summary> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <script type="module">let i=null;function d(t){return i||(i=fetch(t).then(e=>e.json())),i}function l(t,e){return t.title.toLowerCase().includes(e)||t.excerpt.toLowerCase().includes(e)?!0:t.headings.some(r=>r.text.toLowerCase().includes(e))}function u(t,e,r){if(e.innerHTML="",t.length===0){e.hidden=!1;{const n=document.createElement("li");n.className="docs-search-empty",n.textContent="No matches",e.appendChild(n)}return}e.hidden=!1;for(const n of t.slice(0,8)){const s=document.createElement("li"),c=document.createElement("a");c.href=n.path;const o=document.createElement("span");o.className="docs-search-result-title",o.textContent=n.title;const a=document.createElement("span");a.className="docs-search-result-meta",a.textContent=[n.group,n.section].filter(Boolean).join(" / "),c.append(o,a),s.appendChild(c),e.appendChild(s)}}document.querySelectorAll(".docs-search").forEach(t=>{const e=t.dataset.indexUrl,r=t.querySelector(".docs-search-input"),n=t.querySelector(".docs-search-results");r.addEventListener("input",async()=>{const s=r.value.trim().toLowerCase();if(!s){n.hidden=!0,n.innerHTML="";return}const{pages:c}=await d(e);r.value.trim().toLowerCase()===s&&u(c.filter(o=>l(o,s)),n)}),r.addEventListener("focus",()=>{d(e),n.childElementCount>0&&(n.hidden=!1)}),r.addEventListener("keydown",s=>{s.key==="Escape"&&(r.value="",n.hidden=!0,n.innerHTML="",r.blur())}),r.addEventListener("blur",()=>{window.setTimeout(()=>{n.hidden=!0},150)})});document.addEventListener("keydown",t=>{if(!(t.metaKey||t.ctrlKey)||t.key.toLowerCase()!=="k")return;const e=[...document.querySelectorAll(".docs-search-input")].find(r=>r.offsetParent!==null);e&&(t.preventDefault(),e.focus(),e.select())});</script> <a class="docs-nav-toplink" href="/__pyric/ui/docs/overview/"> Overview </a><details class="docs-nav-group"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><a class="docs-nav-toplink" href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Trust </a><details class="docs-nav-group"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-values-reference-api/"> pyric/firestore-values </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/" aria-current="page"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> </details> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <a class="docs-nav-toplink" href="/__pyric/ui/docs/overview/" id="nav-group-overview"> Overview </a><details class="docs-nav-group" id="nav-group-get-started"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-build"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-secure-debug"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-observe-shape"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-test"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-work-with-an-agent"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><a class="docs-nav-toplink" href="/__pyric/ui/docs/trust/versioning-and-compatibility/" id="nav-group-trust"> Trust </a><details class="docs-nav-group" id="nav-group-conformance"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" id="nav-group-reference" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-values-reference-api/"> pyric/firestore-values </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/" aria-current="page"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> <main class="doc-main"> <nav class="docs-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/__pyric/ui/docs/api-reference/">API reference</a> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span>@pyric/ui</span> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span aria-current="page">@pyric/ui/traffic/hooks</span> </li> </ol> </nav> <header class="api-reference-header"> <p class="api-reference-kicker">API reference</p> <h1><code>@pyric/ui/traffic/hooks</code></h1> <p class="api-reference-meta"> 46 published symbols from <code>@pyric/ui</code> </p> <p class="api-reference-source">
1
+ <!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>API reference: @pyric/ui/traffic/hooks · Pyric Studio</title><meta name="description" content="Published declarations for @pyric/ui/traffic/hooks."><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.CXh9yTP1.css">
2
+ <link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.DUci-duz.css"></head> <body> <header class="studio__bar"> <div class="studio__bar-inner"> <a class="studio__brand" href="/__pyric/ui/" aria-label="Pyric Studio">Pyric</a> <nav class="studio__nav" aria-label="Studio tabs"> <a class="studio__nav-tab" href="/__pyric/ui/"> Home </a><a class="studio__nav-tab" href="/__pyric/ui/firestore"> Firestore </a><a class="studio__nav-tab" href="/__pyric/ui/auth"> Auth </a><a class="studio__nav-tab" href="/__pyric/ui/rtdb"> RTDB </a><a class="studio__nav-tab" href="/__pyric/ui/storage"> Storage </a><a class="studio__nav-tab" href="/__pyric/ui/traffic"> Traffic </a><a class="studio__nav-tab" href="/__pyric/ui/settings"> Settings </a><a class="studio__nav-tab" href="/__pyric/ui/docs" aria-current="page"> Docs </a> </nav> </div> </header> <div class="docs-shell"> <details class="docs-nav-drawer"> <summary>Navigate</summary> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <script type="module">let i=null;function d(t){return i||(i=fetch(t).then(e=>e.json())),i}function l(t,e){return t.title.toLowerCase().includes(e)||t.excerpt.toLowerCase().includes(e)?!0:t.headings.some(r=>r.text.toLowerCase().includes(e))}function u(t,e,r){if(e.innerHTML="",t.length===0){e.hidden=!1;{const n=document.createElement("li");n.className="docs-search-empty",n.textContent="No matches",e.appendChild(n)}return}e.hidden=!1;for(const n of t.slice(0,8)){const s=document.createElement("li"),c=document.createElement("a");c.href=n.path;const o=document.createElement("span");o.className="docs-search-result-title",o.textContent=n.title;const a=document.createElement("span");a.className="docs-search-result-meta",a.textContent=[n.group,n.section].filter(Boolean).join(" / "),c.append(o,a),s.appendChild(c),e.appendChild(s)}}document.querySelectorAll(".docs-search").forEach(t=>{const e=t.dataset.indexUrl,r=t.querySelector(".docs-search-input"),n=t.querySelector(".docs-search-results");r.addEventListener("input",async()=>{const s=r.value.trim().toLowerCase();if(!s){n.hidden=!0,n.innerHTML="";return}const{pages:c}=await d(e);r.value.trim().toLowerCase()===s&&u(c.filter(o=>l(o,s)),n)}),r.addEventListener("focus",()=>{d(e),n.childElementCount>0&&(n.hidden=!1)}),r.addEventListener("keydown",s=>{s.key==="Escape"&&(r.value="",n.hidden=!0,n.innerHTML="",r.blur())}),r.addEventListener("blur",()=>{window.setTimeout(()=>{n.hidden=!0},150)})});document.addEventListener("keydown",t=>{if(!(t.metaKey||t.ctrlKey)||t.key.toLowerCase()!=="k")return;const e=[...document.querySelectorAll(".docs-search-input")].find(r=>r.offsetParent!==null);e&&(t.preventDefault(),e.focus(),e.select())});</script> <a class="docs-nav-toplink" href="/__pyric/ui/docs/overview/"> Overview </a><details class="docs-nav-group"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><a class="docs-nav-toplink" href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Trust </a><details class="docs-nav-group"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-values-reference-api/"> pyric/firestore-values </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/" aria-current="page"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> </details> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <a class="docs-nav-toplink" href="/__pyric/ui/docs/overview/" id="nav-group-overview"> Overview </a><details class="docs-nav-group" id="nav-group-get-started"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-build"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-secure-debug"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-observe-shape"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-test"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-work-with-an-agent"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><a class="docs-nav-toplink" href="/__pyric/ui/docs/trust/versioning-and-compatibility/" id="nav-group-trust"> Trust </a><details class="docs-nav-group" id="nav-group-conformance"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" id="nav-group-reference" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-values-reference-api/"> pyric/firestore-values </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/" aria-current="page"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> <main class="doc-main"> <nav class="docs-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/__pyric/ui/docs/api-reference/">API reference</a> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span>@pyric/ui</span> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span aria-current="page">@pyric/ui/traffic/hooks</span> </li> </ol> </nav> <header class="api-reference-header"> <p class="api-reference-kicker">API reference</p> <h1><code>@pyric/ui/traffic/hooks</code></h1> <p class="api-reference-meta"> 46 published symbols from <code>@pyric/ui</code> </p> <p class="api-reference-source">
2
3
  Generated from the TypeScript declarations shipped at this import path.
3
- </p> </header> <article class="prose api-reference-body"> <!-- Generated from published package declarations via TypeDoc. Do not edit by hand; run bun run docs:api:generate. -->
4
- <h2 id="interfaces">Interfaces</h2>
4
+ </p> </header> <article class="prose api-reference-body"> <!-- Generated from published package declarations via TypeDoc. Rendered by the api-reference content loader. -->
5
+ <h2 id="references">References</h2>
6
+ <p><a id="billable_series_defs"></a></p>
7
+ <h3 id="billable_series_defs">BILLABLE_SERIES_DEFS</h3>
8
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#billable_series_defs">BILLABLE_SERIES_DEFS</a></p>
9
+ <hr>
10
+ <p><a id="billableserieskey"></a></p>
11
+ <h3 id="billableserieskey">BillableSeriesKey</h3>
12
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#billableserieskey">BillableSeriesKey</a></p>
13
+ <hr>
14
+ <p><a id="bucketbillablemetrics"></a></p>
15
+ <h3 id="bucketbillablemetrics">bucketBillableMetrics</h3>
16
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#bucketbillablemetrics">bucketBillableMetrics</a></p>
17
+ <hr>
18
+ <p><a id="bucketrulesmetrics"></a></p>
19
+ <h3 id="bucketrulesmetrics">bucketRulesMetrics</h3>
20
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#bucketrulesmetrics">bucketRulesMetrics</a></p>
21
+ <hr>
22
+ <p><a id="buckettraffic"></a></p>
23
+ <h3 id="buckettraffic">bucketTraffic</h3>
24
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#buckettraffic">bucketTraffic</a></p>
25
+ <hr>
26
+ <p><a id="classifybillable"></a></p>
27
+ <h3 id="classifybillable">classifyBillable</h3>
28
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#classifybillable">classifyBillable</a></p>
29
+ <hr>
30
+ <p><a id="classifyrules"></a></p>
31
+ <h3 id="classifyrules">classifyRules</h3>
32
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#classifyrules">classifyRules</a></p>
33
+ <hr>
34
+ <p><a id="isadminevent"></a></p>
35
+ <h3 id="isadminevent">isAdminEvent</h3>
36
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#isadminevent">isAdminEvent</a></p>
37
+ <hr>
5
38
  <p><a id="metricpoint"></a></p>
6
39
  <h3 id="metricpoint">MetricPoint</h3>
7
- <h4 id="properties">Properties</h4>
8
- <div class="table-scroll">
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="end"></a> <code>end</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="index"></a> <code>index</code></td><td align="left"><code>number</code></td><td align="left">0-based bucket index, left (oldest) to right (newest).</td></tr><tr><td align="left"><a id="start"></a> <code>start</code></td><td align="left"><code>number</code></td><td align="left">Half-open bounds of this bucket <code>[start, end)</code> in epoch-ms.</td></tr></tbody></table></div>
40
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#metricpoint">MetricPoint</a></p>
34
41
  <hr>
35
42
  <p><a id="metricseries"></a></p>
36
43
  <h3 id="metricseries">MetricSeries</h3>
37
- <h4 id="properties-1">Properties</h4>
38
- <div class="table-scroll">
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="key"></a> <code>key</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="label"></a> <code>label</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="total"></a> <code>total</code></td><td align="left"><code>number</code></td><td align="left">Sum of <code>values</code> — the period total (the legend/card number).</td></tr><tr><td align="left"><a id="values"></a> <code>values</code></td><td align="left"><code>number</code>[]</td><td align="left">One count per bucket, aligned with <code>points</code>.</td></tr></tbody></table></div>
44
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#metricseries">MetricSeries</a></p>
69
45
  <hr>
70
46
  <p><a id="ruleheatmapentry"></a></p>
71
47
  <h3 id="ruleheatmapentry">RuleHeatmapEntry</h3>
72
- <h4 id="properties-2">Properties</h4>
73
- <div class="table-scroll">
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="allows"></a> <code>allows</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="denies"></a> <code>denies</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="denyratio"></a> <code>denyRatio</code></td><td align="left"><code>number</code></td><td align="left"><code>denies / total</code> — 0 when the rule never denied.</td></tr><tr><td align="left"><a id="operations"></a> <code>operations</code></td><td align="left"><code>string</code>[]</td><td align="left">Union of all operations seen matching this rule.</td></tr><tr><td align="left"><a id="ruleindex"></a> <code>ruleIndex</code></td><td align="left"><code>number</code></td><td align="left">The rule’s index in the rules file.</td></tr><tr><td align="left"><a id="total-1"></a> <code>total</code></td><td align="left"><code>number</code></td><td align="left">Total events that matched this rule.</td></tr><tr><td align="left"><a id="unsupported"></a> <code>unsupported</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr></tbody></table></div>
48
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#ruleheatmapentry">RuleHeatmapEntry</a></p>
49
+ <hr>
50
+ <p><a id="rules_series_defs"></a></p>
51
+ <h3 id="rules_series_defs">RULES_SERIES_DEFS</h3>
52
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#rules_series_defs">RULES_SERIES_DEFS</a></p>
53
+ <hr>
54
+ <p><a id="rulesserieskey"></a></p>
55
+ <h3 id="rulesserieskey">RulesSeriesKey</h3>
56
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#rulesserieskey">RulesSeriesKey</a></p>
119
57
  <hr>
120
58
  <p><a id="timewindow"></a></p>
121
59
  <h3 id="timewindow">TimeWindow</h3>
122
- <p>A half-open time window <code>[start, end)</code> in epoch-ms. The timeline
123
- buckets events whose <code>at</code> falls inside it; events outside are
124
- dropped from the histogram (but still counted in <code>outOfWindow</code>).</p>
125
- <h4 id="properties-3">Properties</h4>
126
- <div class="table-scroll">
127
-
128
-
129
-
130
-
131
-
132
-
133
-
134
-
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
-
143
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="end-1"></a> <code>end</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><a id="start-1"></a> <code>start</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
60
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#timewindow">TimeWindow</a></p>
144
61
  <hr>
145
62
  <p><a id="trafficbucket"></a></p>
146
63
  <h3 id="trafficbucket">TrafficBucket</h3>
147
- <h4 id="properties-4">Properties</h4>
148
- <div class="table-scroll">
149
-
150
-
151
-
152
-
153
-
154
-
155
-
156
-
157
-
158
-
159
-
160
-
161
-
162
-
163
-
164
-
165
-
166
-
167
-
168
-
169
-
170
-
171
-
172
-
173
-
174
-
175
-
176
-
177
-
178
-
179
-
180
-
181
-
182
-
183
-
184
-
185
-
186
-
187
-
188
-
189
-
190
-
191
-
192
-
193
-
194
-
195
-
196
-
197
-
198
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="allows-1"></a> <code>allows</code></td><td align="left"><code>number</code></td><td align="left"><code>count - denies</code> — allowed + unsupported. The “non-deny” stack.</td></tr><tr><td align="left"><a id="count"></a> <code>count</code></td><td align="left"><code>number</code></td><td align="left">Total events that fell in this bucket.</td></tr><tr><td align="left"><a id="denies-1"></a> <code>denies</code></td><td align="left"><code>number</code></td><td align="left">How many of <code>count</code> were denied.</td></tr><tr><td align="left"><a id="denyheightratio"></a> <code>denyHeightRatio</code></td><td align="left"><code>number</code></td><td align="left"><code>denies / maxCount</code> — 0..1. The deny sub-stack height as a fraction of the tallest bucket, so the deny segment is drawn to the same scale as the full bar. Drives <code>--pyric-bucket-deny-h</code>.</td></tr><tr><td align="left"><a id="end-2"></a> <code>end</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="heightratio"></a> <code>heightRatio</code></td><td align="left"><code>number</code></td><td align="left"><code>count / maxCount</code> across all buckets — 0..1. The full bar height as a fraction of the tallest bucket. Drives <code>--pyric-bucket-h</code>.</td></tr><tr><td align="left"><a id="index-1"></a> <code>index</code></td><td align="left"><code>number</code></td><td align="left">0-based bucket index, left (oldest) to right (newest).</td></tr><tr><td align="left"><a id="start-2"></a> <code>start</code></td><td align="left"><code>number</code></td><td align="left">Half-open bounds of this bucket <code>[start, end)</code> in epoch-ms.</td></tr></tbody></table></div>
64
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficbucket">TrafficBucket</a></p>
199
65
  <hr>
200
66
  <p><a id="trafficcounts"></a></p>
201
67
  <h3 id="trafficcounts">TrafficCounts</h3>
202
- <h4 id="properties-5">Properties</h4>
203
- <div class="table-scroll">
204
-
205
-
206
-
207
-
208
-
209
-
210
-
211
-
212
-
213
-
214
-
215
-
216
-
217
-
218
-
219
-
220
-
221
-
222
-
223
-
224
-
225
-
226
-
227
-
228
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="denied"></a> <code>denied</code></td><td align="left"><code>number</code></td><td align="left">Of those, how many were denied.</td></tr><tr><td align="left"><a id="listener"></a> <code>listener</code></td><td align="left"><code>number</code></td><td align="left">Of those, how many are listener re-evals.</td></tr><tr><td align="left"><a id="total-2"></a> <code>total</code></td><td align="left"><code>number</code></td><td align="left">Events currently in the buffer.</td></tr></tbody></table></div>
68
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficcounts">TrafficCounts</a></p>
229
69
  <hr>
230
70
  <p><a id="trafficfilterstate"></a></p>
231
71
  <h3 id="trafficfilterstate">TrafficFilterState</h3>
232
- <h4 id="properties-6">Properties</h4>
233
- <div class="table-scroll">
234
-
235
-
236
-
237
-
238
-
239
-
240
-
241
-
242
-
243
-
244
-
245
-
246
-
247
-
248
-
249
-
250
-
251
-
252
-
253
-
254
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="origin"></a> <code>origin</code></td><td align="left"><a href="#trafficoriginfilter"><code>TrafficOriginFilter</code></a></td></tr><tr><td align="left"><a id="pathquery"></a> <code>pathQuery</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="result"></a> <code>result</code></td><td align="left"><a href="#trafficresultfilter"><code>TrafficResultFilter</code></a></td></tr></tbody></table></div>
72
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficfilterstate">TrafficFilterState</a></p>
255
73
  <hr>
256
74
  <p><a id="trafficgroup"></a></p>
257
75
  <h3 id="trafficgroup">TrafficGroup</h3>
258
- <h4 id="properties-7">Properties</h4>
259
- <div class="table-scroll">
260
-
261
-
262
-
263
-
264
-
265
-
266
-
267
-
268
-
269
-
270
-
271
-
272
-
273
-
274
-
275
-
276
-
277
-
278
-
279
-
280
-
281
-
282
-
283
-
284
-
285
-
286
-
287
-
288
-
289
-
290
-
291
-
292
-
293
-
294
-
295
-
296
-
297
-
298
-
299
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="count-1"></a> <code>count</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="denies-2"></a> <code>denies</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="events"></a> <code>events</code></td><td align="left"><code>TrafficEvent</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="key-1"></a> <code>key</code></td><td align="left"><code>string</code></td><td align="left"><code>groupId</code> for batch/transaction; a synthetic key for listener runs. Stable enough for a React key.</td></tr><tr><td align="left"><a id="kind"></a> <code>kind</code></td><td align="left"><a href="#trafficgroupkind-1"><code>TrafficGroupKind</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="type"></a> <code>type</code></td><td align="left"><code>"group"</code></td><td align="left">-</td></tr></tbody></table></div>
76
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficgroup">TrafficGroup</a></p>
77
+ <hr>
78
+ <p><a id="trafficgroupkind"></a></p>
79
+ <h3 id="trafficgroupkind">TrafficGroupKind</h3>
80
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficgroupkind-1">TrafficGroupKind</a></p>
81
+ <hr>
82
+ <p><a id="trafficlogitem"></a></p>
83
+ <h3 id="trafficlogitem">TrafficLogItem</h3>
84
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficlogitem">TrafficLogItem</a></p>
300
85
  <hr>
301
86
  <p><a id="trafficmetricsresult"></a></p>
302
87
  <h3 id="trafficmetricsresult">TrafficMetricsResult</h3>
303
- <h4 id="properties-8">Properties</h4>
304
- <div class="table-scroll">
305
-
306
-
307
-
308
-
309
-
310
-
311
-
312
-
313
-
314
-
315
-
316
-
317
-
318
-
319
-
320
-
321
-
322
-
323
-
324
-
325
-
326
-
327
-
328
-
329
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="maxvalue"></a> <code>maxValue</code></td><td align="left"><code>number</code></td><td align="left">The largest single-bucket value across every series — the shared y-scale divisor a chart would use by default.</td></tr><tr><td align="left"><a id="points"></a> <code>points</code></td><td align="left"><a href="#metricpoint"><code>MetricPoint</code></a>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="series"></a> <code>series</code></td><td align="left"><a href="#metricseries"><code>MetricSeries</code></a>[]</td><td align="left">-</td></tr></tbody></table></div>
88
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficmetricsresult">TrafficMetricsResult</a></p>
89
+ <hr>
90
+ <p><a id="trafficoriginfilter"></a></p>
91
+ <h3 id="trafficoriginfilter">TrafficOriginFilter</h3>
92
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficoriginfilter">TrafficOriginFilter</a></p>
93
+ <hr>
94
+ <p><a id="trafficresultfilter"></a></p>
95
+ <h3 id="trafficresultfilter">TrafficResultFilter</h3>
96
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficresultfilter">TrafficResultFilter</a></p>
330
97
  <hr>
331
98
  <p><a id="trafficsingle"></a></p>
332
99
  <h3 id="trafficsingle">TrafficSingle</h3>
333
- <h4 id="properties-9">Properties</h4>
334
- <div class="table-scroll">
335
-
336
-
337
-
338
-
339
-
340
-
341
-
342
-
343
-
344
-
345
-
346
-
347
-
348
-
349
-
350
-
351
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="event"></a> <code>event</code></td><td align="left"><code>TrafficEvent</code></td></tr><tr><td align="left"><a id="type-1"></a> <code>type</code></td><td align="left"><code>"single"</code></td></tr></tbody></table></div>
100
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficsingle">TrafficSingle</a></p>
352
101
  <hr>
353
102
  <p><a id="trafficstatbucket"></a></p>
354
103
  <h3 id="trafficstatbucket">TrafficStatBucket</h3>
355
- <h4 id="properties-10">Properties</h4>
356
- <div class="table-scroll">
357
-
358
-
359
-
360
-
361
-
362
-
363
-
364
-
365
-
366
-
367
-
368
-
369
-
370
-
371
-
372
-
373
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="count-2"></a> <code>count</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><a id="key-2"></a> <code>key</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
104
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficstatbucket">TrafficStatBucket</a></p>
374
105
  <hr>
375
106
  <p><a id="trafficstatssummary"></a></p>
376
107
  <h3 id="trafficstatssummary">TrafficStatsSummary</h3>
377
- <h4 id="properties-11">Properties</h4>
378
- <div class="table-scroll">
379
-
380
-
381
-
382
-
383
-
384
-
385
-
386
-
387
-
388
-
389
-
390
-
391
-
392
-
393
-
394
-
395
-
396
-
397
-
398
-
399
-
400
-
401
-
402
-
403
-
404
-
405
-
406
-
407
-
408
-
409
-
410
-
411
-
412
-
413
-
414
-
415
-
416
-
417
-
418
-
419
-
420
-
421
-
422
-
423
-
424
-
425
-
426
-
427
-
428
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="allows-2"></a> <code>allows</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="bymethod"></a> <code>byMethod</code></td><td align="left"><a href="#trafficstatbucket"><code>TrafficStatBucket</code></a>[]</td><td align="left">Counts by method, sorted descending.</td></tr><tr><td align="left"><a id="byorigin"></a> <code>byOrigin</code></td><td align="left"><a href="#trafficstatbucket"><code>TrafficStatBucket</code></a>[]</td><td align="left">Counts by origin, sorted descending.</td></tr><tr><td align="left"><a id="bypath"></a> <code>byPath</code></td><td align="left"><a href="#trafficstatbucket"><code>TrafficStatBucket</code></a>[]</td><td align="left">Counts by path, sorted descending, capped at <code>topPaths</code>.</td></tr><tr><td align="left"><a id="denies-3"></a> <code>denies</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="denyrate"></a> <code>denyRate</code></td><td align="left"><code>number</code></td><td align="left"><code>denies / total</code> — 0 for an empty buffer.</td></tr><tr><td align="left"><a id="total-3"></a> <code>total</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="unsupported-1"></a> <code>unsupported</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr></tbody></table></div>
108
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#trafficstatssummary">TrafficStatsSummary</a></p>
109
+ <hr>
110
+ <p><a id="usebillablemetrics"></a></p>
111
+ <h3 id="usebillablemetrics">useBillableMetrics</h3>
112
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usebillablemetrics">useBillableMetrics</a></p>
113
+ <hr>
114
+ <p><a id="useruleheatmap"></a></p>
115
+ <h3 id="useruleheatmap">useRuleHeatmap</h3>
116
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#useruleheatmap">useRuleHeatmap</a></p>
429
117
  <hr>
430
118
  <p><a id="useruleheatmapoptions"></a></p>
431
119
  <h3 id="useruleheatmapoptions">UseRuleHeatmapOptions</h3>
432
- <h4 id="properties-12">Properties</h4>
433
- <div class="table-scroll">
434
-
435
-
436
-
437
-
438
-
439
-
440
-
441
-
442
-
443
-
444
-
445
-
446
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="events-1"></a> <code>events</code></td><td align="left"><code>TrafficEvent</code>[]</td></tr></tbody></table></div>
120
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#useruleheatmapoptions">UseRuleHeatmapOptions</a></p>
447
121
  <hr>
448
122
  <p><a id="useruleheatmapresult"></a></p>
449
123
  <h3 id="useruleheatmapresult">UseRuleHeatmapResult</h3>
450
- <h4 id="properties-13">Properties</h4>
451
- <div class="table-scroll">
452
-
453
-
454
-
455
-
456
-
457
-
458
-
459
-
460
-
461
-
462
-
463
-
464
-
465
-
466
-
467
-
468
-
469
-
470
-
471
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="entries"></a> <code>entries</code></td><td align="left"><a href="#ruleheatmapentry"><code>RuleHeatmapEntry</code></a>[]</td><td align="left">Per-rule rollup, sorted by <code>total</code> descending (busiest first), ties broken by <code>ruleIndex</code> ascending.</td></tr><tr><td align="left"><a id="unmatchedcount"></a> <code>unmatchedCount</code></td><td align="left"><code>number</code></td><td align="left">Events that matched no rule — counted here, not attributed to any entry.</td></tr></tbody></table></div>
124
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#useruleheatmapresult">UseRuleHeatmapResult</a></p>
125
+ <hr>
126
+ <p><a id="userulesmetrics"></a></p>
127
+ <h3 id="userulesmetrics">useRulesMetrics</h3>
128
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#userulesmetrics">useRulesMetrics</a></p>
129
+ <hr>
130
+ <p><a id="usetrafficbuckets"></a></p>
131
+ <h3 id="usetrafficbuckets">useTrafficBuckets</h3>
132
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficbuckets">useTrafficBuckets</a></p>
472
133
  <hr>
473
134
  <p><a id="usetrafficbucketsoptions"></a></p>
474
135
  <h3 id="usetrafficbucketsoptions">UseTrafficBucketsOptions</h3>
475
- <h4 id="properties-14">Properties</h4>
476
- <div class="table-scroll">
477
-
478
-
479
-
480
-
481
-
482
-
483
-
484
-
485
-
486
-
487
-
488
-
489
-
490
-
491
-
492
-
493
-
494
-
495
-
496
-
497
-
498
-
499
-
500
-
501
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="bucketcount"></a> <code>bucketCount?</code></td><td align="left"><code>number</code></td><td align="left">Number of buckets to divide the window into. Default 30.</td></tr><tr><td align="left"><a id="events-2"></a> <code>events</code></td><td align="left"><code>TrafficEvent</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="window"></a> <code>window</code></td><td align="left"><a href="#timewindow"><code>TimeWindow</code></a></td><td align="left">The time range to bucket over.</td></tr></tbody></table></div>
136
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficbucketsoptions">UseTrafficBucketsOptions</a></p>
502
137
  <hr>
503
138
  <p><a id="usetrafficbucketsresult"></a></p>
504
139
  <h3 id="usetrafficbucketsresult">UseTrafficBucketsResult</h3>
505
- <h4 id="properties-15">Properties</h4>
506
- <div class="table-scroll">
507
-
508
-
509
-
510
-
511
-
512
-
513
-
514
-
515
-
516
-
517
-
518
-
519
-
520
-
521
-
522
-
523
-
524
-
525
-
526
-
527
-
528
-
529
-
530
-
531
-
532
-
533
-
534
-
535
-
536
-
537
-
538
-
539
-
540
-
541
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="buckets"></a> <code>buckets</code></td><td align="left"><a href="#trafficbucket"><code>TrafficBucket</code></a>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="denies-4"></a> <code>denies</code></td><td align="left"><code>number</code></td><td align="left">Sum of <code>denies</code> across buckets.</td></tr><tr><td align="left"><a id="maxcount"></a> <code>maxCount</code></td><td align="left"><code>number</code></td><td align="left">The largest single-bucket <code>count</code> — the height-ratio divisor.</td></tr><tr><td align="left"><a id="outofwindow"></a> <code>outOfWindow</code></td><td align="left"><code>number</code></td><td align="left">Events whose <code>at</code> fell outside <code>[window.start, window.end)</code>.</td></tr><tr><td align="left"><a id="total-4"></a> <code>total</code></td><td align="left"><code>number</code></td><td align="left">Sum of <code>count</code> across buckets (events inside the window).</td></tr></tbody></table></div>
140
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficbucketsresult">UseTrafficBucketsResult</a></p>
141
+ <hr>
142
+ <p><a id="usetrafficfilter"></a></p>
143
+ <h3 id="usetrafficfilter">useTrafficFilter</h3>
144
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficfilter">useTrafficFilter</a></p>
542
145
  <hr>
543
146
  <p><a id="usetrafficfilteroptions"></a></p>
544
147
  <h3 id="usetrafficfilteroptions">UseTrafficFilterOptions</h3>
545
- <h4 id="properties-16">Properties</h4>
546
- <div class="table-scroll">
547
-
548
-
549
-
550
-
551
-
552
-
553
-
554
-
555
-
556
-
557
-
558
-
559
-
560
-
561
-
562
-
563
-
564
-
565
-
566
-
567
-
568
-
569
-
570
-
571
-
572
-
573
-
574
-
575
-
576
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="events-3"></a> <code>events</code></td><td align="left"><code>TrafficEvent</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="initialorigin"></a> <code>initialOrigin?</code></td><td align="left"><a href="#trafficoriginfilter"><code>TrafficOriginFilter</code></a></td><td align="left">Default <code>user</code> — the probe found listener traffic is 94–99.6% of events, so it’s hidden until explicitly asked for.</td></tr><tr><td align="left"><a id="initialpathquery"></a> <code>initialPathQuery?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="initialresult"></a> <code>initialResult?</code></td><td align="left"><a href="#trafficresultfilter"><code>TrafficResultFilter</code></a></td><td align="left">Default <code>all</code> — the probe found ~75–80% allow in realistic sessions, so hiding either side loses diagnostic signal.</td></tr></tbody></table></div>
148
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficfilteroptions">UseTrafficFilterOptions</a></p>
577
149
  <hr>
578
150
  <p><a id="usetrafficfilterresult"></a></p>
579
151
  <h3 id="usetrafficfilterresult">UseTrafficFilterResult</h3>
580
- <h4 id="properties-17">Properties</h4>
581
- <div class="table-scroll">
582
-
583
-
584
-
585
-
586
-
587
-
588
-
589
-
590
-
591
-
592
-
593
-
594
-
595
-
596
-
597
-
598
-
599
-
600
-
601
-
602
-
603
-
604
-
605
-
606
-
607
-
608
-
609
-
610
-
611
-
612
-
613
-
614
-
615
-
616
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="filter"></a> <code>filter</code></td><td align="left"><a href="#trafficfilterstate"><code>TrafficFilterState</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="filtered"></a> <code>filtered</code></td><td align="left"><code>TrafficEvent</code>[]</td><td align="left">Events passing all three filters, in the input order.</td></tr><tr><td align="left"><a id="setorigin"></a> <code>setOrigin</code></td><td align="left">(<code>origin</code>: <a href="#trafficoriginfilter"><code>TrafficOriginFilter</code></a>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="setpathquery"></a> <code>setPathQuery</code></td><td align="left">(<code>pathQuery</code>: <code>string</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="setresult"></a> <code>setResult</code></td><td align="left">(<code>result</code>: <a href="#trafficresultfilter"><code>TrafficResultFilter</code></a>) => <code>void</code></td><td align="left">-</td></tr></tbody></table></div>
152
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficfilterresult">UseTrafficFilterResult</a></p>
153
+ <hr>
154
+ <p><a id="usetrafficgroups"></a></p>
155
+ <h3 id="usetrafficgroups">useTrafficGroups</h3>
156
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficgroups">useTrafficGroups</a></p>
617
157
  <hr>
618
158
  <p><a id="usetrafficgroupsoptions"></a></p>
619
159
  <h3 id="usetrafficgroupsoptions">UseTrafficGroupsOptions</h3>
620
- <h4 id="properties-18">Properties</h4>
621
- <div class="table-scroll">
622
-
623
-
624
-
625
-
626
-
627
-
628
-
629
-
630
-
631
-
632
-
633
-
634
-
635
-
636
-
637
-
638
-
639
-
640
-
641
-
642
-
643
-
644
-
645
-
646
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="events-4"></a> <code>events</code></td><td align="left"><code>TrafficEvent</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="groupbatches"></a> <code>groupBatches?</code></td><td align="left"><code>boolean</code></td><td align="left">Collapse consecutive ops sharing a <code>groupId</code>. Default true.</td></tr><tr><td align="left"><a id="grouplistenerruns"></a> <code>groupListenerRuns?</code></td><td align="left"><code>boolean</code></td><td align="left">Collapse a consecutive run of listener re-evals from the same originating op into one group — the probe found a single write can trigger 250+ re-evals. Default true.</td></tr></tbody></table></div>
160
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficgroupsoptions">UseTrafficGroupsOptions</a></p>
647
161
  <hr>
648
162
  <p><a id="usetrafficgroupsresult"></a></p>
649
163
  <h3 id="usetrafficgroupsresult">UseTrafficGroupsResult</h3>
650
- <h4 id="properties-19">Properties</h4>
651
- <div class="table-scroll">
652
-
653
-
654
-
655
-
656
-
657
-
658
-
659
-
660
-
661
-
662
-
663
-
664
-
665
-
666
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="items"></a> <code>items</code></td><td align="left"><a href="#trafficlogitem"><code>TrafficLogItem</code></a>[]</td><td align="left">Events folded into a flat list of singles and groups, in the input order.</td></tr></tbody></table></div>
164
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficgroupsresult">UseTrafficGroupsResult</a></p>
667
165
  <hr>
668
166
  <p><a id="usetrafficmetricsoptions"></a></p>
669
167
  <h3 id="usetrafficmetricsoptions">UseTrafficMetricsOptions</h3>
670
- <h4 id="properties-20">Properties</h4>
671
- <div class="table-scroll">
672
-
673
-
674
-
675
-
676
-
677
-
678
-
679
-
680
-
681
-
682
-
683
-
684
-
685
-
686
-
687
-
688
-
689
-
690
-
691
-
692
-
693
-
694
-
695
-
696
-
697
-
698
-
699
-
700
-
701
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="bucketcount-1"></a> <code>bucketCount?</code></td><td align="left"><code>number</code></td><td align="left">Number of buckets to divide the window into. The window itself should already be sized to the session (sandbox sessions run minutes, not days) — bucket count doesn’t need to change, only the window a caller passes in. Default 24.</td></tr><tr><td align="left"><a id="events-5"></a> <code>events</code></td><td align="left"><code>TrafficEvent</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="isadmin"></a> <code>isAdmin?</code></td><td align="left">(<code>event</code>: <code>Pick</code>&#x3C;<code>TrafficEvent</code>, <code>"origin"</code>>) => <code>boolean</code></td><td align="left">Override admin classification (e.g. a Studio caller with <code>authLens</code> provenance available — see the module doc). Defaults to <code>origin === 'admin'</code>.</td></tr><tr><td align="left"><a id="window-1"></a> <code>window</code></td><td align="left"><a href="#timewindow"><code>TimeWindow</code></a></td><td align="left">-</td></tr></tbody></table></div>
168
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficmetricsoptions">UseTrafficMetricsOptions</a></p>
169
+ <hr>
170
+ <p><a id="usetrafficmonitor"></a></p>
171
+ <h3 id="usetrafficmonitor">useTrafficMonitor</h3>
172
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficmonitor">useTrafficMonitor</a></p>
702
173
  <hr>
703
174
  <p><a id="usetrafficmonitoroptions"></a></p>
704
175
  <h3 id="usetrafficmonitoroptions">UseTrafficMonitorOptions</h3>
705
- <h4 id="properties-21">Properties</h4>
706
- <div class="table-scroll">
707
-
708
-
709
-
710
-
711
-
712
-
713
-
714
-
715
-
716
-
717
-
718
-
719
-
720
-
721
-
722
-
723
-
724
-
725
-
726
-
727
-
728
-
729
-
730
-
731
-
732
-
733
-
734
-
735
-
736
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="buffersize"></a> <code>bufferSize?</code></td><td align="left"><code>number</code></td><td align="left">Ring-buffer cap. Once exceeded, the oldest events are dropped. Default 5000 (~3 MB worst case — see the traffic-monitor probe findings).</td></tr><tr><td align="left"><a id="paused"></a> <code>paused?</code></td><td align="left"><code>boolean</code></td><td align="left">Whether the buffer starts paused. Default false.</td></tr><tr><td align="left"><a id="source"></a> <code>source</code></td><td align="left"><code>TrafficSource</code></td><td align="left">The subscription function — <code>sandbox.onRequest</code> satisfies this directly. Pass a stable reference; the hook re-subscribes on identity change.</td></tr><tr><td align="left"><a id="transform"></a> <code>transform?</code></td><td align="left">(<code>event</code>: <code>TrafficEvent</code>) => <code>TrafficEvent</code></td><td align="left">Runs per event before buffering — return a (possibly trimmed) event. Lets the consumer shrink oversized payloads without the library knowing payload semantics. Identity is read fresh on each event, so it need not be memoized.</td></tr></tbody></table></div>
176
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficmonitoroptions">UseTrafficMonitorOptions</a></p>
737
177
  <hr>
738
178
  <p><a id="usetrafficmonitorresult"></a></p>
739
179
  <h3 id="usetrafficmonitorresult">UseTrafficMonitorResult</h3>
740
- <h4 id="properties-22">Properties</h4>
741
- <div class="table-scroll">
742
-
743
-
744
-
745
-
746
-
747
-
748
-
749
-
750
-
751
-
752
-
753
-
754
-
755
-
756
-
757
-
758
-
759
-
760
-
761
-
762
-
763
-
764
-
765
-
766
-
767
-
768
-
769
-
770
-
771
-
772
-
773
-
774
-
775
-
776
-
777
-
778
-
779
-
780
-
781
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="clear"></a> <code>clear</code></td><td align="left">() => <code>void</code></td><td align="left">Empty the buffer.</td></tr><tr><td align="left"><a id="counts"></a> <code>counts</code></td><td align="left"><a href="#trafficcounts"><code>TrafficCounts</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="events-6"></a> <code>events</code></td><td align="left"><code>TrafficEvent</code>[]</td><td align="left">The buffered events, oldest first.</td></tr><tr><td align="left"><a id="ispaused"></a> <code>isPaused</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="pause"></a> <code>pause</code></td><td align="left">() => <code>void</code></td><td align="left">Stop appending — incoming events are dropped while paused.</td></tr><tr><td align="left"><a id="resume"></a> <code>resume</code></td><td align="left">() => <code>void</code></td><td align="left">Resume appending.</td></tr></tbody></table></div>
180
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficmonitorresult">UseTrafficMonitorResult</a></p>
181
+ <hr>
182
+ <p><a id="usetrafficstats"></a></p>
183
+ <h3 id="usetrafficstats">useTrafficStats</h3>
184
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficstats">useTrafficStats</a></p>
782
185
  <hr>
783
186
  <p><a id="usetrafficstatsoptions"></a></p>
784
187
  <h3 id="usetrafficstatsoptions">UseTrafficStatsOptions</h3>
785
- <h4 id="properties-23">Properties</h4>
786
- <div class="table-scroll">
787
-
788
-
789
-
790
-
791
-
792
-
793
-
794
-
795
-
796
-
797
-
798
-
799
-
800
-
801
-
802
-
803
-
804
-
805
-
806
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="events-7"></a> <code>events</code></td><td align="left"><code>TrafficEvent</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="toppaths"></a> <code>topPaths?</code></td><td align="left"><code>number</code></td><td align="left">Cap on <code>byPath</code> entries — paths are unbounded. Default 10.</td></tr></tbody></table></div>
807
- <h2 id="type-aliases">Type Aliases</h2>
808
- <p><a id="billableserieskey"></a></p>
809
- <h3 id="billableserieskey">BillableSeriesKey</h3>
810
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> BillableSeriesKey</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "reads"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"writes"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"deletes"</span><span style="color:#ABB2BF">;</span></span></code></pre>
811
- <hr>
812
- <p><a id="rulesserieskey"></a></p>
813
- <h3 id="rulesserieskey">RulesSeriesKey</h3>
814
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> RulesSeriesKey</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "allows"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"denies"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"errors"</span><span style="color:#ABB2BF">;</span></span></code></pre>
815
- <hr>
816
- <p><a id="trafficgroupkind-1"></a></p>
817
- <h3 id="trafficgroupkind">TrafficGroupKind</h3>
818
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> TrafficGroupKind</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "batch"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"transaction"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"listener-run"</span><span style="color:#ABB2BF">;</span></span></code></pre>
819
- <hr>
820
- <p><a id="trafficlogitem"></a></p>
821
- <h3 id="trafficlogitem">TrafficLogItem</h3>
822
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> TrafficLogItem</span><span style="color:#56B6C2"> =</span><span style="color:#E5C07B"> TrafficGroup</span><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">TrafficSingle</span><span style="color:#ABB2BF">;</span></span></code></pre>
823
- <hr>
824
- <p><a id="trafficoriginfilter"></a></p>
825
- <h3 id="trafficoriginfilter">TrafficOriginFilter</h3>
826
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> TrafficOriginFilter</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "user"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"all"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"listener"</span><span style="color:#ABB2BF">;</span></span></code></pre>
827
- <p><code>user</code> keeps everything that isn’t a listener re-eval (user ops
828
- plus their transaction/batch sub-ops); <code>listener</code> keeps only
829
- listener re-evals; <code>all</code> keeps everything.</p>
830
- <hr>
831
- <p><a id="trafficresultfilter"></a></p>
832
- <h3 id="trafficresultfilter">TrafficResultFilter</h3>
833
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> TrafficResultFilter</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "all"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"allow"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"deny"</span><span style="color:#ABB2BF">;</span></span></code></pre>
834
- <h2 id="variables">Variables</h2>
835
- <p><a id="billable_series_defs"></a></p>
836
- <h3 id="billable_series_defs">BILLABLE_SERIES_DEFS</h3>
837
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> BILLABLE_SERIES_DEFS</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ReadonlyArray</span><span style="color:#ABB2BF">&#x3C;{</span></span>
838
- <span class="line"><span style="color:#E06C75"> key</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">BillableSeriesKey</span><span style="color:#ABB2BF">;</span></span>
839
- <span class="line"><span style="color:#E06C75"> label</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
840
- <span class="line"><span style="color:#ABB2BF">}>;</span></span></code></pre>
841
- <hr>
842
- <p><a id="rules_series_defs"></a></p>
843
- <h3 id="rules_series_defs">RULES_SERIES_DEFS</h3>
844
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> RULES_SERIES_DEFS</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ReadonlyArray</span><span style="color:#ABB2BF">&#x3C;{</span></span>
845
- <span class="line"><span style="color:#E06C75"> key</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">RulesSeriesKey</span><span style="color:#ABB2BF">;</span></span>
846
- <span class="line"><span style="color:#E06C75"> label</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
847
- <span class="line"><span style="color:#ABB2BF">}>;</span></span></code></pre>
848
- <h2 id="functions">Functions</h2>
849
- <p><a id="bucketbillablemetrics"></a></p>
850
- <h3 id="bucketbillablemetrics">bucketBillableMetrics()</h3>
851
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> bucketBillableMetrics</span><span style="color:#ABB2BF">(</span></span>
852
- <span class="line"><span style="color:#E06C75;font-style:italic"> events</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">readonly</span><span style="color:#E5C07B"> TrafficEvent</span><span style="color:#ABB2BF">[],</span></span>
853
- <span class="line"><span style="color:#E06C75;font-style:italic"> window</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TimeWindow</span><span style="color:#ABB2BF">,</span></span>
854
- <span class="line"><span style="color:#E06C75;font-style:italic"> bucketCount</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">,</span></span>
855
- <span class="line"><span style="color:#61AFEF"> isAdmin</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: (</span><span style="color:#E06C75;font-style:italic">event</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Pick</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">TrafficEvent</span><span style="color:#ABB2BF">, </span><span style="color:#98C379">"origin"</span><span style="color:#ABB2BF">>) </span><span style="color:#C678DD">=></span><span style="color:#E5C07B"> boolean</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">TrafficMetricsResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
856
- <p>Pure kernel behind <a href="#usebillablemetrics">useBillableMetrics</a> — usable outside React.</p>
857
- <h4 id="parameters">Parameters</h4>
858
- <div class="table-scroll">
859
-
860
-
861
-
862
-
863
-
864
-
865
-
866
-
867
-
868
-
869
-
870
-
871
-
872
-
873
-
874
-
875
-
876
-
877
-
878
-
879
-
880
-
881
-
882
-
883
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>events</code></td><td align="left">readonly <code>TrafficEvent</code>[]</td></tr><tr><td align="left"><code>window</code></td><td align="left"><a href="#timewindow"><code>TimeWindow</code></a></td></tr><tr><td align="left"><code>bucketCount?</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><code>isAdmin?</code></td><td align="left">(<code>event</code>: <code>Pick</code>&#x3C;<code>TrafficEvent</code>, <code>"origin"</code>>) => <code>boolean</code></td></tr></tbody></table></div>
884
- <h4 id="returns">Returns</h4>
885
- <p><a href="#trafficmetricsresult"><code>TrafficMetricsResult</code></a></p>
886
- <hr>
887
- <p><a id="bucketrulesmetrics"></a></p>
888
- <h3 id="bucketrulesmetrics">bucketRulesMetrics()</h3>
889
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> bucketRulesMetrics</span><span style="color:#ABB2BF">(</span></span>
890
- <span class="line"><span style="color:#E06C75;font-style:italic"> events</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">readonly</span><span style="color:#E5C07B"> TrafficEvent</span><span style="color:#ABB2BF">[],</span></span>
891
- <span class="line"><span style="color:#E06C75;font-style:italic"> window</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TimeWindow</span><span style="color:#ABB2BF">,</span></span>
892
- <span class="line"><span style="color:#E06C75;font-style:italic"> bucketCount</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">,</span></span>
893
- <span class="line"><span style="color:#61AFEF"> isAdmin</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: (</span><span style="color:#E06C75;font-style:italic">event</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Pick</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">TrafficEvent</span><span style="color:#ABB2BF">, </span><span style="color:#98C379">"origin"</span><span style="color:#ABB2BF">>) </span><span style="color:#C678DD">=></span><span style="color:#E5C07B"> boolean</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">TrafficMetricsResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
894
- <p>Pure kernel behind <a href="#userulesmetrics">useRulesMetrics</a> — usable outside React.</p>
895
- <h4 id="parameters-1">Parameters</h4>
896
- <div class="table-scroll">
897
-
898
-
899
-
900
-
901
-
902
-
903
-
904
-
905
-
906
-
907
-
908
-
909
-
910
-
911
-
912
-
913
-
914
-
915
-
916
-
917
-
918
-
919
-
920
-
921
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>events</code></td><td align="left">readonly <code>TrafficEvent</code>[]</td></tr><tr><td align="left"><code>window</code></td><td align="left"><a href="#timewindow"><code>TimeWindow</code></a></td></tr><tr><td align="left"><code>bucketCount?</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><code>isAdmin?</code></td><td align="left">(<code>event</code>: <code>Pick</code>&#x3C;<code>TrafficEvent</code>, <code>"origin"</code>>) => <code>boolean</code></td></tr></tbody></table></div>
922
- <h4 id="returns-1">Returns</h4>
923
- <p><a href="#trafficmetricsresult"><code>TrafficMetricsResult</code></a></p>
924
- <hr>
925
- <p><a id="buckettraffic"></a></p>
926
- <h3 id="buckettraffic">bucketTraffic()</h3>
927
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> bucketTraffic</span><span style="color:#ABB2BF">(</span></span>
928
- <span class="line"><span style="color:#E06C75;font-style:italic"> events</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TrafficEvent</span><span style="color:#ABB2BF">[],</span></span>
929
- <span class="line"><span style="color:#E06C75;font-style:italic"> window</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TimeWindow</span><span style="color:#ABB2BF">,</span></span>
930
- <span class="line"><span style="color:#E06C75;font-style:italic"> bucketCount</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseTrafficBucketsResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
931
- <p>The pure bucketing kernel behind <a href="#usetrafficbuckets">useTrafficBuckets</a> — usable
932
- outside React. Returns an empty result for a non-positive
933
- <code>bucketCount</code> or a zero/negative-width window.</p>
934
- <h4 id="parameters-2">Parameters</h4>
935
- <div class="table-scroll">
936
-
937
-
938
-
939
-
940
-
941
-
942
-
943
-
944
-
945
-
946
-
947
-
948
-
949
-
950
-
951
-
952
-
953
-
954
-
955
-
956
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>events</code></td><td align="left"><code>TrafficEvent</code>[]</td></tr><tr><td align="left"><code>window</code></td><td align="left"><a href="#timewindow"><code>TimeWindow</code></a></td></tr><tr><td align="left"><code>bucketCount?</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
957
- <h4 id="returns-2">Returns</h4>
958
- <p><a href="#usetrafficbucketsresult"><code>UseTrafficBucketsResult</code></a></p>
959
- <hr>
960
- <p><a id="classifybillable"></a></p>
961
- <h3 id="classifybillable">classifyBillable()</h3>
962
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> classifyBillable</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">event</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Pick</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">TrafficEvent</span><span style="color:#ABB2BF">, </span><span style="color:#98C379">"method"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"result"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"origin"</span><span style="color:#ABB2BF">>, </span><span style="color:#61AFEF">isAdmin</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: (</span><span style="color:#E06C75;font-style:italic">event</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Pick</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">TrafficEvent</span><span style="color:#ABB2BF">, </span><span style="color:#98C379">"origin"</span><span style="color:#ABB2BF">>) </span><span style="color:#C678DD">=></span><span style="color:#E5C07B"> boolean</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">BillableSeriesKey</span><span style="color:#ABB2BF">;</span></span></code></pre>
963
- <p>Classify a billable op, or <code>null</code> if it isn’t one / never ran.</p>
964
- <h4 id="parameters-3">Parameters</h4>
965
- <div class="table-scroll">
966
-
967
-
968
-
969
-
970
-
971
-
972
-
973
-
974
-
975
-
976
-
977
-
978
-
979
-
980
-
981
-
982
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>event</code></td><td align="left"><code>Pick</code>&#x3C;<code>TrafficEvent</code>, <code>"method"</code> | <code>"result"</code> | <code>"origin"</code>></td></tr><tr><td align="left"><code>isAdmin?</code></td><td align="left">(<code>event</code>: <code>Pick</code>&#x3C;<code>TrafficEvent</code>, <code>"origin"</code>>) => <code>boolean</code></td></tr></tbody></table></div>
983
- <h4 id="returns-3">Returns</h4>
984
- <p><a href="#billableserieskey"><code>BillableSeriesKey</code></a></p>
985
- <hr>
986
- <p><a id="classifyrules"></a></p>
987
- <h3 id="classifyrules">classifyRules()</h3>
988
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> classifyRules</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">event</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Pick</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">TrafficEvent</span><span style="color:#ABB2BF">, </span><span style="color:#98C379">"result"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"origin"</span><span style="color:#ABB2BF">>, </span><span style="color:#61AFEF">isAdmin</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: (</span><span style="color:#E06C75;font-style:italic">event</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Pick</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">TrafficEvent</span><span style="color:#ABB2BF">, </span><span style="color:#98C379">"origin"</span><span style="color:#ABB2BF">>) </span><span style="color:#C678DD">=></span><span style="color:#E5C07B"> boolean</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">RulesSeriesKey</span><span style="color:#ABB2BF">;</span></span></code></pre>
989
- <p>Classify a rules-engine verdict, or <code>null</code> if it isn’t one (bypassed,
990
- unsupported, or not-applicable).</p>
991
- <h4 id="parameters-4">Parameters</h4>
992
- <div class="table-scroll">
993
-
994
-
995
-
996
-
997
-
998
-
999
-
1000
-
1001
-
1002
-
1003
-
1004
-
1005
-
1006
-
1007
-
1008
-
1009
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>event</code></td><td align="left"><code>Pick</code>&#x3C;<code>TrafficEvent</code>, <code>"result"</code> | <code>"origin"</code>></td></tr><tr><td align="left"><code>isAdmin?</code></td><td align="left">(<code>event</code>: <code>Pick</code>&#x3C;<code>TrafficEvent</code>, <code>"origin"</code>>) => <code>boolean</code></td></tr></tbody></table></div>
1010
- <h4 id="returns-4">Returns</h4>
1011
- <p><a href="#rulesserieskey"><code>RulesSeriesKey</code></a></p>
1012
- <hr>
1013
- <p><a id="isadminevent"></a></p>
1014
- <h3 id="isadminevent">isAdminEvent()</h3>
1015
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> isAdminEvent</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">event</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Pick</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">TrafficEvent</span><span style="color:#ABB2BF">, </span><span style="color:#98C379">"origin"</span><span style="color:#ABB2BF">>): </span><span style="color:#E5C07B">boolean</span><span style="color:#ABB2BF">;</span></span></code></pre>
1016
- <p>Default admin predicate: the one signal the public <code>TrafficEvent</code>
1017
- type declares. See the module doc for the known Firestore gap.</p>
1018
- <h4 id="parameters-5">Parameters</h4>
1019
- <div class="table-scroll">
1020
-
1021
-
1022
-
1023
-
1024
-
1025
-
1026
-
1027
-
1028
-
1029
-
1030
-
1031
-
1032
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>event</code></td><td align="left"><code>Pick</code>&#x3C;<code>TrafficEvent</code>, <code>"origin"</code>></td></tr></tbody></table></div>
1033
- <h4 id="returns-5">Returns</h4>
1034
- <p><code>boolean</code></p>
1035
- <hr>
1036
- <p><a id="usebillablemetrics"></a></p>
1037
- <h3 id="usebillablemetrics">useBillableMetrics()</h3>
1038
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useBillableMetrics</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseTrafficMetricsOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">TrafficMetricsResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
1039
- <p>Reads / writes / deletes, bucketed over <code>window</code>. See the module doc
1040
- for the billable mapping + the “read ops, not billable reads” caveat.</p>
1041
- <h4 id="parameters-6">Parameters</h4>
1042
- <div class="table-scroll">
1043
-
1044
-
1045
-
1046
-
1047
-
1048
-
1049
-
1050
-
1051
-
1052
-
1053
-
1054
-
1055
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usetrafficmetricsoptions"><code>UseTrafficMetricsOptions</code></a></td></tr></tbody></table></div>
1056
- <h4 id="returns-6">Returns</h4>
1057
- <p><a href="#trafficmetricsresult"><code>TrafficMetricsResult</code></a></p>
1058
- <hr>
1059
- <p><a id="useruleheatmap"></a></p>
1060
- <h3 id="useruleheatmap">useRuleHeatmap()</h3>
1061
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useRuleHeatmap</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseRuleHeatmapOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseRuleHeatmapResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
1062
- <p>Rolls a traffic buffer up by <code>matchedRule.ruleIndex</code>: how often
1063
- each rule fired, and how that split across allow / deny /
1064
- unsupported. Pure derivation — feed it the filtered or full
1065
- event list depending on what the heatmap should reflect.</p>
1066
- <h4 id="parameters-7">Parameters</h4>
1067
- <div class="table-scroll">
1068
-
1069
-
1070
-
1071
-
1072
-
1073
-
1074
-
1075
-
1076
-
1077
-
1078
-
1079
-
1080
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#useruleheatmapoptions"><code>UseRuleHeatmapOptions</code></a></td></tr></tbody></table></div>
1081
- <h4 id="returns-7">Returns</h4>
1082
- <p><a href="#useruleheatmapresult"><code>UseRuleHeatmapResult</code></a></p>
1083
- <hr>
1084
- <p><a id="userulesmetrics"></a></p>
1085
- <h3 id="userulesmetrics">useRulesMetrics()</h3>
1086
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useRulesMetrics</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseTrafficMetricsOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">TrafficMetricsResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
1087
- <p>Allows / denies / errors, bucketed over <code>window</code>. Excludes
1088
- rules-bypassed (admin) ops — see the module doc.</p>
1089
- <h4 id="parameters-8">Parameters</h4>
1090
- <div class="table-scroll">
1091
-
1092
-
1093
-
1094
-
1095
-
1096
-
1097
-
1098
-
1099
-
1100
-
1101
-
1102
-
1103
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usetrafficmetricsoptions"><code>UseTrafficMetricsOptions</code></a></td></tr></tbody></table></div>
1104
- <h4 id="returns-8">Returns</h4>
1105
- <p><a href="#trafficmetricsresult"><code>TrafficMetricsResult</code></a></p>
1106
- <hr>
1107
- <p><a id="usetrafficbuckets"></a></p>
1108
- <h3 id="usetrafficbuckets">useTrafficBuckets()</h3>
1109
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useTrafficBuckets</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseTrafficBucketsOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseTrafficBucketsResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
1110
- <p>Buckets a traffic buffer into <code>bucketCount</code> equal time slices over
1111
- <code>window</code>, counting total + denied events per slice. Pure
1112
- derivation — the histogram component renders the result, this hook
1113
- (and <code>bucketTraffic</code> under it) owns the math.</p>
1114
- <p>Each bucket carries a <code>heightRatio</code> and <code>denyHeightRatio</code>
1115
- (0..1, scaled to the tallest bucket) so the consumer can map them
1116
- straight onto a bar height without re-finding the max.</p>
1117
- <h4 id="parameters-9">Parameters</h4>
1118
- <div class="table-scroll">
1119
-
1120
-
1121
-
1122
-
1123
-
1124
-
1125
-
1126
-
1127
-
1128
-
1129
-
1130
-
1131
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usetrafficbucketsoptions"><code>UseTrafficBucketsOptions</code></a></td></tr></tbody></table></div>
1132
- <h4 id="returns-9">Returns</h4>
1133
- <p><a href="#usetrafficbucketsresult"><code>UseTrafficBucketsResult</code></a></p>
1134
- <hr>
1135
- <p><a id="usetrafficfilter"></a></p>
1136
- <h3 id="usetrafficfilter">useTrafficFilter()</h3>
1137
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useTrafficFilter</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseTrafficFilterOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseTrafficFilterResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
1138
- <p>Derives a filtered view over a traffic buffer along three
1139
- dimensions: origin, result, and a case-insensitive path substring.
1140
- Owns the filter state; pure derivation otherwise.</p>
1141
- <h4 id="parameters-10">Parameters</h4>
1142
- <div class="table-scroll">
1143
-
1144
-
1145
-
1146
-
1147
-
1148
-
1149
-
1150
-
1151
-
1152
-
1153
-
1154
-
1155
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usetrafficfilteroptions"><code>UseTrafficFilterOptions</code></a></td></tr></tbody></table></div>
1156
- <h4 id="returns-10">Returns</h4>
1157
- <p><a href="#usetrafficfilterresult"><code>UseTrafficFilterResult</code></a></p>
1158
- <hr>
1159
- <p><a id="usetrafficgroups"></a></p>
1160
- <h3 id="usetrafficgroups">useTrafficGroups()</h3>
1161
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useTrafficGroups</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseTrafficGroupsOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseTrafficGroupsResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
1162
- <p>Folds a traffic buffer into a list of singles and collapsible
1163
- groups. Two grouping modes, both over <em>consecutive</em> events:</p>
1164
- <ul>
1165
- <li><code>groupId</code> — batch/transaction sub-ops sharing an id collapse
1166
- into one <code>batch</code> / <code>transaction</code> group.</li>
1167
- <li>listener runs — a consecutive run of listener re-evals from the
1168
- same originating op collapses into one <code>listener-run</code> group.
1169
- A run of length 1 stays a single (no point collapsing one row).</li>
1170
- </ul>
1171
- <p>Pure derivation; the input order is preserved.</p>
1172
- <h4 id="parameters-11">Parameters</h4>
1173
- <div class="table-scroll">
1174
-
1175
-
1176
-
1177
-
1178
-
1179
-
1180
-
1181
-
1182
-
1183
-
1184
-
1185
-
1186
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usetrafficgroupsoptions"><code>UseTrafficGroupsOptions</code></a></td></tr></tbody></table></div>
1187
- <h4 id="returns-11">Returns</h4>
1188
- <p><a href="#usetrafficgroupsresult"><code>UseTrafficGroupsResult</code></a></p>
1189
- <hr>
1190
- <p><a id="usetrafficmonitor"></a></p>
1191
- <h3 id="usetrafficmonitor">useTrafficMonitor()</h3>
1192
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useTrafficMonitor</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseTrafficMonitorOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseTrafficMonitorResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
1193
- <p>Buffers a traffic stream into a capped ring buffer with
1194
- pause/resume/clear. Decoupled from <code>pyric/sandbox</code> — <code>source</code> is
1195
- just a <code>(cb) => unsubscribe</code> function.</p>
1196
- <p>Pause is consumer-side: while paused, the subscription stays
1197
- attached but incoming events are dropped (not queued). This
1198
- matches the probe decision — a <code>load-test</code>-shaped session can emit
1199
- 100k+ events, so queueing-while-paused would defeat the point.</p>
1200
- <h4 id="parameters-12">Parameters</h4>
1201
- <div class="table-scroll">
1202
-
1203
-
1204
-
1205
-
1206
-
1207
-
1208
-
1209
-
1210
-
1211
-
1212
-
1213
-
1214
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usetrafficmonitoroptions"><code>UseTrafficMonitorOptions</code></a></td></tr></tbody></table></div>
1215
- <h4 id="returns-12">Returns</h4>
1216
- <p><a href="#usetrafficmonitorresult"><code>UseTrafficMonitorResult</code></a></p>
1217
- <hr>
1218
- <p><a id="usetrafficstats"></a></p>
1219
- <h3 id="usetrafficstats">useTrafficStats()</h3>
1220
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useTrafficStats</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseTrafficStatsOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">TrafficStatsSummary</span><span style="color:#ABB2BF">;</span></span></code></pre>
1221
- <p>Aggregations over a traffic buffer: totals, deny rate, and counts
1222
- broken down by method, origin, and path. Pure derivation — feed it
1223
- the filtered or full event list depending on what the panel
1224
- should reflect.</p>
1225
- <h4 id="parameters-13">Parameters</h4>
1226
- <div class="table-scroll">
1227
-
1228
-
1229
-
1230
-
1231
-
1232
-
1233
-
1234
-
1235
-
1236
-
1237
-
1238
-
1239
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usetrafficstatsoptions"><code>UseTrafficStatsOptions</code></a></td></tr></tbody></table></div>
1240
- <h4 id="returns-13">Returns</h4>
1241
- <p><a href="#trafficstatssummary"><code>TrafficStatsSummary</code></a></p> </article> </main> <aside class="doc-toc api-symbols" aria-label="API symbols"> <h2 class="doc-toc-heading">Symbols</h2> <input class="api-symbol-filter" type="search" placeholder="Filter symbols" aria-label="Filter API symbols" data-api-symbol-filter> <div class="api-symbol-groups" data-api-symbol-groups> <section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#interfaces"> Interfaces </a> <ul> <li data-api-symbol="metricpoint"> <a href="#metricpoint">MetricPoint</a> </li><li data-api-symbol="metricseries"> <a href="#metricseries">MetricSeries</a> </li><li data-api-symbol="ruleheatmapentry"> <a href="#ruleheatmapentry">RuleHeatmapEntry</a> </li><li data-api-symbol="timewindow"> <a href="#timewindow">TimeWindow</a> </li><li data-api-symbol="trafficbucket"> <a href="#trafficbucket">TrafficBucket</a> </li><li data-api-symbol="trafficcounts"> <a href="#trafficcounts">TrafficCounts</a> </li><li data-api-symbol="trafficfilterstate"> <a href="#trafficfilterstate">TrafficFilterState</a> </li><li data-api-symbol="trafficgroup"> <a href="#trafficgroup">TrafficGroup</a> </li><li data-api-symbol="trafficmetricsresult"> <a href="#trafficmetricsresult">TrafficMetricsResult</a> </li><li data-api-symbol="trafficsingle"> <a href="#trafficsingle">TrafficSingle</a> </li><li data-api-symbol="trafficstatbucket"> <a href="#trafficstatbucket">TrafficStatBucket</a> </li><li data-api-symbol="trafficstatssummary"> <a href="#trafficstatssummary">TrafficStatsSummary</a> </li><li data-api-symbol="useruleheatmapoptions"> <a href="#useruleheatmapoptions">UseRuleHeatmapOptions</a> </li><li data-api-symbol="useruleheatmapresult"> <a href="#useruleheatmapresult">UseRuleHeatmapResult</a> </li><li data-api-symbol="usetrafficbucketsoptions"> <a href="#usetrafficbucketsoptions">UseTrafficBucketsOptions</a> </li><li data-api-symbol="usetrafficbucketsresult"> <a href="#usetrafficbucketsresult">UseTrafficBucketsResult</a> </li><li data-api-symbol="usetrafficfilteroptions"> <a href="#usetrafficfilteroptions">UseTrafficFilterOptions</a> </li><li data-api-symbol="usetrafficfilterresult"> <a href="#usetrafficfilterresult">UseTrafficFilterResult</a> </li><li data-api-symbol="usetrafficgroupsoptions"> <a href="#usetrafficgroupsoptions">UseTrafficGroupsOptions</a> </li><li data-api-symbol="usetrafficgroupsresult"> <a href="#usetrafficgroupsresult">UseTrafficGroupsResult</a> </li><li data-api-symbol="usetrafficmetricsoptions"> <a href="#usetrafficmetricsoptions">UseTrafficMetricsOptions</a> </li><li data-api-symbol="usetrafficmonitoroptions"> <a href="#usetrafficmonitoroptions">UseTrafficMonitorOptions</a> </li><li data-api-symbol="usetrafficmonitorresult"> <a href="#usetrafficmonitorresult">UseTrafficMonitorResult</a> </li><li data-api-symbol="usetrafficstatsoptions"> <a href="#usetrafficstatsoptions">UseTrafficStatsOptions</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#type-aliases"> Type Aliases </a> <ul> <li data-api-symbol="billableserieskey"> <a href="#billableserieskey">BillableSeriesKey</a> </li><li data-api-symbol="rulesserieskey"> <a href="#rulesserieskey">RulesSeriesKey</a> </li><li data-api-symbol="trafficgroupkind"> <a href="#trafficgroupkind">TrafficGroupKind</a> </li><li data-api-symbol="trafficlogitem"> <a href="#trafficlogitem">TrafficLogItem</a> </li><li data-api-symbol="trafficoriginfilter"> <a href="#trafficoriginfilter">TrafficOriginFilter</a> </li><li data-api-symbol="trafficresultfilter"> <a href="#trafficresultfilter">TrafficResultFilter</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#variables"> Variables </a> <ul> <li data-api-symbol="billable_series_defs"> <a href="#billable_series_defs">BILLABLE_SERIES_DEFS</a> </li><li data-api-symbol="rules_series_defs"> <a href="#rules_series_defs">RULES_SERIES_DEFS</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#functions"> Functions </a> <ul> <li data-api-symbol="bucketbillablemetrics()"> <a href="#bucketbillablemetrics">bucketBillableMetrics()</a> </li><li data-api-symbol="bucketrulesmetrics()"> <a href="#bucketrulesmetrics">bucketRulesMetrics()</a> </li><li data-api-symbol="buckettraffic()"> <a href="#buckettraffic">bucketTraffic()</a> </li><li data-api-symbol="classifybillable()"> <a href="#classifybillable">classifyBillable()</a> </li><li data-api-symbol="classifyrules()"> <a href="#classifyrules">classifyRules()</a> </li><li data-api-symbol="isadminevent()"> <a href="#isadminevent">isAdminEvent()</a> </li><li data-api-symbol="usebillablemetrics()"> <a href="#usebillablemetrics">useBillableMetrics()</a> </li><li data-api-symbol="useruleheatmap()"> <a href="#useruleheatmap">useRuleHeatmap()</a> </li><li data-api-symbol="userulesmetrics()"> <a href="#userulesmetrics">useRulesMetrics()</a> </li><li data-api-symbol="usetrafficbuckets()"> <a href="#usetrafficbuckets">useTrafficBuckets()</a> </li><li data-api-symbol="usetrafficfilter()"> <a href="#usetrafficfilter">useTrafficFilter()</a> </li><li data-api-symbol="usetrafficgroups()"> <a href="#usetrafficgroups">useTrafficGroups()</a> </li><li data-api-symbol="usetrafficmonitor()"> <a href="#usetrafficmonitor">useTrafficMonitor()</a> </li><li data-api-symbol="usetrafficstats()"> <a href="#usetrafficstats">useTrafficStats()</a> </li> </ul> </section> <p class="api-symbol-empty" data-api-symbol-empty hidden>No matching symbols</p> </div> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body> </html>
188
+ <p>Re-exports <a href="/docs/pyric-ui-traffic-reference-api/#usetrafficstatsoptions">UseTrafficStatsOptions</a></p> </article> </main> <aside class="doc-toc api-symbols" aria-label="API symbols"> <h2 class="doc-toc-heading">Symbols</h2> <input class="api-symbol-filter" type="search" placeholder="Filter symbols" aria-label="Filter API symbols" data-api-symbol-filter> <div class="api-symbol-groups" data-api-symbol-groups> <section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#references"> References </a> <ul> <li data-api-symbol="billable_series_defs"> <a href="#billable_series_defs">BILLABLE_SERIES_DEFS</a> </li><li data-api-symbol="billableserieskey"> <a href="#billableserieskey">BillableSeriesKey</a> </li><li data-api-symbol="bucketbillablemetrics"> <a href="#bucketbillablemetrics">bucketBillableMetrics</a> </li><li data-api-symbol="bucketrulesmetrics"> <a href="#bucketrulesmetrics">bucketRulesMetrics</a> </li><li data-api-symbol="buckettraffic"> <a href="#buckettraffic">bucketTraffic</a> </li><li data-api-symbol="classifybillable"> <a href="#classifybillable">classifyBillable</a> </li><li data-api-symbol="classifyrules"> <a href="#classifyrules">classifyRules</a> </li><li data-api-symbol="isadminevent"> <a href="#isadminevent">isAdminEvent</a> </li><li data-api-symbol="metricpoint"> <a href="#metricpoint">MetricPoint</a> </li><li data-api-symbol="metricseries"> <a href="#metricseries">MetricSeries</a> </li><li data-api-symbol="ruleheatmapentry"> <a href="#ruleheatmapentry">RuleHeatmapEntry</a> </li><li data-api-symbol="rules_series_defs"> <a href="#rules_series_defs">RULES_SERIES_DEFS</a> </li><li data-api-symbol="rulesserieskey"> <a href="#rulesserieskey">RulesSeriesKey</a> </li><li data-api-symbol="timewindow"> <a href="#timewindow">TimeWindow</a> </li><li data-api-symbol="trafficbucket"> <a href="#trafficbucket">TrafficBucket</a> </li><li data-api-symbol="trafficcounts"> <a href="#trafficcounts">TrafficCounts</a> </li><li data-api-symbol="trafficfilterstate"> <a href="#trafficfilterstate">TrafficFilterState</a> </li><li data-api-symbol="trafficgroup"> <a href="#trafficgroup">TrafficGroup</a> </li><li data-api-symbol="trafficgroupkind"> <a href="#trafficgroupkind">TrafficGroupKind</a> </li><li data-api-symbol="trafficlogitem"> <a href="#trafficlogitem">TrafficLogItem</a> </li><li data-api-symbol="trafficmetricsresult"> <a href="#trafficmetricsresult">TrafficMetricsResult</a> </li><li data-api-symbol="trafficoriginfilter"> <a href="#trafficoriginfilter">TrafficOriginFilter</a> </li><li data-api-symbol="trafficresultfilter"> <a href="#trafficresultfilter">TrafficResultFilter</a> </li><li data-api-symbol="trafficsingle"> <a href="#trafficsingle">TrafficSingle</a> </li><li data-api-symbol="trafficstatbucket"> <a href="#trafficstatbucket">TrafficStatBucket</a> </li><li data-api-symbol="trafficstatssummary"> <a href="#trafficstatssummary">TrafficStatsSummary</a> </li><li data-api-symbol="usebillablemetrics"> <a href="#usebillablemetrics">useBillableMetrics</a> </li><li data-api-symbol="useruleheatmap"> <a href="#useruleheatmap">useRuleHeatmap</a> </li><li data-api-symbol="useruleheatmapoptions"> <a href="#useruleheatmapoptions">UseRuleHeatmapOptions</a> </li><li data-api-symbol="useruleheatmapresult"> <a href="#useruleheatmapresult">UseRuleHeatmapResult</a> </li><li data-api-symbol="userulesmetrics"> <a href="#userulesmetrics">useRulesMetrics</a> </li><li data-api-symbol="usetrafficbuckets"> <a href="#usetrafficbuckets">useTrafficBuckets</a> </li><li data-api-symbol="usetrafficbucketsoptions"> <a href="#usetrafficbucketsoptions">UseTrafficBucketsOptions</a> </li><li data-api-symbol="usetrafficbucketsresult"> <a href="#usetrafficbucketsresult">UseTrafficBucketsResult</a> </li><li data-api-symbol="usetrafficfilter"> <a href="#usetrafficfilter">useTrafficFilter</a> </li><li data-api-symbol="usetrafficfilteroptions"> <a href="#usetrafficfilteroptions">UseTrafficFilterOptions</a> </li><li data-api-symbol="usetrafficfilterresult"> <a href="#usetrafficfilterresult">UseTrafficFilterResult</a> </li><li data-api-symbol="usetrafficgroups"> <a href="#usetrafficgroups">useTrafficGroups</a> </li><li data-api-symbol="usetrafficgroupsoptions"> <a href="#usetrafficgroupsoptions">UseTrafficGroupsOptions</a> </li><li data-api-symbol="usetrafficgroupsresult"> <a href="#usetrafficgroupsresult">UseTrafficGroupsResult</a> </li><li data-api-symbol="usetrafficmetricsoptions"> <a href="#usetrafficmetricsoptions">UseTrafficMetricsOptions</a> </li><li data-api-symbol="usetrafficmonitor"> <a href="#usetrafficmonitor">useTrafficMonitor</a> </li><li data-api-symbol="usetrafficmonitoroptions"> <a href="#usetrafficmonitoroptions">UseTrafficMonitorOptions</a> </li><li data-api-symbol="usetrafficmonitorresult"> <a href="#usetrafficmonitorresult">UseTrafficMonitorResult</a> </li><li data-api-symbol="usetrafficstats"> <a href="#usetrafficstats">useTrafficStats</a> </li><li data-api-symbol="usetrafficstatsoptions"> <a href="#usetrafficstatsoptions">UseTrafficStatsOptions</a> </li> </ul> </section> <p class="api-symbol-empty" data-api-symbol-empty hidden>No matching symbols</p> </div> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body> </html>